【问题标题】:values from form not being passed php html mysqli来自表单的值没有被传递 php html mysqli
【发布时间】: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 访问tableid,并且可以使您的代码几乎更新数据库中的任何内容.

标签: php html forms mysqli


【解决方案1】:

你需要切换这些行 -

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>";

&lt;table&gt; 中包含&lt;form&gt; 是无效代码。它要么需要包装&lt;table&gt;,要么在&lt;td&gt;&lt;/td&gt; 内。

另见 -
form inside table
Form inside a table


更新 #1-
在您的编辑
&lt;input name=""&gt; 中的空格将替换为 _,因此您的 $_POST[] 名称将与您的 &lt;input name=""&gt; 不匹配。来自手册 - http://www.php.net/manual/en/language.variables.external.php

注意:
变量名中的点和空格被转换为下划线。例如 &lt;input name="a.b" /&gt; 变为 $_REQUEST["a_b"]

另见 -
Can <input> elements have capital letters and spaces in PHP

【讨论】:

  • 这似乎对它没有任何影响。
  • 查看我关于 &lt;input&gt; 名称中空格的更新。 PHP 会添加一个下划线_ 来代替空格,所以&lt;input name="first name"&gt; 在php 中会变成$_POST['first_name']
  • 将 mysql 列更改为用下划线代替空格会更容易。
猜你喜欢
  • 2019-09-03
  • 2013-02-02
  • 1970-01-01
  • 2013-05-22
  • 2015-08-31
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多