2013-07-30 40 views
-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。任何人都知道什么是错的?Foreach循环不是

+3

为什么你首先需要'foreach'? –

+1

我没有看到你在代码中的任何地方使用变量用户名或密码。我只看到静态字符串“用户名”和“密码”。 – Lochemage

+0

$ inputname is = username,password,$$ inputname是$ username和$ password – user2635236

回答

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."); 
    } 
} 
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."); 
    } 
+0

我认为这是故意的... – StephenTG

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 
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中写入其他内容,但借用别人经过时间考验的登录代码来进行数据库参数化,错误检查和抽象。编写自己的登录系统正在玩火。

+0

即时通讯使用它的形式有15个输入字段 – user2635236

+0

@ user2635236这并不令我感到意外。我去过那儿。但登录表单不像其他任何形式。应该以最大的关心和特殊性对待它。在你的情况下,你正在使代码来决定你的应用程序的安全性,这些代码的复杂性和难度不会超出调试的必要。使用带有标准输入表单的白名单回路系统,为您的登录系统使用久经考验的第三方登录系统。 – Kzqai

+0

ok thx。但你能告诉我为什么我的方法如此糟糕吗?在任何重要事件发生之前我使用输入验证 – user2635236