我需要一些特定的东西来使标头定位功能正常工作吗?

时间:2019-01-21 19:19:55

标签: php header

由于某种原因,我的代码即使看起来正确也跳过了几部分。该代码仅执行最后一个标头函数。问题似乎出在这些标题上。如何进行这项工作?

<?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;

1 个答案:

答案 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;

这样做会更好,更有效的原因是,一旦检测到错误,您将停止所有操作,从而避免浪费处理。

还建议这样做,因为如果服务器的速度比网络连接的速度快,则服务器将继续运行并覆盖标头函数的代码。当我在其他网络上进行测试时,这种情况就发生了。

如果您想知道所有错误,那么我建议您创建一个错误数组并用错误填充它,然后检查它是否为空并相应地重定向。