2016-05-02 1 views
0

フォームフィールドを検証し、フォームデータをデータベースに挿入しようとしています。私のフォームは、すべてのフィールド値が正しいと送信ボタンを2回クリックした後に送信されます。実際にフォームフィールドは検証され、送信ボタンを1回クリックするとアクションが変更されます。アクションが設定されている場合、[送信]ボタンをクリックするとフォームが送信されます。フォームフィールドを検証し、サブミット時に一度クリックしてデータベースに挿入する方法

送信ボタンを1回クリックするだけでどのように送信することができますか?ここで

は別のファイル

<html> 
<head> 
    <title></title> 
</head> 
<body>  
<?php 
    $servername="localhost"; 
    $username="root"; 
    $password=""; 
    $conn = new mysqli($servername, $username, $password, 'mydatabase'); 
    if ($conn->connect_error) 
    { 
     die("Connection failed: " . $conn->connect_error); 
    } 
    $conn->query("CREATE DATABASE IF NOT EXISTS `MyDataBase`"); 
    $conn->query("CREATE TABLE IF NOT EXISTS MyDataBase.company_details(`comp_id` INT AUTO_INCREMENT PRIMARY KEY,`company_name` VARCHAR(50) NOT NULL,`address` VARCHAR(70) NOT NULL,`email` VARCHAR(30) NOT NULL,`contact` INT(13) NOT NULL,`description` VARCHAR(150))"); 
    $conn->query("INSERT INTO company_details (company_name, address, email, contact, description) VALUES ('".$_POST['companyName']."', '".$_POST['address']."', '".$_POST['email']."', '".$_POST['contact']."', '".$_POST['description']."')"); 
    $conn->close(); 
?> 
</body> 

である

