2013-03-25 48 views
1

我正在嘗試使用MYSQL數據庫在PHP中進行基本更新。即使我輸入打印mysql_error();,它也不會丟失任何錯誤。我使用三個文件,第一個是他們選擇編輯的donorid的初始屏幕。接下來進入編輯窗體,在窗體上他們可以選擇要編輯的字段。然後嘗試用最後一個文件更新數據庫。它們分別被稱爲edit.php,edit_form.php,edit_data.php。它不會更新。我不確定我錯過了什麼,任何幫助將不勝感激。編輯並更新mysql中的php

edit.php

 <html> 
     <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
     </head> 
     <body> 
     <table> 
     <tr> 
      <td align="center">EDIT DATA</td> 
     </tr> 
     <tr> 
      <td> 
      <table border="1"> 
     <form action="edit_form.php" method="POST"> 
      <?php 
      include"db.inc.php";//database connection 
      $order = "SELECT * FROM donors"; 
      $result = mysql_query($order); 
      while ($row=mysql_fetch_array($result)){ 
     echo ("<tr><td>$row[firstname]</td>"); 
     echo ("<tr><td>$row[lastname]</td>"); 
     echo ("<td>$row[donorid]</td>"); 
      echo ("<td>$row[address]</td>"); 
      <input type= "submit" name= "submit" value="Edit data"/>; 
      } 
      ?> 
      </table> 
      </td> 
     </tr> 
       </table> 
      </body> 
     </html> 

edit_form.php

  <html> 
    <head> 
     <title>Form Edit Data</title> 
     </head> 

     <body> 
      <table border=1> 
     <tr> 
     <td align=center>Form Edit Employees Data</td> 
     </tr> 
     <?php 

      mysql_select_db("charitabledb") or die(mysql_error()); 
      include "db.inc.php"; 
      $donorid = (varchar)$_GET['donorid']; 
      $query = mysql_query("SELECT * FROM donors WHERE donorid = '$donorid'") or 
      die(mysql_error()); 

      if(mysql_num_rows($query)>=1){ 
      while($row = mysql_fetch_array($query)) { 
      $firstname = $row['firstname']; 
      $lastname = $row['lastname']; 
      $address = $row['address']; 
      } 
      ?> 
      <form action="update.php" method="post"> 
      <input type="hidden" name="ID" value="<?=$donorid;?>"> 
      First Name: <input type="text" name="firstname" value="<?=$firstname?>"><br> 
      Last Name: <input type="text" name="lastname" value="<?=$lastname?>"><br> 
      Address: <input type="text" name="address" value="<?=$address?>"><br> 
      <input type="Submit"> 
      </form> 
      <?php 
      }else{ 
      echo 'No entry found. <a href="javascript:history.back()">Go back</a>'; 
      } 
       ?> 
      </body> 
      </html> 

edit_data.php

   <?php 

       mysql_select_db("charitabledb") or die(mysql_error()); 
       include "db.inc.php"; 
       $donorid = (varchar)$_POST["donorid"]; 

       $firstname = mysql_real_escape_string($_POST["firstname"]); 
       $lastname = mysql_real_escape_string($_POST["lastname"]); 
       $address = mysql_real_escape_string($_POST["address"]); 

       $query="UPDATE donors 
       SET firstname = '$firstname', lastname = '$lastname', address =   
       '$address' 
        WHERE donorid='$donorid'"; 

       mysql_query($query)or die(mysql_error()); 
       if(mysql_affected_rows()>=1){ 
       echo "<p>($donorid) Record Updated<p>"; 
       }else{ 
       echo "<p>($donorid) Not Updated<p>"; 
        } 
        ?> 

下面是編輯,以試圖模仿我一直在考慮這樣的建議遠。提交按鈕不起作用,不知道如何使它在一個表內工作。

+0

只是一個FYI ... **'mysql_ *'**函數已被棄用...考慮PDO或MySQLi代替... [PHP.net](http://php.net/manual/en /function.mysql-query.php) – brbcoding 2013-03-25 18:56:06

回答

1

$名字,姓氏$等查詢應該是$ _ POST [「姓名」]等

消毒用戶輸入

2

右鍵,在我們深入之前後。 STOP!你正在打開自己的SQL Injection attacks最大的類型可能。

此外,您的表單變量需要從$_POST[]數組中調用。所以你需要調用變量$_POST['firstname']而不是$firstname

請求,請求我現在停下來學習MySQL/PHP中的預處理語句,PDO system是一個很好的使用方法,應該預先構建到您的PHP設置中。

你有沒有考慮過是否有人鏈接到您的網站中的以下或類似?

edit_form.php?id=1'; DROP donors; -- 

您的查詢現在變成'SELECT * FROM donors where donorid= '1'; DROP donors --

再見捐贈表的信息!

嗯,實際上它不會像你所說的查詢參數爲$donorid而不是$_GET['id'],但現在除了這一點。

另外您mysql_error()呼叫到來之前,你實際上是由一個SQL查詢,以便將它很難找到的東西還沒有實際沒有完成一個錯誤。

我建議你用正確綁定的SQL查詢使用PDO或類似工具重新工作所有這些,我當然樂意提供幫助。

+0

你可以再看看@新代碼並給我一些建議嗎?你會如何解決它? – 2013-03-26 02:07:11

+0

這將意味着重構你的代碼,並且在評論中張貼這些內容太多了,搜索關於在PHP中使用PDO或PHP手冊本身的教程,以及關於SQL注入的教程,以便爲您提供一個啓動。如果你需要任何特定的幫助,你可以隨時告訴我。您是否使用$ _POST []和$ _GET []值來使您的代碼正常工作? – 2013-03-26 02:11:02

+0

不,表格內的提交按鈕有問題。你有什麼建議嗎? – 2013-03-26 02:13:44