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已经存在-您已将其设置为主键?),您可以使用替代语法:
在一个吹毛求疵的问题上,你的评论说“如果找不到表”和“如果表…”。您没有处理表的创建/修改-您正在处理存储在表中的记录。itsWHERE 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)