私は独学で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などに変更したりしましたが、喜びはありません:(
フォーラムを調べましたが、自分に合った解決策が見つかりません。