Как случайным образом получить изображения из моей базы данных MySQL? - PullRequest
0 голосов
/ 14 апреля 2011

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

mysql_connect ("", "", "") или die (mysql_error ()); mysql_select_db ("") или умереть (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 ("") или умереть (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. Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 14 апреля 2011

Очистка:

$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 () вместо addlashes ()

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

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

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

0 голосов
/ 14 апреля 2011

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

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

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

0 голосов
/ 14 апреля 2011

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

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

  2. Вы используете количество, чтобы ОГРАНИЧИТЬ.Но предел всегда будет таким же, как количество строк.Что делает LIMIT неактуальным?

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

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

...