我有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!';
}
}
?>
答案 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?
您的查询应该是
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";