2013-10-16 31 views
-3

我的register.php頁面有問題。一旦我已經完成了所有的形式,這是運行查詢失敗:SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法錯誤;檢查對應的手冊

完整的錯誤消息:

無法運行查詢:SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近「)VALUES(‘peterusername’,‘fcebef48582240a’16行

注意‘peterusername’正確的語法手冊是我輸入的用戶名。

使用引導程序V3.0 BTW

 <?php     
    require("config.php"); 
    if(!empty($_POST)) 
    { 
     // Ensure that the user fills out fields 
     if(empty($_POST['username'])) 
     { die("Please enter a username."); } 
     if(empty($_POST['password'])) 
     { die("Please enter a password."); } 
     if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) 
     { die("Invalid E-Mail Address"); }             
      if(empty($_POST['name'])) 
     { die("Please enter your name."); } 
      if(empty($_POST['gender'])) 
     { die("Please enter your gender."); } 
      if(empty($_POST['dateofbirth'])) 
     { die("Please enter your Date or Birth."); } 
      if(empty($_POST['nric'])) 
     { die("Please enter your NRIC."); } 
      if(empty($_POST['address'])) 
     { die("Please enter your address."); } 
      if(!filter_var($_POST['postalcode'], FILTER_SANITIZE_NUMBER_INT)) 
     { die("Invalid Postal Code"); } 
     if(!filter_var($_POST['mobilenumber'], FILTER_SANITIZE_NUMBER_INT)) 
     { die("Invalid Mobile Number"); } 
      if(empty($_POST['profession'])) 
     { die("Please enter your profession."); } 

     // ===================================================== 

     // Check if the username is already taken 
     $query = " 
      SELECT 
       1 
      FROM users 
      WHERE 
       username = :username 
     "; 
     $query_params = array(':username' => $_POST['username']); 
     try { 
      $stmt = $db->prepare($query); 

      $result = $stmt->execute($query_params); 

     } 
     catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage()); } 
     $row = $stmt->fetch(); 
     if($row){ die("This username is already in use"); } 


     $query = " 
      SELECT 
       1 
      FROM users 
      WHERE 
       email = :email 
     "; 
     $query_params = array( 
      ':email' => $_POST['email'] 
     ); 
     try { 
      $stmt = $db->prepare($query);  
      $result = $stmt->execute($query_params); 
     } 
     catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage());} 
     $row = $stmt->fetch(); 
     if($row){ die("This email address is already registered"); } 



     $query = " 
      SELECT 
       1 
      FROM users 
      WHERE 
       nric = :nric 
     "; 
     $query_params = array(':nric' => $_POST['nric']); 
     try { 
      $stmt = $db->prepare($query);  
      $result = $stmt->execute($query_params); 
     } 
     catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage()); } 
     $row = $stmt->fetch(); 
     if($row){ die("This NRIC is already in use"); } 


       $query = " 
      SELECT 
       1 
      FROM users 
      WHERE 
       mobilenumber = :mobilenumber 
     "; 
     $query_params = array(':mobilenumber' => $_POST['mobilenumber']); 
     try { 
      $stmt = $db->prepare($query);  
      $result = $stmt->execute($query_params); 
     } 
     catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage()); } 
     $row = $stmt->fetch(); 
     if($row){ die("This Mobile Number is already in use"); } 





     //---------------------------------------------------- Add row to database 
     $query = " 
      INSERT INTO users ( 
       username, 
       password, 
       salt, 
       email, 
       name, 
       gender, 
       dateofbirth, 
       nric, 
       address, 
       postalcode, 
       mobilenumber, 
       profession, 


      ) VALUES ( 
       :username, 
       :password, 
       :salt, 
       :email, 
       :name, 
       :gender, 
       :dateofbirth, 
       :nric, 
       :address, 
       :postalcode, 
       :mobilenumber, 
       :profession, 

      ) 
     "; 

     // Security measures 
     $salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647)); 
     $password = hash('sha256', $_POST['password'] . $salt); 
     for($round = 0; $round < 65536; $round++){ $password = hash('sha256', $password . $salt); } 
     $query_params = array( 
      ':username' => $_POST['username'], 
      ':password' => $password, 
      ':salt' => $salt, 
      ':email' => $_POST['email'], 
      ':name' => $_POST['name'], 
      ':gender' => $_POST['gender'], 
      ':dateofbirth' => $_POST['dateofbith'], 
      ':nric' => $_POST['nric'], 
      ':address' => $_POST['address'], 
      ':postalcode' => $_POST['postalcode'], 
      ':mobilenumber' => $_POST['mobilenumber'], 
      ':profession' => $_POST['profession'], 
     ); 
     try { 
      $stmt = $db->prepare($query); 

      $result = $stmt->execute($query_params); 
     } 
     catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage()); } 
     header("Location: successful.php"); 
     die("Redirecting to successful.php"); 
    }        

?> 




