2017-09-27 9 views
0

私はまだPHPとフォームの検証には新しいです。私は現在、データベースにデータを送信する前に検証する更新フォームを作成しようとしています。これまでは、フォームを送信するときにデータベースのデータを更新することに成功しました。PHP:データベースに提出する前に、更新フォームでデータを検証してください。

しかし、私はデータを検証し、フォームフィールドのいくつかが空白のままであれば、4つのフィールドが入力され、空白でないことを確認しようとしています。以前のフォームで

私は以下のスクリプトにフォーム検証で追加を開始しましたが、これはデータベースに新しいデータを追加するのにうまく使用したスクリプトです。私は、私がUPDATEクエリのために働かせるために変更する必要があるものの周りに私の頭を包み込むのに苦労している。事前に感謝します

フォームで私が更新する必要がある唯一のフィールドは、説明、img_path、場所と支払いです。

<?php 

    $mysqli = new mysqli("localhost", "root", "", "etrading"); 

    session_start(); //start session 

    //Check that a product ID is specified for the page 
    if (isset($_GET['ItemID'])) { 
     $productID = $_GET['ItemID']; 

    }else{ 
    header("Location: index.php"); 
    } 

if (isset($_POST['Name'])) { 
    $Name = $_POST['Name']; 
    $Description = $_POST['Description']; 
    $img_path = $_POST['img_path']; 
    $Quantity = $_POST['Quantity']; 
    $Category = $_POST['Category']; 
    $Location = $_POST['Location']; 
    $Saletype = $_POST['Saletype']; 
    $Price = $_POST['Price']; 
    $Duration = $_POST['Duration']; 
    $Payment = $_POST['Payment']; 


$updateQuery = "UPDATE item SET Description = '$Description', img_path = '$img_path', Location = '$Location', Payment = '$Payment' WHERE ItemID= $productID"; 

    $mysqli->query($updateQuery); 
    echo ("Product successfully updated"); 
    } 


$query = "SELECT * FROM item WHERE ItemID = $productID"; 
    $result = $mysqli->query($query); 

if($result->num_rows > 0) { 
    $data = $result->fetch_array(MYSQLI_BOTH); 


//prepare input data in an array 
$updatedata = array($Description, $img_path, $Location, $Payment); 

//prepare error list 
$errors = array(); 

//Validation tests and store list 
    if ($Description == "" || $img_path == "" || $Location == "" || $Payment == "") { 
    array_push($errors, "All form fields must be filled out before submitting."); 
    } 
    //if errors redirect back to form page and save attempted data. 
    if (count($errors) > 0) { 
     $_SESSION['updatedata'] = $updatedata; 
     $_SESSION['errors'] = $errors; 

    header("Location: ../edit.php"); 
     }else{ 
     unset($_SESSION['updatedata']); 
     unset($_SESSION['errors']); 
    } 

    if(isset($_SESSION['errors'])) { 
    $errors = $_SESSION['errors']; 

    for ($errorCount = 0; $errorCount < count($errors); $errorCount++) { 
    echo ("<p class='error'>Error: " . $errors[$errorCount] . "</p>"); 
    } 
    } 

?> 


    <div id="form"> 
    <h2> Edit Product </h2> 
    <form action="edit.php?ItemID=<?php echo $productID; ?>" method="POST" > 
     <fieldset> 
      <h4>Sell Your Item</h4> 
      <p><label class="title" for="Name">Name:</label> 
      <input type="text" placeholder="<?php echo $data['Name']; ?>" name="Name" id="Name" title="Please enter item name" 
      readonly ><br /> 

      <label class="title" for="Description">Description:</label> 
      <textarea name="Description" rows="5" cols="33" placeholder="<?php echo $data['Description']; ?>" id="Description" title="Please describe your item" ></textarea><br /> 


      <img src="../img/<?php echo $data['img_path']; ?>" /> 
      <br> 


      Select image to upload: 
      <input type="file" name="img_path" placeholder="<?php echo $data['img_path']; ?>" id="img_path" accept="image/jpg"><br> 

       <label class="title" for="Quantity">Quantity:</label> 
      <input type="text" placeholder="<?php echo $data['Quantity']; ?>" name="Quantity" id="Quantity" title="Number of items" readonly><br /> 

      <label class="title" for="Category">Category:</label> 
      <input type="text" placeholder="<?php echo $data['Category']; ?>" name="Category" id="Category" Title="Category" readonly > 


      <label class="title" for="Location">Location:</label> 
      <input type="text" placeholder="<?php echo $data['Location']; ?>" name="Location" id="Location" title="Enter item location" ><br /> 

      <label class="title" for="Saletype">Sale Type:</label> 
      <input type="text" placeholder="<?php echo $data['Saletype']; ?>" name="Saletype" id="Saletype" title="Sale Type" readonly > 


      <label class="title" for="Price">Price: $</label> 
      <input type="text" placeholder="<?php echo $data['Price']; ?>" name="Price" id="Price" title="Please enter your name" readonly><br /> 

      <label class="title" for="Duration">Duration:</label> 
      <input type="text" placeholder="<?php echo $data['Duration']; ?>" name="Duration" id="Duration" title="End Date" readonly><br /> 

      <label class="title" for="Payment">Payment Type:</label> 
      <input type="text" placeholder="<?php echo $data['Payment']; ?>" name="Payment" id="Payment" title="Payment" readonly > 
      <select name="Payment" id="Payment" > 
       <option value="PayPal">PayPal</option> 
       <option value="Bank Deposit">Bank Deposit</option> 
       <option value="Card">Credit Card</option> 
      </select><br> 


       <div class="submit"><input type="submit" value="submit" name="submit" /></div> 
      <div class="reset"><input type="reset" /></div> 

      </fieldset> 


      </form> 

答えて

0

あなたは、HTMLフォーム上のrequired属性を使用することができます。これにより、入力値がない限りフォームを送信できなくなります。

<input type="text" required /> 

PHPファイルでは、isset()関数を使用してすべての値を確認できます。

if (isset($description) && isset($img_path) && isset($description) && isset($payment)) 
{ 
    // other code 
} 

また、値をエスケープする必要があります。

if (isset($description) && isset($img_path) && isset($description) && isset($payment)) 
{ 
    $description = mysqli_real_escape_string($conn, $description); 
    $img_path = mysqli_real_escape_string($conn, $img_path); 
    $location = mysqli_real_escape_string($conn, $location); 
    $payment = mysqli_real_escape_string($conn, $payment); 

    $updateQuery = "UPDATE item SET Description = '$Description', img_path = '$img_path', Location = '$Location', Payment = '$Payment' WHERE ItemID= $productID"; 
    $mysqli->query($updateQuery); 
} 

mysqli_real_escape_stringを考慮にあなたが常にフロントエンドとバックエンドの両方で検証を行う必要があり、接続

の現在の文字セットを取って、SQL文で使用する文字列の特殊文字をエスケープします。

関連する問題