由于某种原因,我的代码即使看起来正确也跳过了几部分。该代码仅执行最后一个标头函数。问题似乎出在这些标题上。如何进行这项工作?
<?php
$values = [
'orderperson',
'address',
'postnumber',
'city',
'phone',
'email'
];
$shipvalues = [
'recipient',
'address1',
'postnumber1',
'city1',
'phone1',
'email1'
];
foreach($values as $value) {
if(empty($_POST[$value])) {
header("Location: http://example.com?errors=true");
}
}
if (array_key_exists("checkbox", $_POST) && !empty($_POST['checkbox'])) {
foreach ($shipvalues as $shipvalue) {
if(empty($_POST[$shipvalue])) {
header("Location: http://example.com?errors=true");
}
}
}
header("Location: http://example.com");
exit;
答案 0 :(得分:1)
以下代码应该起作用:
<?php
$values = [
'orderperson',
'address',
'postnumber',
'city',
'phone',
'email'
];
$shipvalues = [
'recipient',
'address1',
'postnumber1',
'city1',
'phone1',
'email1'
];
foreach($values as $value) {
if(empty($_POST[$value])) {
header("Location: http://example.com?errors=true");
exit;
}
}
if (array_key_exists("checkbox", $_POST) && !empty($_POST['checkbox'])) {
foreach ($shipvalues as $shipvalue) {
if(empty($_POST[$shipvalue])) {
header("Location: http://example.com?errors=true");
exit;
}
}
}
header("Location: http://example.com");
exit;
这样做会更好,更有效的原因是,一旦检测到错误,您将停止所有操作,从而避免浪费处理。
还建议这样做,因为如果服务器的速度比网络连接的速度快,则服务器将继续运行并覆盖标头函数的代码。当我在其他网络上进行测试时,这种情况就发生了。
如果您想知道所有错误,那么我建议您创建一个错误数组并用错误填充它,然后检查它是否为空并相应地重定向。