2012-08-02 158 views
0

我几乎没有编程经验,并尝试这第一个项目,我有点卡住如何更新数据库,所以我点击编辑和正确的记录被加载到编辑屏幕更新。 phpPHP表单不更新mysql数据库

当我点击更新时,我收到updated.php的消息,说数据库已更新,但数据库没有更新,当我显示记录时它们与更新前相同,谢谢提前为您提供所有帮助。

下面的代码:

update.php 
$objConnect = mysql_connect("localhost","username","password") or die(mysql_error()); 
$objDB = mysql_select_db("teldirdb"); 
$id = $_GET['id']; 
$strSQL = "SELECT * FROM teldir where id = '$id' "; 
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]"); 
$objResult = mysql_fetch_array($objQuery) 
?> 

<form id="FormName" action="updated.php" method="post" name="FormName"> 
<table width="448" border="0" cellspacing="2" cellpadding="0"> 

<tr> 
<td width="150" align="right"><label for="fname">fname</label></td> 
<td><input name="fname" maxlength="30" type="text" value="<?=$objResult["fname"];?>"> </td> 
</tr> 

<tr> 
<td width="150" align="right"><label for="lname">lname</label></td> 
<td><input name="lname" maxlength="30" type="text" value=" <?=$objResult["lname"];?>"></td> 
</tr> 

<tr> 
<td width="150" align="right"><label for="tel">tel</label></td> 
<td><input name="tel" maxlength="15" type="text" value="<?=$objResult["tel"];?>"></td> 
</tr> 

<tr> 
<td width="150" align="right"><label for="adress1">adress1</label></td> 
<td><input name="adress1" maxlength="30" type="text" value="<?=$objResult["adress1"];?>"></td> 
</tr> 

<tr> 
<td width="150" align="right"><label for="adress2">adress2</label></td> 
<td><input name="adress2" maxlength="30" type="text" value="<?=$objResult["adress2"];?>"></td> 
</tr> 

<tr> 
<td width="150" align="right"><label for="pcode">pcode</label></td> 
<td><input name="pcode" maxlength="8" type="text" value="<?=$objResult["pcode"];?>"> </td> 
</tr> 

<tr> 
<td width="150" align="right"><label for="email">email</label></td> 
<td><input name="email" maxlength="30" type="text" value="<?=$objResult["email"];?>"></td> 
</tr> 

<tr> 
<td width="150" align="right"><label for="lastcontactdate">lastcontactdate</label></td> 
<td><input name="lastcontactdate" maxlength="30" type="text" value="<?=$objResult["lastcontactdate"];?>"></td> 
</tr> 

<tr> 
<td colspan="2" align="center"><input name="" type="submit" value="Update"></td> 
</tr> 

</table> 
</form> 

updated.php 
<?php 
header('Refresh: 5; URL=view11.php'); 
$objConnect = mysql_connect("localhost","root","2fudge") or die(mysql_error()); 
$objDB = mysql_select_db("teldirdb"); 

$id = $_REQUEST['id']; 
$fname = trim(mysql_real_escape_string($_POST["fname"])); 
$lname = trim(mysql_real_escape_string($_POST["lname"])); 
$tel = trim(mysql_real_escape_string($_POST["tel"])); 
$adress1 = trim(mysql_real_escape_string($_POST["adress1"])); 
$adress2 = trim(mysql_real_escape_string($_POST["adress2"])); 
$pcode = trim(mysql_real_escape_string($_POST["pcode"])); 
$email = trim(mysql_real_escape_string($_POST["email"])); 
$lastcontactdate = trim(mysql_real_escape_string($_POST["lastcontactdate"])); 

