$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
。谁知道什么是错的?
答案 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.");
}