使用PHP更新MySQL条目

时间:2016-12-30 18:58:29

标签: php mysql post

我有一个MySQL数据库,其中有一个包含4列的表(id,tvDate,tvCourse,tvRoom)

我创建了一个连接数据库的php页面,并在HTML表格中返回数据库表格的行。我在每一行都添加了一个编辑链接,以便能够编辑条目。该链接调用带有行ID的php文件(例如:edit.php?id = 1)并显示当前可以更改的内容。

Screenshot

到目前为止,一切正常但我的问题是,当您更改内容并单击更新按钮时,我收到以下错误:

  

您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以便在#< WHERE id = 1'附近使用正确的语法。在第638行

(相同的url edit.php?id = 1)并且记录不会更新。

这是我的代码:

<?php include('includes/database.php'); ?>
<?php
    //Assign get variable
    $id = $_GET['id'];

    //Create select query
    $query ="SELECT * FROM tvdbase
             WHERE id = $id";
    $result = $mysqli->query($query) or die($mysqli->error.__LINE__);
    if($result = $mysqli->query($query)){
        //Fetch object array
        while($row = $result->fetch_assoc()) {
            $tvDate = $row['tvDate'];
            $tvCourse = $row['tvCourse'];
            $tvRoom = $row['tvRoom'];
        }
        $result->close();
    }
?>
<?php
    if($_POST){
        //Assign get variable
        $id = $_GET['id'];

        //Assign Variables
        $tvDate = mysql_real_escape_string($_POST['tvDate']);
        $tvCourse = mysql_real_escape_string($_POST['tvCourse']);
        $tvRoom = mysql_real_escape_string($_POST['tvRoom']);

        //Create update
        $query = "UPDATE tvdbase
                  SET
                  tvDate='$tvDate',
                  tvCourse='$tvCourse',
                  tvRoom='$tvRoom',
                  WHERE id=$id
                  ";
        $mysqli->query($query) or die($mysqli->error.__LINE__);
        $msg="Updated";
        header('Location:index.php?msg='.urlencode($msg).'');
        exit;
    }

?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Edit Page</title>
  </head>
  <body>

         <form role="form" method="post" action="new.php?id=<?php echo $id; ?>">
                <label>Date</label>
                <input name="tvDate" type="text" value="<?php echo $tvDate; ?>" placeholder="Enter Date">
                <label>Course</label> 
                <input name="tvCourse" type="text" value="<?php echo $tvCourse; ?>" placeholder="Enter Course">
                <label>Room</label>
                <input name="tvRoom" type="text" value="<?php echo $tvRoom; ?>" placeholder="Enter Room">
            <input type="submit" value="Update Room" />
        </form>


  </body>
</html>

我怀疑我的问题出在某个地方的POST方法中。我仍然是PHP和mySQL的新手,所以我提前为任何不良编码道歉:)

2 个答案:

答案 0 :(得分:0)

这就是我用这种方式编写SELECT和UPDATE查询的原因......

SELECT x
     , y
     , z
  FROM my_table;

这使得这种错误几乎不可能。

答案 1 :(得分:0)

以下是您的代码存在的问题。

您将mysql_函数与MySQLi_ API混合在一起,并且它们不会混合。

这是mysql_real_escape_string()的所有实例,需要替换为mysqli_real_escape_string($mysqli, $_POST['var'])

  • 使用准备好的声明,它们会更安全。

然后在UPDATE查询的WHERE子句中有一个尾随逗号:

tvRoom='$tvRoom',

在这里:

UPDATE tvdbase
  SET
  tvDate='$tvDate',
  tvCourse='$tvCourse',
  tvRoom='$tvRoom', <<< right there, remove it
  WHERE id=$id