MySQL编辑表单将覆盖所有数据库条目

时间:2012-02-05 04:56:18

标签: php mysql html

我有3页:search.html。 search.php和edit.php

我也有new.php,我可以使用它创建一个进入我的MySQL数据库的条目,它工作得很好,我可以查看数据,它应该是它应该在哪里。然后,我有search.html和search.php,我用它来做一个非常基本的数据库搜索,它再次完美地工作。

然后,在结果中(在search.php上)我有一个编辑链接,它启动edit.php,返回结果旁边的数据,并加载edit.php和正确的数据。所以我觉得我很清楚这一点。但是,当我编辑我的表单并单击“提交”时,它会覆盖数据库中的每个条目,而不是仅覆盖我最初尝试编辑的条目。现在已经搞乱了一个小时,不知道我搞砸了哪里。代码如下:

Search.html

<html>
<head>
<title>Search the Database</title>
</head>

<body>
<form action="search.php" method="post">
  Search:
  <input type="text" name="term" />
  <br />
  <input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

的search.php

<?php
mysql_connect ("myhost", "myuser","mypass")  or die (mysql_error());
mysql_select_db ("mydb");

$term = $_POST['term'];

$sql = mysql_query("select * from mytable where fname like '%$term%'");

while ($row = mysql_fetch_array($sql)){
    echo '<br/> First Name: '.$row['fname'];
    echo '<br/> Last Name: '.$row['lname'];
    echo '<td><a href="edit.php?id=' . $row['id'] . '">Edit</a></td>';
    echo '<br/><br/>';
    }

?>

Edit.php

<?php
function renderForm($id, $fname, $lname)
 {
 ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<link rel="stylesheet" type="text/css" href="mystyle.css">
</head>
<body>
<div id="stylized" class="myform">
<form id="form" name="form" action="" method="post">
  <input type="hidden" name="id" value="<?php echo $id; ?>"/>
  <h1>Edit Entry</h1>
  <Label>First Name/Organization </label>
  <input type="text" name="fname" value="<?php echo $fname; ?>"/>
  <Label>Attn. </label>
  <input type="text" name="attn" value="<?php echo $attn; ?>"/>
  <input type="submit" name="submit" value="Submit">
  </div>
</form>
</body>
</html>
<?php
 }

 include('settings.php');

 if (isset($_POST['submit']))
 { 
 if (is_numeric($_POST['id']))
 {
 $id = $_POST['id'];
 $fname = mysql_real_escape_string(htmlspecialchars($_POST['fname']));
 $lname = mysql_real_escape_string(htmlspecialchars($_POST['lname']));

 if ($fname == '' || $lname == '')
 {

 $error = 'ERROR: Please fill in all required fields!';

 renderForm($id, $fname, $lname);
 }
 else
 {

 mysql_query("UPDATE entries SET fname='$fname', lname='$lname'")
 or die(mysql_error()); 

 header("Location: index.html"); 
 }
 }
 else
 {
 echo 'Error!';
 }
 }
 else
 {

 if (isset($_GET['id']) && is_numeric($_GET['id']) && $_GET['id'] > 0)
 {
 $id = $_GET['id'];
 $result = mysql_query("SELECT * FROM entries WHERE id=$id")
 or die(mysql_error()); 
 $row = mysql_fetch_array($result);

 if($row)
 {

 $fname = $row['fname'];
 $lname = $row['lname'];

 renderForm($id, $fname, $lname, '');
 }
 else

 {
 echo "No results!";
 }
 }
 else

 {
 echo 'Error!';
 }
 }
?>

6 个答案:

答案 0 :(得分:4)

看起来你的edit.php中的SQL语句缺少一个WHERE子句:

你有:

"UPDATE entries SET fname='$fname', lname='$lname'"

可能应该是:

"UPDATE entries SET fname='$fname', lname='$lname' WHERE id=$id"

答案 1 :(得分:2)

带有$id?

的where子句在哪里

您的查询应该是

mysql_query("UPDATE entries SET fname='$fname', lname='$lname' **WHERE id=$id**")

答案 2 :(得分:2)

mysql_query("UPDATE entries SET fname='$fname', lname='$lname' WHERE id=$id")

您需要指定要更新的记录,否则它将更新所有记录

答案 3 :(得分:2)

错误

你有mysql_query("UPDATE entries SET fname='$fname', lname='$lname'")

这意味着您要为所有条目设置新的名字和姓氏。

学习

每当我们更新时,我们都会提供您想要更改ID的条件......

所以你的查询应该是

mysql_query("UPDATE entries SET fname='$fname', lname='$lname' WHERE id=$id")

对于UPDATE,它应始终为

UPDATE myTable
SET field1=new_value_1, field2=new_value_2, .....
WHERE condition

祝你好运

答案 4 :(得分:1)

您忘记过滤更新条款。您应该在声明中添加WHERE

UPDATE `entries` 
SET `fname`='$fname', `lname` = '$lname' 
WHERE `id`=$id

答案 5 :(得分:0)

您忘记更新特定的行数据值,并且您的所有数据都将覆盖...

WHERE `id`=$id

所以你的正确更新代码是......

$update ="UPDATE `entries` SET `fname`='$fname', `lname` = '$lname' WHERE `id`=$id";