php - 我的 MySQL 查询、while 循环和 SESSIONS 无法正常工作 PHP

标签 php mysql session while-loop

在我的注册表单中,我会在用户提交所有数据后自动登录。他们将数据提交到数据库后,我运行一个查询以从数据库中获取该数据并将其存储在 session 变量中。问题是 while 循环仅存储第一个变量(即用户 ID),不存储其余变量。我做错了什么?

if ($signup) {
      //user clicked the register button
      if (isset($username, $em, $pass, $pass2, $fn, $ln, $sex, $bd_day, $bd_month, $bd_year)) {
         //if all of these have a value
         if ($pass == $pass2) {
              //if the passwords match
              $sql = mysqli_num_rows(mysqli_query($con, "SELECT * FROM users WHERE username = '$username'"));
              //check if username is already taken
              if ($sql < 1) {
                    //if the username hasn't been taken
                    $sql2 = mysqli_num_rows(mysqli_query($con, "SELECT * FROM users WHERE email = '$em'"));
                    //check if the email is taken
                           if ($sql2 < 1) {
                                 //the email hasn't been taken
                                 if (strlen($pass) > 5) {
                                       //password is more than 5 characters
                                       $pass = md5($pass);
                                       //md5 is not secure!!! use something else later
                                       if (strlen($username) > 4) {
                                              //username is bigger than 4 characters
                                              $query = mysqli_query($con, "INSERT INTO users (username, email, first_name, last_name, sex, bd_month, bd_year, bd_day, password, profile_pic, signup_date, activated, cover_photo) VALUES ('$username','$em','$fn', '$ln', '$sex', '$bd_month', '$bd_year', '$bd_day', '$pass', 'profilepic/default.png','$date)','0', 'coverphoto/defaultcover.jpg')") or die(mysqli_error($con));
                                               //insert into db
                                               $sql3 = mysqli_query($con, "SELECT * FROM users WHERE username = '$username' AND email = '$em'") or die(mysqli_error($con));
                                               //select values from db for login
                                               $num = mysqli_num_rows($sql3);
                                               //check how many hits the query gets it should be 1
                                               if ($sql3 == true && $num > 0) {
                                                     //check if query was a success and that there is a user with those credentials
                                                     while ($row = mysqli_fetch_assoc($sql3))
                                                                //log user in
                                                            $_SESSION['id'] = $row['id'];
                                                            echo $_SESSION['id'] . '<br>';
                                                            $_SESSION['un'] = $row['username'];
                                                            echo $_SESSION['un']. '<br>';
                                                            $_SESSION['fn'] = $row['first_name'];
                                                            echo $_SESSION['fn'] . '<br>';
                                                            $_SESSION['ln'] = $row['last_name'];
                                                            echo $_SESSION['ln'] . '<br>';
                                                            $_SESSION['em'] = $row['email'];
                                                            echo $_SESSION['em'] . '<br>';
                                                            $_SESSION['pp'] = $row['profile_pic'];
                                                            echo $_SESSION['pp'] . '<br>';
                                                            $_SESSION['signup_date'] = $row['signup_date'];
                                                            $_SESSION['active'] = $row['activated'];
                                                            setcookie('un', $username, time()+3600*60*24*7*4);
                                                            echo "You have been logged in.";
                                                            exit();
                                                        } else {
                                                            echo "An unknown error occurred";
                                                            exit();
                                                        }
                                                    } else {
                                                        //username is less than 4 characters
                                                        echo "Your username must be larger than 4 characters!";
                                                        exit();
                                                    }
                                                } else {
                                                    //password is less than 5 characters
                                                    echo "You password must be more than 5 characters long<br />";
                                                    exit();
                                                }
                                            } else {
                                                //email is already taken
                                                echo "That email has already been taken!";
                                                exit();
                                            }
                                        } else {
                                            //username is already taken
                                            echo "That username is already taken!";
                                            exit();
                                        }
                                    } else {
                                        //the passwords don't match
                                        echo "You passwords don't match";
                                        exit();
                                    }
                                } else {
                                    //user didn't submit the form
                                    echo "Please fill in all the fields";
                                    exit();
                                }
                            } else {
                                //user didn't click the register button
                            }

最后它确实回显了您已登录。另外,我回显了 session 变量中的值进行测试,但所有返回都是 <br>除了开头的用户 ID 之外,不是实际值。我也没有收到任何错误。

请帮助我。

最佳答案

while ($row = mysqli_fetch_assoc($sql3))

您忘记添加 { ,并且似乎还在循环末尾添加 } 。 因此只有第一个命令在循环中发生并执行。

另一件事,循环后面的“else” - 它与哪个条件相关?

通常我认为缩进很好,但你做得太过分了。 也许,不要嵌套太多条件和循环,而是寻找另一种方法。

关于php - 我的 MySQL 查询、while 循环和 SESSIONS 无法正常工作 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21662359/

相关文章:

mysql - 照片存储难题

PHP PDO 更新有 2 个表

javascript - 为什么我的 Jquery Autocomplete 无法处理 Mysql 数据

javascript - 无需后端的用户认证

php - http 重定向到 index.php 而不是 https

php - 读取一个表并从与第一个表行相关的另一个表中获取行

javascript - 如何创建多个jquery表单字段并插入mysql数据库,而不使用mysql_real_escape_string

php - 模块 'ssh2' 已加载到第 0 行的未知中

php - 如何使用 session 中的信息从 MySQL 中获取信息

java - Hibernate 确实会创建新条目而不是更新(并非总是如此)