2015-01-02 54 views
1

我想更新記錄,但更新查詢不起作用的某種原因。它刪除並插入罰款,但不知何故更新不起作用。我已經檢查了各種問題,但couldn找不到答案。我檢查了查詢中插入的數據,也沒有問題。這是我的代碼。更新不工作在php中使用pdo

<?php 
    require 'database.php'; 
     $ido = 0; 
     if (!empty($_GET['id'])) { 
       $ido = $_REQUEST['id']; 
       echo $ido; 
     } 
    if (!empty($_POST)) { 
     // keep track validation errors 
     $nameError = null; 
     $descError = null; 
     $priceError = null; 
     // keep track post values 
     $name = $_POST['name']; 
     $desc = $_POST['desc']; 
     $price = $_POST['price']; 
     // validate input 
     $valid = true; 
     if (empty($name)) { 
      $nameError = 'Please enter Name'; 
      $valid = false; 
     } 

     if (empty($desc)) { 
      $descError = 'Please enter Valid descriptin'; 
      $valid = false; 
     } 
     if (empty($price) || filter_var($price, FILTER_VALIDATE_INT) == false) { 
      $priceError = 'Please enter a valid price'; 
      $valid = false; 
     } 

     // insert data 
     if ($valid) { 
      $pdo = Database::connect(); 
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $sql = "UPDATE Items SET I_name = ? , I_desc = ? ,I_price = ? WHERE I_id = ?"; <---This is the update query part 
      $q = $pdo->prepare($sql); 
      $q->execute(array($name,$desc,$price,$ido)); <---these are the values inserted 
      Database::disconnect(); 
      header("Location: index.php"); 
     } 
     } 
     else { 
     echo $ido; 
     $pdo = Database::connect(); 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $sql = "SELECT * FROM Items where I_id = ?"; 
     $q = $pdo->prepare($sql); 
     $q->execute(array($ido)); 
     $data = $q->fetch(PDO::FETCH_ASSOC); 
     $name = $data['I_name']; 
     $desc = $data['I_desc']; 
     $price = $data['I_price']; 
     Database::disconnect(); 
    } 

    ?> 
    <!DOCTYPE html> 
    <html lang="en"> 
    <head> 
    <meta charset="utf-8"> 
    <link href="css/bootstrap.min.css" rel="stylesheet"> 
    <script src="js/bootstrap.min.js"></script> 
    </head> 

    <body> 
    <div class="container"> 

       <div class="span10 offset1"> 
        <div class="row"> 
         <h3>Update Items</h3> 
        </div> 

        <form class="form-horizontal" action="update_items.php" method="post"> 
         <div class="control-group <?php echo !empty($nameError)?'error':'';?>"> 
         <label class="control-label">Name</label> 
         <div class="controls"> 
          <input name="name" type="text" placeholder="Item Name" value="<?php echo !empty($name)?$name:'';?>"> 
          <?php if (!empty($nameError)): ?> 
           <span class="help-inline"><?php echo $nameError;?></span> 
          <?php endif; ?> 
         </div> 
         </div> 
         <div class="control-group <?php echo !empty($descError)?'error':'';?>"> 
         <label class="control-label">Description</label> 
         <div class="controls"> 
          <input name="desc" type="text" placeholder="Item Description" value="<?php echo !empty($desc)?$desc:'';?>"> 
          <?php if (!empty($descError)): ?> 
           <span class="help-inline"><?php echo $descError;?></span> 
          <?php endif;?> 
         </div> 
         </div> 
         <div class="control-group <?php echo !empty($priceError)?'error':'';?>"> 
         <label class="control-label">Price</label> 
         <div class="controls"> 
          <input name="price" type="text" placeholder="Item Price" value="<? php echo !empty($price)?$price:'';?>"> 
          <?php if (!empty($priceError)): ?> 
           <span class="help-inline"><?php echo $priceError;?></span> 
          <?php endif;?> 
         </div> 
         </div> 
         <div class="form-actions"> 
          <button type="submit" class="btn btn-success">Create</button> 
          <a class="btn" href="index.php">Back</a> 
         </div> 
        </form> 
       </div> 

    </div> <!-- /container --> 
    </body> 
</html> 

回答

4

這是您的形式:

<form class="form-horizontal" action="update_items.php" method="post"> 
                ^nothing here 

正如你可以看到你發佈,並有您要發佈帖子的網址後沒有查詢變量。

然後,你檢查的ID:

$ido = 0; 
if (!empty($_GET['id'])) { 
    $ido = $_REQUEST['id']; 
    echo $ido; 
} 

$ido仍將0因爲沒有$_GET['id']

您可以修改您的表單以添加ID或在帶有ID的表單中添加隱藏變量,然後檢查$_POST['id']

我會去的第二個選項:

<form class="form-horizontal" action="update_items.php" method="post"> 
    <input type="hidden" name="id" value="<?php echo $ido; ?>"> 

,並在PHP中:

if (!empty($_POST)) { 
    $ido = $_POST['id']; 
+0

,我實際上是從另一個頁面獲取$ _GET [ '身份證'],它肯定具有價值我只是爲了確認而回應。 – soldiershin

+0

@soldiershin它可能會在您加載表單時發出,但不會在發佈時檢查我的答案的第一行。 – jeroen

+1

是的,你是對的我的錯誤..謝謝.. – soldiershin