2014-02-24 93 views
-2

我正在爲我的網站開發一個登錄系統,但是當我將所有信息(用戶,密碼,電子郵件)插入到sigm-up函數的數據庫中時,它將所有變量設置爲0.我知道這不是傳遞變量的問題,因爲我已經回覆了用戶名和密碼,並且它們處於它們的意圖之中。我的註冊頁面的代碼如下:當插入表格時,PHP mysqli將變量設置爲0

<?php 

include '../includes/conn.php'; 
include 'salt.php'; 

if($_POST['signup']){ 

    $user = $_POST['user']; 
    $pass = $_POST['pass']; 
    $cpass = $_POST['cpass']; 
    $email = $_POST['email']; 

     if($pass == $cpass){ 
      $hpass = create_hash($pass); 

      $query = $conn->prepare("INSERT INTO Users (Name, Password, Email) VALUES (?, ?, ?)"); 
     $query->bind_param('sss', $user, $hpass, $email); 
     $query->execute(); 

      if($query){ 
       $msg = 'Account created successfully, please check your email to verify it.'; 
      }else{ 
       $msg = 'There was an error creating your account: ' . $conn->error . ', please try again later'; 
      } 

      //echo $user . ' ' . $pass . ' ' . $hpass . ' ' . $email; 

     }else{ 
      $msg = 'Passwords do not match.'; 
     } 
} 

?> 

<html> 

    <head> 

     <title>DiscFire Softworks - Login test</title> 

     <link rel="stylesheet" type="text/css" href="../includes/ie-styles.css"> 

     <style type="text/css"> 

      @import url('../includes/styles.css'); 

     </style> 

    </head> 

    <body> 

     <div class="body"> 

      <img src="../images/header.jpg" /> 

      <div class="navbar"> 

       <?php 

        $query = $conn->prepare("SELECT Name FROM pages ORDER BY ID asc"); 
        $query->execute(); 
        $query->bind_result($name); 

        while($query->fetch()) 
        { 
         echo '<a href="/?page=' . $name . '">' . $name . '</a>'; 
        } 

       ?> 

      </div> 

      <?php 
       echo '<p>' . $msg . '</p>'; 
      ?> 

      <form method="POST" action="index.php" id="sign-up"> 

       <input type="hidden" name="signup" value="1"/> 
       <label for="user">Username: </label> 
       <input type="text" style="width: 30%; margin-left: 59px;" name="user"></textarea> 
       <br /> 
       <label for="pass">Password: </label> 
       <input type="password" style="width: 30%; margin-left: 60px;" name="pass"></textarea> 
       <br /> 
       <label for="cpass">Confirm Password: </label> 
       <input type="password" style="width: 30%; margin-left: 1px;" name="cpass"></textarea> 
       <br /> 
       <label for="user">Email: </label> 
       <input type="text" style="width: 30%; margin-left: 90px;" name="email"></textarea> 
       <input type="submit" /> 
      </form> 

     </div> 

    </body> 

</html> 

這裏是SQL結構,通過@Prix的要求:提前

http://prntscr.com/2vsmjv

謝謝!

+1

看起來您有嚴重的SQL注入漏洞。另外,爲什麼要先檢查現有用戶並告訴最終用戶一個帳戶已經存在?從安全的角度來看,這通常是不被接受的,實際上卻浪費地在數據庫中增加了一個額外的查詢調用。只需進行插入操作,如果由於唯一的限制而失敗,則只需告訴用戶該帳戶無法創建。您可以在執行之前顯示查詢的轉儲嗎? –

+1

你爲什麼使用'textarea'而不是'input'字段?你知道如果沒有正確的消毒,他們可以使用輸入和其他幾個可以破壞登錄系統的角色?你也應該把'Name'作爲一個獨特的領域,所以你不必浪費一個查詢來知道它是否開放。您已經在使用MySQLi,似乎爲什麼不使用預先準備好的語句,以便避免注入?如果你要重複同樣的錯誤,從mysql_ *庫到MySQLi沒有任何意義。 – Prix

+0

看起來你有明顯無意義的表格聲明。 –

回答