排除'未定义变量'错误

时间:2010-04-05 19:59:09

标签: php mysql

我一直收到以下错误Undefined variable: password on line 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>';

}

6 个答案:

答案 0 :(得分:1)

只有一个地方将值分配给$password

if ($password1 == $password2) {
    $sha512 = hash('sha512', $password1);
    $password = mysqli_real_escape_string($mysqli, $sha512);
}

因此,如果不满足条件,则不会有$password。在这种情况下,无论如何都无法执行UPDATE查询。

答案 1 :(得分:1)

在顶部定义

$password = '';

然后将DBC检查更改为

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

答案 2 :(得分:0)

如您所见,无论第一个if()是真还是假,都会完成数据库插入。如果它是假的($ password1和$ password2不匹配),则不会定义$ password。

答案 3 :(得分:0)

如果这种情况失败:

 if ($password1 == $password2) {

$password将无法定义,会在以后使用的某行中引发错误。

答案 4 :(得分:0)

您没有在$ password = ......行上使用ELSE语句引发错误,因此显然存在错误并且未定义错误。顶级if语句很好,但错误在$ password声明行。你看到它是如何工作的吗?

答案 5 :(得分:0)

如果插入失败(可能是因为user_id已经存在 - 你已经把它作为主键吗?)而不是重试查询,你可以使用备用INSERT INTO ... ON DUPLICATE KEY UPDATE语法:

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)

在一个挑剔的观点上,你的评论会说“如果找不到桌子”和“如果桌子......”。您不是在处理表创建/修改 - 您正在使用存储在表中的记录。