【发布时间】:2013-02-24 16:22:22
【问题描述】:
我无法弄清楚为什么我的值没有从表单中传递。我找不到错误。
表单代码:
$table = $_POST['table'];
$id = $_POST['id'];
$count = 0;
$query = "SELECT * FROM `" . $table . "` WHERE id = " . $id;
$result1 = mysqli_query($link, $query);
echo '<center><table style="text-align:center">';
echo '<form action="edit-process.php" method="post">';
while($row = mysqli_fetch_assoc($result1)){
foreach($row as $key => $val){
if ($count > 0){
echo "<tr>";
echo "<td>" . $key . "</td>";
echo '<td><input type="text" name="' . $key . '" value="' . $val . '"></td>';
echo "</tr>";
$count++;
}
else $count++;
}
}
echo '<input type="hidden" name="table" value="' . $table . '" />';
echo '<input type="hidden" name="id" value="' . $id . '" />';
echo '<tr><td><input type="submit" value="Save Changes" /></td></tr>';
echo "</form>";
echo "</table>";
php文件:
$table = $_POST['table'];
$id = $_POST['id'];
$count1 = 0;
$count2 = 0;
$result = mysqli_query($link, "SHOW COLUMNS FROM `" . $table . "`");
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$keyNames[$count2] = $row['Field'];
$count2++;
}
}
while ($count1 < $count2){
if ($count1 > 0) {
$value = mysqli_real_escape_string($_POST[$keyNames[$count1]]);
$query2 = "UPDATE `" . $table . "` SET `" . $keyNames[$count1] . "` = '" . $value . "' WHERE id = " . $id;
echo $query2 . "<br>";
$result2 = mysqli_query($link, $query2);
$count1++;
}
else $count1++;
}
我避免显示包含所有计数的 id 列。回显查询的输出是:
有什么想法吗?
编辑 一旦我弄清楚这个问题,我就会把所有的东西都改成程序风格。如果我摆脱 mysqli_real_escape_string,它会传递所有数据,除了那些带有空格的列。我以为这就是反引号的用途?我还能做些什么来让两个单词的列像一个单词一样传递数据吗?
【问题讨论】:
-
您期望 $value 来自哪里?也许 $_POST['value']?在将数据放入数据库查询之前,请阅读转义数据
-
做一个 var_dump($_POST);那么也许您可以调试发送到页面的内容
-
我认为转义数据是我正在做的事情。该值来自表单中转义的发布数据。
-
附带说明,此代码非常不安全:用户可以通过您的
inputs 访问table和id,并且可以使您的代码几乎更新数据库中的任何内容.