2017-08-16 142 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”。