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