尝试使用PHP和mySQL创建可编辑的HTML表,但该表不会更新

时间:2016-04-27 18:38:49

标签: php html mysql

我试图将HTML表格作为mySQL数据库的前端。表格显示正常,我可以输入我想对表格的每一行进行的编辑,但是当我按下提交按钮时,实际上没有进行更改。谁能看到我出错的地方?

<?php 

include("db.php");

$sql = "SELECT * FROM `artist`";
$result = mysqli_query($conn, $sql);

if (isset($_POST['update'])){

    $artID = $_POST['artID'];
    $artName = $_POST['artName'];
    $key = $_POST['hidden'];

    $UpdateQuery = "UPDATE `artist` SET `artID` = '$artID', `artName` = '$artName' WHERE `artist`.`artID` = '$key'"; 

    mysqli_query($conn,$UpdateQuery);
    header("Location: {$_SERVER['HTTP_REFERER']}");
    exit;

};
echo "<table border='1'>";
echo "<tr>";
echo "<th>ID</th>";
echo "<th>Name</th>";
echo "</tr>";

if ($result->num_rows > 0) {
    echo "<form id ='artisttable' action ='getartiststable.php' method ='post'>";
    // output data of each row
    while($row = mysqli_fetch_array($result)) {
        echo "<tr>";
        echo "<td>" ."<input type='text' name ='artID' value ='" . $row['artID'] . "' </td>";
        echo "<td>" . "<input type='text' name ='artName' value ='" . $row["artName"] . "' </td>";
        echo "<td>" . "<input type = 'hidden' name ='hidden' value='" . $row['artID'] . "' </td>";
        echo "<td>" . "<input type='submit' name ='update'" . " </td>";
        echo "</tr>";
    }
    echo "</form>";
    echo "</table>";
} else {
    echo "0 results";
}
$conn->close(); 

?> 

db.php文件只包含到mySQL数据库的连接信息,我100%确定它没有任何问题,因为它正确地检索了表格它不是没有更新

2 个答案:

答案 0 :(得分:0)

您的require正在使用多个具有相同名称的元素构建。当您提交表单时,它使用最后一个元素作为值,因此无论您想要更新哪个记录,都会更新最后一条记录(或因字符串封装而引发错误)。您也应该使用参数化查询。

所以而不是:

form

使用:

if ($result->num_rows > 0) {
    echo "<form id ='artisttable' action ='getartiststable.php' method ='post'>";
    // output data of each row
    while($row = mysqli_fetch_array($result)) {
        echo "<tr>";
        echo "<td>" ."<input type='text' name ='artID' value ='" . $row['artID'] . "' </td>";
        echo "<td>" . "<input type='text' name ='artName' value ='" . $row["artName"] . "' </td>";
        echo "<td>" . "<input type = 'hidden' name ='hidden' value='" . $row['artID'] . "' </td>";
        echo "<td>" . "<input type='submit' name ='update'" . " </td>";
        echo "</tr>";
    }
    echo "</form>";
    echo "</table>";

因此,您为每个数据集获得if ($result->num_rows > 0) { // output data of each row while($row = mysqli_fetch_array($result)) {?> <form class='artisttable' action ='getartiststable.php' method ='post'> <tr> <td><input type='text' name ='artID' value ='<?php echo $row['artID'];?>' /></td> <td><input type='text' name ='artName' value ='<?php echo $row["artName"];?>' /></td> <td><input type = 'hidden' name ='hidden' value='<?php echo $row['artID'];?>' /></td> <td><input type='submit' name ='update'" . " </td> </tr> </form> <?php } ?> </table> 。这是使用mysqli:http://php.net/manual/en/mysqli.quickstart.prepared-statements.php准备好的语句的链接。您还应该更新您的标记。用于格式化的form不是最好的方法。您的Table也未关闭input

这也将>artisttable更改为id,因为会有倍数。相应地更新CSS / JS。

答案 1 :(得分:0)

您将表单标记放在tr中,不允许使用td 所以你必须从那里删除那个tr。

您必须使用jquery,或者您可以使用其他网格结构替换该表,以使其看起来相同,并且表单也可以放在那里

还有一个建议不要将php和html混合在一起将它们分开以获得干净的代码

如果你做了所有这些,你的代码将是这样的