2017-08-16 147 views
-1

您好目前得到與Id不匹配,但無法找到爲什麼它沒有收到表id(例如0,1,2等),顯示頁面顯示他們好好看着它看着。也可以整理代碼明智的表?似乎與所有<?php ?>標籤混亂。如何解決這個MYSQL PHP更新函數版本錯誤

盡我所知,使用mysql 5.5。

錯誤:

Could not able to execute UPDATE weightsmeasures SET 1 = 'dszfxc',2 = 'Kilograms',10 = 'Litre',11 = 'Litre',12 = 'Ton',13 = 'vdd',14 = 'mega' WHERE id = 14. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1 = 'dszfxc',2 = 'Kilograms',10 = 'Litre',11 = 'Litre',12 = 'Ton',13 = 'vdd',14 ' at line 1

index.php的輸入形式

<div> 
     <?php  $result = tablename(weightsmeasures); ?> 
     <form method="post" action="update.php"> 
      <div class="col-8"> 
      <?php while($row = mysqli_fetch_array($result)) { 
      echo "<tr>"; 
      echo "<td>" . $row['id'] . "</td>"; ?> 
       <td> 
        <input class="form-control" type="text" value="<?php echo $row['WeightorMeasure']; ?>" id="<?php echo $row['id']; ?>" name="<?php echo $row['id']; ?>"> 
       </td> 
      <?php 
      echo "</tr>"; 
       } 
      ?> 
      </div> 
      <input type="submit" value="Update"> 
     </form> 
     </div> 

update.php

$id = $_POST['id']; 
$sql = "UPDATE weightsmeasures SET"; 
$fieldValuePairs = array(); 
foreach($_POST as $key => $value) 
if($key != 'id') 
     $fieldValuePairs[] = "$key = '$value'"; 
$sql .= " ". implode(',', $fieldValuePairs)." WHERE id = $id"; 

問候

+1

**警告**:使用'mysqli'時,您應該使用[參數化查詢](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和['bind_param' ](http://php.net/manual/en/mysqli-stmt.bind-param.php)將用戶數據添加到您的查詢。 **不要**使用字符串插值或連接來完成此操作,因爲您創建了嚴重的[SQL注入漏洞](http://bobby-tables.com/)。 **不要**將'$ _POST','$ _GET'或**任何**用戶數據直接放入查詢中,如果有人試圖利用您的錯誤,這可能會非常有害。 – tadman

+0

注意:'mysqli'的面向對象的接口明顯較少,使得代碼更易於閱讀和審計,並且不容易與陳舊的'mysql_query'接口混淆。在你過於投入程序風格之前,它是值得轉換的。例如:'$ db = new mysqli(...)'和'$ db-> prepare(「...」)存在的過程接口是PHP4時代的一個工件,當mysqli API被引入時不應該用於新代碼。 – tadman

回答

0

這裏有一個情況下,你應該閱讀的錯誤信息小心然後再讀一遍。

它說你的查詢看起來是這樣的:

UPDATE weightsmeasures SET 1 = 'dszfxc', 
          2 = 'Kilograms', 
          10 = 'Litre', 
          11 = 'Litre', 
          12 = 'Ton', 
          13 = 'vdd', 
          14 = 'mega' 
WHERE id = 14 

咦?它看起來像你的foreach語句中的鍵是數字。爲了這個工作,他們需要成爲列名。

即使你可以得到這個工作,你在剔除龍的尾巴,從$_POST變量中取數據而不檢查它。使用你最喜歡的搜索引擎來查找「小johnny droptables」。