[英]Why doesn't this PHP MySQL registration form work?
所以我寫了一個非常基本的 PHP 注冊表單,鏈接到一個 HTML 文件; 這是PHP中的代碼:
<?php
if( $_POST )
{
$con = mysql_connect("localhost","KyleHulse","(my password)", "csdb1082");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("csdb1082", $Users);
$insert_query = "insert into feedback(
user,
password,
email
)
values (
'".$_POST['user']."',
'".$_POST['password']."',
'".$_POST['email']."')";
mysql_query($insert_query);
echo "<h2>Thanks for registering.</h2>";
mysql_close($con);
}
?>
這是相應的 HTML 代碼:
<head>
<meta charset="UTF-8">
<title>Registration</title>
</head>
<body>
<form action="register.php" method="post">
<p>
<label for="user">Username</label>
<input type="text" name="user" id="user">
</p>
<p>
<label for="password">Password:</label>
<input type="text" name="password" id="password">
</p>
<p>
<label for="email">Email:</label>
<input type="text" name="email" id="email">
</p>
<input type="submit" value="Submit">
</form>
</body>
煩人的事情是我早些時候讓它工作了,我改變的東西導致它壞了。
mysql_slect_db()
- 使用$con
而不是$Users
($Users 甚至未定義);
並使用mysqli
,不推薦使用和不安全的mysql
函數:)
下面是使用 Prepared Statement 修改后的代碼。
第一步是連接到數據庫。 為此,我們需要定義訪問詳細信息。
// Define Database Credentials
$servername = "localhost"; //Server Name
$username = "KyleHulse"; //Username to the DB
$password = "(my password)"; //Password to the DB
$dbname = "csdb1082"; //Name of the Database
// Create Database Connection
$conn = new mysqli($servername, $username, $password, $dbname);
現在檢查連接。
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
在此之后,您運行您的查詢。 請注意,由於這是您的個人項目,因此我使用SHA1
作為您密碼的散列。 對於更大的項目,我建議進一步研究如何保護您的密碼。
要運行查詢,首先是准備它。 這就是你的做法。
$stmt = $conn->prepare("INSERT INTO feedback (user, password, email) VALUES (?, ?, ?)");
在這里,您將語句存儲在$stmt
變量中。 該查詢具有INSERT INTO
后跟表的名稱。 在您的情況下,它是feedback
。
在此之后,您填寫要保存在第一個括號中的表格字段。 在您的情況下,它將是(user, password, email)
后跟VALUES
。
在此之后,您使用(?, ?, ?)
為實際值添加占位符。 請注意總計數?
必須與前一個括號中的字段總數相匹配。
現在你必須將變量綁定到這些?
. 這是由,
$stmt->bind_param("sss", $user, $password, $email);
請注意, "sss"
是傳遞的值的格式。 以下是格式。
i - integer
d - double
s - string
b - BLOB
因此,您需要傳遞 3 個值,因此您有 3 個s
,然后是變量,您將在其中存儲 HTML 表單中的值,
$user = $_POST["user"];
$password = sha1($_POST["password"]); //simplest way to use SHA1 hash.
$email = $_POST["email"];
現在你只需要執行准備好的語句。
$stmt->execute();
而已!
下面是完整的代碼。
// Define Database Credentials
$servername = "localhost"; //Server Name
$username = "KyleHulse"; //Username to the DB
$password = "(my password)"; //Password to the DB
$dbname = "csdb1082"; //Name of the Database
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$stmt = $conn->prepare("INSERT INTO feedback (user, password, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $user, $password, $email);
$user = $_POST["user"];
$password = sha1($_POST["password"]); //simplest way to use SHA1 hash.
$email = $_POST["email"];
$stmt->execute();
希望這會有所幫助。
我知道這是你的個人項目,但如果你以正確的方式做事會很好。 代碼中有很多需要改進的地方,但讓我們跳到您真正需要的地方,還要確保在開發階段的 php.ini 中啟用了 php 錯誤報告。
// Create connection
$conn = new mysqli("localhost","KyleHulse","(your password)", "csdb1082");
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO feedback(user,password,email) VALUES(
'".$_POST['user']."',
'".$_POST['password']."',
'".$_POST['email']."'
)";
if($conn->query($sql) === TRUE)
{
echo "<h2>Thanks for registering.</h2>";
}
else
{
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.