2014-09-03 2 views
-1

Я изучаю PHP/MySQL во время работы над веб-приложением. Часть этого приложения требует повторения произвольного изображения из каталога изображений под названием «htdocs/full». База данных поддерживает путь к каждому изображению в столбце «image_path» в дополнение к столбцам для «first_name» «last_name».Как я могу получить случайное изображение из MySQL с PHP?

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

Я экспериментировал с несколькими методами за последние 24 часа, но большинство всего остального, что я видел в Stack и Google, - это вытащить изображение прямо из каталога, не используя строку базы данных (которая необходимо из-за соответствующих «first_name» и «last_name»).

Вот то, что я до сих пор (хотя у меня есть много различных вариантов, это я думаю, что это ближе я пришел):

<?php 
    $username="root";$password="*********";$database="offenders"; 

    mysql_connect('localhost',$username,$password); 

    mysql_select_db($database) or die("Unable to select database"); 

    $sSQLQuery = "SELECT image_path FROM offenders ORDER BY RAND() LIMIT 1"; 
    $aResult = mysql_query($sSQLQuery); 
    WHILE($aRow = mysql_fetch_array($aResult)): 
    { 
    header("Content-Type:image/jpeg"); 
    echo "<img src='php/imgView.php?imgId=".$aRow['image_path']."' />"; 
    } 

    ENDWHILE; 

?> 

Он производит страницу с крошечным сломанным изображением в верхний левый. Я пробовал это, повторяя $ aRow, а также $ aRow ['image_path'], как показано выше, и ряд других настроек, которые, похоже, вызывают ошибку. Любые идеи, что я делаю неправильно?

Большое спасибо!

Обновленный код:

<?php 
     $username="root";$password="*******";$database="offenders"; 

     mysql_connect('localhost',$username,$password); 

     mysql_select_db($database) or die("Unable to select database"); 

      $src="full/"; 

      //if you have any problem in the solution check this line, 
//means weather you are providing right path for your files or not. 


     $sSQLQuery = "SELECT image_path FROM offenders ORDER BY RAND() LIMIT 1"; 
     $aResult = mysql_query($sSQLQuery);      
     $aRow = mysql_fetch_array($aResult);     


     $file_path=$src.$aRow["image_path"]; 
     //echo "<a href='php/imgView.php?imgId=".$aRow['image_path']."'>"."<img src=".$file_path." />"."</a>".'<br/>'; 
      echo "<img src=".$file_path." />".'<br/>'; 
      //echo "<img src=full/1b2ba2f9a8b8ee9c062b09767535d69bd954e125.jpg>"; 



    /* if(isset($_GET['imgId'])) 
     { 
    //i am query only first_name but you can add for field as you want 
    //and i also used $_get['imgId']; in the query which is not safe but you can make it for //secure. 

     $sSQLQuery = "SELECT first_name FROM offenders where image_path='".$_GET['imgId']."'"; 
     $aResult = mysql_query($sSQLQuery); 
     WHILE($aRow = mysql_fetch_array($aResult)): 
     { 
     echo $aRow['first_name']; 
     } 

     ENDWHILE; 
     } 
     */ 
    ?> 
+0

что вы видите при просмотре источника HTML генерируется из веб-браузера? – iWantSimpleLife

+0

Ack. Добавлены соответствующие теги: Правонарушители user3246092

+0

Ok. С вашего источника PHP кажется правильным. Я думаю, вы должны проверить свой imgView.php tp, чтобы он правильно отправлял данные изображения. – iWantSimpleLife

ответ

0

Есть несколько вещей, которые здесь не так.

  • У вас есть выход в базу данных в цикле. Вместо

    WHILE ($ Arow = mysql_fetch_array ($ aResult)): { ... }

    ENDWHILE;

использование:

$aRow = mysql_fetch_array($aResult); 
... 
  • Вы возвращаете то, что выглядит как HTML, но у вас есть тип содержимого JPG. Либо верните HTML и используйте соответствующий тип контента, либо верните JPG, и верните его.
  • Если вы хотите вернуть сам JPG (а не HTML), используйте CURL для захвата изображения и возврата его.
0

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

позволяет сказать, что у вас есть изображения в имени папки PHP/изображение/чем ваши изображения приходит

Я пишу свое решение на предположении, что ваши изображения находятся в папке изображения, если они не вы может просто изменить значение $ src в решении.

и я также думаю, что вы хотите использовать эти изображения в качестве ссылки, поэтому вы можете получить имя_имя и last_name, когда кто-то нажимает на изображение, причина, по которой я так думаю, что вы пытаетесь дать id в img src = "",

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

Первый, исходя из предположения, что вы хотите вытащить first_name и last_name из базы данных, когда кто-то нажимает на изображение.

<?php 
     $username="root";$password="";$database="offenders"; 

     mysql_connect('localhost',$username,$password); 

     mysql_se 

lect_db($database) or die("Unable to select database"); 

      $src="php/image/";//if you have any problem in the solution check this line, 
//means weather you are providing right path for your files or not. 


     $sSQLQuery = "SELECT image_path FROM offenders ORDER BY RAND() LIMIT 1"; 
     $aResult = mysql_query($sSQLQuery);      
     $aRow = mysql_fetch_array($aResult);     


     $file_path=$src.$aRow["image_path"]; 
     echo "<a href='php/imgView.php?imgId=".$aRow['image_path']."'>"."<img src=".$file_path." />"."</a>".'<br/>'; 



     if(isset($_GET['imgId'])) 
     { 
    //i am query only first_name but you can add for field as you want 
    //and i also used $_get['imgId']; in the query which is not safe but you can make it for //secure. 

     $sSQLQuery = "SELECT first_name FROM offenders where image_path='".$_GET['imgId']."'"; 
     $aResult = mysql_query($sSQLQuery); 
     WHILE($aRow = mysql_fetch_array($aResult)): 
     { 
     echo $aRow['first_name']; 
     } 

     ENDWHILE; 
     } 
    ?> 

Второе решение только тянуть изображения из базы данных

удалить условие IsSet и в то время как цикл в состоянии Исети.

и изменить эту строку

echo "<a href='php/imgView.php?imgId=".$aRow['image_path']."'>"."<img src=".$file_path." />"."</a>".'<br/>'; 

К

echo "<img src=".$file_path." />".'<br/>'; 

    //if you notice the only different is this that i 
//remove the <a> tag in its path, so not it gonna pull images 
// from the database but you cant use them as link. 

Благодаря

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

//

+0

Эй, Ариф. Спасибо за помощь. Он не работает и по-прежнему содержит на странице сломанный значок изображения, который я не понимаю, потому что все, что вы мне дали, имеет смысл. Я изменил путь до $ src = "full /" ;. Я также добавил эхо ""; чтобы проверить, что путь работает, и это так. Я не понимаю, почему ваш код не работает. Все это имеет общий смысл. Я очень озадачен, но спасибо – user3246092

+0

full/1b2ba2f9a8b8ee9c062b09767535d69bd954e125.jpg - Компьютер/C:/MAMP/htdocs - localhost/stack.php - редактирование исходного сообщения для исходного кода – user3246092

+0

Полная версия с isset не закомментирована, не работает хорошо, чтобы уточнить – user3246092

Смежные вопросы