从PHP页面编辑MySQL数据库中的数据

从PHP页面编辑MySQL数据库中的数据,php,Php,如果这是一个愚蠢的问题,可能很容易解决,我深表歉意,但无论如何,我的问题是: 我正在创建一个非常简单的系统,您可以从中添加、编辑和删除电影(为了练习PHP)。我需要一些帮助来获取edit.php的代码(显然是为了编辑数据库中已经存在的电影)。表中有五列保存数据;id(自动递增)、姓名(电影名称)、年龄(年龄分级)、日期(可以在DVD上购买电影的日期)和说明(电影说明)。我有一些edit.php代码,但当我在系统上更改任何内容时,会出现以下错误消息: Sorry, could not update

如果这是一个愚蠢的问题,可能很容易解决,我深表歉意,但无论如何,我的问题是:

我正在创建一个非常简单的系统,您可以从中添加、编辑和删除电影(为了练习PHP)。我需要一些帮助来获取edit.php的代码(显然是为了编辑数据库中已经存在的电影)。表中有五列保存数据;id(自动递增)、姓名(电影名称)、年龄(年龄分级)、日期(可以在DVD上购买电影的日期)和说明(电影说明)。我有一些edit.php代码,但当我在系统上更改任何内容时,会出现以下错误消息:

Sorry, could not update the data show this to Dylan: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= SET age= SET date= SET description= WHERE id = 21' at line 1
下面是我当前的edit.php代码

<html>
<head></head>
<body>
<?php

session_start();
error_reporting(error_reporting() & ~E_NOTICE);
$username = $_SESSION['username'];

if ($username)
{
echo "<html><center><font face='arial'><p align=right>Welcome <a href='profile.php'>$username</a>. <a href='login/logout.php'>Logout.</a></p align>";
}
else
{
echo "<html><center><font face='arial'><p align=right><a href=login/index.php>Login</a> or <a href=login/registration/register.php>Sign up!</a></p align>";
}
echo "<a href='index.php'>Home</a> | <a href='movie-add.php'>Add a movie</a> | <a href='movies.php'>Movies list</a><center></html></font face='arial'>";
echo "<html><br></html>";
echo "<html><br></html>";
echo "<html><br></html>";
echo "<html><center><font face=arial><b>If you made a mistake here you can change the information you entered. </center></b><font face=arial></html>";
echo "<html><br></html>";
echo "<html><br></html>";

if(isset($_POST['update']))
{
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost,$dbuser,$dbpass);
if(! $conn)
{
die('Something went wrong show this to dylan:'.mysql_error());
}

$id = $_POST['id'];
$moviename = $_POST['name']; 
$movieage = $_POST['age'];
$moviedate = $_POST['date'];
$moviedescrip = $_POST['description'];

$sql = "UPDATE movies".
   "SET name= $moviename ".
   "SET age= $movieage ".
   "SET date= $moviedate ".
   "SET description= $moviedescrip".
   "WHERE id = $id".

mysql_select_db('movie_system');
$retval = mysql_query( $sql, $conn);
if(! $retval )
{
die('Sorry, could not update the data show this to Dylan: '.mysql_error());
}

echo "The values have been changed!";
mysql_close($conn);
}
else
{
?>
<form method="post" action="<?php $_PHP_SELF ?>">
<table width="400" border="0" cellspacing="1" cellpadding="2">
<tr>
<td>Movie ID:</td>
<td><input name="id" type="text" id="id"></td>
</tr>
<tr>
<td>Movie name:</td>
<td><input name="moviename" type="text" id="name"></td>
</tr>
<tr>
<td>Movie age rating:</td>
<td><input name="movieage" type="text" id="age"></td>
</tr>
<tr>
<td>Date avilable on DVD:</td>
<td><input name="moviedate" type="text" id="date"></td>
</tr>
<tr>
<td>Description from back of case:</td>
<td><input name="moviedescrip" type="text" id="description"></td>
</tr>
<tr>
<td></td>
<td><input name="update" type="submit" id="update" value="Update"></td>
</tr>
</table>
</form>
<?php
}
?>
</body>
</html>


