使用PHP Echos和mySQL计数查询等

使用PHP Echos和mySQL计数查询等,php,mysql,sql,select,Php,Mysql,Sql,Select,为了让你对我的系统有一些了解,我有一个乘客表,里面有所有乘客的个人信息(你知道姓氏、名字等)。但它也存储“用户名”和“组ID”字段。用户名允许乘客的详细信息通过以下方式链接到当前登录的用户:- $loggedinuser = $session->username; 但是,所有属于一个家庭(或一起预订的)的乘客都通过组ID进行链接。我想做的是找出某个组中有多少人……所涉及的组就是链接到当前用户的组 例如,在groupID上的countmysql查询中,groupID=当前登录用户的

为了让你对我的系统有一些了解,我有一个乘客表,里面有所有乘客的个人信息(你知道姓氏、名字等)。但它也存储“用户名”和“组ID”字段。用户名允许乘客的详细信息通过以下方式链接到当前登录的用户:-

    $loggedinuser = $session->username;
但是,所有属于一个家庭(或一起预订的)的乘客都通过组ID进行链接。我想做的是找出某个组中有多少人……所涉及的组就是链接到当前用户的组

例如,在groupID上的countmysql查询中,groupID=当前登录用户的组ID

然后,该值将以HTML形式出现

                      <?php


                    $loggedinuser = $session->username;

                    $sql="SELECT count(p.groupID) AS count FROM PASSENGER p WHERE p.username = '$loggedinuser'";
                    $rows = mysql_num_rows($sql);
                    {
                    echo 'Number of Passengers: <input type="text" name="groupno" value = "'.$rows['groupID']. "\" /><br />"; 
但我是否能够存储在此处回响的值:-

                    echo $row['groupID'];       
例如,作为变量

同样,当我想返回组中所有相似的用户(通过GroupID链接)时,我会使用一个变量,而不是

                            $sql='SELECT * FROM PASSENGER WHERE groupID="5"';
                    $query=mysql_query($sql);
                     $count=mysql_num_rows($query);
                     while($fetch_arr=mysql_fetch_array($query)){
                    $familyName=$fetch_arr['surname'];
                    echo  $familyName;
因为mySQL查询的第一行将读取以下内容:-

                                    $sql='SELECT * FROM PASSENGER WHERE groupID='$loggedingroupID'";
我感谢任何帮助,如果您有任何问题,请发表评论,我很高兴澄清我的意思

问候,

汤姆

编辑:会话类

    <?
       /**
        * Session.php
           * 
           * The Session class is meant to simplify the task of keeping
          * track of logged in users and also guests.
            *
          *  Please subscribe to our feeds 
           */
           include("database.php");
          include("mailer.php");
           include("form.php");

        class Session
   {
                      var $username;     //Username given on sign-up
                   var $userid;       //Random value generated on current login
              var $userlevel;    //The level to which the user pertains
               var $time;         //Time user was last active (page loaded)
               var $logged_in;    //True if user is logged in, false otherwise
              var $userinfo = array();  //The array holding all user info
                 var $url;          //The page url current being viewed
            var $referrer;     //Last recorded site page viewed
/**
 * Note: referrer should really only be considered the actual
 * page referrer in process.php, any other time it may be
 * inaccurate.
 */

/* Class constructor */
function Session() {
    $this->time = time();
    $this->startSession();
 }

 /**
  * startSession - Performs all the actions necessary to 
 * initialize this session object. Tries to determine if the
 * the user has logged in already, and sets the variables 
 * accordingly. Also takes advantage of this page load to
 * update the active visitors tables.
 */
function startSession(){
   global $database;  //The database connection
   session_start();   //Tell PHP to start the session

   /* Determine if user is logged in */
   $this->logged_in = $this->checkLogin();

   /**
    * Set guest value to users not logged in, and update
    * active guests table accordingly.
    */
   if(!$this->logged_in){
      $this->username = $_SESSION['username'] = GUEST_NAME;
      $this->userlevel = GUEST_LEVEL;
      $database->addActiveGuest($_SERVER['REMOTE_ADDR'], $this->time);
   } 
   /* Update users last active timestamp */
   else{
      $database->addActiveUser($this->username, $this->time);
   }

  /* Remove inactive visitors from database */
  $database->removeInactiveUsers();
  $database->removeInactiveGuests();

  /* Set referrer page */
  if(isset($_SESSION['url'])){
     $this->referrer = $_SESSION['url'];
  }else{
     $this->referrer = "/";
  }

  /* Set current url */
  $this->url = $_SESSION['url'] = $_SERVER['PHP_SELF'];
   } 

/**
 * checkLogin - Checks if the user has already previously
 *  logged in, and a session with the user has already been
 * established. Also checks to see if user has been remembered.
 * If so, the database is queried to make sure of the user's 
 * authenticity. Returns true if the user has logged in.
 */
 function checkLogin(){
    global $database;  //The database connection
    /* Check if user has been remembered */
    if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookid'])){
       $this->username = $_SESSION['username'] = $_COOKIE['cookname'];
       $this->userid   = $_SESSION['userid']   = $_COOKIE['cookid'];
    }

    /* Username and userid have been set and not guest */
   if(isset($_SESSION['username']) && isset($_SESSION['userid']) &&
      $_SESSION['username'] != GUEST_NAME){
      /* Confirm that username and userid are valid */
      if($database->confirmUserID($_SESSION['username'], $_SESSION['userid']) != 0){
         /* Variables are incorrect, user not logged in */
         unset($_SESSION['username']);
         unset($_SESSION['userid']);
         return false;
      }

      /* User is logged in, set class variables */
      $this->userinfo  = $database->getUserInfo($_SESSION['username']);
      $this->username  = $this->userinfo['username'];
      $this->userid    = $this->userinfo['userid'];
      $this->userlevel = $this->userinfo['userlevel'];
      return true;
   } 
   /* User not logged in */
   else{
      return false;
    }
}

/**
 * login - The user has submitted his username and password
 * through the login form, this function checks the authenticity
 * of that information in the database and creates the session.
 * Effectively logging in the user if all goes well.
 */
function login($subuser, $subpass, $subremember){
   global $database, $form;  //The database and form object

   /* Username error checking */
   $field = "user";  //Use field name for username
   if(!$subuser || strlen($subuser = trim($subuser)) == 0){
      $form->setError($field, "* Username not entered");
   }
   else{
      /* Check if username is not alphanumeric */
      if(!eregi("^([0-9a-z])*$", $subuser)){
         $form->setError($field, "* Username not alphanumeric");
      }
   }

   /* Password error checking */
   $field = "pass";  //Use field name for password
   if(!$subpass){
      $form->setError($field, "* Password not entered");
   }

   /* Return if form errors exist */
   if($form->num_errors > 0){
      return false;
   }

   /* Checks that username is in database and password is correct */
   $subuser = stripslashes($subuser);
   $result = $database->confirmUserPass($subuser, md5($subpass));

   /* Check error codes */
  if($result == 1){
     $field = "user";
     $form->setError($field, "* Username not found");
  }
  else if($result == 2){
     $field = "pass";
     $form->setError($field, "* Invalid password");
  }

  /* Return if form errors exist */
  if($form->num_errors > 0){
     return false;
  }

  /* Username and password correct, register session variables */
  $this->userinfo  = $database->getUserInfo($subuser);
  $this->username  = $_SESSION['username'] = $this->userinfo['username'];
  $this->userid    = $_SESSION['userid']   = $this->generateRandID();
  $this->userlevel = $this->userinfo['userlevel'];

  /* Insert userid into database and update active users table */
  $database->updateUserField($this->username, "userid", $this->userid);
  $database->addActiveUser($this->username, $this->time);
  $database->removeActiveGuest($_SERVER['REMOTE_ADDR']);

  /**
   * This is the cool part: the user has requested that we remember that
   * he's logged in, so we set two cookies. One to hold his username,
   * and one to hold his random value userid. It expires by the time
   * specified in constants.php. Now, next time he comes to our site, we will
   * log him in automatically, but only if he didn't log out before he left.
   */
  if($subremember){
     setcookie("cookname", $this->username, time()+COOKIE_EXPIRE, COOKIE_PATH);
     setcookie("cookid",   $this->userid,   time()+COOKIE_EXPIRE, COOKIE_PATH);
  }

  /* Login completed successfully */
  return true;
}

/**
 * logout - Gets called when the user wants to be logged out of the
 * website. It deletes any cookies that were stored on the users
 * computer as a result of him wanting to be remembered, and also
 *  unsets session variables and demotes his user level to guest.
 */
function logout(){
   global $database;  //The database connection
   /**
    * Delete cookies - the time must be in the past,
    * so just negate what you added when creating the
    * cookie.
    */
   if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookid'])){
      setcookie("cookname", "", time()-COOKIE_EXPIRE, COOKIE_PATH);
      setcookie("cookid",   "", time()-COOKIE_EXPIRE, COOKIE_PATH);
   }

   /* Unset PHP session variables */
   unset($_SESSION['username']);
   unset($_SESSION['userid']);

   /* Reflect fact that user has logged out */
   $this->logged_in = false;

   /**
    * Remove from active users table and add to
    * active guests tables.
    */
   $database->removeActiveUser($this->username);
   $database->addActiveGuest($_SERVER['REMOTE_ADDR'], $this->time);

   /* Set user level to guest */
   $this->username  = GUEST_NAME;
   $this->userlevel = GUEST_LEVEL;
}

/**
 * register - Gets called when the user has just submitted the
 * registration form. Determines if there were any errors with
 * the entry fields, if so, it records the errors and returns
 * 1. If no errors were found, it registers the new user and
 * returns 0. Returns 2 if registration failed.
 */
function register($subuser, $subpass, $subemail){
   global $database, $form, $mailer;  //The database, form and mailer object

   /* Username error checking */
   $field = "user";  //Use field name for username
   if(!$subuser || strlen($subuser = trim($subuser)) == 0){
      $form->setError($field, "* Username not entered");
   }
   else{
      /* Spruce up username, check length */
      $subuser = stripslashes($subuser);
      if(strlen($subuser) < 5){
        $form->setError($field, "* Username below 5 characters");
      }
      else if(strlen($subuser) > 30){
         $form->setError($field, "* Username above 30 characters");
      }
      /* Check if username is not alphanumeric */
      else if(!eregi("^([0-9a-z])+$", $subuser)){
         $form->setError($field, "* Username not alphanumeric");
      }
      /* Check if username is reserved */
      else if(strcasecmp($subuser, GUEST_NAME) == 0){
         $form->setError($field, "* Username reserved word");
      }
      /* Check if username is already in use */
      else if($database->usernameTaken($subuser)){
         $form->setError($field, "* Username already in use");
      }
      /* Check if username is banned */
      else if($database->usernameBanned($subuser)){
         $form->setError($field, "* Username banned");
      }
   }

   /* Password error checking */
   $field = "pass";  //Use field name for password
   if(!$subpass){
      $form->setError($field, "* Password not entered");
   }
   else{
     /* Spruce up password and check length*/
     $subpass = stripslashes($subpass);
     if(strlen($subpass) < 4){
        $form->setError($field, "* Password too short");
     }
     /* Check if password is not alphanumeric */
     else if(!eregi("^([0-9a-z])+$", ($subpass = trim($subpass)))){
        $form->setError($field, "* Password not alphanumeric");
     }
     /**
      * Note: I trimmed the password only after I checked the length
      * because if you fill the password field up with spaces
      * it looks like a lot more characters than 4, so it looks
      * kind of stupid to report "password too short".
      */
  }

  /* Email error checking */
  $field = "email";  //Use field name for email
  if(!$subemail || strlen($subemail = trim($subemail)) == 0){
     $form->setError($field, "* Email not entered");
  }
  else{
     /* Check if valid email address */
     $regex = "^[_+a-z0-9-]+(\.[_+a-z0-9-]+)*"
             ."@[a-z0-9-]+(\.[a-z0-9-]{1,})*"
             ."\.([a-z]{2,}){1}$";
     if(!eregi($regex,$subemail)){
        $form->setError($field, "* Email invalid");
     }
     $subemail = stripslashes($subemail);
  }

  /* Errors exist, have user correct them */
  if($form->num_errors > 0){
     return 1;  //Errors with form
  }
  /* No errors, add the new account to the */
  else{
     if($database->addNewUser($subuser, md5($subpass), $subemail)){
        if(EMAIL_WELCOME){
           $mailer->sendWelcome($subuser,$subemail,$subpass);
        }
        return 0;  //New user added succesfully
     }else{
        return 2;  //Registration attempt failed
      }
   }
}

/**
 * editAccount - Attempts to edit the user's account information
 * including the password, which it first makes sure is correct
 *  if entered, if so and the new password is in the right
 * format, the change is made. All other fields are changed
 * automatically.
 */
function editAccount($subcurpass, $subnewpass, $subemail){
   global $database, $form;  //The database and form object
   /* New password entered */
   if($subnewpass){
      /* Current Password error checking */
      $field = "curpass";  //Use field name for current password
      if(!$subcurpass){
        $form->setError($field, "* Current Password not entered");
      }
      else{
         /* Check if password too short or is not alphanumeric */
         $subcurpass = stripslashes($subcurpass);
         if(strlen($subcurpass) < 4 ||
            !eregi("^([0-9a-z])+$", ($subcurpass = trim($subcurpass)))){
            $form->setError($field, "* Current Password incorrect");
         }
         /* Password entered is incorrect */
         if($database->confirmUserPass($this->username,md5($subcurpass)) != 0){
            $form->setError($field, "* Current Password incorrect");
         }
      }

      /* New Password error checking */
      $field = "newpass";  //Use field name for new password
      /* Spruce up password and check length*/
      $subpass = stripslashes($subnewpass);
      if(strlen($subnewpass) < 4){
         $form->setError($field, "* New Password too short");
      }
      /* Check if password is not alphanumeric */
      else if(!eregi("^([0-9a-z])+$", ($subnewpass = trim($subnewpass)))){
         $form->setError($field, "* New Password not alphanumeric");
      }
   }
   /* Change password attempted */
   else if($subcurpass){
      /* New Password error reporting */
      $field = "newpass";  //Use field name for new password
      $form->setError($field, "* New Password not entered");
   }

   /* Email error checking */
   $field = "email";  //Use field name for email
   if($subemail && strlen($subemail = trim($subemail)) > 0){
      /* Check if valid email address */
      $regex = "^[_+a-z0-9-]+(\.[_+a-z0-9-]+)*"
              ."@[a-z0-9-]+(\.[a-z0-9-]{1,})*"
              ."\.([a-z]{2,}){1}$";
      if(!eregi($regex,$subemail)){
         $form->setError($field, "* Email invalid");
      }
      $subemail = stripslashes($subemail);
   }

   /* Errors exist, have user correct them */
   if($form->num_errors > 0){
      return false;  //Errors with form
   }

   /* Update password since there were no errors */
   if($subcurpass && $subnewpass){
      $database->updateUserField($this->username,"password",md5($subnewpass));
   }

   /* Change Email */
   if($subemail){
      $database->updateUserField($this->username,"email",$subemail);
   }

   /* Success! */
   return true;
}

/**
 * isAdmin - Returns true if currently logged in user is
 * an administrator, false otherwise.
 */
function isAdmin(){
   return ($this->userlevel == ADMIN_LEVEL ||
           $this->username  == ADMIN_NAME);
}

/**
 * generateRandID - Generates a string made up of randomized
 * letters (lower and upper case) and digits and returns
 * the md5 hash of it to be used as a userid.
 */
function generateRandID(){
   return md5($this->generateRandStr(16));
}

/**
 * generateRandStr - Generates a string made up of randomized
 * letters (lower and upper case) and digits, the length
 * is a specified parameter.
 */
function generateRandStr($length){
   $randstr = "";
   for($i=0; $i<$length; $i++){
      $randnum = mt_rand(0,61);
      if($randnum < 10){
         $randstr .= chr($randnum+48);
      }else if($randnum < 36){
         $randstr .= chr($randnum+55);
      }else{
         $randstr .= chr($randnum+61);
      }
   }
   return $randstr;
}
            };


           /**
     * Initialize session object - This must be initialized before
     * the form object because the form uses session variables,
     * which cannot be accessed unless the session has started.
         */

    $session = new Session;

      /* Initialize form object */
        $form = new Form;

           ?>

如果我理解正确,您最初是在html页面中显示登录用户的GROUP

现在,当php脚本完成执行并显示html时,脚本中设置的每个变量都消失了

当您与相同或其他php脚本进行另一次交互时,先前的脚本执行变量不可用

因此,要实现您的目标,有两种解决方案:

  • 将GROUP id保存在会话中:$_会话[“GROUP”]=$row[“GROUP”]; 然后,您调用的其他php页面将能够检索GROUP并显示共享该groupid的用户列表
  • 或者在显示的html中插入指向页面的链接,并将其作为参数发送到组id:href=“display_users\u by_group.php?groopid=“.$row['groupID]”中。当您单击链接时,页面上显示的\u users\u by\u group.php可以使用$\u GET[“groupid”]检索groupid
  • 你是说这个吗

    SELECT groupID, COUNT(*) FROM PASSENGER GROUP BY groupID
    
    这将为您提供groupId和其中的人数

    $sql=mysql_query(SELECT groupID, COUNT(*) as c FROM PASSENGER GROUP BY groupID);
    
    if(mysql_num_rows($sql)>0) while($entry=mysql_fetch_array($sql)) {
    
        $group=$entry['groupId'];
        $count=$entry['c'];
    
        $sql2=mysql_query("SELECT user.name FROM PASSENGER WHERE groupID='.$group.'");
    
        if(mysql_num_rows($sql2)>0) while($entry2=mysql_fetch_array($sql2)) {
    
           $user=$entry2['user'];
    
        }
    
    }
    

    这里有这个查询和子查询,您可以获得每个组中的用户列表。

    无论如何。您还可以做的是:

    $query3 = "SELECT p.groupID FROM PASSENGER p f WHERE p.username = '$loggedinuser'";
                    $result = mysql_query($query3);  
                    while($row = mysql_fetch_array($result))
                    {
                         $_SESSION['groupID'] = $row['groupID'];       
                    }
                        echo mysql_error();
    
    然后你把它叫到任何地方:

      $groupID= $_SESSION['groupID'];
    

    我得走了。如果您对上述解决方案有疑问,请告诉我我将在一个小时左右回来,好吗?

    如果我正确理解您的问题,您想存储groupID以便以后使用它吗?如果是这样的话-您可以将其存储在会话中,即在登录时在此处添加您的登录脚本,我将修改您的代码,使其反映通过会话类完成的groupIDIt。会话类现在已作为编辑添加到原始帖子中:)我看不到你的编辑=)你保存了吗?@Elen在发布时失去了互联网连接,它现在在那里:)谢谢你提供的任何帮助!
      $groupID= $_SESSION['groupID'];