2012-08-02 42 views
1

我有多個文本框顯示對應於mysql數據庫中的一行的字符串。我希望能夠通過輸入文本框並單擊提交來更改數據庫中的每個字符串。用不同數量的文本框更新mysql數據庫

因此,我連接到數據庫後創建了帶有while循環的文本框。

<form action="<?php $self ?>" form method="post"> 

<?php 

$query = "SELECT * FROM `table` ORDER BY table.ID DESC"; 

$result = @mysql_query($query) or die(' 
ERR: The database returned an unexpected error. 

'); 

$num=mysql_numrows($result); 
$change=""; 

$i=0; 
while ($i < $num) { 

$post=mysql_result($result,$i,"post"); 
$id=mysql_result($result,$i,"ID"); 
$ts=mysql_result($result,$i,"timeStamp"); 


$page = html_entity_decode($post); 

$output = stripslashes($page); 

if ($output != "") { 
echo '<textarea name="' . $id . '" rows="4" cols="70">' . $output . '</textarea><div class="time"><font face="monospace">' . $ts . '</font></div>'; 
} //creates tables for each filled entry with a name corrsponing to its auto-increment id. 

$i++; 
} 

?> 

<input name="send" type="hidden" /> 
<div class="mod"> 
<p><input class="master" type="submit" value="Mod" /></p></div><!--submit button is called "Mod"--> 

</form> 

</body> 
</html> 

一切正常顯示。如果數據庫中有4行包含文本,則它們將顯示這4個文本,每個文本都位於單獨的文本框中。

現在我想用用戶在文本框中輸入的內容替換數據庫中的文本。這是我試過的代碼。它什麼也沒做。

<?php 
$i=0; 
while ($i < $num) { 

$id=mysql_result($result,$i,"ID"); 
$post=mysql_result($result,$i,"post"); 

if (!isset($_POST[$id])) { 
$_POST[$id] = ""; 
} 

$change = $_POST[$id]; 

mysql_query("UPDATE 'database'.'table' SET 'post' = '$change' WHERE 'table'.'ID' ='$id';"); 

$i++; 
} 

基本上,循環將爲表中的每一行運行一次。對於每個文本框,它應該更新'數據庫'。'表'與$ _POST [1]爲'後'ID爲'1',$ _POST [2]爲'後'ID爲'2'等... 反而沒有任何反應。 任何幫助,將不勝感激。

+1

請使用準備好的語句。你的代碼是不安全的。 – Kurt 2012-08-02 01:22:11

回答

0

正如Prowla提到的,您應該使用PDO而不是mysql_函數。 無論如何,我提高了你的代碼,並假設現在的工作:

<form action="<?php $self ?>" form method="post"> 
<?php 

$query = "SELECT * FROM `table` ORDER BY table.ID DESC"; 
$result = @mysql_query($query) or die('Query error:'.mysql_error()); 
$num=mysql_num_rows($result); 
$change=""; 

while($post = mysql_fetch_array($result)) 
{ 
    /* 
     $post = array(
      'post' => '....', 
      'ID' => '...', 
      'timeStamp' => '...' 
     ); 
    */ 

    $page = html_entity_decode($post['post']); 
    $output = stripslashes($page); 

    if ($output != "") { 
     echo '<textarea name="posts['.$post['ID'].']" rows="4" cols="70">' . $output . '</textarea><div class="time"><font face="monospace">' . $post['timeStamp'] . '</font></div>'; 
    } //creates tables for each filled entry with a name corrsponing to its auto-increment id. 

} 

?> 

<input name="send" type="hidden" /> 
<div class="mod"> 
<p><input class="master" type="submit" value="Mod" /></p></div><!--submit button is called "Mod"--> 

</form> 

</body> 
</html> 

PHP的更新文件:

$query = "SELECT * FROM `table` ORDER BY table.ID DESC"; 
$result = @mysql_query($query) or die('Query error:'.mysql_error()); 
while($update_post = mysql_fetch_array($result)) 
{ 
    $update = (isset($_POST[$update_post['ID']])) ? $_POST[$update_post['ID']] : ""; 
    if($update != "") 
    { 
      mysql_query("UPDATE 'database'.'table' SET 'post' = '$update' WHERE 'table'.'ID' ='".$update_post['ID']."';"); 
       echo "<!--POST ID ".$update_post['ID']." been updated-->\n"; 
    } 
} 

我加入HTML註釋(<!-- -->),這樣你可以檢查更新實際發生。 這樣你可以調試你的代碼。 (你也應該閱讀關於print_r,var_dump)

+0

謝謝!我將從現在開始使用準備好的陳述。 – user1526548 2012-08-09 06:02:11