0

我无法弄清楚为什么我的值没有从表单中传递。我无法发现错误。

表格代码:

$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,它会传递所有数据,除了那些带有空格的列。我以为这就是反引号的用途?我还能做些什么来让两个单词的列像一个单词一样传递数据吗?

4

1 回答 1

4

您需要切换这些行 -

echo '<center><table style="text-align:center">';
echo '<form action="edit-process.php" method="post">';
....
echo "</form>";
echo "</table>";

echo '<form action="edit-process.php" method="post">';
echo '<center><table style="text-align:center">';
....
echo "</table>";
echo "</form>";

里面<form><table>无效的代码。它要么需要包装,<table>要么在里面<td></td>

另见 -
表格内表格
表格内表格


更新 #1-
在您的编辑
空间<input name="">中将被替换为,_因此您的$_POST[]姓名将与您的<input name="">. 从手册 - h​​ttp: //www.php.net/manual/en/language.variables.external.php

注意:
变量名中的点和空格会转换为下划线。例如<input name="a.b" />变成$_REQUEST["a_b"]

另请参阅 -
PHP 中的 <input> 元素是否可以包含大写字母和空格

于 2013-03-09T00:26:45.727 回答