2017-06-04 3 views
-2
if($_POST){ 



$errors = array(); 


//start validation 
if(empty($_POST['email'])){ 
    $errors['email1'] = "Your Email Cannot be empty"; 
} 

if (!filter_var(['email'], FILTER_VALIDATE_EMAIL)){ 
    $errors['email2'] = "Email not valid!"; 
} 


if(empty($_POST['phone'])){ 
    $errors['phone1'] = "Your Number Cannot be empty"; 
} 
if(strlen($_POST['phone']) < 8){ 
    $errors['phone2'] = "Your Phone Number must be at least 8 characters long"; 
} 

if(strlen($_POST['phone']) > 8){ 
    $errors['phone3'] = "Your Phone Number must be not more than 8 characters long"; 
} 

//check errors 
if(count($errors) == 0) 
{ 
    //redirect to home page 
    header("Location: index.php"); 
    exit(); 
} 
} 

これは検証が必要な私のコードです。バリデーションはうまくいきますが、ここに問題があります。PHPフォームでの検証とファイルへの保存

<div class="form-group"> 
      <label for="name">Email</label> 
      <input type="email" class ="form-control" name="email" id="email" placeholder="Enter Email"> 
      <p><?php if(isset($errors['email1'])) echo $errors['email1'];?></p> 
      <p><?php if(isset($errors['email2'])) echo $errors['email12'];?></p> 
     </div> 

     <div class="form-group"> 
      <label for="phone">Phone Number</label> 
      <input type="text" class ="form-control" name="phone" id="phone" placeholder="Enter Phone Number"> 
      <p><?php if(isset($errors['phone1'])) echo $errors['phone1'];?></p> 
      <p><?php if(isset($errors['phone2'])) echo $errors['phone2'];?></p> 
      <p><?php if(isset($errors['phone3'])) echo $errors['phone3'];?></p> 
     </div> 

私はファイルに保存するように設定されています。入力が検証され、エラーメッセージが表示されますが、間違った入力を持つフォームは引き続きファイルに保存されます。どんな助けでも感謝します。

<?php 
    if(isset($_POST['email']) && isset($_POST['phone']) && isset($_POST['enquiry'])){ 

     $email = $_POST['email']; 
     $phone = $_POST['phone']; 
     $enquiry = $_POST['enquiry']; 

     $file = "form.txt"; 


     $save = "Email: ".$email."\n". 
       "Phone: ".$phone."\n". 
       "Comment: ".$enquiry."\n"; 

     file_put_contents($file,$save, FILE_APPEND); 
} 
?> 
+0

をフォームファイルに保存されていますが、していないと言っていますそれを望んでいる?それとも、あなたはそれが欲しいのですか?また、私は2つのPHPファイルを参照してください:コードの最初のブロックと3番目の。 'index.php'はどちらですか?彼らは両方index.phpにありますか?あなたの質問のどこにでも '

'要素が表示されないので、全体が 'index.php'で、それ自体に提出するかどうかわかりません。また、あなたのHTMLセクションには '$ errors ['email12']'がありますが、他の場所では 'email12'です。 – Bing

+0

これは同じcontact.phpの2つのphpタグです。 1つはフォームの前にあり、もう1つは後です。私はPHPを使用してコードを検証しようとしています。検証はうまくいきます。入力が間違っている場合はindex.phpにリダイレクトされません。正しい入力がある場合はそのまま返します。問題は、間違ったものを入力してsubmitを押すと、エラーメッセージがポップアップするが、間違った投稿はまだテキストファイルに入れられるということです。またemail2は、最初のphpタグの検証フォームにあります。 – frag

答えて

0

コメントに基づいて、有効なデータのみがファイルに保存されます。

しかし、あなたのPHPのチェックがすべての値が、ここで、設定されているかどうかを確認するために探しています:

if(isset($_POST['email']) && isset($_POST['phone']) && isset($_POST['enquiry'])) { 

あなたが唯一の有効なデータが存在することを確認するためにチェックすることを変更する場合は、あなたが良いだろう。 && count($errors) == 0を簡単に追加すると(ファイルの構造を理解していれば)それを行うことができます。

だからこれと上記のその行を置き換える:

if(isset($_POST['email']) && isset($_POST['phone']) && isset($_POST['enquiry']) && count($errors) == 0) { 

だからあなたのファイルは、このようなものになります。

....PHP code above here.... 

    //check errors 
    if(count($errors) == 0) 
    { 
      if(isset($_POST['email']) && isset($_POST['phone']) && isset($_POST['enquiry'])){ 

       $email = $_POST['email']; 
       $phone = $_POST['phone']; 
       $enquiry = $_POST['enquiry']; 

       $file = "form.txt"; 

       $save = "Email: ".$email."\n". 
         "Phone: ".$phone."\n". 
         "Comment: ".$enquiry."\n"; 

       file_put_contents($file,$save, FILE_APPEND); 
     } 

     //redirect to home page 
     header("Location: index.php"); 
     exit(); 
    } // end count($errors) == 0 check 
} // end if($_POST) check 
?> 

<div class="form-group"> 
     <label for="name">Email</label> 
     <input type="email" class ="form-control" name="email" id="email" placeholder="Enter Email"> 
     <p><?php if(isset($errors['email1'])) echo $errors['email1'];?></p> 
     <p><?php if(isset($errors['email2'])) echo $errors['email12'];?></p> 
    </div> 

....HTML code continues here.... 
+0

トップのPHPタグからif(count($ errors)== 0)を削除する必要がありますか? – frag

+0

それはあなたが何をしたいかによって異なります。データを印刷した後にヘッダーのリダイレクトを行うことはできないので、VALID出力をファイルに保存した後で 'index.php'にリダイレクトしたいのであれば、実際に' /へリダイレクトするホームページのコメント行。そうすれば、それはまだファイルに書き込むだけで、成功するとリダイレクトされます。 – Bing

+0

'echo'、' print'、 'var_dump'などを使って(ファイルではなくクライアントに)何かを印刷しようとすると、この問題が発生します:https://stackoverflow.com/questions/8028957/foo-to-fix-headers-already-sent-error-in-php – Bing

関連する問題