2014-02-09 115 views
0

在我的註冊表單中,我提交所有數據後自動登錄用戶。將數據提交給數據庫之後,我運行一個查詢從數據庫中獲取數據並將其存儲在會話變量中。問題在於while循環只存儲第一個變量,它是用戶標識並且不存儲其餘的變量。我在做什麼錯了?我的MySQL查詢和While循環和SESSIONS不起作用PHP

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 
          } 

在它呼應你已經登陸,到底還有,我附和了值會話變量進行測試,但所有的回報是除了在用戶ID的<br>不是實際值開始。我也沒有得到任何錯誤。

請幫幫我。

+0

你是否真的切入了用戶輸入?確保在查詢中使用變量時不允許SQL注入。更好的是,使用PDO做參數聲明:http://www.php.net/manual/en/book.pdo.php – Hidde

+0

我正在測試一個項目。我只是按照我爲速度做的那樣做了。我永遠不會公開這個項目。 – nitrous

+0

你確定你的行正確插入? – CodeBird

回答

1
while ($row = mysqli_fetch_assoc($sql3)) 

你忘了添加{,似乎也}在循環的結束。 所以只有第一個命令發生在循環中並執行。

另一件事,循環後的「其他」 - 與它的條件有關?

通常我覺得縮進很好,但是你太過分了。 也許,而不是嵌套太多的條件和循環,找到另一種方法。

+0

謝謝你,先生,你救了我:) – nitrous

+0

你很歡迎,但老實說 - 考慮另一種方法,而不是使用這些嵌套的條件。它確實很難找到錯誤和錯誤。 –