Intereting Posts

Как случайным образом извлекать изображения из моей базы данных mysql?

Хорошо, поэтому я сделал один php-файл для вывода изображений, это пример кода для выходной страницы:

mysql_connect ("", "", "") или die (mysql_error ()); mysql_select_db ("") или die (mysql_error ());

$query = mysql_query("SELECT * FROM store"); $number=mysql_num_rows($query); $result = mysql_query ("SELECT * FROM store ORDER BY RAND() LIMIT $number"); while ($row = mysql_fetch_assoc($result)) { echo '<img src=get.php?id=$row["id"]>'; } 

Get.php, на который ссылается тег img, имеет этот код:

mysql_connect ("", "", "") или die (mysql_error ()); mysql_select_db ("") или die (mysql_error ());

  $id = addslashes ($_REQUEST['id']); $query = mysql_query("SELECT * FROM store WHERE id= $id "); $row = mysql_fetch_array($query); $content = $row['image']; header('Content-type: image/jpg'); echo $content; 

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

Solutions Collecting From Web of "Как случайным образом извлекать изображения из моей базы данных mysql?"

Убираться:

 $result = mysql_query("SELECT * FROM store ORDER BY RAND()"); while($row = mysql_fetch_assoc($result)){ echo '<img src="get.php?id='.$row[id].'" />'; } 

Вы также можете echo mysql_error(); чтобы увидеть, есть ли какие-либо ошибки в ваших операциях mysql.

Вы также должны использовать mysql_real_escape_string () вместо addslashes ()

Или рассмотрите PDO для еще более безопасного решения.

Чтобы отладить, перейдите к get.php? Id = 1. Если вы видите, что изображение get.php работает, а основного файла нет.

Убедились ли вы, что get.php подключается к базе данных, а также к основному файлу?

В этом сценарии есть некоторые нелогичные вещи.

  1. Вы выбираете ВСЕ из магазина (* равно всем полям). Это очень, очень дорого. Если вы хотите использовать это, вы должны использовать SELECT COUNT (id) FROM store.

  2. Вы используете счетчик, для LIMIT. Но предел всегда будет таким же, как количество строк. Что делает LIMIT неуместным?

  3. Вы не должны использовать addlashes для экранирования ваших значений. Вместо этого используйте mysql_real_escape_string. Проверьте это здесь .

Я не уверен, какие значения находятся в вашей базе данных, возможно, вы можете опубликовать их? Возможно, вам нужно выполнить слэши, так как вы, вероятно, сохраните значения со слэшами в своей базе данных?

Все, что я получаю, это серия разрываемых значков страниц на выходной странице.

Фактически, вы создаете «атаку отказа в обслуживании» против вашего сайта, выполняя десятки сценариев PHP и открывая десятки соединений sql на один запрос страницы. Неудивительно, что сервер перегружен таким потоком и не показывает никаких изображений.

Также обратите внимание, что ваш код страдает от SQL-инъекции.
Либо измените intval() на intval() либо добавьте кавычки вокруг $ id в запросе (иначе экранирование не имеет смысла)