Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-MySQLi Insert不适用于用户注册_Php_Mysql_Mysqli_Insert - Fatal编程技术网

PHP-MySQLi Insert不适用于用户注册

PHP-MySQLi Insert不适用于用户注册,php,mysql,mysqli,insert,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']; $

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

$\u帖子来自一个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-所述):

我也不认为这个函数会像你期望的那样工作:

function mempty()
{
    foreach(func_get_args() as $arg) {
        if(!empty($arg)) {
            continue;
        } else {
            header('location:register.php?msg=failed');
        }
    }
}
我在
foreach
周围添加了花括号,我建议您也这样做,以便于阅读。另外,如果在发出
头()
重定向后未显式退出
,脚本将继续(导致所有失败也尝试插入数据库),因此我也建议您这样做。由于您在循环中
continue
ing,为了简洁起见,您可以完全省略else:

function mempty()
{
    foreach(func_get_args() as $arg) {
        if(!empty($arg)) {
            continue;
        } 

        header('location:register.php?msg=failed');
        exit();
    }
}
由于在函数中使用了
func\u get\u args
,因此可以传入任意数量的参数,从而减少正在进行的函数调用数量:

mempty($username, $password, $checkpw, $dob);

问题出在哪里?
($username、$password、$email、$dob)
引用这些<代码>mysqli_错误($conn)
会发出语法错误的信号。@kingkero问题是记录没有插入数据库。@ThomasYamakaitis:您应该在表单中添加一条免责声明,告诉用户您正在以纯文本形式获取他们的密码。或者放弃它,使用一条带有绑定参数/值的准备好的语句而不是将变量插入SQL查询字符串。
mempty($username, $password, $checkpw, $dob);