更新 MYSQL 记录错误
Posted
技术标签:
【中文标题】更新 MYSQL 记录错误【英文标题】:UPDATING MYSQL record error 【发布时间】:2015-04-10 07:55:02 【问题描述】:我正在编写一个脚本来更新记录。在我看来,脚本很好,我也收到了成功消息,但数据库中的记录没有更新。请帮我解决这个问题。
这是我的表单页面。
<!-- Inquiry Table Stars here -->
<?php
$id=$_GET['id'];
$sql = "Select * From inquiry WHERE id='$id'";
$result = mysql_query($sql);
?>
<?php
while($row=mysql_fetch_array($result))
$name = $row['cname'];;
$email = $row['email'];;
$phone = $row['phone'];;
$sdate = $row['sdate'];;
$edate = $row['edate'];;
$fdate = $row['fdate'];;
?>
<!-- Code Begins -->
<center>
<div class="vpb_main_wrapper">
<br clear="all">
<form method="post" action="edit_ac.php">
<h2 align="left" style="margin-top:0px;">Edit Operator</h2><br />
<div align="left" style="font-family:Verdana, Geneva, sans-serif; font-size:11px; margin-bottom:10px;">Edit operator Details.</div><br />
<div style="width:115px; padding-top:10px;float:left;" align="left"> Full Name:</div>
<div style="width:300px;float:left;" align="left"><input type="text" name="cname" id="cname" value="<?php echo $name; ?>" class="vpb_textAreaBoxInputs" required>
</div><br clear="all"><br clear="all">
<div style="width:115px; padding-top:10px;float:left;" align="left"> Email:</div>
<div style="width:300px;float:left;" align="left"><input type="text" name="email" id="email" value="<?php echo $email; ?>" class="vpb_textAreaBoxInputs" required>
</div><br clear="all"><br clear="all">
<div style="width:115px; padding-top:10px;float:left;" align="left">Mobile:</div>
<div style="width:300px;float:left;" align="left"><input type="text" name="phone" id="phone" value="<?php echo $phone; ?>" required class="vpb_textAreaBoxInputs">
</div><br clear="all"><br clear="all">
<div style="width:115px; padding-top:10px;float:left;" align="left">Start Date:</div>
<div style="width:300px;float:left;" align="left"><input type="text" name="sdate" id="sdate" value="<?php echo $sdate; ?>" required class="vpb_textAreaBoxInputs">
</div><br clear="all"><br clear="all">
<div style="width:115px; padding-top:10px;float:left;" align="left">End Date:</div>
<div style="width:300px;float:left;" align="left"><input type="text" name="edate" id="edate" value="<?php echo $edate; ?>" required class="vpb_textAreaBoxInputs">
</div><br clear="all"><br clear="all">
<div style="width:115px; padding-top:10px;float:left;" align="left">Date of Journey:</div>
<div style="width:300px;float:left;" align="left"><input type="text" name="fdate" id="fdate" value="<?php echo $fdate; ?>" class="vpb_textAreaBoxInputs" required>
</div><br clear="all"><br clear="all">
<input name="id" type="hidden" id="id" value="<?php echo $row['id']; ?>">
<div style="width:115px; padding-top:10px;float:left;" align="left"> </div>
<div style="width:300px;float:left;" align="left">
<input type="submit" name="submit" id="submit" value="Submit" style="margin-left: 100px" class="vpb_general_button">
</div>
</form>
<br clear="all"><br clear="all">
</div><?php ?>
</center>
<!-- Code Ends -->
<!-- Inquiry Table Ends here -->
这是我的edit_ac.php
<?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="pro1"; // Database name
// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$name = $_POST['cname'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$sdate = $_POST['sdate'];
$edate = $_POST['edate'];
$fdate = $_POST['fdate'];
// update data in mysql database
$sql="UPDATE inquiry SET
cname = '$name',
email = '$email',
phone = '$phone',
sdate = '$sdate',
edate = '$edate',
fdate = '$fdate'
WHERE id='$id'";
$result=mysql_query($sql);
// if successfully updated.
if($result)
echo "Successfull";
else
echo "Error";
?>
显示“0 条记录更新成功”。所以它没有在数据库中更新。有什么问题请帮忙。
【问题讨论】:
在后一个脚本中没有设置任何值,例如$id
。您只是假设它已设置,但它们没有。
我也做过 $_POST 但它不起作用
再次查看帖子我已经编辑了edit_ac.php页面...仍然无法正常工作..
你真的应该看看准备好的语句,或者至少使用mysql_real_escape_string
,因为你的代码非常容易受到攻击
我从phpeasystep.com/mysql-cate.php?category=update获取的这个更新代码看看这是否有助于解决问题请帮助我
【参考方案1】:
您没有声明 $id 变量。我添加了这一行: $id = $_POST['id'];
无论如何,不推荐使用 mysql 函数:改用 mysqli。
<?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="pro1"; // Database name
// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$id = $_POST['id'];
$name = $_POST['cname'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$sdate = $_POST['sdate'];
$edate = $_POST['edate'];
$fdate = $_POST['fdate'];
// update data in mysql database
$sql="UPDATE inquiry SET
cname = '$name',
email = '$email',
phone = '$phone',
sdate = '$sdate',
edate = '$edate',
fdate = '$fdate'
WHERE id='$id'";
$result=mysql_query($sql);
// if successfully updated.
if($result)
echo "Successfull";
else
echo "Error";
?>
【讨论】:
【参考方案2】:我认为,问题在于您在这两种情况下都没有正确地将 $id
变量传递给查询:
你这样做:
WHERE id='$id'"
你应该:
WHERE id=" . $id .""
编辑 1: 尝试通过打印 $id
变量来检查,如果你真的设置了它:
var_dump($id);
编辑 2:
用其他变量完成剩下的工作:
$sql = "UPDATE
inquiry
SET
cname = " . $name . ",
email = " . $email . ",
phone = " . $phone . ",
sdate = " . $sdate . ",
edate = " . $edate . ",
fdate = " . $fdate . "
WHERE
id=" . $id . "";
还可以尝试打印并检查您是否真的收到$name, $email, $phone
等。
【讨论】:
它显示一个错误...之前它显示一个成功的味精(虽然没有在数据库中更新)但现在应用它之后它甚至没有显示成功味精。这会导致错误。 @SanjeevSarkar 如果将id='$id'
替换为id=" . $id ."
,则不应显示错误。阅读编辑1。
我回应了它,我可以得到那个值......但更新不起作用。
我从phpeasystep.com/mysql-cate.php?category=update获取的这个更新代码看看这是否有助于解决问题请帮助我【参考方案3】:
将您的 id 值存储在 Session 中,以便您也可以在不同的页面上使用它。这里编辑文件没有ID。
希望对你有帮助。
【讨论】:
我从phpeasystep.com/mysql-cate.php?category=update 获取的这个更新代码以前一直对我有用,但现在它不起作用了。 不知道你过去的经验,但我在这里看到的是编辑查询没有得到 ID 值。我建议尝试我的解决方案,如果您不知道 SESSION 概念,请告诉我,我可以解释,但投反对票是不正确的做法。以上是关于更新 MYSQL 记录错误的主要内容,如果未能解决你的问题,请参考以下文章
Laravel save() 正在更新错误的 mysql 记录