PHP - MySQLi 插入不适用于用户注册

标签 php mysql mysqli insert

我正在尝试为用户注册做一个简单的插入。我为此使用以下 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>

问题是没有插入记录。

最佳答案

几个问题。我认为你的主要是你的 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 周围添加了大括号,我建议您也这样做以提高可读性。此外,如果您在发出 header() 重定向后没有明确exit,脚本将继续(导致您的所有失败尝试插入数据库),所以我也建议你这样做。由于您要继续循环,因此为了简洁起见,您可以完全省略 else:

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);

关于PHP - MySQLi 插入不适用于用户注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29104467/

相关文章:

php - 如何在 MySQL 中获取具有百分比的相似记录?

php - 如何使用 mootools1.2 将网页中的损坏图像替换为一些错误图像

目录和数据库中的 PHP 图像哈希

PHP - 将单选按钮检查与数据库进行比较的正确方法

PHP preg_replace

javascript - 将 JavaScript 函数添加到 PHP 中的重复区域

php - 使用 PHP 的 Ajax 时间警报

mysql - 将列添加到现有的唯一键?

PHP foreach 获取表值并更改

php - 重写时的数据库查询