Php MySQL编辑表单正在覆盖所有数据库条目
我有3个页面:search.html。search.php和edit.php 我还有new.php,我可以用它创建一个进入MySQL数据库的条目,它工作得很好,我可以查看数据,并且它应该在哪里。然后,我有search.html和search.php,我用它们对数据库进行了非常基本的搜索,它同样可以完美地工作 然后,在results(在search.php上)中,我有一个edit链接,该链接启动edit.php,其中包含返回结果旁边的数据,并将edit.php与正确的数据一起加载。所以我想我到目前为止还可以。但是,当我编辑表单并单击submit时,它会覆盖数据库中的每个条目,而不仅仅是我最初试图编辑的条目。我已经搞了一个小时了,不知道我把事情搞砸了。代码如下: Search.htmlPhp 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与正确的数据一起加载。所以我想我到目前
<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";