0

前もって感謝します!

オンラインで見つけたチュートリアルに基づいて作成した簡単なmysqlとphpのブログがあります。私ができるようになりたいのですが、どうすればいいのかわかりません。これは次のとおりです。

各投稿のコメントごとに写真(アバター)を表示してほしい。選択される画像は、コメントの投稿者:領域の名前に基づいています。たとえば、管理者である私がスレッドにコメントを残したとします。私の名前は'$_SESSION'変数を介して自動的に取得されるため、毎回入力する必要はありません。コメントがブログスレッドページに表示されると、コメント投稿者:管理者が表示されます。この名前はdbに保存され、phpechoステートメントで取得されます。

したがって、このアバターコードで実行できるようにするのは、1)コメント投稿者:テキストが表示されている領域を確認する2)テキストを読む3)管理者と表示されていることを確認し、その横にadmin.png画像を表示することです。コメント投稿者:領域に管理者以外のものが表示されている場合は、guest.pngのように表示されます。

これは、stackoverflowとgoogle検索で見つけたコードのスニペットです。動作しますが、ゲスト画像を6回、次に実際のadmin.png画像、さらにゲスト画像を3回取り込みます。そして、それは各スレッドの各コメントにこのように表示されます!そして、そのスレッドに新しいスレッドと新しいコメントを追加すると、各コメントに表示されている複数の画像の最後にゲスト画像が再び追加されます。設定を間違えましたか?

<?
$sql = "SELECT comment_user FROM comments";
$result = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($result) != 0) {
    $counter = $starting + 1;
    $pathImg = "images/";
    while ($row = mysql_fetch_array($result)) {
        //calculate url image
        $pathFile = $pathImg . $row['comment_user'] . ".png";
        if (!file_exists($pathFile)) {
            $pathFile = $pathImg . "guest.png";
        }
        ?>
<img src="<?=$pathFile?>" alt="<?=$row['comment_user']?>">
</p>
<?
       $counter++;
    }
}
?>

これは、(ゲスト画像)(ゲスト画像)(ゲスト画像)(ゲスト画像)(ゲスト画像)(ゲスト画像)(管理者画像)(ゲスト画像)(ゲスト画像)(ゲスト画像)として表示されます。

何かを一緒に投げるのに助けがあれば素晴らしいです!シンプルにしようとしています!

編集:

これは、FlyingGuyの回答からのコードとともに、コメントが表示される方法です。

<?php

foreach ($post['comments'] as $comment){

$commentCount = 0 ;
$sql = "SELECT comment_user FROM comments";
$result = mysql_query($sql) or die(mysql_error());

while ($row = mysql_fetch_array($result)) {
$commentCount++ ;   
$pathImg = "images/";  
$pathFile = $pathImg . $row['comment_user'] . ".png";

if (!file_exists($pathFile)) {
$pathFile = $pathImg . "guest.png";
}

echo "<img src=\"". $pathFile ."\" alt=\"". $row['comment_user'] ."\"\><br>";

}
?>
<h4>By <?php echo $comment['user']; ?> on <?php echo $comment['date']; ?></h4>
<p><?php echo $comment['body']; ?></p>
<hr />

<?php

}

?>

これは、関数がコメントの表示と追加を探す方法です。

function get_comments($pid){

$pid = (int)$pid;

$sql = "SELECT `comment_body` AS `body`, `comment_user` AS `user`, DATE_FORMAT(`comment_date`, '%m/%d/%Y') AS`date` FROM `comments` WHERE `post_id` = {$pid}";

$comments = mysql_query($sql);

$return = array();
while (($row = mysql_fetch_assoc($comments)) !== false){
$return[] = $row;
}

return $return;

}

// adds a comment
function add_comment($pid, $user, $body){

if (valid_pid($pid) === false){
return false;
}

$pid = (int)$pid;

$user = mysql_real_escape_string(htmlentities($user));
$body = mysql_real_escape_string(nl2br(htmlentities($body)));

mysql_query("INSERT INTO `comments` (`post_id`, `comment_user`, `comment_body`, `comment_date`) VALUES ({$pid}, '{$user}', '{$body}', NOW())");
return true;
}

?>
4

1 に答える 1

1

結果セットの現在の行にあるユーザーの名前と一致する画像を選択することで、何をしようとしているのかを確認してください。したがって、各行に適切な画像ファイル変数を設定し、それをブラウザに送信します。

手始めに、ここでケースの問題の可能性を確認できます。すべてのユーザー名は小文字に強制され、すべてのイメージ名は小文字に強制されますか?これがWindowsの地雷であるLinuxボックス上にある場合はそれほど多くはありませんが、これを考慮に入れる必要があります。

クエリ結果セットの各行に画像名が設定されるため、次のようになります。

[画像][コメント]
[画像][コメント]
[画像][コメント]

結果セットに3つの行がある場合。

個人的には、あちこちでphpのオンとオフを切り替えることはすべて避けています。単一の文字列を連結してから、行ごとにエコーアウトします。だから私はそれを次のようにコーディングします:

<?
$commentCount = 0 ;
$sql = "SELECT comment_user FROM comments";
$result = mysql_query($sql) or die(mysql_error());

while ($row = mysql_fetch_assoc($result)) {
   $commentCount++ ;     
   $pathFile = $pathImg . $row['comment_user'] . ".png";

   if (!file_exists($pathFile)) {
    $pathFile = $pathImg . "guest.png";
   }

   echo "<img src=\"". $pathFile ."\" alt=\"". $row['comment_user'] ."\"\><br>";

}

だから私はあなたのコード例からカウンターなどの多くのものを排除しました。whileループは単に行がないので行がないので行があるかどうかを実際にチェックして確認する必要はありませんのであなたは単に質問があります従属コメントのないコメントの場合、コメントがある場合にのみ画像リンクが送信されます。

いいえ、これを行う場合は、アバターファイル名をユーザーテーブルとして作成し、常に存在する変数のグローバルセットの一部となるシステム構成の一部としてそれらへのパスを保存します。クエリはusersテーブルに参加し、画像名またはゲスト画像が結果セットに含まれます。もう少し複雑ですが、はるかにクリーンで、コードが簡素化されます。

私が好きではない理由の1つ;動的型付けが好きではありません。$rowはすべての行の配列に変更されていました。

于 2011-11-06T17:16:17.690 に答える