foreach中的SQL更新仅更新数字而不更新文本

时间:2014-07-15 16:21:12

标签: php mysql sql foreach

我创建了一个包含可变行的表单,请参阅此脚本:

<?php
$result = mysqli_query($con,"SELECT * FROM features, articles WHERE features.assortment='$categorypages' AND articles.id='$articleid' ORDER BY features.id ASC);
  while($row = mysqli_fetch_array($result))
   { 
   $featuresid = $row["id"];
   $name = $row["name"];
   $nameshort = $row["nameshort"];
   $inzichtelijk = $row["inzichtelijk"];
   $assortment = $row["assortment"];
   $columnimput = $row[$nameshort];
?>
  <tr>
    <td align="left" valign="top"><?php echo $name ?>:</td>
    <td align="left" valign="top">
    <input name="articleid[]" type="hidden" value="<?php echo $articleid ?>">
    <input name="column[]" type="hidden" value="<?php echo $nameshort;?>">
    <textarea name="imput[]" cols="30" rows="3"><?php echo $columnimput;?></textarea></td>
  </tr>
<?php }?>
  <tr>
    <td align="left" valign="top">&nbsp;</td>
    <td align="left" valign="top"><input type="submit" name="submitarticle" value="Save"></td>
  </tr>
</form>
</table>

这很好用。使用以下foreach-loop我想更新我的数据库,但只更新数字。脚本:

    <?php if(isset($_POST['submitarticle'])) {
$articleid = $_POST['articleid'];
$column = $_POST['column'];
$imput = $_POST['imput'];

foreach($column as $key => $id) {
echo "column: ".$id.", imput: ".$imput[$key].", artikel: ".$articleid[$key].",<br> ";

$sql="UPDATE articles SET ".$id."=".$imput[$key]." WHERE id=".$articleid[$key]."";
$result=mysqli_query($con,$sql);
}   

echo "<br>De wijzigingen zijn succesvol opgeslagen.<br>";
}

当$ input中有文本时,不会更新任何内容。 foreach循环中的回显显示数字和文本。

1 个答案:

答案 0 :(得分:1)

首先,我不得不说,这是非常糟糕的做法,你应该使用预备语句来避免sql注入。

和你的问题:

这是因为你的文字周围没有大括号。

例如,当您更新数字时:

    UPDATE articles SET myid=55 WHERE id=99

该查询没问题,但如果你有字符串,你的代码将生成:

    UPDATE articles SET mystring=this is my string WHERE id=99

因为你看到这是一个sql错误,因为你应该在字符串周围有大括号:

    UPDATE articles SET mystring="this is my string" WHERE id=99