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 を取り除くと、スペースを含む列を除くすべてのデータが渡されます。それがバックティックの目的だと思いましたか?2 つの単語を含む列が 1 つの単語を含む列のようにデータを渡すようにするために他にできることはありますか?

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="">にに置き換えられます。マニュアルから-http://www.php.net/manual/en/language.variables.external.php_$_POST[]<input name="">

注:
変数名のドットとスペースはアンダースコアに変換されます。たとえば、$ _REQUEST["a_b"]<input name="a.b" />になります。

関連項目
-PHPで<input>要素に大文字とスペースを含めることはできますか

于 2013-03-09T00:26:45.727 に答える