Отображение изображения в блоге php mysql на основе имени пользователя сообщения - PullRequest
0 голосов
/ 06 ноября 2011

Заранее спасибо!

У меня есть простой блог mysql и php, который я построил на основе учебника, который нашел в Интернете.То, что я хотел бы сделать, но не знаю, как это сделать, это:

Я хотел бы, чтобы изображение (аватар) отображалось с каждым комментарием к каждому сообщению.Выбранная картинка будет основана на имени в области «Опубликовано»: комментария.Так, например: скажем, администратор оставляет комментарий в ветке.Мое имя автоматически вводится через переменную $ _SESSION, поэтому мне не нужно беспокоиться о том, чтобы вводить это каждый раз.Когда комментарий отображается на странице ветки блога, он показывает «Комментировано от: Admin».Это имя хранится в БД и извлекается с помощью оператора php echo.

Итак, я хочу, чтобы этот код аватара был в состоянии: 1) посмотреть на область, в которой Commented on By: текст равен 2) прочитать текст 3) увидеть, что на нем написано Admin, и отобразить admin.PNG изображение рядом с ним.Если он видит что-то кроме Admin в области Commented on By:, то он будет отображать что-то вроде guest.png

Вот фрагмент кода, который я нашел в моем стековом потоке и поиске в 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.функции поиска для отображения и добавления комментариев:

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

?>

1 Ответ

1 голос
/ 06 ноября 2011

Посмотрите, что вы пытаетесь сделать, это выбрать изображение, которое соответствует имени пользователя в текущей строке вашего набора результатов.Таким образом, вы установите соответствующую переменную файла изображения для каждой строки и отправите ее в браузер.

Для начала и можете увидеть вероятность возникновения проблем здесь.Все имена пользователей должны быть прописными, а имена изображений - строчными?Если это на linux box, который является миной на Windows не так много, но это следует учитывать.

Он установит имя изображения для каждой строки ваших запросовнабор результатов будет выглядеть так:

[изображение] [комментарии]
[изображение] [комментарии]
[изображение] [комментарии]

, если у вас естьтри строки в вашем наборе результатов. '

Лично я избегаю повсюду включать и выключать 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>";

}

Итак, я исключил из вашего примера много вещей, таких как счетчики и т. Д. Вам не нужно проверять и видеть, есть ли строки с тех порцикл просто не будет выполняться, так как нет строк, поэтому у вас просто возникнет вопрос с комментариями без подчиненных комментариев, и он будет только отправлять ссылку на изображение, если есть комментарии.

Нет, еслиесли бы я делал это, я бы создал имя файла аватара - это пользовательская таблица и сохранил путь к ним как часть конфигурации системы, которая будет частью глобального набора переменных, которые всегда присутствуют.Ваш запрос затем включится в таблицу пользователей, а имя изображения или гостевое изображение будут в вашем наборе результатов.Немного сложнее, но намного чище, и это упрощает ваш код.

Одна из причин, по которой мне не нравится динамическая типизация.$ row был преобразован в массив ВСЕХ строк ..

...