【问题标题】:PHP MYSQL query not receiving data from $_POST for updatePHP MYSQL 查询未从 $_POST 接收数据进行更新
【发布时间】:2017-01-13 17:46:20
【问题描述】:

我正在尝试使用特定条件调用和更新数据库中的表行。目前我让表格在文本框中加载数据并自动分配所有文本框的名称,以便我以后可以使用它们进行更新。

要显示的代码

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

mysqli_set_charset($conn,"utf8");
$check=$_POST["scenario1"];
$qwert="SELECT * FROM izprashtane WHERE Сценарий='$check'";
$query=mysqli_query($conn,$qwert);
$sql = "SHOW COLUMNS FROM izprashtane";
$result = mysqli_query($conn,$sql);
echo "<table width=650 border=1>\n";
$counter=0;
while ($get_info = mysqli_fetch_row($query)){
    echo "<tr>\n";
    while($row = mysqli_fetch_array($result)){
        echo "<td>" . $row['Field'] . "</td>";
    }
    echo "</tr>\n";
    echo "<tr>\n";
    $counter=0;
    foreach ($get_info as $field){
        $counter += 1;
        echo "\t<td><input type='text' name='$counter' value='$field'></td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";
$conn->close();
?>
<html>
<body>
<form action="datacizprashtane.php" method="POST">
<input type="submit" value="Промяна" >
</form>
</body>
</html>

这会将表格行加载到带有可编辑文本框的表格中,并根据我的需要分配从 0 到到的名称。然后我得到了更新表格的代码。这只是实验性的,所以我只有 2 个文本框,一旦开始,我会添加其余的。

要更新的代码

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$sql = "UPDATE izprashtane SET НаселеноМясто='$_POST[2]',Тримесичие='$_POST[3]' WHERE Сценарий='$_POST[6]'";
if (mysqli_query($conn, $sql)) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . mysqli_error($conn);
}

$conn->close();

此时它给了我:

错误更新记录:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '�аселеноМясто='',Тримес' 附近使用正确的语法。

我曾尝试使用'".$_POST[3]."',但它甚至没有给我错误。关于我做错了什么的任何想法?

【问题讨论】:

  • 在运行查询之前设置字符集$conn -&gt;set_charset("utf8")
  • $_POST 是关联数组,而不是数值数组,因此您无法像$_POST[3]$_POST[6] 等那样访问它们。
  • 好吧,Charset 允许页面让我成功更新记录,但实际上没有更新......即使我的文档默认编码是 UTF8
  • @RajdeepPaul 他为输入名称动态分配数值,检查 $counter 变量在第一个代码中的作用。
  • 当你在这的时候,我也会介绍一些输入过滤。例如 $check=$_POST["scenario1"],替换为 $check = filter_input(INPUT_POST, 'scenario1', FILTER_SANITIZE_STRING)

标签: php mysqli html-table


【解决方案1】:

我认为您的问题是 HTML 中的 &lt;input...&gt; 字段不在 &lt;form....> 标记内。

如果字段没有放在&lt;form&gt; 中,则在按下提交按钮时不会发送它们。事实上,它们甚至不在页面内&lt;body&gt;

目前只有提交按钮位于您的 &lt;form&gt; 标记内,这就是为什么提交被执行但没有数据被传递并且您在使用它们之前没有检查字段实际存在的原因。

【讨论】:

  • 输入将被命名为 1,2,3,4,5,6,7,8..... 这就是 $_POST 数组中的名称。他应该使用像$_POST['2'] 这样的引号来访问它们。我认为他在使用双引号时遇到了问题,因此他决定在没有引号的情况下发布它。
  • 你一定是在我发表评论时刚刚更新了它,一切都很好:)
【解决方案2】:

使用准备好的语句试一试:

$sql = "UPDATE izprashtane SET НаселеноМясто=?,Тримесичие=? WHERE Сценарий=?";
$stmt = mysqli_prepare($conn, $sql);
mysqli_bind_param($stmt, "sss", $_POST['2'], $_POST['3'], $_POST['6']);
mysqli_execute($stmt);

此外,您的代码有点乱,请确保使用准备好的语句或mysqli_escape_string 转义字符串以避免 SQL 注入。

编辑: 另外,添加

mysqli_set_charset($conn,"utf8");

在第二次数据库连接之后,同时还要确保您的输入都在您的表单中。

【讨论】:

  • 实际上我们都错了,因为我只记得在这样的字符串中引用 assoc 数组时缺少引号实际上是有效的。所以我会删除我的答案
  • 啊,我明白了。但是,他的名字将从 1 而不是 0 开始,所以我不确定他是否真的想使用这种方法来访问输入值。我会编辑这个并等待他的回复。
  • 不,我认为这也很狡猾,但我现在已经看到了这个问题,现在写另一个答案
  • 这是页面源之后的样子我显示表格行...只是其中的一小部分,您可以看到文本框具有有效的名称。
  • 您可能还希望将所有输​​入放在例如表单中在您输入之前开始的表单。
【解决方案3】:

您必须将所有表单域放在表单标签之间(&lt;form&gt;...&lt;/form&gt;) 例如:

<form action="datacizprashtane.php" method="POST">
<?php
//write your php code here.
?>
<input type="submit" value="Промяна" >
</form>

希望对你有帮助……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 2015-12-30
    • 1970-01-01
    • 2015-03-01
    相关资源
    最近更新 更多