2012-06-16 25 views
0

我試圖製作一個表單,允許用戶編輯數據庫中的記錄。以HTML更新格式插入SQL數據庫值

main.php是一個表格,用戶可以在記錄點擊編輯/刪除:

echo "<td>".$row["fname"].", ".$row["first_name"]."</center></td>"; 
    echo "<td><center>".$row["gender"]."</center></td>"; 
    echo "<td><center>".$row["city"]."</center></td>"; 
    echo "<td><center>".$row["extra"]."</center></td>"; 
    echo '<td><center><a href="form.php?id='.$row["p_ID"].'"><img src="edit_icon.png"/></a><center></td>'; 
    echo '<td><center><a href="delete.php?id='.$row["p_ID"].'"><img src="delete.gif"/></a><center></td>'; 
    echo "</tr>"; 
    } 
?> 

<input type="hidden" name="p_ID" value="<?php echo $row["p_ID"]?>"></input> 
<input type="hidden" name="lname" value="<?php echo $row["lname"]?>"></input> 
etc.. 


當用戶點擊編輯圖標,它重定向到窗體頁,我需要值($row['fname'])顯示在各自的字段中。我嘗試過建議的解決方案,但我仍然不知道如何正確完成此操作。我不斷收到錯誤。這是我和我的form.php

@$submit=$_POST['submit']; 
@$lname=$_GET['lname']; 
@$gender=$_GET['gender']; 
@$city=$_GET['city']; 
@$extra=$_GET['extra']; 
?> 

Last name <input type="text" name="lname" value= <?php echo $lname ?>><br><br> 
Gender <input type="radio" name="gender" value="M" <?php if($gender=="M") {echo "checked";} else {echo " ";} ?>/>M&nbsp; 
<input type="radio" name="gender" value="F" <?php if($gender=="F") {echo "checked";} else {echo " ";} ?>/>F<br><br> 
City <select name="city"> 
    <option value="x">Select</option> 
    <?php 
    $db=mysql_connect("localhost","root") or die('Not connected : ' . mysql_error()); 
    mysql_select_db("my_db",$db) or die (mysql_error()); 
    $SQL="SELECT * FROM cities"; 
    $result=mysql_query($SQL) or die(mysql_error()); 
    $num_results=mysql_num_rows($result); 
    mysql_close($db); 
    for ($i=0;$i<$num_results;$i++) 
     { 
     $row=mysql_fetch_array($result); 
     echo"<option value='".$row['city_id']."'", $row['city_id']==$row['city_ID']? " selected='selected'" : '',">".$row['city']."</option>"; 
     } 
    ?> 
    </select><br><br> 

Extra <input type="checkbox" name="extra" value="yes" <?php if($extra=="yes") {echo "checked";} else {echo " ";} ?>/><br><br> 


試過,我現在真的不關心任何SQL注入或任何東西,我只是需要這個工作。我會很感激任何幫助!

錯誤:一切

+1

'我只是需要這個工作'着名的遺言:)無論如何,你應該引用你正在得到的確切的錯誤。 –

+0

你不應該關閉數據庫......尤其是在你循環遍歷結果集之前......但是我們需要你得到的錯誤消息......還要顯示你從$ _GET獲取值的代碼和把它們放在像'$ lname'這樣的本地變量中。 – prodigitalson

+0

在開始編寫html之前,您似乎沒有關閉您的標記。 – keto23

回答

1

您關閉mysql_query之前的連接在mysql_fetch_array使用未定義指數。

您試圖錯誤地提取行。

mysql_close不需要,除非在查詢之後有很多處理,因爲在腳本完成運行後關閉連接。

此外,聲明變量這樣,除去不確定的指數錯誤:

$submit = isset($_POST['submit']) ? mysql_real_escape_string($_POST['submit']) : ""; 

注:這也防止SQL注入,但mysql_real_escape_string()只會在連接之後的工作。

<?php 

$db=mysql_connect("localhost","root") or die('Not connected : ' . mysql_error()); 
mysql_select_db("my_db",$db) or die (mysql_error()); 

$submit = isset($_POST['submit']) ? mysql_real_escape_string($_POST['submit']) : ""; 
//other vars here 

$SQL="SELECT * FROM cities"; 
$result=mysql_query($SQL) or die(mysql_error()); 
while($row = mysql_fetch_array($result)){ 
    echo "<option value='".$row['city_id']."'>".$row['city']."</option>"; 
} 
mysql_close(); // now you can close the connection 
?> 
+0

好想法。但是在這裏不需要SQL注入保護,因爲這些變量都不會觸及OP現在的查詢中的數據庫。 –

+0

謝謝!這擺脫了我的未定義的索引錯誤,但我的表單仍然沒有記錄數據庫的默認值 – user1344705

+0

很高興我能幫助(:檢查我的編輯。 – AustinAllover

0

你需要的是表單提交檢查。下面是一個單頁更新腳本的一般形式:

<?php 
if(isset($_POST['submit'])) { 
    // Form was submitted, process it and display message 
    exit(); // Prevent form from being displayed again 
} 
?> 
<!doctype html> 
<html> 
<body> 
    <form method="POST" action="form.php"> 
     <!-- fields --> 
     <input type="submit" name="submit" value="Submit" /> 
    </form> 
</body> 
</html> 
+0

謝謝你的時間!但我是一個初學者,它使我困惑只使用一種形式,我需要的形式,過程和主要分離:( – user1344705