数组总是以空的形式返回

时间:2009-04-14 10:34:54

标签: php arrays

下面是我的游戏注册表单,它正在查找用户可能已经完成的错误,但即使发现错误,它也不会将其添加到$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);
  }
}

6 个答案:

答案 0 :(得分:8)

首先你这样做:

$username = $_POST['username'];
$password = $_POST['password'];
$confirm = $_POST['confirm'];
$email = $_POST['email'];
$agree = $_POST['agree'];

然后你检查$ username,$ password等是否isset()。这将始终返回true(因为您刚刚初始化它们)。你应该在$ _POST变量上执行if(isset())(I.E.而不是你创建的变量)。

因此,所有检查都能完美运行,因为您不会检查实际数据(有效的电子邮件地址,最小/最大用户名长度等)。

发现这样的问题的一种简单方法是将error_reporting设置为E_ALL。这将显示所有错误/警告/通知/等。如果您使用不存在/尚未设置的变量,则会发出警告。

答案 1 :(得分:5)

一些快速点:

  • 在一个地方,您使用$errors_array代替$errors
  • 使用$errors[] = "some_error"时,不要在写入数组时使用索引。这会将some_error添加到数组的末尾。

答案 2 :(得分:2)

嗯,我要做的第一件事就是不按键解决你的数组问题。如果唯一的错误是没有电子邮件地址那么你真的希望唯一的错误被'2'索引吗?

最好用户$ error [] ='某事......“;

答案 3 :(得分:1)

尝试在创建时向您的阵列添加测试用例。

$errors = array('test'=>'Test');

然后,如果仅在print_r时收到此输出,则表示您的if语句无法按预期工作。

如果没有关于变量在输入时具有哪些值的更多信息,则难以调试。

也许可以转储$ _POST(print_r($ _ POST))以确保获得您认为的值。

答案 4 :(得分:1)

在一个地方你正在调用$ errors_array ['0'],你应该通过执行$ errors [] =“Foo”来添加到数组中;

2请查看Safe SQL

第3步检查if语句是否正在运行。将echo "1";放入每个if语句中(并为每个展示位置将该数字递增1。然后您可以看到实际运行的内容。(如果有的话))

答案 5 :(得分:-1)

解决了我自己的问题,我应该在我的if函数中使用“empty”而不是“!isset”。因为它们设置如下:

$username = $_POST['username'];
$password = $_POST['password'];
$confirm = $_POST['confirm'];
$email = $_POST['email'];
$agree = $_POST['agree'];

无论如何,谢谢你的帮助。