2012-08-02 4 views
1

mysql 데이터베이스의 행에 해당하는 문자열을 표시하는 텍스트 상자가 여러 개 있습니다. 난 텍스트 상자에 입력하고 제출을 클릭하여 데이터베이스의 각 문자열을 변경할 수 있기를 원합니다.다양한 텍스트 상자로 mysql 데이터베이스 업데이트

그래서 DB에 연결 한 후 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++; 
} 

기본적으로 루프는 테이블의 모든 행에 대해 한 번 실행됩니다. 모든 텍스트 상자에 대해 ID가 '1'인 '게시'의 경우 $ _POST [1], ID가 '2'인 '게시'의 경우 $ _POST [2] 등 '데이터베이스' '테이블'을 업데이트해야합니다. 대신 아무 일도 발생하지 않습니다. 도움이 될 것입니다.

+1

준비된 문구를 사용하십시오. 코드가 안전하지 않습니다. – Kurt

답변

0

Prowla에서 언급했듯이 mysql_function 대신 PDO를 사용해야합니다. 어쨌든, 난 당신의 코드를 개선하고 지금 일을한다고 가정

<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 업데이트 파일 : 내가 HTML 주석 (<!-- -->)를 추가 그래서

$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"; 
    } 
} 

당신은 업데이트하면 확인하실 수 있습니다 실제로 일어난다. 이렇게하면 코드를 디버깅 할 수 있습니다. (print_r, var_dump에 대해서도 읽어야합니다)

+0

감사합니다! 지금부터 준비된 진술을 사용할 것입니다. – user1526548

관련 문제