如果这是一个愚蠢的问题,我很抱歉,可能很容易解决,但无论如何,这是我的问题:
我正在创建一个非常简单的系统,您可以添加,编辑和删除电影(为了练习PHP)。我需要一些帮助来获取edit.php的代码(显然可以编辑数据库中的电影)。我在表中有五列保存数据; id(auto_increment),姓名(电影名称),年龄(年龄评级),日期(您可以在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>
很抱歉,如果这是一个愚蠢的问题,但我花了几个小时试图找到这个问题的答案,但我找不到。我也道歉,如果这是浪费你的时间,但我几乎没有关于PHP的知识,但我想学习 - 请帮助我。
答案 0 :(得分:1)
SQL错误消息说明了一切。 SQL语法不正确。 UPDATE语句只能有一个SET
。您需要用逗号替换其他人。您还需要“电影”和“SET”之间以及“WHERE”之前的空格。而且你的字符串周围缺少引号。
$sql = "UPDATE movies ".
"SET name= '$moviename' ".
", age= '$movieage' ".
",date= '$moviedate' ".
",description= '$moviedescrip' ".
"WHERE id = $id";
Please, don't use mysql_*
functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
您也可以向SQL injections
开放我真的希望这段代码不会在公共网络中使用。
答案 1 :(得分:0)
你不需要为每个变量或列使用SET:
$sql = "UPDATE movies".
"SET name= '$moviename' ".
", age= '$movieage' ".
", date= '$moviedate' ".
", description= '$moviedescrip'".
" WHERE id = $id";
----^ space here
在$moviedescrip
之后你也需要空格,否则它旁边会添加WHERE
答案 2 :(得分:0)
您的SQL错误说明了一切:
'= SET age= SET date= SET description= WHERE id = 21'
据此判断,$moviename
等是空白的。
$_POST
没有收到任何内容。
这是您问题的根本原因。
您还需要按照@GGio的说法进行操作,并且只有一个 SET
语句。此外,如果列不是INT
,则需要用单引号('
)包围变量。最后,声明需要以;
而不是.
:
$sql = "UPDATE movies " .
"SET name = '$moviename', " .
"age = '$movieage', " .
"date = '$moviedate', " .
"description = '$moviedescrip' " .
"WHERE id = $id";
答案 3 :(得分:-1)
就像他们说的那样,使用PDO或MySQLi - 代码非常容易受到攻击。 DROP TABLE
任何人?
他们提供的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"
然后在bindValue
和prepare($sql)
execute()
绑定元素
考虑检查空值,以便SQL不会中断
(将所有$_POST
值放入数组中,即$myArray
)
foreach($myArray as $key => $value){
if(empty($value)){
$value = '';
}
}