如果声明在Foreach循环中
我有一个php页面,我试图简化并遇到一些我无法单独通过的问题。我的表单将用户数据,发布到自身,验证字段已填写,然后将表单内容/帖子显示到mysql数据库。如果声明在Foreach循环中
我遇到的问题是,我不想让20个if()/ elseif语句将变量名加载到数组中,通过该数组循环,并且如果变量未在表单中填充,产生一条错误信息。不幸的是,无论字段是否有值,我的代码都会显示错误消息。
作为一个附加说明,我可以将$ ShippingCo添加到我的表单中并回显它,但是它尚未完成的通知仍显示出来。
此外,如果脚本输入if语句,我希望它在关闭后停止执行页面的其余部分我试过退出;没有成功。
以下是我有:
<?php
$ShippingCo = $_POST['ShippingCo'];
$ShipAcct = $_POST['ShipAcct'];
$ShipService = $_POST['ShipService'];
$FOB = $_POST['FOB'];
$Terms = $_POST['Terms'];
$ENote[] = '$Terms';
$ENote[] = '$FOB';
$ENote[] = '$ShippingCo';
$ENote[] = '$ShipAcct';
$ENote[] = '$ShipService';
$Emessg[] = 'Shipping Terms';
$Emessg[] = 'FOB Method';
$Emessg[] = 'Shipping Company';
$Emessg[] = 'Shipping Account';
$Emessg[] = 'Shipping Service Type';
foreach ($ENote as $a => $b) {
if(!$$ENote[$a]){ //I intentionally put the '$$' in this line otherwise none of the messages show. . . with data in the variables or not.
$error = "Error! Please Add the $Emessg[$a]!";
?>
<table width="800" align="center">
<tr>
<td align="center">
<h2>Sales Order Entry Form</h2>
</td>
</tr>
<tr>
<td align="center">
<h3>
<font color="red">
<?php
echo "$error";
?>
</font>
</h3>
</td>
</tr>
<tr>
<td align="center">
Please press back to properly complete the form</td>
</tr>
</table>
<?php
}
}
?>
预先感谢您。
我怀疑语法$$ENote[$a]
可能被解释为($$ENote)[$a]
而不是$($ENote[$a])
(括号不是合法的语法,仅供演示使用)。
所以我建议一个中间变量,否则复杂的语法:
foreach ($ENote as $a => $b) {
$varname = $ENote[$a];
if(!$$varname){
或(没有测试,只是凭直觉认为它可能工作):
foreach ($ENote as $a => $b) {
if(!${$ENote[$a]}){
完美。谢谢。 – user1459766 2012-07-14 00:11:59
你为什么不只是创建一个数组或所有的字段,并将该数组传递给函数,并在该函数中循环遍历每个项目,如果为空则抛出错误?
事情是这样的:
function checkEmpty($some_array) {
foreach($some_array as $key=>$value) {
if($value=="") {
or if(empty($key)) { ///throw error }
//put error message and exit
}
}
}
有几个问题在这里打球。
首先,每个$ENote
条目必须省略前导$
。 Variable variables不得包含$
部分。
$ENote[] = 'Terms';
$ENote[] = 'FOB';
...
其次,ctrahey说,你需要将变量名存储到一个变量,以便与其他$
将其展开。
这里有一些代码清理提示:
- 合并两个阵列成一个(地图)。
- 在循环内从
$_POST
分配给命名变量。使用break
退出循环。
这会消除很多冗余。
$ENote = array(
'Terms' => 'Shipping Terms',
'FOB' => 'FOB Method',
...
);
foreach ($ENote as $field => $title) {
$value = $$field = $_POST[$field];
if (!$value) {
... display error using $title ...
break; // exit loop
}
}
阿斯克尔知道,并且实际上是在利用它。 – 2012-07-13 23:37:34