0

質問は少し奇妙に思えるかもしれませんが、私が言いたいことをお見せします:)

そのため、許可されたユーザー (教師) によって作成されたコメントを含む Web ページを作成しました。これは別のページの別のコードであるため、完全に機能します。もちろん、間違い等があった場合、コメントをした人が自分のコメントを変更することは可能であるべきです.

ユーザーに自分のコメントを別のテキスト領域に表示して、自分のコメントを表示することができました。テキスト領域には特定の名前がなく、単に txtComment と呼ばれます。コメントごとに一意にするにはどうすればよいですか (コメントは後で追加できるため、柔軟性があります)。ボタンを押した後、変更/適応されたテキストエリアを更新できないのは、それが問題だと思います。

私が言おうとしていることを皆さんが理解してくれることを願っています:p

私はオランダ語の単語をほとんど英語に変更したので、それが原因でスペルミスがある場合:)

これはコードです:

<?php
$sqlKlas = "Select * from tblcomments WHERE ForWho='".$_SESSION['User']."' AND ForWho='6HA1' OR VoorWie='6HA2'";
$resultKlas = mysql_query($sqlKlas) or die(mysql_error());
if (isset($_POST['btnAdaptCommentKlas'])){
    while($rowKlas = mysql_fetch_array($resultKlas)){
        $CommentNr = $rowKlas['CommentNr'];

        $sqlUpdate = "Update tblcomments SET Comment='".$_POST['txtComment']."' WHERE CommentNr=$CommentNr";
        $resultUpdate = mysql_query($sqlUpdate) or die(mysql_error());

        echo "<tr>";
        echo "<td>";
        ?><textarea name="txtComment" cols="80" rows="5"><?php echo $rowKlas['Comment']; ?></textarea><?php
        echo "</td>";
        echo "<td>".$rowKlas['ForWho']."</td>";
        echo "<td>".$rowKlas['Datum']."</td>";
        echo "</tr>";
    }
}
else {
    while($rowKlas = mysql_fetch_array($resultKlas)){
        echo "<tr>";
        echo "<td>";
        ?><textarea name="txtComment" cols="80" rows="5"><?php echo $rowKlas['Comment']; ?></textarea><?php
        echo "</td>";
        echo "<td>".$rowKlas['ForWho']."</td>";
        echo "<td>".$rowKlas['Datum']."</td>";
        echo "</tr>";
    }
}
4

3 に答える 3

1

私はそれを少し違った方法で行います - コメントをリストすることとは別に更新します。また、私の例のように、コメント ID を含むテキストエリア名を設定する必要があります。

<?php
$sqlKlas = "Select * from tblcomments WHERE ForWho='".$_SESSION['User']."' AND ForWho='6HA1' OR VoorWie='6HA2'";
$resultKlas = mysql_query($sqlKlas) or die(mysql_error());

if (isset($_POST['btnAdaptCommentKlas'])){
    foreach($_POST['txtComment'] as $key => $value) {
        $sqlUpdate = "UPDATE tblcomments SET Comment='".mysql_real_escape_string($value)."' WHERE CommentNr=".(int)$key;
        $resultUpdate = mysql_query($sqlUpdate) or die(mysql_error());
    }
}
while($rowKlas = mysql_fetch_array($resultKlas)){
    $CommentNr = $rowKlas['CommentNr'];
    echo "<tr>";
    echo "<td>";
    ?><textarea name="txtComment[<?php echo $CommentNr; ?>]" cols="80" rows="5"><?php echo $rowKlas['Comment']; ?></textarea><?php
    echo "</td>";
    echo "<td>".$rowKlas['ForWho']."</td>";
    echo "<td>".$rowKlas['Datum']."</td>";
    echo "</tr>";
}

また、mysql_*関数を使用するのではなくPDO、少なくともmysqli_*代わりに or を使用することをお勧めします。mysql_real_escape_string()ユーザー入力をエスケープするために使用することを強くお勧めします。

またMVC、データ操作 (更新、フェッチ、作成) とデータ表示 (HTML テンプレート内) を使用および分離することは、さらなる開発のためにはるかに優れており、保守しやすくなります。

于 2012-11-29T13:16:33.750 に答える
0

次にこれを試してください

   $sqlUpdate = "Update tblcomments SET Comment='".$_POST['txtComment']."' WHERE OpmerkingNr='".$OpmerkingNr."' ";

これを変更します

  $sqlKlas = "Select * from tblcomments WHERE ForWho='".$_SESSION['User']."' AND ForWho='6HA1' OR VoorWie='6HA2'";

これに

  $sqlKlas = "Select * from tblcomments WHERE ForWho='".$_SESSION['User']."' AND (ForWho='6HA1' OR VoorWie='6HA2' )";

ここにログインしているかどうかをユーザーに確認することもできます

     if (isset($_POST['btnAdaptCommentKlas'])){

に変更してみてください

    if (isset($_POST['btnAdaptCommentKlas']) AND $_SESSION['User'] !=0 ){

obs:代わりにPDOを使用することをお勧めします。

于 2012-11-29T13:37:12.460 に答える
0

txtComment使用する代わりにtxtComment[unique_id]。このようにして、次のようなことができます

foreach(array_keys($_GET['txtComment']) as $id => $comment) { ...
于 2012-11-29T13:16:54.487 に答える