Как использовать Php внутри Php? - PullRequest
2 голосов
/ 15 апреля 2010

Может кто-нибудь сказать / показать мне, как использовать PHP внутри PHP. Я пытаюсь изменить URL изображения в зависимости от значения в базе данных MySQL. Вот пример того, что я пытаюсь сделать. Помните, что $ idx уже имеет значение из URL-адреса страницы.

<?php
$query  = "SELECT * FROM comment WHERE uname='$idx'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
echo "<img src='' name='comm' width='75px' height='60px' id='mainimage' />";
}
?>

Как сделать так, чтобы исходное значение изображения было получено из другой таблицы?

Ответы [ 4 ]

7 голосов
/ 15 апреля 2010

Вы можете объединить данные из нескольких таблиц в одном запросе SQL. Смотри: http://www.w3schools.com/sql/sql_join.asp

Пример:

SELECT column_name(s)
FROM table_name1
JOIN table_name2
ON table_name1.column_name=table_name2.column_name
5 голосов
/ 15 апреля 2010

Вы бы сделали еще один SQL-запрос внутри цикла while. Мне нравится, как вы это называете "Php внутри Php", это почти то, что вы делаете.

while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
  $image_query = "SELECT image_url FROM your_table";
  $image_result = mysql_query($image_query);
  $image = mysql_fetch_assoc($image_result);

  echo "<img src='" . $image['image_url'] . "' name='comm' width='75px' height='60px' id='mainimage' />";
}

Убедитесь, что имена переменных для вашего запроса и результата отличаются от вашего исходного запроса, поскольку вы все еще используете переменную $result из исходного запроса на каждой итерации цикла. Итак, здесь я поставил им префикс «image _».

1 голос
/ 15 апреля 2010

При случайном предположении, что другая таблица может называться accounts, а uname является ее первичным ключом, вы можете сделать JOIN, чтобы получить данные из обеих таблиц за один раз. Если вы можете уместить то, что хотите сделать, в один запрос, который обычно намного быстрее, чем выполнение дополнительного запроса для строки

<?php
    $result = mysql_query(
        "SELECT comment.*, account.url AS imgurl ".
        "FROM comment JOIN account ON comment.uname=account.uname ".
        "WHERE comment.uname='".mysql_real_escape_string($idx)."'"
    );
?>
<?php while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { ?>
    <img src="<?php echo htmlspecialchars($row['imgurl']) ?>" alt="" class="mainimage" />
<?php } ?>

Примечания:

  • вам нужно экранировать текст, вставленный в запрос SQL, или у вас возникли серьезные проблемы с безопасностью. Используйте mysql_real_escape_string или позвольте параметризованным запросам обработать его;

  • аналогично, когда вы помещаете текст в строку HTML, необходимо htmlspecialchars, или у вас есть другие (менее серьезные, но все еще не очень хорошие) проблемы безопасности;

  • вы не должны использовать один и тот же id для элемента более одного раза (что будет в цикле). То же самое относится к name на <img>, хотя есть небольшая причина, по которой вы действительно захотите использовать img name;

  • width="75px" не будет работать в атрибуте, так как px - измерения блока - это CSS, а не HTML. Опустите модуль, или, лучше, установите правило в CSS (.mainimage { width: 75px; height: 60px; }), чтобы сделать их все сразу.

0 голосов
/ 15 апреля 2010

Как бы я сделал исходное значение для изображения из другой таблицы?

Вы должны просто спросить другую таблицу. Вы можете задать запрос, создав подзапрос (или присоединиться) или создав второй запрос внутри цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...