2016-05-11 40 views
0

我有這個PHP代碼,當我嘗試點擊yes按鈕並檢查數據庫時。值保持不變。有什麼我做錯了嗎?我也檢查我的SQL查詢,它似乎工作正常,但是當我將它合併到PHP代碼中。它不再工作了?更新無法正常工作PHP MYSQL CRUD

<?php 
    require 'database.php'; 
    $id = 0; 

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

    if (!empty($_POST)) { 
     // keep track post values 
     $id = $_POST['gpx_field_id']; 

     // delete data 
     $pdo = Database::connect(); 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $sql = "UPDATE field_info SET verify = '1' WHERE gpx_field_id = ? "; 
     $q = $pdo->prepare($sql); 
     $q->execute(array($id)); 
     Database::disconnect(); 
     header("Location: index.php"); 

    } 
?> 

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

<body> 
    <div class="container"> 

       <div class="span10 offset1"> 
        <div class="row"> 
         <h3>Verify a Field</h3> 
        </div> 

        <form class="form-horizontal" action="verify.php" method="post"> 
         <input type="hidden" name="gpx_field_id" value="<?php echo $id;?>"/> 
         <p class="alert alert-error">Are you sure to verify this field ?</p> 
         <div class="form-actions"> 
          <button type="submit" class="btn btn-danger">Yes</button> 
          <a class="btn btn-danger" href="index.php">No</a> 
         </div> 
        </form> 
       </div> 

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

你也可以過去Database類的代碼嗎? –

+0

可能的重複http://stackoverflow.com/questions/18323065/update-query-with-pdo-and-mysql ?? – Poria

+0

您重定向到index.php而沒有$ _GET參數。 – KiwiJuicer

回答

0

在這裏,我假設你的查詢工作正常,所以 請改變你的PHP代碼如下...

<?php 
    require 'database.php'; 
    $id = 0; 

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

    if (!empty($_POST)) { 
     try { 
       $pdo = Database::connect(); 
       $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
       $sql = "UPDATE field_info SET verify = '1' WHERE gpx_field_id IN :id "; 
       $q = $pdo->prepare($sql); 
       $q->execute(array($id)); 
       Database::disconnect(); 
       header("Location: index.php"); 
     } 
     catch(PDOException $e) { 
      echo $e->getMessage(); 
     } 
    } 
?> 

希望它會幫助你。

+1

千萬不要使用'$ _REQUEST'!這將採用'GET','POST'和'COOKIE'輸入,有人可以設置一個名爲'gpx_field_id'的cookie並獲取該查詢來運行他們想要的任何內容。 – Styphon

+0

謝謝,但這沒有奏效。 ;) –

+0

@Sandy Pabilonia,你面對什麼錯誤? –

0

您在頂部指定$id = 0,但它永遠不會更新爲某個「真實」值。因此,形式被填充有

<input type="hidden" name="gpx_field_id" value="0"/> 

因此gpx_field_id總是保持0。然後,您的查詢將使用WHERE gpx_field_id = 0更新所有行。最有可能的是,這些行將不存在...

在插入表格之前,您需要獲得適當的值$id

請注意,由於您使用的是html5(<!DOCTYPE html>),因此應該省略輸入的結束標記。寫入:<input type="hidden" ... >,忽略正斜線,就像您在頭部使用metalink標記一樣。

+0

關於$ id = 0是不是它是這個代碼的工作,以改變$ id的值到什麼在輸入gpx_field_id if(isset($ _ REQUEST ['gpx_field_id'])){ //跟蹤帖子值 $ id = $ _REQUEST ['gpx_field_id']; –

+0

如何爲$ id獲得適當的值? –

+0

獲得'$ id'的正確值是您需要考慮的事情:您在什麼基礎上選擇該字段?我的意思是:你怎麼知道你想顯示哪個'gpx_field'? –