通过php通过html表单显示和更新mysql数据

aamkag61  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(261)

我试图弄清楚如何在一个页面中显示一个数据库表的所有行,所有要编辑的值,以及在它的末尾有一个提交按钮。我算出了一半的方程式,但由于某种原因它仍然不起作用。
我现在拥有的是一个显示mysql表所有内容的表,所有字段都是可编辑的。每个字段都有一个submit按钮(这不是我想要的,但如果必须的话,我愿意解决),但是在编辑数据库字段中的内容时,它会将我带到一个页面,该页面会给我一个语法错误:
“更新记录时出错: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);
6qftjkof

6qftjkof1#

语法错误是因为多了一个逗号。去掉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()。从你的专栏标题来看,我不认为会,但最好记住。
但是,每一行都有完全相同的输入名称。这是个问题。它怎么知道是哪个 ret , code , status ,或 idnum 一起选择和交往?首先要将名称转换为数组。然后你想通过 idnum 数组并执行多个 UPDATE 查询访问其他数组中相同的键位置。如果你被困在这个问题上,就发布一个新问题。
最后,您的config.php文件是非常必要的。您可能想阅读这个关于require\u once()和include()的线程。如果include失败,抛出一个错误并进行处理,而不是继续处理脚本的其余部分,这是很好的。

相关问题