0

Web サイトでお問い合わせフォームを使用しており、PHP を使用してユーザー入力を検証しようとしています。問題は、入力は正しく検証されますが、正しい詳細を入力して送信を押しても何も起こらないことです。これは、エラーが入力された後のステートメントの 2 番目の部分を実行していないためだと思いますが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>

ループに変更しwhileて、有効になるまで検証を行ってからメールを送信しようとしましたが、これもうまくいきませんでした。

4

1 に答える 1

1

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>";
    }
}
于 2013-09-02T11:44:20.570 に答える