我创建了一个包含可变行的表单,请参阅此脚本:
<?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"> </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循环中的回显显示数字和文本。
答案 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