SQL错误消息说明了一切。SQL语法不正确。UPDATE语句只能设置一个
。您需要用逗号替换其他字符。您还需要在“电影”和“场景”之间以及“位置”之前留出空间。字符串周围缺少引号

$sql = "UPDATE movies ".
   "SET name= '$moviename' ".
   ", age= '$movieage' ".
   ",date= '$moviedate' ".
   ",description= '$moviedescrip' ".
   "WHERE id = $id";
。它们不再得到维护。看到了吗?相反,学习,并使用,或-将帮助您决定哪一个。如果您选择PDO

你也对我敞开心扉


我真的希望这段代码不会在公共网络中使用。

您不需要为每个变量或列使用SET,请执行以下操作:

$sql = "UPDATE movies".
   "SET name= '$moviename' ".
   ", age= '$movieage' ".
   ", date= '$moviedate' ".
   ", description= '$moviedescrip'".
   " WHERE id = $id";
----^ space here

此外,您还需要在
$moviedescrip
后面添加空格,否则它会在旁边添加空格,就像他们说的那样,使用PDO或MySQLi-该代码非常容易受到攻击<代码>放置表格
有人吗

他们提供的SQL是正确的,只需使用SET一次,然后用逗号分隔

比如说

$sql = "UPDATE tablename SET key1=value1,key2=value2 WHERE ID=ID" 
考虑使用PDO,然后绑定适当的值

$sql = "UPDATE tablename SET key1=:value1,key2=:value2 WHERE ID=:ID" 
然后在
prepare($sql)
execute()之间用PDO的
bindValue
绑定元素

考虑检查空值,以便SQL不会中断

(将所有
$\u POST
值放入一个数组,即
$myArray


您的SQL错误说明了一切:

'=SET age=SET date=SET description=WHERE id=21'

由此判断,
$moviename
等为空

因此,
$\u POST
没有收到任何内容

这是你问题的根本原因


您还需要按照@GGio所说的去做,并且只有一个
SET
语句。此外,如果列不是
INT
,则需要用单引号(
)将变量括起来。最后,语句需要以
结尾,而不是

$sql = "UPDATE movies " .
   "SET name = '$moviename', " .
   "age = '$movieage', " .
   "date = '$moviedate', " .
   "description = '$moviedescrip' " .
   "WHERE id = $id";

看到
'=SET age=SET date=SET description=WHERE id=21'
有任何错误吗?对于在同一文件上有操作脚本的表单,您可以完全忽略
action=“
部分。您使用的MySQL函数的方法易受攻击,不推荐使用。使用mysqli*函数或使用PDO。为什么否决投票可以解释?从错误消息判断,
$moviename
等都是空的。所以这不是唯一的问题。说真的。。。为什么人们还在投票呢?没有人费心去检查错误信息吗?你为什么这么生气?如果我的答案真的让你这么生气的话,我会删除它:DAlso,你在变量名周围缺少单引号,
应该是
。根据错误消息判断,
$moviename
等均为空。所以这不是唯一的问题。说真的。。。为什么人们还在投票呢?没有人检查错误消息吗?现在它说:对不起,无法更新数据。请向Dylan显示:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解第1行“=,age=,date=,description=WHERE id=21”附近使用的正确语法您的意思是什么?!?!简单解释一下@我刚刚发布了一个答案。又一个不正确的答案。怎么不正确?因为我提供了问题的一般版本,而不是为他编写代码?不,因为你(像之前的2个)从来没有认真检查错误消息。未收到任何
$\u POST
数据。错误显示“您的SQL语法有错误”。
$\u POST
值可能是问题的一部分,但他的SQL是更大的一部分,如错误消息所示。我能说点什么吗?谢谢danny,你的代码工作了,但现在在单击“更新”后,所有信息都从行中删除,只剩下id。发生了什么事?
$sql = "UPDATE movies " .
   "SET name = '$moviename', " .
   "age = '$movieage', " .
   "date = '$moviedate', " .
   "description = '$moviedescrip' " .
   "WHERE id = $id";