数字PHP验证?

时间:2013-05-31 10:47:09

标签: php forms validation numeric

我有一些用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>

5 个答案:

答案 0 :(得分:3)

return?回到哪里?

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

因此,当您返回时,剩余的PHP将不再执行。

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分: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 statement应该用于在全局范围内使用它返回方法/函数中的某些内容,然后结束当前脚本文件的执行。这里没有必要。如果有更多$ words值,您应该考虑使用简单的REGEX /[0-9]{4}/preg_match()

答案 4 :(得分: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;
}