下面是我的游戏注册表单,它正在查找用户可能已经完成的错误,但即使发现错误,也不会将其添加到$errors阵列中.当我print_r在数组中它返回空.
我相信if函数出了问题,因为如果我从一个if函数的外部添加一个值,它会添加它.
这是我的代码:
if (isset($_GET['action'])){
db_connect();
db_select();
if ($_GET['action'] == "register"){
$username = $_POST['username'];
$password = $_POST['password'];
$confirm = $_POST['confirm'];
$email = $_POST['email'];
$agree = $_POST['agree'];
$errors = array();
if (!isset($username)){
$errors['0'] = "You did not specifiy a username";
}elseif (ereg("[^a-z0-9]", $username)) {
$errors_array['0'] = "Usernames can only contain lowercase letters and numbers";
}elseif (mysql_num_rows(mysql_query("SELECT username FROM users WHERE username = '{$username}'")) > 0) {
$errors['0'] = "The username you chose has already been taken";
}
if (!isset($password)){
$errors['1'] = "You did not specify a password";
}elseif ($password != $confirm){
$errors['1'] = "The password and password confirm fields do not match";
}
if (!isset($email)){
$errors['2'] = "You did not specify a E-mail address";
}elseif (mysql_num_rows(mysql_query("SELECT email FROM users WHERE email = '{$email}'")) > 0) {
$errors['2'] = "The E-mail you specified is already being used";
}
print_r($errors);
}
}
Run Code Online (Sandbox Code Playgroud)
首先你这样做:
$username = $_POST['username'];
$password = $_POST['password'];
$confirm = $_POST['confirm'];
$email = $_POST['email'];
$agree = $_POST['agree'];
Run Code Online (Sandbox Code Playgroud)
然后你检查$ username,$ password等是否isset().这将始终返回true(因为您刚刚初始化它们).你应该在$ _POST变量上执行if(isset())(IE不是你创建的变量).
因此,您的所有检查都将完美运行,因为您不会执行任何检查实际数据的检查(有效的电子邮件地址,最小/最大用户名长度等).
发现这样的问题的一种简单方法是将error_reporting设置为E_ALL.这将显示所有错误/警告/通知/等.如果您使用不存在/尚未设置的变量,则会发出警告.
一些快速点:
$errors_array而不是$errors$errors[] = "some_error".这将添加some_error到数组的末尾.| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |