Foreach循环没有

时间:2013-07-30 17:56:56

标签: php loops foreach

$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 个答案:

答案 0 :(得分: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.");
  }
}

答案 1 :(得分: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

答案 2 :(得分: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中写下其他东西,但借用别人的时间测试登录代码进行数据库参数化,错误检查和抽象。编写自己的登录系统正在玩火。

答案 3 :(得分: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.");
  }