2012-08-02 159 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()); 
}