2017-07-29 40 views
0

我在這裏關注我的書面代碼。當我檢查時,連接是可以的,但是當我的if語句在這裏運行時,它預期會從password = cpassword直到第二個if語句用於檢查用戶是否存在並將其轉入else,因爲它是假的,但是當它到達第三個if語句我不知道爲什麼if($ query_run)會變成false。

因此,結果數據沒有添加到我的數據庫,並給我一個ERROR警報,我在其他語句中聲明。

<?php 
    if(isset($_POST['submit_btn'])) 
    { 
     $username = $_POST['username']; 
     $password = $_POST['password']; 
     $cpassword = $_POST['cpassword']; 
     if($password==$cpassword) 
     { 
      $query= "select * from user WHERE username ='$username'"; 
      $query_run = mysqli_query($con,$query); 
       if(mysqli_num_rows($query_run)>0) 
       { 
       // there is already a user with the same username 
        echo '<script type="text/javascript"> alert("user already exist.. Try another username")</script>'; 
       } 
       else 
       { 
       $query = "insert into user values('$username','$password')"; 
       $query_run = mysqli_query($con,$query); 
       if($query_run) 
       { 
        echo '<script type="text/javascript"> alert("User Registered Go to Login page to Log in")</script>'; 
       } 
       else 
       { 
        echo '<script type="text/javascript"> alert("Error..")</script>'; 
       } 
      } 
     } 
     else 
     { 
       echo '<script type="text/javascript"> alert("Password does not match!")</script>'; 
     } 
    } 
?> 
+2

請用準備好的查詢,你是開放的SQL注入。 –

+0

@IvanBolnikh這不是問題。 –

+1

@MichaelHirschler:那沒關係。如果有人正在做一些不安全的事情,而且你知道這是不安全的,那麼有必要說出來。 – halfer

回答

-2

<?php 
 
    if(isset($_POST['submit_btn'])) 
 
    { 
 
     $username = $_POST['username']; 
 
     $password = $_POST['password']; 
 
     $cpassword = $_POST['cpassword']; 
 
     if($password==$cpassword) 
 
     { 
 
      $query= "select * from user WHERE username ='$username'"; 
 
      $query_run = mysqli_query($con,$query); 
 
       if(mysqli_num_rows($query_run)>0) 
 
       { 
 
       // there is already a user with the same username 
 
        echo '<script type="text/javascript"> alert("user already exist.. Try another username")</script>'; 
 
       } 
 
       else 
 
       { 
 
       $query = "insert into user (username, password) values('$username','$password')"; 
 
       $query_run = mysqli_query($con,$query); 
 
       if($query_run) 
 
       { 
 
        echo '<script type="text/javascript"> alert("User Registered Go to Login page to Log in")</script>'; 
 
       } 
 
       else 
 
       { 
 
        echo '<script type="text/javascript"> alert("Error..")</script>'; 
 
       } 
 
      } 
 
     } 
 
     else 
 
     { 
 
       echo '<script type="text/javascript"> alert("Password does not match!")</script>'; 
 
     } 
 
    } 
 
?>

+0

只更改$ query =「插入用戶(用戶名,密碼)VALUES($ username,$ password)」; –

+0

根據其他兩個答案(其中一個現在已被其作者刪除),我希望看到OP在代碼中提到的安全錯誤。他們至少(1)SQL注入,和(2)明文密碼存儲。 – halfer

+1

這是如何解決這個問題的?對於做了什麼沒有具體的解釋。你迫使人們看到代碼中的差異。 –

0

您的查詢是錯誤的,沒有列指定插入值。 與更換您的列名試試這個:

$query = "insert into user (column1, column2) values('$username','$password')"; 

其中column1column2將是你usernamepassword列。

注意:您已開放給sql注入。所以你應該使用準備好的查詢。

+0

這複製了OP代碼中的SQL注入漏洞以及明文密碼。請**總是**當您看到它們時提及安全問題! – halfer

+1

夥計們,非常感謝。它確實有效。我作爲初學者的道歉再次感謝你 –

+0

很高興幫助你@ReffersonDahan。如果有效,請接受爲答案。 :) –