2012-07-12 78 views
2

我想在表單中顯示選定的ID數據並在數據庫中編輯它和UPDATE。我從數據庫中選擇數據並將其放入輸入標籤,但它不起作用。請幫忙!更新數據庫中的數據

<html> 
<body> 
<? 
$db = mysql_connect("localhost", "root",""); 
mysql_select_db("db_ncs",$db); 
$id = $_GET['s_id']; 
if($id) 
{ 
    $result=mysql_query("SELECT * FROM tbl_student WHERE s_id=$id"); 
    $row = mysql_fetch_assoc($result); 
} 
?> 

<form method="post" action="update.php"> 
    Name:<input type="Text" name="name" value="<?php echo $row['s_name'];?>" /><br> 
    Contact:<input type="Text" name="contact" value="<?php echo $row['s_contact'];?>" /><br> 
    Address:<input type="Text" name="address" value="<?php echo $row['s_address'];?>" /><br> 
    E-mail:<input type="Text" name="email" value="<?php echo $row['s_email'];?>" /><br> 
    <input type="submit" name="update" value="Update"> 
</form> 

<? 
if(isset($_POST['update'])) 
    { 
    $name = $_POST['s_name']; 
    $contact = $_POST['s_contact']; 
    $address = $_POST['s_address']; 
    $email = $_POST['s_email']; 
    $sql = "UPDATE tbl_student 
      SET (s_name='$name', s_contact='$contact', s_address='$address', s_email='$email') 
      WHERE s_id=$id"; 
    $res = mysql_query($sql);  
    if($res) 
     { 
      echo "Upadate Successfull!"; 
     } 
     else 
     { 
      echo "Sorry!"; 
     } 
    } 

?> 

</body> 
</html> 
+1

您的SQL查詢無效。你必須在字符串值附加引號。 – Florent 2012-07-12 10:13:17

+0

此代碼易受sql注入影響 - http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php – Will03uk 2012-07-12 10:23:01

回答

2

你忘了通過ID。

<form>標記之間加上這一個。

<input type="hidden" name="s_id" value="<?php echo $id;?>" /> 

您還需要使您的方法一致。表格通過method="get"提交數據,但您通過$_POST索取。您還需要通過在適當的位置添加或刪除「s_」來使輸入名稱與要求的名稱保持一致。

+0

但爲什麼type = hidden和name = s_id – manishrestha529 2012-07-12 10:16:22

+0

@mani因爲您不希望用戶更改他沒有查看的項目的數據,因此他不應在編輯時更改它。 'name = s_id',因爲這就是你在'$ _GET'語句中調用它的地方。它不需要任何具體的價值,只需要匹配。 – Ruben 2012-07-16 08:14:29

0

在表格中您有method="get",但您在您的PHP代碼中使用$_POST。嘗試定義形式如下:

<form method="post" action="update.php"> 

你的SQL查詢應該是(加引號):

$sql = "UPDATE tbl_student 
     SET (s_name='$name', s_contact='$contact', s_address='$address', s_email='$email') 
     WHERE s_id=$id"; 

嘗試添加此之後mysql_query

$result = mysql_query($sql) or die(mysql_error()); 

不要使用mysql_*功能,它們不再保持:使用PDOMySQLi

+0

我的主要問題是,我看不到在窗體中的值.... – manishrestha529 2012-07-12 10:20:38

+0

檢查我的編輯(添加表單方法問題) – Florent 2012-07-12 10:24:38

+0

不工作! :( – manishrestha529 2012-07-12 10:34:39

0

不是一個真正的回答你的問題,但我要你指向你的代碼中的一些疏漏:

  • 如果$_POST['update']設置,這並不意味着其他變量也被設置。如果用戶沒有在字段中輸入任何內容,它們可以是空的。您應該檢查每個$_POST$_GET變量是否使用issetempty來設置。

  • 你的代碼太不安全了!在查詢中使用它之前,您應該轉義每個變量。爲此,請使用mysql_real_escape_string()。我還建議你使用strip_tags()以及逃跑。

0

他不需要用$row = mysql_fetch_assoc($result)來得到結果嗎?

// Perform Query 
$result = mysql_query($query); 

// Check result 
// This shows the actual query sent to MySQL, and the error. Useful for debugging. 
if (!$result) { 
    $message = 'Invalid query: ' . mysql_error() . "\n"; 
    $message .= 'Whole query: ' . $query; 
    die($message); 
} 

// Use result 
// Attempting to print $result won't allow access to information in the resource 
// One of the mysql result functions must be used 
// See also mysql_result(), mysql_fetch_array(), mysql_fetch_row(), etc. 
while ($row = mysql_fetch_assoc($result)) { 
    echo $row['firstname']; 
    echo $row['lastname']; 
    echo $row['address']; 
    echo $row['age']; 
} 

http://php.net/manual/en/function.mysql-query.php

以上僅僅是一個例子。


更新:

$result=mysql_query("SELECT * FROM tbl_student WHERE s_id=$id"); 

$row = mysql_fetch_assoc($result); // I think you have to add this line here, don't you? 
?> 



<form method="post" action="update.php"> 
    <input type="hidden" name="s_id" value="<?php echo $id;?>" /> 
    Name:<input type="Text" name="name" value="<?php echo $row['s_name'];?>" /><br> 
    Contact:<input type="Text" name="contact" value="<?php echo $row['s_contact'];?>" /><br> 
    Address:<input type="Text" name="address" value="<?php echo $row['s_address'];?>" /><br> 
    E-mail:<input type="Text" name="email" value="<?php echo $row['s_email'];?>" /><br> 
    <input type="submit" name="update" value="Update"> 
</form> 

更新2:

,當你要更新,該方法在那裏$id = $_GET['s_id'];還在尋找一個名爲 'S_ID' PARAM會通過HTTP GET,但它不!

一個快速的解決方法可能是這樣的, <form method="post" action="update.php?<?php echo $id;?>">

,不要忘了加,$email = $_POST['s_email'];

$id= $_POST['s_id'];


更新3:

嗯,你仍然需要這個<input type="hidden" name="s_id" value="<?php echo $id;?>" />,不要忘了加,

$id= $_POST['s_id'];$email = $_POST['s_email'];後!

+0

我不能讓你難過 – manishrestha529 2012-07-12 10:29:16

+0

'$行= mysql_fetch_assoc($結果);!'我認爲你必須加入這一行,你不 – 2012-07-12 10:38:34

+1

感謝的人....現在我需要我的數據庫?要更新....請一個更青睞 – manishrestha529 2012-07-12 10:44:20

0

在窗體中有字段,如name="contact",但是當你試圖獲取值使用$_POST['s_contact']。這些需要匹配。

你需要在表單中隱藏s_id字段的原因是,你將更新被編輯的同一行。您的UPDATE語句包含WHERE s_id=$id,所以您需要以這種方式獲取原始ID。它是隱藏的,因爲您不希望用戶在編輯時能夠更改ID。