Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL编辑表单正在覆盖所有数据库条目_Php_Mysql_Html - Fatal编程技术网

Php MySQL编辑表单正在覆盖所有数据库条目

Php MySQL编辑表单正在覆盖所有数据库条目,php,mysql,html,Php,Mysql,Html,我有3个页面:search.html。search.php和edit.php 我还有new.php,我可以用它创建一个进入MySQL数据库的条目,它工作得很好,我可以查看数据,并且它应该在哪里。然后,我有search.html和search.php,我用它们对数据库进行了非常基本的搜索,它同样可以完美地工作 然后,在results(在search.php上)中,我有一个edit链接,该链接启动edit.php,其中包含返回结果旁边的数据,并将edit.php与正确的数据一起加载。所以我想我到目前

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

我还有new.php,我可以用它创建一个进入MySQL数据库的条目,它工作得很好,我可以查看数据,并且它应该在哪里。然后,我有search.html和search.php,我用它们对数据库进行了非常基本的搜索,它同样可以完美地工作

然后,在results(在search.php上)中,我有一个edit链接,该链接启动edit.php,其中包含返回结果旁边的数据,并将edit.php与正确的数据一起加载。所以我想我到目前为止还可以。但是,当我编辑表单并单击submit时,它会覆盖数据库中的每个条目,而不仅仅是我最初试图编辑的条目。我已经搞了一个小时了,不知道我把事情搞砸了。代码如下:

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/>';
    }

?>
<?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!';
 }
 }
?>

带有
$id?

您的查询应该是

mysql\u查询(“更新条目集fname='$fname',lname='$lname'**其中id=$id**”)


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

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

你有:

"UPDATE entries SET fname='$fname', lname='$lname'"
可能应该是:

"UPDATE entries SET fname='$fname', lname='$lname' WHERE id=$id"
错误 您有
mysql\u查询(“更新条目集fname='$fname',lname='$lname')

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

学习 无论何时更新,我们都会提供您要更改的id的条件

因此,您的查询应该是

mysql\u查询(“更新条目集fname='$fname',lname='$lname',其中id=$id”)

对于
更新
,应始终

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

祝你好运你忘了过滤你的更新子句。您应该在语句中的
位置添加一个

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

您忘记了更新特定的行数据值,因此您的所有数据都将被覆盖

WHERE `id`=$id
所以你正确的更新代码是

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

谢谢大家的回答。我还是MySQL的新手,非常感谢您的帮助。我选择法希姆的答案是正确的,因为他解释得更多,但我重视每个人的意见,并投票支持你们所有人。我认为夏普内尔上校的评论离题,毫无帮助。再次感谢。
$update ="UPDATE `entries` SET `fname`='$fname', `lname` = '$lname' WHERE `id`=$id";