我试图让事情变得简单。当我输入现有的电子邮件和错误的密码时,两个错误都会出现。当我输入错误的电子邮件地址和正确的密码格式时,会显示电子邮件的错误消息,但是当我输入错误的密码并更正电子邮件时,两个错误消息都会显示,这应该只是错误的密码。我只是一个初学者,我想知道这些东西是如何工作的,但我在这里找不到解决方案。我应该为数组使用不同的名称吗? 这是我的代码:
<?php
session_start();
$errmsg_arr = array();
$errflag = false;
//$errmsg_arr2 = array();
//$errflag2 = false;
include('config.php');
$firstname=$_POST['firstname'];
$lastname=$_POST['lastname'];
$email=$_POST['email'];
$pword=$_POST['pword'];
$number=$_POST['number'];
$house=$_POST['house'];
$street=$_POST['street'];
$city=$_POST['city'];
$min_length = 6;
// you can set minimum length of the query if you want
$result = mysql_query("select 1 from athan_members where email='"
. mysql_real_escape_string($email) . "'");
$userExists = (mysql_fetch_array($result) !== FALSE);
mysql_free_result($result);
if ($userExists = true){
$errmsg_arr[] = 'email address is already used';
$errflag = true;
}
if(strlen($pword)< $min_length){
$errmsg_arr[] = 'password must contain not less than 6 characters';
$errflag = true;
}
else{
mysql_query("INSERT INTO athan_members (firstname, lastname, email, number, house1, street1, city, password) VALUES ('$firstname', '$lastname', '$email', '$number', '$house', '$street', '$city', '$pword')");
header("location: loginuser.php");
}
/*if(strlen($pword) >= $min_length){
//this one will not feed in the database if there's a duplicate but still a problem ohmaygawd:3
//mysql_query("INSERT INTO athan_members (firstname, lastname, email, number, house1, street1, city, password) VALUES ('$firstname', '$lastname', '$email', '$number', '$house', '$street', '$city', '$pword') ON DUPLICATE KEY UPDATE")
mysql_query("INSERT INTO athan_members (firstname, lastname, email, number, house1, street1, city, password) VALUES ('$firstname', '$lastname', '$email', '$number', '$house', '$street', '$city', '$pword')");
header("location: loginuser.php");
}
else
{
$errmsg_arr[] = 'password must contain not less than 6 characters';
$errflag = true;
}*/
if ($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: new.php");
exit();
}
mysql_close($con);
?>
最佳答案
你有:
if ($userExists = true)...
这将为不比较的 $userExists 赋值,并且该子句将始终为真(转到该部分)。
你应该这样比较:
if ($userExists == true) {
// exists
} else {
// not
}
并更改此密码校验码:
if(strlen($pword)< $min_length){
$errmsg_arr[] = 'password must contain not less than 6 characters';
$errflag = true;
}
else{
mysql_query("INSERT INTO athan_members (firstname, lastname, email, number, house1, street1, city, password) VALUES ('$firstname', '$lastname', '$email', '$number', '$house', '$street', '$city', '$pword')");
header("location: loginuser.php");
}
为此:
if(strlen($pword)< $min_length){
$errmsg_arr[] = 'password must contain not less than 6 characters';
$errflag = true;
}
if (!$errflag) {
// No errors.
mysql_query("INSERT INTO athan_members (firstname, lastname, email, number, house1, street1, city, password) VALUES ('$firstname', '$lastname', '$email', '$number', '$house', '$street', '$city', '$pword')");
header("location: loginuser.php");
}
您只检查密码是否太短。如果电子邮件已经存在,则不会。这检查两者。
关于php mysql错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20506617/