Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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 故障排除';未定义变量';错误_Php_Mysql - Fatal编程技术网

Php 故障排除';未定义变量';错误

Php 故障排除';未定义变量';错误,php,mysql,Php,Mysql,我不断收到以下错误未定义变量:第33行的密码如何更正此问题?因此,此错误将停止显示 下面是php代码 $first_name = mysqli_real_escape_string($mysqli, $purifier->purify(htmlentities(strip_tags($_POST['first_name'])))); $password1 = mysqli_real_escape_string($mysqli, $purifier->purify(strip_tags

我不断收到以下错误
未定义变量:第33行的密码
如何更正此问题?因此,此错误将停止显示

下面是php代码

$first_name = mysqli_real_escape_string($mysqli, $purifier->purify(htmlentities(strip_tags($_POST['first_name']))));
$password1 = mysqli_real_escape_string($mysqli, $purifier->purify(strip_tags($_POST['password1'])));
$password2 = mysqli_real_escape_string($mysqli, $purifier->purify(strip_tags($_POST['password2'])));




// Check for a password and match against the confirmed password:
if ($password1 == $password2) {
    $sha512 = hash('sha512', $password1);
    $password = mysqli_real_escape_string($mysqli, $sha512);
} else {
    echo '<p class="error">Your password did not match the confirmed password!</p>';
}



//If the table is not found add it to the database
if (mysqli_num_rows($dbc) == 0) {
        $mysqli = mysqli_connect("localhost", "root", "", "sitename");
        $dbc = mysqli_query($mysqli,"INSERT INTO users (user_id, first_name, password) 
                                     VALUES ('$user_id', '$first_name', '$password')");
}



//If the table is in the database update each field when needed
if ($dbc == TRUE) {
        $dbc = mysqli_query($mysqli,"UPDATE users 
                                     SET first_name = '$first_name', password = '$password' 
                                     WHERE user_id = '$user_id'");

        echo '<p class="changes-saved">Your changes have been saved!</p>';

}
$first\u name=mysqli\u real\u escape\u string($mysqli,$purizer->purify(带标签($\u POST['first\u name'))));
$password1=mysqli\u real\u escape\u string($mysqli,$purizer->purify(带标签($\u POST['password1')));
$password2=mysqli\u real\u escape\u string($mysqli,$purizer->purify(带标签($\u POST['password2'])));
//检查密码并与确认的密码匹配:
如果($password1==$password2){
$sha512=散列('sha512',$password1);
$password=mysqli\u real\u escape\u字符串($mysqli,$sha512);
}否则{
echo“

您的密码与确认的密码不匹配!

”; } //如果找不到该表,请将其添加到数据库中 if(mysqli_num_行($dbc)==0){ $mysqli=mysqli_connect(“本地主机”、“根目录”、“站点名称”); $dbc=mysqli\u查询($mysqli,“插入到用户中(用户id、名字、密码)) 值(“$user\u id”、“$first\u name”、“$password”); } //如果表位于数据库中,则在需要时更新每个字段 如果($dbc==TRUE){ $dbc=mysqli\u查询($mysqli,“更新用户” 设置first_name='$first_name',password='$password' 其中user_id=“$user_id”); 回显“

您的更改已保存!

”; }
如您所见,无论第一个
if()
是真还是假,都会插入数据库。如果为false($password1和$password2不匹配),$password将不会被定义。

如果此条件失败:

 if ($password1 == $password2) {

$password
将不会被定义,这会在稍后使用的其中一行中引发错误。

只有一个位置将值分配给
$password

if ($password1 == $password2) {
    $sha512 = hash('sha512', $password1);
    $password = mysqli_real_escape_string($mysqli, $sha512);
}
因此,如果不满足条件,将不会有
$password
。在这种情况下,无论如何执行更新查询都没有意义。

在顶部定义

$password = '';
然后将DBC检查更改为

if ($dbc == TRUE && $password != ''){

您不会在$password=…上使用ELSE语句引发错误。。。。。。所以这里显然有一个错误,它没有被定义。顶级if语句可以,但错误在$password声明行。您看到它是如何工作的了吗?

如果插入失败(可能是因为用户id已经存在-您已将其设置为主键?),您可以使用替代语法:


在一个吹毛求疵的问题上,你的评论说“如果找不到表”和“如果表…”。您没有处理表的创建/修改-您正在处理存储在表中的记录。

its
WHERE user_id='$user_id'”;
那么它应该显示
echo'

您的密码与确认的密码不匹配

",而不是错误。初始化
$password
。添加
$password=''最重要的是。在我看来,有很多问题需要解决。例如,所有那些
$purizer->purify(htmlentities(strip_tags(…))
之类的东西,你应该认真地重新评估一下,不要只是把你能扔给那些字符串的任何东西都用在那些字符串上,希望有什么东西能奏效。改为做一些有用的事情,例如测试密码是否有点“强”。现在,像“”或“a”这样的密码被接受,尽管有那么多的混乱。或者“如果插入失败,请尝试更新”部分。您的脚本应该真正知道此时是创建新用户记录还是更新现有记录。
INSERT INTO users (user_id, first_name, password) 
VALUES ('$user_id', '$first_name', '$password')
ON DUPLICATE KEY UPDATE
    first_name=VALUES(first_name),
    password=VALUES(password)