【问题标题】:Display and update MYSQL data via HTML form via PHP通过 PHP 通过 HTML 表单显示和更新 MYSQL 数据
【发布时间】:2019-01-04 04:05:35
【问题描述】:


我试图弄清楚如何在一页中显示数据库表的所有行,所有值都是可编辑的,并且在它的末尾有一个提交按钮。我得到了一半的方程式,但由于某种原因它仍然无法正常工作。
我目前拥有的是一个显示 MYSQL 表的所有内容的表,并且所有字段都是可编辑的。所有每个字段都有一个提交按钮(这不是我想要的,但如果我必须要解决),但是在从数据库字段中编辑某些内容时,它会将我带到一个给我语法错误的页面: “更新记录时出错:您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'WHERE idnum = '0000'' 附近使用正确的语法”

以下来自FORM.PHP

<?php
include('config.php');
$result = mysqli_query($connect,"SELECT * FROM table123");
?>
<html>
<table>
<?php while ($res = mysqli_fetch_array($result)) { ?>
<tr>
        <form action="test.php" method="post">
            <td><input type="text" name="ret" value="<?php echo $res['ret']; ?>"></td>
            <td><input type="text" name="code" value="<?php echo $res['code']; ?>"></td>
            <td><input type="text" name="status" value="<?php echo $res['status']; ?>"></td>
            <td><input type="hidden" name="idnum" value="<?php echo $res['idnum']; ?>"></td>
            <td><input type="submit" name="update" value="Submit"></td>
        </form>
    </tr>
    <?php } ?>
</table>
</html>

以下来自TEST.PHP

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";
$connect = mysqli_connect($servername, $username, $password, $dbname);
if (!$connect) {
die("Connection failed: " . mysqli_connect_error());
}
if (isset($_POST['update'])) {
$sql = "UPDATE ssoretailerlist SET ret = '$_POST[ret]', code = '$_POST[code]', status = '$_POST[status]', WHERE idnum = '$_POST[idnum]'";
} else {
echo "Nothing was posted";
}
if (mysqli_query($connect, $sql)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . mysqli_error($connect);
}
mysqli_close($connect);

【问题讨论】:

  • 去掉 WHERE 前的逗号。如果您检查 mysqli errors,您会发现有语法错误。
  • 谢谢你。这似乎已经解决了那个问题。
  • 知道如何制作,以便页面底部只有一个提交按钮,而不是每一行?
  • 将表单和提交标签移出循环,但随后您将不得不对变量名称进行一些表单调整,以便可以一次提交所有输入。跨度>
  • 您的更新查询易受 SQL 注入攻击。请参阅stackoverflow.com/questions/60174/… 了解更多信息

标签: php html mysql database forms


【解决方案1】:

语法错误是因为你有一个额外的逗号。删除 WHERE 之前的逗号,你应该没问题。

$sql = "UPDATE ssoretailerlist
        SET ret = '$_POST[ret]', code = '$_POST[code]', status = '$_POST[status]'
        WHERE idnum = '$_POST[idnum]'";

每个字段都有一个提交按钮。与其在循环内为每一行创建一个新表单并提交,不如在循环外手动一次。

<?php
include('config.php');
$result = mysqli_query($connect, "SELECT * FROM table123");
?>
<html>
<table>
<form action="test.php" method="post">
<?php while ($res = mysqli_fetch_array($result)) { ?>
    <tr>
    <td><input type="text" name="ret" value="<?php echo $res['ret']; ?>"/></td>
    <td><input type="text" name="code" value="<?php echo $res['code']; ?>"/></td>
    <td><input type="text" name="status" value="<?php echo $res['status']; ?>"/></td>
    <td><input type="hidden" name="idnum" value="<?php echo $res['idnum']; ?>"/></td>
    </tr>
<?php } ?>
</table>
<input type="submit" name="update" value="Submit"/>
</form>
</html>

您可能还想处理要插入表单的输出。如果数据中包含双引号,则可能会破坏您的 HTML。查看htmlspecialchars()。根据您的专栏标题,我认为不会,但始终牢记在心。

但是,每一行都有完全相同的输入名称。这是个问题。它如何知道选择和关联哪个retcodestatusidnum?首先你要turn the names into arrays。然后,您要遍历 idnum 数组并执行多个 UPDATE 查询,以访问其他数组中的相同键位置。如果您在此问题上遇到困难,请发布一个新问题。

最后你的 config.php 文件是非常必要的。您可能想read this thread about require_once() vs include()。如果包含失败,最好抛出错误并处理它,而不是继续处理脚本的其余部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    相关资源
    最近更新 更多