Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组总是返回为空_Php_Arrays - Fatal编程技术网

Php 数组总是返回为空

Php 数组总是返回为空,php,arrays,Php,Arrays,下面是我的游戏注册表,它正在查找用户可能犯下的错误,但即使发现错误,它也不会将其添加到$errors数组中。当Iprint\r数组时,它返回空 我相信if函数出了问题,因为如果我从if函数的外部向数组中添加一个值,它就会添加它 这是我的密码: if (isset($_GET['action'])){ db_connect(); db_select(); if ($_GET['action'] == "register"){ $username = $_POST['username'];

下面是我的游戏注册表,它正在查找用户可能犯下的错误,但即使发现错误,它也不会将其添加到
$errors
数组中。当I
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);
  }
}

尝试在创建时将测试用例添加到阵列中

$errors = array('test'=>'Test');
然后,如果您仅在打印时收到此输出,您就知道您的if语句没有按预期工作

如果没有关于变量在条目上的值的更多信息,那么很难进行调试


可能要转储$\u POST(print\r($\u POST))以确保获得您认为是的值。

好吧,我要做的第一件事不是按键寻址数组。如果唯一的错误是没有电子邮件地址,那么您真的希望唯一的错误被“2”索引吗

最好是用户$error[]=“Something…”;

一些快速要点:

  • 在一个地方,您使用
    $errors\u array
    而不是
    $errors
  • 写入数组时不要使用索引,而是使用
    $errors[]=“some_error”
    。这将在数组末尾添加
    some_error

在您调用$errors_array['0']的一个地方,您应该通过执行$errors[]=“Foo”将其添加到数组中

第二,请调查

第三,检查假设条件语句是否正在运行。将
echo“1”
放入每个假设条件语句中(并将每个位置的数字增加1。然后您可以看到实际运行的是什么(如果有))

首先,您要执行以下操作:

$username = $_POST['username'];
$password = $_POST['password'];
$confirm = $_POST['confirm'];
$email = $_POST['email'];
$agree = $_POST['agree'];
然后检查$username、$password等是否为isset()。这将始终返回true(因为您刚刚初始化了它们)。您应该对$\u POST变量(即不是您创建的变量)执行if(isset())

因此,您的所有检查都将非常有效,因为您不会执行任何检查实际数据(有效电子邮件地址、最小/最大用户名长度等)的检查


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

解决了我自己的问题,我应该使用“空”not!我的if函数中的isset。因为它们的设置如下所示:

$username = $_POST['username'];
$password = $_POST['password'];
$confirm = $_POST['confirm'];
$email = $_POST['email'];
$agree = $_POST['agree'];
无论如何,感谢您的帮助。

这是问题的补充(编辑)或对解决方案/问题的评论。但绝对不是答案。