所以,我有这个代码似乎正在正确地进行机械工作,如果表单中的一个或多个字段留空,则避免在表上写入,但回声和消息不能正常工作:
解决问题的方法: 我不相信这对任何人都有用,但只是为了记录,解决方案很简单:
$campos = array('nome','morada','email','telemovel','codigopostal','vat');
foreach ($campos as $key => $campo) {
$campos[$key] = $_GET[$campo];
if(!isset($_GET[$campo])|| empty($_GET[$campo])){
header("Location: ../index.php?erro=".$campo);
$verifica=FALSE;
die();
}else{
$verifica=TRUE;
}
}
这会给我一些问题,不是我真正想要的,而是解决了我遇到的逻辑问题。谢谢大家。
$campos = array('nome','morada','email','telemovel','codigopostal','vat');
foreach ($campos as $key => $campo) {
$campos[$key] = ($_GET[$campo]);
while(list($key, $campo)= each($campos))
if(!isset($_GET[$campo])|| $_GET[$campo]==""){
echo("não preencheu um dos campos");
$verifica = FALSE;
die();
}else{
echo $_GET[$campo]." \r\n";}
$verifica = TRUE;
}
if($verifica==TRUE){
some irrelevant code.
}
正如我所说的,代码本身运行完美,但如果我只在表单上留下2个空字段,那么即使变量$ verifica设置为FALSE,echo $ _GET [$ campo]也会正常工作
提示:
其中一个字段是让代码失败,是第二个,所以,如果我这样做:
../phcexport.php?nome=myname&morada=&codigopostal=postcode&email=@.com&vat=123123&telemovel=00800
并且忽略数组中的第二个值,代码将像魅力一样工作,我可以尝试尽可能多的组合,只要我将第二个字段留空,它将正常工作,给我错误“一些字段是空的“,在这种情况下,我知道它是,”morada“是空的,如果我在代码填写它说”它确定,所有填写“但”morada“应该是最后填写所以代码有效。有趣......(我很抱歉所有的文字来描述这个问题,我是葡萄牙语)
EDIT2:对于其余的代码,我需要使用$ campos [$ key],因此将数组的键属性设为基本。
答案 0 :(得分:1)
而不是$_GET[$campo]==""
,您可以使用empty函数:
empty($_GET[$campo])
这应解决与不同数据类型相关的所有问题。
你也可能遇到问题,因为你在两个不同的循环中使用了一个名为$campo
的变量,尝试在while循环中更改变量名称以查看它是否更好。
答案 1 :(得分:1)
检查导致错误行为的$ campo的确切值,然后查阅此表以确保使用正确的比较
http://www.php.net/manual/en/types.comparisons.php#types.comparisions-loose
答案 2 :(得分:1)
问题是您重置了$verifica
中的else
。因此,无论您将其设置为FALSE
,最后一次foreach迭代都将确定结果。但是你可以“简化”整个方法:
$verify = array_search(0, array_map("strlen", $campos)) === false;
这只是检查每个数组条目的字符串长度。如果它们都不是0
,那么表达式将为true
返回$verify
;
答案 3 :(得分:1)
尝试以下解决方案,空字段无法通过测试
<?php
$campos = array('nome', 'morada', 'email', 'telemovel', 'codigopostal', 'vat');
$verifica = TRUE;
foreach ($campos as $campo) {
if (!isset($_GET[$campo]) || empty($_GET[$campo])) {
echo "não preencheu um dos campos" ;
$verifica = FALSE;
break;
} else {
echo $_GET[$campo] ."\r\n";
}
}
if ($verifica == TRUE) {
// some irrelevant code.
} else {
die();
}