Неустранимая ошибка: вызов функции-члена prepare () для не-объекта в D: \ OpenServer \ domains \ topgiro.ru \ Popular.php в строке 4
Popular.php PHP: <?php $popular = $pdo->prepare($query); $popular->execute(); $result = $popular->fetchall(); $group = ''; foreach ($result as $value) { $group .= strtr($tovar, ['%id%' => $value['id'], '%src%' => $value['img']]); } echo strtr($category, ['%tovar%' => $group, '%name%' => $name]); ?> <a id="catalog"></a> <div class="clearfix"></div>
@jordan3216, С объектом $pdo разобрались? Попробуйте убрать все, кроме того что я писал. И проверьте имена файлов. Если они у Вас с заглавной буквы - тогда и в скрипте пишите с заглавной.
С объектом $pdo не разобралcя. Все имена файлов проверял, а также убирал все кроме Вашего кода. без результатно дает одну и туже ошибку. читаю книгу по php sql и стараюсь доработать Ваш первый вариант кода
Вставьте в начале скрипта: PHP: echo $_SERVER['DOCUMENT_ROOT'] . '/connect.php'; И проверьте этот файл, к которому выведется путь, на ошибки. Создается ли в нем объект $pdo? В конце концов можно вернуть строку : PHP: include($_SERVER['DOCUMENT_ROOT'].'/connect.php'); В начало файла Popular.php и посмотреть как будет работать. Из файла page.php ее естественно нужно убрать.
пришел к следующему результату: при переходе на любую ссылку из категорий у меня открывается как положено http://topgiro.ru/page.php?page=(в зависимости от товара) и тут вместо того чтобы показать тот товар который нужен мне заново показывает эти три категории но только названия кревые ну это понятно в кодировке проблема, а ниже уже сам товар но он открывается один и тот же для всех вариантов выбора --- Добавлено ---
Ну это уже проще лечится. У вас файл page.php имеет следующую структуру: - if($_GET['page']){...}else{...} - вывод 3х категорий - <!Doctype html> .... - <body>.... - Вывод одного товара. Для этого используются значения из последнего запроса из массива $values, скорее всего, последний товар. А должно быть так: PHP: <!Doctype html> .... <body>.... <?php if(isset($_GET['page'])) { // показать один товар } else { // показать все товары }?> </body></html> Почему %name% не заменилось?
А вот чтобы вывести один товар Вам необходимо знать в какой категории его искать, а в GET вы передаете только идентификатор. Еслиб была одна таблица - проблем бы не было.
может и в таблице есть проблема ну то что дублируется на уже другой странице те три категории в которых ранее был выбран товар таблица не причем Думаю сделать 3 страницы page6.5.php page10.php и page10.5.php и на каждой из них поставить уже проверенный скрипт
Вам хватит и одного скрипта. Просто надо добавить еще один параметр в GET - номер категории (1, 2, 3). А при выборе одного товара по этому номеру выбирать запрос к одной из трех таблиц. Сделайте новый пустой файл (newpage.php) и забейте в него код: PHP: <?php if(isset($_GET['page'])) { echo 'Вы выбрали товар с идентификатором ' . $_GET['page']; } else { // здесь ставите тот рабочий код, что выводит 3 категории и избавьтесь от html-тегов, которые стоят сами по себе } Добейтесь, чтобы этот скрипт работал и ни при каких обстоятельствах этот скрипт не смешивайте с html. Когда он заработает - будете делать вывод товара. И только после этого можно будет добавить Doctype и всю мишуру.
я имею ввиду этот код, а тут насколько я помню Вы писали решается result1, result2, result3 PHP: <?php include($_SERVER['DOCUMENT_ROOT'].'/connect.php'); $popular = $pdo->prepare('SELECT `id`, `img` FROM `sb6.5`'); $popular->execute(); $result = $popular->fetchall(); $tovar = '<a href="/page.php?page=%id%"> <div class="bike"> <img src="%src%"> <div class="bike-cost"> <div class="bike-mdl"> <h4>Smart Balance</h4> </div> <div class="bike-cart"> <a class="buy" href="/page.php?page=%id%">Купить</a></div> <div class="clearfix"> </div> </div> <div class="fast-viw"> <a href="/page.php?page=%id%">Подробнее</a> </div> </div> </a>'; $category = '<a id="catalog"></a><div class="bikes"> <div class="mountain-sec"> <center><h1>Популярное</h1></center><br> <h2>SMART BALANCE 6.5</h2>%tovar%<div class="clearfix"></div></div></div>'; $group = ''; foreach ($result as $value) { $group .= strtr($tovar, ['%id%' => $value['id'], '%src%' => $value['img']]); } echo str_replace('%tovar%', $group, $category); ?> --- Добавлено --- без новых файлов
и там подставить 3 файла/категории --- Добавлено --- я понимаю что с Вашей точки зрения дальнейшие варианты предложенные Вами они в чем то лучше но не с моими познаниями на данный момент(
@jordan3216, дело не в том, что лучше. Мне показалось с выводом 3х категоий вопрос уже решен - Вам нужно было заняться выводом одного товара. А на будущее старайтесь отходить от практики смешивать html и php - разделив их будет проще искать ошибки в скриптах, потому что скрипты сами по себе короткие, а разбавленные html-ем они становятся огромным непроходимым лесом. Я вообще храню html с метками типа %name% в отдельных файлах и оператор echo использую только 1 раз в конце скрипта.
Как я понимаю Вы имеете ввиду подключение к html файлов php по средствам include --- Добавлено --- это то о чем Вы говорили? PHP: $popular = $pdo->prepare('SELECT `id`, `img` FROM `sb10`'); $popular->execute(); $result2 = $popular->fetchall();
Можно и так, но я их содержимое записываю в переменные (file_get_contents), как в Вашем примере переменные $tovar, $category, чтобы можно было заменить в них метки %% на нужные значения.