$rsUpdate = mysql_query("UPDATE teldir 
SET fname = '$fname', lname = '$lname', tel = '$tel', adress1 = '$adress1', adress2 = '$adress2', pcode = '$pcode', email = '$email', lastcontactdate = '$lastcontactdate' 
WHERE id = '$id' "); 

if($rsUpdate) { echo "Successfully updated"; } else { die('Invalid query: '.mysql_error()); } 
+0

为什么没有人用准备好的发言?这太痛苦了。 – Kurt 2012-08-02 09:28:08

+0

您有[主要安全漏洞](http://bobby-tables.com/),并且正在使用'mysql_ *'函数,这些函数在PHP手册中被标记为已弃用。 – Quentin 2012-08-02 09:28:20

+0

'回声'您的查询,并检查它是你想要的。 – Jocelyn 2012-08-02 09:29:29

回答

0

您的形式不发送ID参数。尝试添加下面一行到您的窗体:

<input type="hidden" name="id" value="<?= $id ?>" /> 

或者,改变

<form id="FormName" action="updated.php" ... 

<form id="FormName" action="updated.php?id=<?= $id ?>" ... 

截至目前您的查询结果为

(...) WHERE id='' 

这是一个有效的SQL查询(因此不是r伊辛错误),但实现什么(更specificaly,改变那里是未设置ID)

0

你的问题是该行中的数据,也有你的形式没有现场id,在updated.php因此没有$_REQUEST['id'],导致查询

UPDATE teldir ... WHERE id = '' 

与ID添加一个隐藏字段到表单:

<input name="id" type="hidden" value="<?=$objResult["id"];?> 

然后等待被黑客攻击... ;-)

说真的,检查Quentin的评论。

0

您确定您正在获取$ id的值吗? 对于$ id,您正在使用$ _REQUEST ['id'],但我没有看到您在任何地方保存/传递id值,例如,您可以添加一个隐藏字段,在该字段中保存查询的id,然后获取值与$ _POST。

0
  • 首先确保您的查询确实可以在phpmyadmin或您正在使用的任何数据库管理器上测试查询。
  • 其次,不要直接在查询中使用$_GET['id']。您可以使用准备好的语句来获得这个可用于mysqli和PDO的语句。不要使用已经在折旧过程中的mysql API http://www.php.net/manual/en/intro.mysql.php
  • 第三,请阅读phptherightway以确保您处于正确的学习路径。
0
<?php 
$objConnect = mysql_connect("localhost","username","password") or die(mysql_error()); 
$objDB = mysql_select_db("teldirdb"); 
$id = $_GET['id']; 
$strSQL = "SELECT * FROM teldir where id = ".$id." "; 
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]"); 
?> 
<form id="FormName" action="updated.php" method="post" name="FormName"> 
<table width="448" border="0" cellspacing="2" cellpadding="0"> 

<?php 
while($objResult = mysql_fetch_array($objQuery)) { 
?> 
<tr><td><input type="hidden" name="id" value="<?=$objResult['id'];?>"></td></tr> 
<tr> 
<td width="150" align="right"><label for="fname">fname</label></td> 
<td><input name="fname" maxlength="30" type="text" value="<?=$objResult["fname"];?>"> </td> 
</tr> 

<tr> 
<td width="150" align="right"><label for="lname">lname</label></td> 
<td><input name="lname" maxlength="30" type="text" value="<?=$objResult["lname"];?>"></td> 
</tr> 

<tr> 
<td width="150" align="right"><label for="tel">tel</label></td> 
<td><input name="tel" maxlength="15" type="text" value="<?=$objResult["tel"];?>"></td> 
</tr> 

<tr> 
<td width="150" align="right"><label for="adress1">adress1</label></td> 
<td><input name="adress1" maxlength="30" type="text" value="<?=$objResult["adress1"];?>"></td> 
</tr> 

<tr> 
<td width="150" align="right"><label for="adress2">adress2</label></td> 
<td><input name="adress2" maxlength="30" type="text" value="<?=$objResult["adress2"];?>"></td> 
</tr> 

<tr> 
<td width="150" align="right"><label for="pcode">pcode</label></td> 
<td><input name="pcode" maxlength="8" type="text" value="<?=$objResult["pcode"];?>"> </td> 
</tr> 

<tr> 
<td width="150" align="right"><label for="email">email</label></td> 
<td><input name="email" maxlength="30" type="text" value="<?=$objResult["email"];?>"></td> 
</tr> 

<tr> 
<td width="150" align="right"><label for="lastcontactdate">lastcontactdate</label></td> 
<td><input name="lastcontactdate" maxlength="30" type="text" value="<?=$objResult["lastcontactdate"];?>"></td> 
</tr> 
<?php } ?> 
<tr> 
<td colspan="2" align="center"><input name="" type="submit" value="Update"></td> 
</tr> 

</table> 
</form> 

UPDATE.PHP

<?php 
header('Refresh: 5; URL=view11.php'); 
$objConnect = mysql_connect("localhost","root","2fudge") or die(mysql_error()); 
$objDB = mysql_select_db("teldirdb"); 

$id = $_REQUEST['id']; 
$fname = trim(mysql_real_escape_string($_POST["fname"])); 
$lname = trim(mysql_real_escape_string($_POST["lname"])); 
$tel = trim(mysql_real_escape_string($_POST["tel"])); 
$adress1 = trim(mysql_real_escape_string($_POST["adress1"])); 
$adress2 = trim(mysql_real_escape_string($_POST["adress2"])); 
$pcode = trim(mysql_real_escape_string($_POST["pcode"])); 
$email = trim(mysql_real_escape_string($_POST["email"])); 
$lastcontactdate = trim(mysql_real_escape_string($_POST["lastcontactdate"])); 

$rsUpdate = mysql_query("UPDATE teldir SET fname = '".$fname."', 
              lname = '".$lname."', 
              tel = ".$tel.", 
              adress1 = '".$adress1."', 
              adress2 = '".$adress2."', 
              pcode = ".$pcode.", 
              email = '".$email."', 
              lastcontactdate = '".$lastcontactdate."' WHERE id = ".$id." "); 

if($rsUpdate) { 
    echo "Successfully updated"; 
} else { 
    die('Invalid query: '.mysql_error()); 
}