Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
首次提交后PHP表单验证不起作用_Php_Validation - Fatal编程技术网

首次提交后PHP表单验证不起作用

首次提交后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

我在我的网站上使用了一个联系人表单,并尝试使用PHP验证用户输入。它的问题是,尽管它会正确地验证输入,但如果您随后输入正确的详细信息并点击send,它不会做任何事情。我认为这是因为它没有在输入错误后执行
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>&nbsp; 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,但没有成功。这么简单的解决方案,谢谢!