[英]PHP code not inserting into MySQL database
與本書相比,我再次檢查了我的代碼,並且確定輸入了正確的代碼。 頁面加載后,如果我將字段保留為空白,或者密碼和確認密碼字段不匹配,則會顯示錯誤。 但是,如果我正確填寫了表單並提交,則MySQL數據庫不會獲取傳遞給它的信息。 “注冊!” 並且登錄頁面也不會顯示。 我直接通過Ubuntu檢查了MySQL數據庫,並且users表仍然為空(空集(0.00秒))。 phpMyAdmin還為用戶表返回空的“ MySQL返回空的結果集(即零行)。(查詢花費0.0011秒)”。
<!DOCTYPE HTML>
<html lang="en">
<head>
<metacharset="UTF-8">
<title>Register Page</title>
</head>
<body>
<?php
$page_title = 'Register';
include('/var/www/html/learn/php/header.html');
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
require('/var/www/connect_db.php');
$errors = array();
if(empty($_POST['first_name']))
{
$errors[] = 'Enter your first name.';
}
else
{
$fn = mysqli_real_escape_string($dbc, trim($_POST['first_name']));
}
if(empty($_POST['last_name']))
{
$errors[] = 'Enter your last name.';
}
else
{
$ln = mysqli_real_escape_string($dbc, trim($_POST['last_name']));
}
if(empty($_POST['email']))
{
$errors[] = 'Enter your email address.';
}
else
{
$e = mysqli_real_escape_string($dbc, trim($_POST['email']));
}
if(!empty($_POST['pass1']))
{
if($_POST['pass1'] != $_POST['pass2'])
{
$errors[] = 'Passwords do not match.';
}
else
{
$p = mysqli_real_escape_string($dbc, trim($_POST['pass1']));
}
}
else
{
$errors[] = 'Enter your password.';
}
if(empty($errors))
{
$q = "SELECT user_id FROM users WHERE email='$e'";
$r = mysqli_query($dbc, $q);
if(mysqli_num_rows($r) != 0)
{
$errors[] = 'Email address already registered. <a href="login.php">Login</a>';
}
}
if(empty($errors))
{
$q = "INSERT INTO users
(first_name, last_name, email, pass, reg_date)
VALUES ('$fn', '$ln', '$e', SHA1('$p'), NOW())";
$r = mysqli_query($dbc, $q);
if($r)
{
echo '<h1>Registered!</h1>
<p>You are now registered.</p>
<p><a href="login.php">Login</a></p>';
}
mysqli_close($dbc);
include('/var/www/html/learn/php/footer.html');
exit();
}
else
{
echo '<h1>Error!</h1>
<p id="err_msg">The following error(s) occurred:<br>';
foreach($errors as $msg)
{
echo "- $msg<br>";
}
echo 'Please try again.</p>';
mysqli_close($dbc);
}
}
?>
<h1>Register</h1>
<form action="register.php" method="POST">
<p>
First Name: <input type="text" name="first_name" value="<?php if(isset($_POST['first_name'])) echo $_POST['first_name'];?>">
Last Name: <input type="text" name="last_name" value="<?php if(isset($_POST['last_name'])) echo $_POST['last_name'];?>">
</p>
<p>
Email Address: <input type="text" name="email" value="<?php if(isset($_POST['email'])) echo $_POST['email'];?>">
</p>
<p>
Password: <input type="password" name="pass1" value="<?php if(isset($_POST['pass1'])) echo $_POST['pass1'];?>">
Confirm Password: <input type="password" name="pass2" value="<?php if(isset($_POST['pass2'])) echo $_POST['pass2'];?>">
</p>
<p>
<input type="submit" value="Register">
</p>
</form>
<?php include('/var/www/html/learn/php/footer.html');?>
</body>
</html>
我認為這是我的問題所在,但是我嘗試了各種替代方法,但仍然無法獲得將用戶插入MySQL數據庫的數據:
if(empty($errors))
{
$q = "INSERT INTO users
(first_name, last_name, email, pass, reg_date)
VALUES ('$fn', '$ln', '$e', SHA1('$p'), NOW())";
$r = mysqli_query($dbc, $q);
if($r)
{
echo '<h1>Registered!</h1>
<p>You are now registered.</p>
<p><a href="login.php">Login</a></p>';
}
mysqli_close($dbc);
include('/var/www/html/learn/php/footer.html');
exit();
}
else
{
echo '<h1>Error!</h1>
<p id="err_msg">The following error(s) occurred:<br>';
foreach($errors as $msg)
{
echo "- $msg<br>";
}
echo 'Please try again.</p>';
mysqli_close($dbc);
}
我不確定這本書為什么要輸入“ if($ r)”,但是請告訴我這是什么意思,並說明我在哪里搞砸了。
你的問題:
您正在復制變量$ q和$ r。 在這里換
if(empty($errors)) { // changing the variable name here to $s and $m $s = "SELECT user_id FROM users WHERE email='$e'"; $m = mysqli_query($dbc, $s); if(mysqli_num_rows($m) != 0) { $errors[] = 'Email address already registered. <a href="login.php">Login</a>'; } } $q = "INSERT INTO users (first_name, last_name, email, pass, reg_date) VALUES ('$fn', '$ln', '$e', SHA1('$p'), NOW())"; $r = mysqli_query($dbc, $q);
還要刪除附加的if語句,因為它沒有任何作用。 另外,請使用參數化查詢來防止sql注入。 希望你能理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.