Работа с запросами PHP Echos и mySQL Count среди других - PullRequest
2 голосов
/ 03 апреля 2012

Чтобы у вас было представление о моей системе, у меня есть таблица ПАССАЖИР, в которой есть все личные данные пассажира (вы знаете фамилию, имя и т. Д.). Но он также хранит поля «username» и «groupID». Имя пользователя позволяет связать данные пассажира с текущим вошедшим пользователем через: -

    $loggedinuser = $session->username;

Однако все пассажиры, принадлежащие к одной семье (или забронировавшие вместе), связаны по идентификатору группы. Я хотел бы узнать, сколько человек входит в определенную группу ... эта группа связана с текущим пользователем!

Например, запрос myUN COUNT для groupID, где groupID = идентификатор группы текущего пользователя, вошедшего в систему.

Это значение будет затем отправлено в форме 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 />"; 

Какая первая часть кода ....

Похоже, я могу узнать groupID текущего пользователя, вошедшего в систему, по следующему коду: -

                        $query3 = "SELECT p.groupID FROM PASSENGER p f WHERE p.username = '$loggedinuser'";
                $result = mysql_query($query3);  
                while($row = mysql_fetch_array($result))
                {
                echo $row['groupID'];       
                }

                    }}
                    echo mysql_error();

Но могу ли я сохранить значение, отображаемое здесь: -

                    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'";

Я ценю любую помощь, если у вас есть какие-либо вопросы, просто прокомментируйте, и я буду рад уточнить, что я имею в виду!

С уважением,

Tom

РЕДАКТИРОВАТЬ: класс сеанса

    <?
       /**
        * 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;

           ?>

Ответы [ 3 ]

1 голос
/ 03 апреля 2012

Вы имеете в виду это?

SELECT groupID, COUNT(*) FROM PASSENGER GROUP BY 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'];

    }

}

Здесь у вас есть этот запрос и подзапрос,когда вы можете получить список пользователей в каждой группе.

1 голос
/ 03 апреля 2012

в любом случае. что вы могли бы сделать, это:

$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'];

должен бежать сейчас. если у вас есть проблемы с вышеуказанным решением, дайте мне знать, что я вернусь через час или около того, хорошо?

1 голос
/ 03 апреля 2012

если я понимаю, что вы изначально отображаете группу зарегистрированных пользователей на html-странице.

Теперь, когда php-скрипт завершает свое выполнение и html отображается, каждая переменная, указанная в сценарии, исчезла.

Когда у вас есть другое взаимодействие с теми же или другими php-скриптами, предыдущие предыдущие скрипты переменных недоступны.

Таким образом, чтобы достичь того, что вам нужно, 2 решения:

  1. Сохранить идентификатор группы в сеансе: $ _SESSION ["gruop"] = $ row ['groupID'];Затем другие php-страницы, которые вы вызываете, смогут получить группу и отобразить, например, список пользователей, которые разделяют этот groupid
  2. . Или в отображаемом HTML-файле вставьте ссылку, указывающую на страницу, и отправьте ее в качестве параметра.идентификатор группы: href = "display_users_by_group.php? gruopid =". $ row ['groupID'].Когда вы щелкаете ссылку, страница display_users_by_group.php может получить идентификатор группы с помощью $ _GET ["groupid"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...