0

名前と電子メールを入力するフォームがあります。入力ごとに専用のエラーメッセージを表示したい - fx 名前が書かれていない場合は表示され"please write your name!" 、電子メールが見つからないか有効でない場合はエコーが表示される"wrong mail - try again!"

現時点では、両方の状況でエコーするエラー メッセージが 1 つしかありません。各入力に専用のエラー メッセージを割り当てるにはどうすればよいですか?

コードは次のとおりです。

    <?php
//If the form is submitted
if(isset($_POST['submit'])) {

    //Check to make sure that the name field is not empty
    if(trim($_POST['contactname']) == '') {
        $hasError = true;
    } else {
        $name = trim($_POST['contactname']);
    }

    //Check to make sure sure that a valid email address is submitted
    if(trim($_POST['email']) == '')  {
        $hasError = true;
    } else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
        $hasError = true;
    } else {
        $email = trim($_POST['email']);
    }

    //If there is no error, send the email
    if(!isset($hasError)) {
        $emailTo = '#@gmail.com'; //Put your own email address here
        $body = "Name: $name \n\nEmail: $email \n\nComments:\n $comments";
        $headers = 'From: My Site <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;

        mail($emailTo, $subject, $body, $headers);
        $emailSent = true;
    }
}
?>


    <article class="kontakt">                    
         <?php if($_POST['contactname'] != '') { //echo when a name was entered ?> 
                <!--<p> Hello </p>-->
         <?php  $name = strip_tags(trim($_POST['contactname']));
               echo  $name; 
          } ?>  
    </article>


    <article class="kontakt">   

         <?php if(isset($hasError)) { // THIS PART IS ECHOED IN BOTH SITUATIONS - should only apply for error in e-mail?>
            <p class="error"> Your mail is <span style="color: orange"> not correct</span> - try again! </p>
        <?php } ?>  


        <?php if($_POST['email'] != '') { // echo when a valid mail was entered ?> 
              <p> Hello </p>
        <?php   $name = strip_tags(trim($_POST['email']));
             echo  $email; 
        } ?>     
    </article>

    <article class="kontakt">  
        <?php if(isset($emailSent) && $emailSent == true) { //If email is sent ?>
            <p> Your message is sent !</p>
        <?php } ?>       
    </article>

}
?>
4

3 に答える 3

0

各入力を個別のコードで処理します。つまり、ここにはあまりデータ構造がありません。

通常、入力や関連するエラーや値の何らかのモデルは、フォームで作業を行うのに役立ちます。

通常、個々の PHP スクリプトで非常にうまく機能する軽量のエントリは、HTML_QuickForm2.

個々のエラー メッセージも処理します。当然のことながら、自分でそれを書くことができます。幸運なことに、それはフリー ソフトウェアであるため、コードを調べてそこから学ぶことができます。

于 2013-09-07T22:08:02.177 に答える
0

次のようなものを試してください:

if(trim($_POST['contactname']) == '') {
    $hasError['contactname'] = 'Please enter a contact name!';
} else {
    $name = trim($_POST['contactname']);
}

//Check to make sure sure that a valid email address is submitted
if(trim($_POST['email']) == '')  {
    $hasError['email'] = 'Please enter email!';
} else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
    $hasError['validemail'] = 'Please enter valid email';
} else {
    $email = trim($_POST['email']);
}

そしてこれはエラーを表示します:

if(isset($hasError)){
    echo '<ul>';
    foreach($hasError as $error){
        echo '<li>'.$error.'</li>';
    }
    echo '</ul>';
}

これにより、エラー時に古い値が保持されます

<div class="right_wrap">
<div class="header"> <h5><span style="color: white"> mail </span></h5> </div>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="contactform">

        <article class="kontakt">
            <label for="name"> Dit navn </label>
            <input type="text" name="contactname" id="contactname" value="<?php echo $_POST['contactname']; ?>" class="" />
        </article>

        <article class="kontakt">
            <label for="email"> Din mail </label>
            <input type="text" name="email" id="email" value="<?php echo $_POST['email']; ?>" class="required email" />
        </article> 

        <article class="kontakt" style="height: auto">
            <label for="message"> Din besked </label>

            <textarea rows="5" cols="50" name="message" class="required"><?php echo $_POST['message']; ?></textarea>
        </article>

        <article class="kontakt">
            <input type="submit" value="Send besked" name="submit" class="button"/>
        </article>
    </form>          
</div> <!--end of right_wrap -->
于 2013-09-07T22:09:02.707 に答える
0

これが実際のフォームです - いくつかのデンマーク語の単語が含まれています。どんなエラー/メッセージも左ラップ div に出力されるため、実際のフォーム内に配置することはできません。

<div class="right_wrap">
<div class="header"> <h5><span style="color: white"> mail </span></h5> </div>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="contactform">

        <article class="kontakt">
            <label for="name"> Dit navn </label>
            <input type="text" name="contactname" id="contactname" value="" class="" />
        </article>

        <article class="kontakt">
            <label for="email"> Din mail </label>
            <input type="text" name="email" id="email" value="" class="required email" />
        </article> 

        <article class="kontakt" style="height: auto">
            <label for="message"> Din besked </label>

            <textarea rows="5" cols="50" name="message" class="required"></textarea>
        </article>

        <article class="kontakt">
            <input type="submit" value="Send besked" name="submit" class="button"/>
        </article>
    </form>          
</div> <!--end of right_wrap -->
于 2013-09-07T23:27:45.893 に答える