我有一些用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>
答案 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;
}