2016-12-18 2 views
0

Согласно моему предыдущему вопросу here, я могу преобразовать ассоциативный массив в одну строку с помощью implode. Теперь, из сеанса тележки ($ _SESSION ['cart']) Я хочу получить имя (ы) книги (это ассоциативный массив) и преобразовать его в одну строку. Вот мой код:Получите рекордное значение из базы данных и взорвите его

foreach ($_SESSION['cart'] as $key=> $value) { 
    $sql = mysql_query("SELECT * FROM product WHERE product_name='$key'"); //take image name from table product with book_name=$key 

    $images = array(); 
    while ($product_image= mysql_fetch_assoc($sql)) { 
     $images[] = $product_image['book_image']; 
    } 

    echo implode(', ', $images); 
} 

Что я хочу видеть из моего кода выше:

book1_image, book2_image, book3_image

Но вернуться в это:

книга1_imagebook2_imagebook3_image

Я думаю, что метод imode, который я пишу, не работает. Я не знаю, что случилось с моим кодом. Может ли кто-нибудь помочь мне снова? Заранее спасибо

+0

Работает нормально https://3v4l.org/iEolv Найти ошибку в другом месте. –

+0

С этим кодом существует много неправильного (с использованием mysql_ *, который устарел и скоро исчезнет, ​​используя ненадежный ввод для построения строки запроса, выполняя несколько SQL-запросов в цикле, когда один запрос может извлекать все элементы в одном go, etc), – GordonM

+0

Были ли они правильно сохранены в базе данных? –

ответ

0

Ошибка в неправильном echo позиция.

// define images as empty array before you loop 
$images = array(); 

foreach ($_SESSION['cart'] as $key=> $value) { 
    $sql = mysql_query("SELECT * FROM product WHERE product_name='$key'"); //take image name from table product with book_name=$key 

    while ($product_image= mysql_fetch_assoc($sql)) { 
     $images[] = $product_image['book_image']; 
    } 
} 

// echo after you check all items 
echo implode(', ', $images); 

И ваша куча запросов может быть заменен с запросом типа:

SELECT * FROM product WHERE product_name IN ('name1', 'name2', 'name3') 

И последнее, но не в последнюю очередь - mysql расширение следует избегать, так как он уже удален из PHP.

+0

Если я напишу эхо после foreach, он отобразит последний элемент, сохраненный в сеансе тележки –

+0

Поскольку вы задали '$ images' для пустого массива на каждой итерации. Проверьте мой код еще раз. –

+0

А, я вижу. Поэтому я пишу переменную echo и my images в неправильном месте, спасибо человеку! : D –