1

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++;
}

基本的に、ループはテーブルのすべての行に対して1回実行されます。すべてのテキストボックスについて、「データベース」を更新する必要があります。「テーブル」は、ID「1」の「投稿」の場合は$ _ POST [1]、ID「2」の「投稿」の場合は$_POST[2]などです。代わりに何も起こりません。どんな助けでもいただければ幸いです。

4

1 に答える 1

0

Prowlaが述べたように、mysql_関数の代わりに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更新ファイル:

$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についても読む必要があります)

于 2012-08-03T11:10:25.843 に答える