0

私は独学でPHPを教えているので、初心者のコーディングを許してください(笑)!

以下のコードは、作成したいフォームに対してほぼ完全に機能します。ユーザーが送信ボタンを押すたびに、フォームがすべて正しく入力されていれば、ページの上部に「電子メールが正常に送信されました」というテキスト メッセージが表示されます。必須フィールドのいずれかが不完全または無効な場合、対応する入力フィールドの下にエラー メッセージが返され、「電子メールが正常に送信されました」というメッセージは表示されません。これは、最後の if ステートメント (スパム対策) を除くすべてに対して適切に機能します。基本的に、スパム対策ボックスに正しい答え (3) を入力すると、他のフィールドが入力されているかどうかに関係なく、「電子メールが正常に送信されました」というメッセージが表示されます (他のフィールドは入力されていないため、これは実行されません)。正しく記入してください)。「メールは正常に送信されました」

'if ステートメント' が一番下にある場合は、同じ規則に従います (つまり、名前が if ステートメントの一番下にある場合、電子メールが正常に送信されたことを示すメッセージを表示するには、名前だけを正しく入力する必要があります)。最後の if ステートメントが true として渡されると、他のステートメントが機能しないように感じます。

<?php

if (isset($_POST['submit'])) {
$yourname = $_POST['yourname'];
$organisation = $_POST['organisation'];
$email_from = $_POST['email'];
$comments = $_POST['comments'];
$antispam = $_POST['antispam'];
$namestring = "/^[A-Za-z .'-]+$/";
$emailstring = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
$error_message_email = "";
$error_message_name = "";
$error_message_message = "";
$error_message_antispam = "";

if(!preg_match($namestring,$yourname)) {
  $error_message_name .= "Please enter a valid name";
}
if(!preg_match($emailstring,$email_from)) {
  $error_message_email .= "Please enter a valid e-mail address";
}
if(strlen($comments) < 4) {
  $error_message_message .= "Please enter a valid message";
}
if($antispam != "3") {
   $error_message_antispam .= "Please enter a valid answer";
}
else {
  echo "E-mail Sent Successfully";
} 
}
else { 
$yourname="";
$organisation="";
$email_from="";
$comments="";
$antispam="";
$error_message_email = "";
$error_message_name = "";
$error_message_message = "";
$error_message_antispam = "";
}   

?>


<form name="htmlform" method="post" action="ifandelse.php">
              <table width="650px">
              <tr>
                <td>
                  <label for="yourname"><font color="#ff0000">*</font>Name:</label>
                </td>
                <td>
                  <input  type="text" name="yourname" value="<?PHP echo$yourname;?>"        maxlength="50" size="40"><br>
                      <div class="warning">
                        <?php print $error_message_name;?>
                      </div>
                </td>
              </tr>

              <tr>
                <td>
                  <label for="organisation">Organisation:</label>
                </td>
                <td>
                  <input  type="text" name="organisation"  value="<?PHP echo$organisation;?>"maxlength="50" size="40">
                </td>
              </tr>

              <tr>
                <td>
                  <label for="email"><font color="#ff0000">*</font>E-mail Address:</label>
                </td>
                <td>
                  <input  type="text" name="email" value="<?PHP echo$email_from;?>" maxlength="80" size="40"><br>
                    <div class="warning">
                      <?php print $error_message_email;?>
                    </div>
                </td>
              </tr>

              <tr>
                <td valign="top">
                  <label for="comments"><font color="#ff0000">*</font>Message:<br></label>
                </td>
                <td>
                  <textarea name="comments" rows="8" cols="60"><?PHP echo$comments;?></textarea><br>
                    <div class="warning">
                      <?php print $error_message_message;?>
                    </div>
                </td>
              </tr>

              <tr>
                <td colspan="2">
                      <font color="#ff0000">*</font>To avoid unwanted spam, please answer the following question correctly: 2 + 1 = <input type="text" name="antispam" value="<?PHP echo$antispam?>" maxlength="100" style="width:30px"><br>
                    <div class="warning">
                      <?php print $error_message_antispam;?>
                    </div>
                </td>
              </tr>

              <tr>
                <td>
                </td>
                <td style="text-align:center;">
                  <input type="submit" class="formsubmit" name="submit" value="Submit Form">
                </td>
              </tr>

            </table>
          </form>

何人かの友人にこれを調べてもらいましたが、なぜこれが行われているのかまだわかりません. 「ifステートメント」を別の方法でネストしてみたり、ifステートメントをelse ifなどに変更したりしましたが、喜びはありません:(

フォーラムを調べましたが、自分に合った解決策が見つかりません。

4

2 に答える 2

0

else ステートメントは、last if and only に添付されます。したがって、成功メッセージが表示されるかどうかに関しては、最後の条件のみが重要です。チェックをチェーンする必要があります:

if (!preg_match($namestring, $yourname)) {
    $error_message_name .= "Please enter a valid name";
}
elseif (!preg_match($emailstring, $email_from)) {
    $error_message_email .= "Please enter a valid e-mail address";
}
elseif (strlen($comments) < 4) {
    $error_message_message .= "Please enter a valid message";
}
elseif ($antispam != "3") {
    $error_message_antispam .= "Please enter a valid answer";
} else {
    echo "E-mail Sent Successfully";
}

もちろん、これでも一度に 1 つのエラー メッセージしか表示されず、最適化には程遠いですが、それは別の問題です。

于 2013-05-04T12:28:31.240 に答える
0

変数を使用して、検証の最後にエラー (または複数) があったかどうかを確認する必要があります。一般的なアイデアを提供するための以下のコード:

$isError = false;  

if (!preg_match($namestring, $yourname)) {
    $error_message_name .= "Please enter a valid name";
    $isError = true;
}

if (!preg_match($emailstring, $email_from)) {
    $error_message_email .= "Please enter a valid e-mail address";
    $isError = true;
}

if (strlen($comments) < 4) {
    $error_message_message .= "Please enter a valid message";
    $isError = true;
}

if ($antispam != "3") {
    $error_message_antispam .= "Please enter a valid answer";
    $isError = true;
} 


if ($isError) {
    //do wathever you have to do
} else {
   //send mail
   echo "E-mail Sent Successfully";
}
于 2013-05-04T14:24:11.117 に答える