首次提交后PHP表单验证不起作用
我在我的网站上使用了一个联系人表单,并尝试使用PHP验证用户输入。它的问题是,尽管它会正确地验证输入,但如果您随后输入正确的详细信息并点击send,它不会做任何事情。我认为这是因为它没有在输入错误后执行首次提交后PHP表单验证不起作用,php,validation,Php,Validation,我在我的网站上使用了一个联系人表单,并尝试使用PHP验证用户输入。它的问题是,尽管它会正确地验证输入,但如果您随后输入正确的详细信息并点击send,它不会做任何事情。我认为这是因为它没有在输入错误后执行if语句的第二部分,但我不确定如何修复它。下面是我目前使用的代码 <?php error_reporting(E_ALL ^ E_NOTICE); function fix_string($var) { if(get_magic_quotes_gpc()) $var = s
if
语句的第二部分,但我不确定如何修复它。下面是我目前使用的代码
<?php
error_reporting(E_ALL ^ E_NOTICE);
function fix_string($var)
{
if(get_magic_quotes_gpc()) $var = stripslashes($var);
$var = strip_tags($var);
return $var;
}
{
$details = array('name' => fix_string($_POST['name']),
'email' => fix_string($_POST['email']),
'number' => fix_string($_POST['number']),
'message' => fix_string($_POST['message']));
}
$send = $_POST['send'];
$message = "";
$email = $details['email'];
foreach ($details as $field => $detail)
$message .= ucfirst($field) . ": " . $detail . "\r\n";
$to = "smokey.12345@hotmail.co.uk";
$subject = "Website contact form";
$message = wordwrap($message, 70, "\r\n");
$headers = 'From: ' .$email . "\r\n" .
'Reply-To: ' .$email . "\r\n" .
'X-Mailer: PHP/' . phpversion();
function trim_value(&$value)
{
$value = trim($value);
}
array_walk($details, 'trim_value');
if ($send)
{
foreach ($details as $field => $detail)
{
if (empty($detail) && $field!='number')
echo "<p class='error'>Please fill in the required field: " . ucfirst($field) . "<br /></p>";
}
if (!is_numeric($details['number']))
echo "<p class='error'>Please enter a valid telephone number</p>";
}
else
{
mail($to, $subject, $message, $headers);
echo "<p class='success'>Thank you for your message, you will receive a response shortly.</p>";
}
?>
<div id="contactform">
<form action="" method="post">
<fieldset>
<label for="name">Name:<span class="star">*</span></label> <br />
<input type="text" name="name" id="name" placeholder="Enter your name" maxlength="50" required />
<label for="email">Email:<span class="star">*</span></label> <br />
<input type="email" name="email" id="email" placeholder="Enter your email address" maxlength="100" required />
<label for="number">Telephone: </label><input type="tel" name="number" id="number" placeholder="Enter your phone number" maxlength="12" />
<label for="message">Message:<span class="star">*</span></label>
<textarea name="message" id="message" placeholder="Enter your message" cols="54" rows="5" required></textarea>
<p class="small"><span class="star">*</span> Denotes a required field </p>
<input type="submit" id="send" name="send" value="Send" />
</fieldset>
</form>
能否尝试将if($send){}块更改为以下内容并进行测试
if ($send) {
$bHasError = false;
foreach ($details as $field => $detail) {
if (empty($detail) && $field!='number') {
echo "<p class='error'>Please fill in the required field: " . ucfirst($field) . "<br /></p>";
$bHasError = true;
}
}
if (!is_numeric($details['number'])) {
echo "<p class='error'>Please enter a valid telephone number</p>";
$bHasError = true;
}
if (!$bHasError) {
mail($to, $subject, $message, $headers);
echo "<p class='success'>Thank you for your message, you will receive a response shortly.</p>";
}
}
if($send){
$bHasError=false;
foreach($field=>$detail形式的详细信息){
if(空($detail)&$field!='number'){
echo“请填写必填字段:“.ucfirst($field)。”
”;
$bHasError=true;
}
}
如果(!是数字($details['number'])){
echo“请输入有效的电话号码”
;
$bHasError=true;
}
如果(!$bHasError){
邮件($to、$subject、$message、$headers);
echo“谢谢您的留言,您很快就会收到回复。
”;
}
}
是的,它起作用了。我尝试了类似的方法,但我在if语句之外设置了$bhaserror,并使用了elseif,但没有成功。这么简单的解决方案,谢谢!