1

我有一些用 php 编写的代码来验证表单中的邮政编码字段。该代码旨在检查该字段是否为空(强制)并且与 5 个可用的邮政编码之一匹配,如果不是则显示警报。我遇到的问题是,当我将字段留空并点击提交按钮时,会显示正确的警报,但是如果我输入错误的值并点击提交,表单只会加载到空白屏幕,任何人都可以在我的代码中发现错误? :

 <?php

 if (isset($_POST['submit'])) {

$post = $_POST["post"];
$words = array('2747','2750','2753','2760','2777');
$msgp = "";

if (!empty($post)) {
foreach ($words as $item)
{
    if (strpos($post, $item) !== false)
        return true;
}
$msgp = '<span class="error"><b>Please enter correct postcode</b></span>';
return false;

} else if(empty($post)) {
$msgp = '<span class="error"><b>Please enter postcode</b></span>';
}

}

?>

<form name="eoiform" method="POST" action="<?php echo $_SERVER["PHP_SELF"];?>" id="eoi">

<b>Post Code</b>
<br>
<input type="text" id="post" name="post" /><?php echo $msgp; ?>

</form>
4

5 回答 5

3

return? 返回哪里?

当您返回主代码时,它(几乎)与 die()'ing 相同。

所以当你返回时,剩下的 PHP 将不再执行。

我会考虑设置一些变量,$success = true/false;而不是返回。

于 2013-05-31T10:50:53.897 回答
2

之后您返回 false,$msgp = '<span class="error"><b>Please enter correct postcode</b></span>';因此您不会继续使用下面的表格...从您的代码中删除返回,以便能够处理并显示错误。

于 2013-05-31T10:50:32.970 回答
1

您正在使用return. 你在一个function() {}?如果是这样,您的所有变量都在函数范围内。您可以global $msgp;使变量在函数外部可访问。

如果不是......那么你不应该使用return.

于 2013-05-31T10:51:09.083 回答
0

将php代码更改为

<?php

if (isset($_POST['post'])) {
$post = intval($_POST["post"],0);
$words = array(2747,2750,2756,2760,2777);
$msgp = '<span class="error"><b>'.in_array($post,$words) ? "Please enter postcode" : "Please enter correct postcode" .'</b></span>';
}

有很多事情可以简化。例如作为 int 数组和使用in_array()函数的代码。Return 语句应该用于在全局范围内使用它从方法/函数返回某些内容,然后结束当前脚本文件的执行。这里没有必要。如果有更多 $words 值,您应该考虑使用简单的 REGEX/[0-9]{4}/preg_match()

于 2013-05-31T10:55:31.943 回答
0

你想显示$msgp对吗?使用echo $msgp;. 但是您可以在代码中无处返回。(把它放在一个函数中)。

尝试这个

<?php        
$post = $_POST["post"];
$words = array('2747','2750','2753','2760','2777');
$msgp = "<span class='error'><b>Please enter correct postcode</b></span>";
function check($post){
  global $words;
  $return=true;
  if (!empty($post)) {
      foreach ($words as $item)
      {
          if (strpos($post, $item) !== false)
              //$return=true;
      }

  } else if(empty($post)) {
      $return=false;
  } 
  return $result;
}

$return=check($post);
if($return === true){
// echo you are right!
}
else {
    echo $msgp;
}
于 2013-05-31T11:00:24.680 回答