Php 如果还有什么让我失望的话

Php 如果还有什么让我失望的话,php,forms,if-statement,Php,Forms,If Statement,我不断得到我的错误,我必须在我的代码中正确输入两个新密码。那不是我想要的。如果填写了密码字段,则应检查密码是否匹配并符合要求。否则,它应该更新配置文件。但它并没有这样做。它仍然会检查密码字段。你能告诉我我的代码有什么问题吗 <?php if ($post == "yes") { $uppercase = preg_match('@[A-Z]@', $password); $lowercase = preg_match('@[a-z]@', $passwo

我不断得到我的错误,我必须在我的代码中正确输入两个新密码。那不是我想要的。如果填写了密码字段,则应检查密码是否匹配并符合要求。否则,它应该更新配置文件。但它并没有这样做。它仍然会检查密码字段。你能告诉我我的代码有什么问题吗

    <?php
    if ($post == "yes") {


    $uppercase = preg_match('@[A-Z]@', $password);
    $lowercase = preg_match('@[a-z]@', $password);
    $number    = preg_match('@[0-9]@', $password);

    if (isset($password) && ($password != $password2 || !$uppercase || !$lowercase ||    !$number || strlen($password) < 8)) {
    echo "<table class=tablenews><tr><td>There is an error with your passwords. Either they do not match, or your new password does not contain 8 characters, a number, a lower and an upper case letter. Go back and retry again. </td></tr></table>";

    }

    else {
     $password = generateHash($password);

    $result = mysql_query("UPDATE users SET avatar='" . $avatar . "' WHERE id='". $_SESSION['user_id'] . "'") 
    or die(mysql_error());  
    $result = mysql_query("UPDATE users SET u_signature='" . $signature . "' WHERE id='".   $_SESSION['user_id'] . "'") 
     or die(mysql_error()); 
    $result = mysql_query("UPDATE users SET u_bio='" . $bio . "' WHERE id='".    $_SESSION['user_id'] . "'") 
    or die(mysql_error()); 
    $result = mysql_query("UPDATE users SET u_desc='" . $desc . "' WHERE id='". $_SESSION['user_id'] . "'") 
    or die(mysql_error()); 
    $result = mysql_query("UPDATE users SET u_intro='" . $intro . "' WHERE id='".     $_SESSION['user_id'] . "'") 
    or die(mysql_error()); 
        $result = mysql_query("UPDATE users SET password='" . $password . "' WHERE id='". $_SESSION['user_id'] . "'") 
or die(mysql_error()); 
printf('<script>window.location = "http://www.sw-bfs.com/index.php?siteid=profileedit"</script>');
}

    if (!isset($password)) {
$result = mysql_query("UPDATE users SET avatar='" . $avatar . "' WHERE id='". $_SESSION['user_id'] . "'") 
or die(mysql_error());  
$result = mysql_query("UPDATE users SET u_signature='" . $signature . "' WHERE id='". $_SESSION['user_id'] . "'") 
or die(mysql_error()); 
$result = mysql_query("UPDATE users SET u_bio='" . $bio . "' WHERE id='". $_SESSION['user_id'] . "'") 
or die(mysql_error()); 
$result = mysql_query("UPDATE users SET u_desc='" . $desc . "' WHERE id='". $_SESSION['user_id'] . "'") 
or die(mysql_error()); 
$result = mysql_query("UPDATE users SET u_intro='" . $intro . "' WHERE id='". $_SESSION['user_id'] . "'") 
or die(mysql_error()); 



    printf('<script>window.location = "http://www.sw-bfs.com/index.php?siteid=profileedit"</script>');

}


}

else {
?>

<table class="tablenews">
<tr><th>Edit your Profile</th></tr>

<?php
$userfinalid = $_SESSION['user_id'];
$prAvatar = get_user_data($userfinalid, avatar);
$prSignature = get_user_data($userfinalid, signature);
$prBio = get_user_data($userfinalid, bio);
$prDesc = get_user_data($userfinalid, desc);
$prIntro = get_user_data($userfinalid, intro);
?>

<br><tr><td>
<form method="post" action="<?php echo $thispage . "?siteid=profileedit"; ?>&proc=New&post=yes&<?php echo $pagevars; ?>">

<?php

echo '<label for="avatar" class=customlabelname>Avatar Link:</label><br><input type="text" class=customlabel name="avatar" value="' . $prAvatar .'"><br>';
echo '<label for="bio" class=customlabelname>User Bio:</label><br><textarea rows="10" cols="40" class=customlabel name="bio">' . $prBio .'</textarea><br>';
echo '<label for="desc" class=customlabelname>User Description:</label><br><textarea rows="10" cols="40" class=customlabel name="desc">' . $prDesc .'</textarea><br>';
echo '<label for="intro" class=customlabelname>User PM Intro:</label><br><textarea rows="10" cols="40" class=customlabel name="intro">' . $prIntro .'</textarea><br>';
echo '<label for="signature" class=customlabelname>User Signature:</label><br><textarea rows="10" cols="40" class=customlabel name="signature">' . $prSignature .'</textarea><br>';
echo '<label for="password" class=customlabelname>New Password(Leave Blank if it will be the same):</label><input type=password rows="10" cols="40" class=customlabel name="password"></textarea><br>';
echo '<label for="password2" class=customlabelname>ReType Password:</label><input type=password rows="10" cols="40" class=customlabel name="password2"></textarea><br>';
echo '<input type=submit value="submit" class=button2>';
?>

</td>
</tr>
</table>
<?php
}
    ?>
if(设置($\u POST['password'])…){
//…显示错误
}
这意味着如果
password
键确实存在于
$\u POST
数组中,则显示错误。我想您的意思是,如果
密码
不存在于
$\u POST
数组中,则显示错误。您应该通过放置
来反转if在此之前:

if(!isset(…)…){

这是否完成了您想要做的事情:

if(isset($password)) {
    if ($password != $password2 || !$uppercase || !$lowercase || !$number || strlen($password) < 8) {
        error_log('error');
    echo "<table class=tablenews><tr><td>There is an error with your passwords. Either they do not match, or your new password does not contain 8 characters, a number, a lower and an upper case letter. Go back and retry again. </td></tr></table>";

    } else {
        $password = generateHash($password);

        $result = mysql_query("UPDATE users SET avatar='" . $avatar . "' WHERE id='". $_SESSION['user_id'] . "'")
        or die(mysql_error());
        $result = mysql_query("UPDATE users SET u_signature='" . $signature . "' WHERE id='".   $_SESSION['user_id'] . "'")
         or die(mysql_error());
        $result = mysql_query("UPDATE users SET u_bio='" . $bio . "' WHERE id='".    $_SESSION['user_id'] . "'")
        or die(mysql_error());
        $result = mysql_query("UPDATE users SET u_desc='" . $desc . "' WHERE id='". $_SESSION['user_id'] . "'")
        or die(mysql_error());
        $result = mysql_query("UPDATE users SET u_intro='" . $intro . "' WHERE id='".     $_SESSION['user_id'] . "'")
        or die(mysql_error());
            $result = mysql_query("UPDATE users SET password='" . $password . "' WHERE id='". $_SESSION['user_id'] . "'")
        or die(mysql_error());
        printf('<script>window.location = "http://www.sw-bfs.com/index.php?siteid=profileedit"</script>');
    }
}
if(设置($password)){
if($password!=$password2 | |!$大写| |!$小写| |!$number | strlen($password)<8){
错误日志(“错误”);
echo“您的密码有错误。可能是密码不匹配,或者新密码不包含8个字符、数字、小写字母和大写字母。请返回并重试。”;
}否则{
$password=generateHash($password);
$result=mysql_查询(“更新用户集化身=”。$avatar。“”其中id=”。$\u会话['user_id']。“”))
或者死(mysql_error());
$result=mysql\u查询(“更新用户集u\u签名=”。$signature。“”其中id=”。$\u会话['user\u id']。“”))
或者死(mysql_error());
$result=mysql\u query(“更新用户集u\u bio=”“$bio.”“其中id=”“$\u会话['user\u id']。””))
或者死(mysql_error());
$result=mysql_query(“更新用户集u_desc=”“$desc.”“其中id=”“$\u会话['user_id']。””))
或者死(mysql_error());
$result=mysql\u query(“更新用户集u\u intro=”“$intro.”“其中id=”“$\u会话['user\u id']。””))
或者死(mysql_error());
$result=mysql\u query(“更新用户设置密码=”。$password。“”其中id=”。$\u会话['user\u id']。”))
或者死(mysql_error());
printf('window.location='http://www.sw-bfs.com/index.php?siteid=profileedit"');
}
}
保持代码的其余部分不变,只替换第一个if/else


