2013-01-10 45 views
0

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

<?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 
} 
    ?> 
+1

[**请不要在新代码中使用'mysql_ *'函数**](http://bit.ly/phpmsql)。他们不再被维护[并被正式弃用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**红框**](http://j.mp/Te9zIL)?学习[*准备的语句*](http://j.mp/T9hLWi),并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [这篇文章](http://j.mp/QEx8IB)将帮助你决定哪个。如果你选择PDO,[这里是一个很好的教程](http://j.mp/PoWehJ)。 –

+0

@MadaraUchiha红色框表示它在PHP5.5(现在处于alpha阶段)不推荐使用。你不能说它已经被弃用了,但它不再被推荐。而PDO或MySQLi并不意味着准备好的语句... –

+0

你使用注册全局变量来设置你的变量吗? –

回答

0
if (isset($_POST['password']) ...) { 
    // ... display error 
} 

这意味着如果password键时的$_POST阵列中存在,显示错误。我想你的意思是如果password不是存在于$_POST数组中,显示错误。如果你要反转通过把一个!收到:

if (!isset(...) ...) { 
+0

好吧,让我更好地解释一下:我正在尝试创建一个配置文件页面。用户可以在那里编辑不同的东西。如果密码字段为空,它将更新数据库中的所有字段,减去pw字段。如果设置了密码字段,则会检查最低密码要求。如果匹配,它将继续更新数据库。如果没有,它会给出我设置的错误消息。但是,它并不像那样运作。第一个If isset会检查要填写的密码字段,然后检查它是否符合要求。如果不是这样,它就会变成下一部分。合理? – user1924218

+0

我使用'strlen($ password)> 0'修复了这种情况,而不是isset或者是null等。不知道为什么它会以这种方式工作,而不是其他人,但它现在可以工作。现在我要修复SQL注入漏洞。 谢谢大家。 – user1924218

0

这是否达成什么是你想要做的事:

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>'); 
    } 
} 

离开你的代码的其余部分相同,只是更换第一,如果/其他。

你的代码格式可以使用一些清理,你应该真的压缩mysql查询。

+0

不,仍然没有工作。 :( – user1924218

+0

是否有可能您使用的测试数据合法地失败了错误检查?当我运行它时,它似乎正常工作,因为我认为您打算。 –

+0

我通过回显$ password来测试数据,如果我将其保留空白,它不会没有出现,如果我输入了某些内容,我键入的内容会显示出来,但由于某种原因,IF中的一部分表现不正常。 – user1924218