<html> 
<head> 
    <title></title> 
    <style> .error {color:#ff0000;} </style> 
</head> 
<body> 
    <?php 
     $companyNameErr = $addressErr = $emailErr = $contactErr = ""; 
     $companyName = $address = $email = $contact = $description = ""; 
     function test_data($data) 
     { 
      $data=trim($data); 
      $data=stripslashes($data); 
      $data=htmlspecialchars($data); 
      return $data; 
     } 
     $errors = array(); 
     $valid=0; 
     if ($_SERVER["REQUEST_METHOD"] =="POST") 
     { 

      $companyName=$_POST["companyName"]; 
      if(empty($companyName)) 
      { 
       $companyNameErr = "Please Enter Company Name"; 
       $errors[]= $companyNameErr ; 
      } 
      else 
      { 
       if(!preg_match("/^[a-zA-Z ]*$/",$companyName)) 
       { 
        $companyNameErr = "Invalid Company Name"; 
        $errors[]= $companyNameErr ; 
       } 
       else 
       { 
        $companyName=test_data($companyName); 
        $valid++; 

       } 
      } 
      $address=$_POST["address"]; 
      if(empty($address)) 
      { 
       $addressErr = "Please Enter Address"; 
       $errors[]= $addressErr ; 
      } 
      else 
      { 
       $address=test_data($address); 
       $valid++; 
      } 
      $email=$_POST["email"]; 
      if(empty($email)) 
      { 
       $emailErr = "Please Enter Email"; 
       $errors[]= $emailErr ; 
      } 
      else 
      { 
       if(!filter_var($email, FILTER_VALIDATE_EMAIL)) 
       { 
        $emailErr = "Invalid Email"; 
        $errors[]= $emailErr ; 
       } 
       else 
       { 
        $email=test_data($email); 
        $valid++; 
       } 
      }  
      $contact=$_POST["contact"]; 
      if(empty($contact)) 
      { 
       $contactErr = "Please Enter Contact Number"; 
       $errors[]= $contactErr ; 
      } 
      else 
      { 
       if(!preg_match("/^[0-9]*$/",$contact)) 
       { 
        $contactErr = "Invalid Contact"; 
        $errors[]= $contactErr ; 
       } 
       else 
       { 
        $contact=test_data($contact); 
        $valid++; 
       } 
      } 
    } 
    if($valid==4) 
    { 

    } 
    ?> 
    <form name="myform" method="post" action="<?php if($valid < 4){ echo $_SERVER["PHP_SELF"]; }else{ echo "validate1.php"; }?>" > 
     <table> 
      <tr> 
       <td>Company Name</td> 
       <td><input type="text" name="companyName" value ="<?php if(isset($_POST['companyName']) && empty($companyNameErr)){ echo $_POST['companyName'];} else {echo '';}?>" required ><span class="error"><sup>*</sup><?php echo $companyNameErr; ?></span></td> 
      </tr> 
      <tr> 
       <td>Address</td> 
       <td><input type="text" name="address" value ="<?php if(isset($_POST['address']) && empty($addressErr)){ echo $_POST['address'];} else {echo '';}?>" required><span class="error"><sup>*</sup><?php echo $addressErr; ?></span></td> 
      </tr> 
      <tr> 
       <td>Email</td> 
       <td><input type="text" name="email" value ="<?php if(isset($_POST['email']) && empty($emailErr)){ echo $_POST['email'];} else {echo '';}?>" required><span class="error"><sup>*</sup><?php echo $emailErr; ?></span></td> 
      </tr> 
      <tr> 
       <td>Contact</td> 
       <td>+91-<input type="text" name="contact" value ="<?php if(isset($_POST['contact']) && empty($contactErr)){ echo $_POST['contact'];} else {echo '';}?>" required maxlength="10" minlength="10"><span class="error"><sup>*</sup><?php echo $contactErr; ?></span></td> 
      </tr> 
      <tr> 
       <td>Description</td> 
       <td><textarea name="description" cols="60" rows="3"></textarea></td> 
      </tr> 
     </table> 
     <input type="submit" name="submit" value="next>>"> 
    </form> 
</body> 

PHPコードとの接続を指定し、データベースに値を挿入、同じファイルの検証PHPスクリプトと私のhtmlコードであります

+0

私を助けなかった。問題は異なる –

答えて

1

そこにたくさんの素晴らしいフレームワークがあります数年前のような古い方法であなた自身の検証用のものを作成してください。 mvcは素晴らしいものです。

トピックに戻る

あなたの$有効なだけ実際のデータで提出に$ _POSTを持ってfirstcall .. に0になります。
フォームアクションはvalidate1.php です。php_sefは同じページなので、もしあればそれで何をしたいのか分かりません。 alsways validate1.phpになります。 実際にデータベースを挿入しますか?なぜデータベースの挿入は検証されません。 fromを出力する前にデータを挿入する前にバリデーションを行う必要があります。エラーがデータベースの更新を行わない場合、このメソッドは=ポストデータ

  • を検証する場合

    • : は、フィルタリングされていないPHP_SELFが安全ではないと

      データフローXSSことができます忘れてはいけません。

    • これ以外の場合は、検証エラーが出力されます。ただ誰もがページをリロードして再度提出することができるので、フォームは無用であるブロックするようにフォーム

    を表示するよう

  • は他に私たちは何のポストを持っていません。単にエラーを出力し、彼に別のチャンスを与えます。 ouがそれを無効にしたい場合は、アクセス制御が必要です。簡単に無効にしてユーザーに表示したい場合は、サブミットを無効にするか、アクションを#

    に入力してください。
  • 0

    問題は実行中の順序にあります。

    1. ユーザーがデータが再表示され、アクションがスクリプト
    2. は、送信ボタンを挿入することが指摘され、検証
    3. のために自己にデータを送信、スクリプト
    を挿入するためにデータを送信、フォームデータ
  • は、[送信]ボタンを入力します

    問題は3から4の間でユーザーはデータを変更し、検証をバイパスして別のデータを送信する必要があります。

    妥当性検査は、データベースクエリと同じスクリプトで実行する必要があります(はい、選択クエリの場合でも)。

    有効な場合は、有効な場合はデータベースのクエリを入力するか、データベースのクエリを使用して検証のチェックを入れます。次に、フォームの条件付きアクションを削除し、それを送信させます。

  • 0

    質問に問題が何であるか正確に説明しました。初めてページをレンダリングするときのアクションはPHP_SELFです。 $validの値に基づいてアクションを変更するには、送信ボタン(1回)をクリックする必要があります。それが完了したらもう一度submit(2回)をクリックすると、正常に送信できます。

    この問題を解決するには、フォームがvalidate1.phpに送信されないようにする必要があります。今、あなたはvalidate1.phpに提出されている

    <html> 
        <head> 
         <title></title> 
         <style> .error {color:#ff0000;} </style> 
        </head> 
        <body> 
         <form name="myform" method="post" action="validate1.php" > 
          <table> 
           <tr> 
            <td>Company Name</td> 
            <td><input type="text" name="companyName" value ="<?php if(isset($_POST['companyName']) && empty($companyNameErr)){ echo $_POST['companyName'];} else {echo '';}?>" required ><span class="error"><sup>*</sup><?php echo $companyNameErr; ?></span></td> 
           </tr> 
           <tr> 
            <td>Address</td> 
            <td><input type="text" name="address" value ="<?php if(isset($_POST['address']) && empty($addressErr)){ echo $_POST['address'];} else {echo '';}?>" required><span class="error"><sup>*</sup><?php echo $addressErr; ?></span></td> 
           </tr> 
           <tr> 
            <td>Email</td> 
            <td><input type="text" name="email" value ="<?php if(isset($_POST['email']) && empty($emailErr)){ echo $_POST['email'];} else {echo '';}?>" required><span class="error"><sup>*</sup><?php echo $emailErr; ?></span></td> 
           </tr> 
           <tr> 
            <td>Contact</td> 
            <td>+91-<input type="text" name="contact" value ="<?php if(isset($_POST['contact']) && empty($contactErr)){ echo $_POST['contact'];} else {echo '';}?>" required maxlength="10" minlength="10"><span class="error"><sup>*</sup><?php echo $contactErr; ?></span></td> 
           </tr> 
           <tr> 
            <td>Description</td> 
            <td><textarea name="description" cols="60" rows="3"></textarea></td> 
           </tr> 
          </table> 
          <input type="submit" name="submit" value="next>>"> 
         </form> 
        </body> 
    

    を、あなたが前に、フォームのの一番上に持っていたもののような検証を行うことができますので、これを行います。フォームがクリーンでデータベースに送信する場合は、データとフォームを再レンダリングし、エラーメッセージをvalidate1.phpに送信してもう一度お試しください。

    関連する問題