<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <meta name="description" content=""> 
    <meta name="author" content=""> 
    <link rel="shortcut icon" href="../../assets/ico/favicon.png"> 

    <title>Sign Up -</title> 

    <!-- Bootstrap core CSS --> 
    <link href="css/bootstrap.css" rel="stylesheet"> 

    <!-- Custom styles for this template --> 
    <link href="jumbotron.css" rel="stylesheet"> 

    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --> 
    <!--[if lt IE 9]> 
     <script src="../../assets/js/html5shiv.js"></script> 
     <script src="../../assets/js/respond.min.js"></script> 
    <![endif]--> 
    </head> 

<body> 
    <?php 
if (empty($_SESSION['user'])) 
{ 
include_once("header.php"); 
} 
else  { 
     include_once("header2.php"); 
     }?> 

       <div class="page-header"> 
     <div class="container"> 

    <h1> Register </h1> 


    <form action="register2.php" method="post" role="form"> 
    <div class="form-group"> 
     <label>Username:</label> 
     <input type="text" name="username" value="" /> 

     </div> 
       <div class="form-group"> 
     <label>Email: <strong style="color:darkred;">*</strong></label> 
     <input type="text" name="email" value="" /> 
       </div> 

          <div class="form-group"> 
     <label>Password:</label> 
     <input type="password" name="password" value="" /> <br /><br /> 
           </div> 

     <div class="form-group"> 
      <label>Name:</label> 
     <input type="text" name="name" value="" /> 
          </div> 





           <div class="form-group"> 
           <label>Gender:</label> 
         <div class="radio"> 

    <label> 
    <input type="radio" name="gender" id="male" value="male" checked> 
    Male 
    </label> 
</div> 
<div class="radio"> 
    <label> 
    <input type="radio" name="gender" id="female" value="female"> 
    Female 
    </label> 
</div> 
      </div> 




           <div class="form-group">    
     <label>Date of Birth:</label> 
     <input type="text" name="dateofbirth" value="" /> 
           </div> 


         <div class="form-group">   
     <label>NRIC:</label> 
     <input type="text" name="nric" value="" /> 
           </div> 

           <div class="form-group"> 
     <label>Address:</label> 
     <input type="text" name="address" value="" /> 
           </div> 

           <div class="form-group">  
     <label>Postal Code:</label> 
     <input type="text" name="postalcode" value="" /> 
          </div> 


           <div class="form-group"> 
     <div class="input-group"> 
    <span class="input-group-addon">+65</span> 
    <input type="text" name="mobilenumber" value="" class="form-control" placeholder="Mobile Number"> 
</div> 
</div> 



        <div class="form-group"> 
     <label>Profession:</label> 
     <input type="text" name="profession" value="" /> 
       </div> 

     <input type="submit" class="btn btn-info" value="Register" /> 
    </form> 
</div> 
</div> 
     <?php include_once("footer.php");?> 
</body> 
</html> 
+2

行業後'尾隨逗號,'(後':profession,') – andrewsi

+0

錯誤處理的「或die」方法非常黑客。我希望你能想出更好的東西。如果您使用[應用程序框架](http://codegeekz.com/best-php-frameworks-for-developers/)此代碼燉,模型,視圖和控制器代碼混淆,可以組織一個*很多*更好。 – tadman

回答

0

的問題是在您的查詢語法問題的錯誤是在指出它很清楚,但在這裏你去:

你有(如@andrewsi指出的)幾個流浪的逗號:

$query = " 
     INSERT INTO users ( 
      username, 
      password, 
      salt, 
      email, 
      name, 
      gender, 
      dateofbirth, 
      nric, 
      address, 
      postalcode, 
      mobilenumber, 
      profession, <== This comma is extra. Remove it. 
     ) VALUES ( 
      :username, 
      :password, 
      :salt, 
      :email, 
      :name, 
      :gender, 
      :dateofbirth, 
      :nric, 
      :address, 
      :postalcode, 
      :mobilenumber, 
      :profession, <== This comma is also extra. Remove. 
     ) 
    "; 

讓您的查詢看起來像這樣:

$query = " 
     INSERT INTO users ( 
      username, 
      password, 
      salt, 
      email, 
      name, 
      gender, 
      dateofbirth, 
      nric, 
      address, 
      postalcode, 
      mobilenumber, 
      profession 
     ) VALUES ( 
      :username, 
      :password, 
      :salt, 
      :email, 
      :name, 
      :gender, 
      :dateofbirth, 
      :nric, 
      :address, 
      :postalcode, 
      :mobilenumber, 
      :profession 
     ) 
    "; 
+0

嘿它的作品!謝謝!然而我得到這個:無法運行查詢:SQLSTATE [23000]:完整性約束違規:1048'dateofbirth'列不能爲空@andrewsi –

+0

@JohnTan - 那也是一個錯字。 '$ _POST ['dateofbith']'缺少一封信。 – andrewsi

+0

AH它的作品!非常感謝!我非常感激它!回想起來,這個錯誤都是如此小的錯誤。我一直在編碼爲10小時,從而導致俯瞰和legarthic ...你剛剛救了我的視力從最壞的。 :D @andrewsi –

相關問題