我正在尝试为用户注册做一个简单的插入。我正在使用以下PHP代码。
<?php
require 'connect.php';
require 'variables.php';
// Set variables
$tbl_name = 'users';
$username = $_POST['username'];
$password = $_POST['password'];
$checkpw = $_POST['checkpw'];
$email = $_POST['email'];
$dob = $_POST['dob'];
$username = stripslashes($username);
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = stripslashes($password);
$password = mysqli_real_escape_string($conn, $_POST['password']);
$checkpw = stripslashes($checkpw);
$checkpw = mysqli_real_escape_string($conn, $_POST['checkpw']);
function mempty()
{
foreach(func_get_args() as $arg)
if(!empty($arg)) {
continue;
}
else {
header('location:register.php?msg=failed');
}
}
// Check if variables are empty.
mempty($username);
mempty($password);
mempty($checkpw);
mempty($dob);
if (strcmp ($password, $checkpw) == 0) {
$sql="INSERT INTO $tbl_name (username,password,email,dob) VALUES ($username,$password,$email,$dob)";
if (mysqli_query($conn, $sql)) {
echo "Registered Successfully!";
}
}
?>
$ _POST来自一个HTML表单,我不相信这个问题存在,但无论如何我都会告诉你,以防万一。
<form method="post" action="initsec.php">
<p class="reg">Username:</p>
<input name="username" type="text" placeholder="Username" id="username"><br />
<?php if(isset($_GET['msg']) && $_GET['msg'] == 'pws') { echo "Passwords do not match!<br />"; } ?>
<p class="reg">Password:</p>
<input name="password" type="password" placeholder="Password" id="password"><br />
<p>Confirm Password:</p>
<input type="password" name="checkpw" id="checkpw" placeholder="Re-enter Password"><br />
<p>Email Address:</p>
<input type="text" name="email" id="email" placeholder="Email Address"><br />
<p>Date of Birth:</p>
<input type="date" name="dob" id="dob"><br />
<input name="register" type="submit" value="Register" class="register">
</form>
问题是没有插入记录。
答案 0 :(得分:2)
有几个问题。我认为你的主要是你的SQL语句:
"INSERT INTO $tbl_name (username,password,email,dob)
VALUES ($username,$password,$email,$dob)"
可能需要引用字符串值(如评论中的@Fred -ii-所示):
"INSERT INTO $tbl_name (username,password,email,dob)
VALUES ('$username','$password','$email','$dob')"
我也不认为这个功能会像你期望的那样起作用:
function mempty()
{
foreach(func_get_args() as $arg) {
if(!empty($arg)) {
continue;
} else {
header('location:register.php?msg=failed');
}
}
}
我在foreach
周围添加了花括号,我建议你这样做是为了更容易阅读。此外,如果在发出exit
重定向后未明确header()
,脚本将继续(导致您 >的所有失败尝试插入数据库),所以我也建议你那样做。由于你在循环中continue
,为简洁起见,你可以完全省略其他内容:
function mempty()
{
foreach(func_get_args() as $arg) {
if(!empty($arg)) {
continue;
}
header('location:register.php?msg=failed');
exit();
}
}
由于你在函数中使用func_get_args
,你可以传入任意数量的参数,减少你正在进行的函数调用次数:
mempty($username, $password, $checkpw, $dob);
答案 1 :(得分:0)
首先放置mysqli_error($conn)
,然后在表名&amp;上使用backtic(`)来尝试它。引用变量。
$sql="INSERT INTO `" . $tbl_name . "` (username,password,email,dob)
VALUES ('$username','$password','$email','$dob')";