0

だから私はphpのフォームを検証しようとしています。

私の連絡フォームはあなたの典型的なフォームです

<form method="post" action="contact.php">
   <table class="contact">
     <tr>
      <th>
      <label for="name">Name</label>
      </th>
     <td>
      <input type="text" name="name" id="name">
     </td>
    </tr>   
    <tr>
     <th>
     <label for="email">Email</label>
   </th>
    <td>
     <input type="text" name="email" id="email">
   </td>
  </tr> 
  <tr>
   <th>
   <label for="message">Message</label>
   </th>
    <td>
    <textarea name="message" id="message"></textarea>
    </td>
   </tr>    
 </table>   
   <input type="submit" value="Send">       

これにphp検証を追加したいので、次を作成しました。

if (empty($_POST) === false) {
$errors = array();

$name       = $_POST['name'];
$email  = $_POST['email'];
$message    = $_POST['message'];

if(empty($name) === true || empty($email) === true || empty($message) === true) {
    $errors[] = 'Please fill out all the required forms!';
} else {
    if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
        $errors[] = 'Sorry please enter a valid email address';
    }
    if (ctype_alpha($name) === false) {
        $errors[] = 'Sorry, name must contain only letters!';
    }
}
print_r ($errors);

これを印刷しようとすると、配列にはフィールドに入力されているデータが表示され、すべての検証が正しく機能します。私が抱えている問題は、リスト内の配列をエコーアウトするためにphpを追加する次のステップです。

フォームの上に追加したコードは、検証の失敗に対して表示されたエラーを一覧表示することを想定したforeachループでした。

<?php 
if (empty($errors) === false) {
echo '<ul>';
foreach($errors as $error) {
echo '<li>' , $error ,'</li>';
}
echo '</ul>';
}   
?>

しかし、今の問題はこれです。フォームに入力するたびに、エラーはリストを生成せず、元の配列を生成するだけです。foreachが表示されていない場合です。

どんな提案や助けも素晴らしいでしょう!

みんなありがとう、

4

1 に答える 1

1
if (count($errors)) echo '<ul><li>'.implode('</li><li>', $errors).'</li></ul>';
else echo 'No errors';

これで「エラーなし」が表示されますか?

さておき、これを行う必要はありません

if(empty($name) === true)

empty($ name)はtrueまたはfalseのいずれかです。その後、それを真と比較する必要はありません。

if(empty($name))

完全に大丈夫です、そうでなければそれは尋ねるようなものです

if ((count(12)>0)==true)!=false) 

それはばかげているでしょう。そして実際に

if(empty($name.$email.$message)) 

文字数がはるかに少なく、同じ結果が得られます

if(empty($name) === true || empty($email) === true || empty($message) === true) 
于 2013-02-07T23:55:58.300 に答える