-2
$inputarray=array("username", "password");  

foreach($inputarray as $inputkey);
  if(isset($_POST[$inputkey]) && !empty($_POST[$inputkey]))
  {
    $inputname=$inputkey;
    $inputresult=$_POST[$inputkey];
    $$inputname=$inputresult;
  }
  else
  {
    die("You have to fill both fields.");
  }

$username没有被定义,只有$password. 有谁知道怎么了?

4

4 回答 4

1

这只是一个错字:

foreach($inputarray as $inputkey);

您在该行的末尾包含了一个分号,因此 foreach 语句运行,然后结束,然后 if 子句在 foreach 语句留在的最后一个值上执行$inputkey

尝试:

foreach($inputarray as $inputkey)
{
  if(isset($_POST[$inputkey]) && !empty($_POST[$inputkey]))
  {
    $inputname=$inputkey;
    $inputresult=$_POST[$inputkey];
    $$inputname=$inputresult;
  }
  else
  {
    die("You have to fill both fields.");
  }
}
于 2013-07-30T18:02:37.780 回答
1

错误可能是由于;在 foreach 行的末尾。这将导致 foreach 行运行到完成,但不会运行任何其他语句,因为它后面没有外壳。完成后,$inputkey 的值将"password"是您仅从中获取数据的原因"password"

尝试:

$inputarray=array("username", "password");  

foreach($inputarray as $inputkey) {
   if(isset($_POST[$inputkey]) && !empty($_POST[$inputkey])) {
      $inputname=$inputkey;
      $inputresult=$_POST[$inputkey];
      $$inputname=$inputresult;
  } else {
     die("You have to fill both fields.");
  }
} //endforeach
于 2013-07-30T18:05:21.957 回答
1

变量变量是一种代码味道,你让自己很难受。在这个阶段,为了登录页面的特定目的,我不会这样做,而是尽可能让生活变得简单、易读和不复杂。

只需这样做:

$username = @$_POST['username']; // Just about the only place where using @ is ok.
$password = @$_POST['password'];
if(!trim($username) || !trim($password)){
    die("You have to fill both fields.");
}

登录表单不是创新或使代码复杂化的地方。为了增加一点抽象,您可以将该信息放入一个简单的登录验证函数中,以便您可以修改标准(例如,用户名必须长于 1 个字符,或其他)。

但是通过查看您的代码,您犯了一个经典错误:

第一次不要滚动您自己的登录系统

重用专家的登录代码并从中学习。用自定义php写其他东西,但是借用别人经过时间考验的登录代码进行数据库参数化、错误检查和抽象。编写自己的登录系统是在玩火。

于 2013-07-30T18:05:46.373 回答
0

看起来您正在将字符串名称分配$inputkey给该值。此外,您正在创建您可能永远不会在代码中找到的动态变量。

$inputarray=array("username", "password");  

foreach($inputarray as $inputkey=>$inputvalue);
  if(isset($_POST[$inputkey]) && !empty($_POST[$inputkey]))
  {
    $inputname=$inputkey;
    $inputresult=$_POST[$inputkey];
    $inputname=$inputresult;
  }
  else
  {
    die("You have to fill both fields.");
  }
于 2013-07-30T18:02:39.657 回答