簡體   English   中英

為什么這個 PHP MySQL 注冊表單不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM