从PHP页面将数据编辑到MySQL数据库

时间:2013-06-06 16:08:11

标签: php

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

我正在创建一个非常简单的系统,您可以添加,编辑和删除电影(为了练习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的知识,但我想学习 - 请帮助我。

4 个答案:

答案 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,并使用PDOMySQLi - 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" 

然后在bindValueprepare($sql)

之间用PDO的execute()绑定元素

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

(将所有$_POST值放入数组中,即$myArray

foreach($myArray as $key => $value){
  if(empty($value)){
    $value = '';
  }
}