您的代码格式可能需要一些清理,您应该真正压缩mysql查询。

。它们不再被维护。请参阅?改为了解,并使用或-将帮助您决定使用哪种。如果您选择PDO,@MadaraUchiha红色框称PHP5.5(目前处于alpha阶段)中不推荐使用它。你不能说它已被弃用,但它不再被推荐。PDO或MySQLi并不意味着准备好的语句…你是否使用register globals来设置变量???你可以使用一个mysql更新来更新字段,而不是为每个字段更新一个。是的,当我在一个SQL更新中执行太多操作时,我会感到困惑。好吧,让我解释一下这样更好:我正在尝试创建一个配置文件页面。用户可以在那里编辑不同的内容。如果密码字段为空,它将更新数据库中的所有字段,减去pw字段。如果设置了密码字段,它将检查最低密码要求。如果匹配,它将继续更新数据库。如果不匹配,它将更新数据库这是我设置的错误消息。但是,它的功能不是这样的。第一个If设置,检查要填充的密码字段,然后检查它是否符合要求。如果不符合,则转到下一部分。是否有意义?我使用
strlen($password)修复了这种情况>0
而不是isset或is null等。不知道为什么它是这样工作的,而不是其他方式,但它现在可以工作了。现在我要去修复SQL注入漏洞。谢谢大家。您使用的测试数据是否可能没有通过错误检查?当我运行它时,它似乎按照我认为您的意图工作。我通过echo测试了数据输入$password,如果我将其保留为空,则它不会显示。如果我输入了什么,则会显示我输入的内容。但是,由于某些原因,它的if部分工作不正常。我使用
strlen($password)修复了这种情况>0
而不是isset或is null等。不知道为什么它以这种方式工作,而不是其他方式,但它现在可以工作。现在我要去修复SQL注入漏洞。谢谢大家。