За последние 24 часа нас посетили 17585 программистов и 1720 роботов. Сейчас ищут 1862 программиста ...

В чем ошибка?

Тема в разделе "PHP и базы данных", создана пользователем jordan3216, 30 июл 2017.

  1. jordan3216

    jordan3216 Новичок

    С нами с:
    20 июл 2017
    Сообщения:
    60
    Симпатии:
    0
    Неустранимая ошибка: вызов функции-члена prepare () для не-объекта в D: \ OpenServer \ domains \ topgiro.ru \ Popular.php в строке 4
     
  2. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Покажите Ваш код в обоих файлах. У Вас похоже нет подключения к БД. Объект $pdo не создан.
     
  3. jordan3216

    jordan3216 Новичок

    С нами с:
    20 июл 2017
    Сообщения:
    60
    Симпатии:
    0
    Popular.php
    PHP:
    1. <?php
    2. $popular = $pdo->prepare($query);
    3. $popular->execute();
    4. $result = $popular->fetchall();
    5. $group = '';
    6. foreach ($result as $value)
    7. {
    8.     $group .= strtr($tovar, ['%id%' => $value['id'], '%src%' => $value['img']]);
    9. }
    10. echo strtr($category, ['%tovar%' => $group, '%name%' => $name]);
    11. ?>
    12. <a id="catalog"></a>
    13.  
    14. <div class="clearfix"></div>
    15.      
     

    Вложения:

    • page.txt
      Размер файла:
      7,5 КБ
      Просмотров:
      1
  4. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @jordan3216, С объектом $pdo разобрались?
    Попробуйте убрать все, кроме того что я писал.
    И проверьте имена файлов. Если они у Вас с заглавной буквы - тогда и в скрипте пишите с заглавной.
     
  5. jordan3216

    jordan3216 Новичок

    С нами с:
    20 июл 2017
    Сообщения:
    60
    Симпатии:
    0
    пока ничего не получилось
     
  6. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Нельзя ли более информативно?
     
  7. jordan3216

    jordan3216 Новичок

    С нами с:
    20 июл 2017
    Сообщения:
    60
    Симпатии:
    0
    С объектом $pdo не разобралcя. Все имена файлов проверял, а также убирал все кроме Вашего кода. без результатно дает одну и туже ошибку. читаю книгу по php sql и стараюсь доработать Ваш первый вариант кода
     
  8. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Вставьте в начале скрипта:
    PHP:
    1. echo $_SERVER['DOCUMENT_ROOT'] . '/connect.php';
    И проверьте этот файл, к которому выведется путь, на ошибки. Создается ли в нем объект $pdo?
    В конце концов можно вернуть строку :
    PHP:
    1. include($_SERVER['DOCUMENT_ROOT'].'/connect.php');
    В начало файла Popular.php и посмотреть как будет работать. Из файла page.php ее естественно нужно убрать.
     
    #58 Maputo, 1 авг 2017
    Последнее редактирование: 1 авг 2017
  9. jordan3216

    jordan3216 Новичок

    С нами с:
    20 июл 2017
    Сообщения:
    60
    Симпатии:
    0
    пришел к следующему результату:
    при переходе на любую ссылку из категорий у меня открывается как положено http://topgiro.ru/page.php?page=(в зависимости от товара)
    и тут вместо того чтобы показать тот товар который нужен мне заново показывает эти три категории но только названия кревые ну это понятно в кодировке проблема, а ниже уже сам товар но он открывается один и тот же для всех вариантов выбора
    --- Добавлено ---
    Снимок.JPG
     
  10. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Ну это уже проще лечится. У вас файл page.php имеет следующую структуру:
    - if($_GET['page']){...}else{...}
    - вывод 3х категорий
    - <!Doctype html> ....
    - <body>....
    - Вывод одного товара. Для этого используются значения из последнего запроса из массива $values, скорее всего, последний товар.

    А должно быть так:
    PHP:
    1. <!Doctype html> ....
    2. <body>....
    3. <?php
    4. if(isset($_GET['page']))
    5. {
    6. // показать один товар
    7. } else {
    8. // показать все товары
    9. }?>
    10. </body></html>
    Почему %name% не заменилось?
     
  11. jordan3216

    jordan3216 Новичок

    С нами с:
    20 июл 2017
    Сообщения:
    60
    Симпатии:
    0

    Вложения:

  12. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    А вот чтобы вывести один товар Вам необходимо знать в какой категории его искать, а в GET вы передаете только идентификатор. Еслиб была одна таблица - проблем бы не было.
     
  13. jordan3216

    jordan3216 Новичок

    С нами с:
    20 июл 2017
    Сообщения:
    60
    Симпатии:
    0
    может и в таблице есть проблема ну то что дублируется на уже другой странице те три категории в которых ранее был выбран товар таблица не причем
    Думаю сделать 3 страницы page6.5.php page10.php и page10.5.php и на каждой из них поставить уже проверенный скрипт
     
  14. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Вам хватит и одного скрипта. Просто надо добавить еще один параметр в GET - номер категории (1, 2, 3). А при выборе одного товара по этому номеру выбирать запрос к одной из трех таблиц.
    Сделайте новый пустой файл (newpage.php) и забейте в него код:
    PHP:
    1. <?php
    2. if(isset($_GET['page']))
    3. {
    4. echo 'Вы выбрали товар с идентификатором ' . $_GET['page'];
    5. } else {
    6. // здесь ставите тот рабочий код, что выводит 3 категории и избавьтесь от html-тегов, которые стоят сами по себе
    7. }
    Добейтесь, чтобы этот скрипт работал и ни при каких обстоятельствах этот скрипт не смешивайте с html.
    Когда он заработает - будете делать вывод товара.
    И только после этого можно будет добавить Doctype и всю мишуру.
     
  15. jordan3216

    jordan3216 Новичок

    С нами с:
    20 июл 2017
    Сообщения:
    60
    Симпатии:
    0
    я имею ввиду этот код, а тут насколько я помню Вы писали решается result1, result2, result3
    PHP:
    1. <?php
    2. include($_SERVER['DOCUMENT_ROOT'].'/connect.php');
    3. $popular = $pdo->prepare('SELECT `id`, `img`  FROM `sb6.5`');
    4. $popular->execute();
    5. $result = $popular->fetchall();
    6. $tovar = '<a  href="/page.php?page=%id%">
    7. <div class="bike">
    8. <img src="%src%">
    9. <div class="bike-cost">
    10. <div class="bike-mdl">
    11. <h4>Smart Balance</h4>
    12. </div>
    13. <div class="bike-cart">
    14. <a class="buy" href="/page.php?page=%id%">Купить</a></div>
    15. <div class="clearfix">
    16. </div>
    17. </div>
    18. <div class="fast-viw">
    19. <a href="/page.php?page=%id%">Подробнее</a>
    20. </div>
    21. </div>
    22. </a>';
    23. $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>';
    24. $group = '';
    25. foreach ($result as $value)
    26. {
    27.     $group .= strtr($tovar, ['%id%' => $value['id'], '%src%' => $value['img']]);
    28. }
    29. echo str_replace('%tovar%', $group, $category);
    30. ?>
    --- Добавлено ---
    без новых файлов
     
  16. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @jordan3216, если этот вариант Вам проще - почему бы и нет.
     
  17. jordan3216

    jordan3216 Новичок

    С нами с:
    20 июл 2017
    Сообщения:
    60
    Симпатии:
    0
    и там подставить 3 файла/категории
    --- Добавлено ---
    я понимаю что с Вашей точки зрения дальнейшие варианты предложенные Вами они в чем то лучше но не с моими познаниями на данный момент(
     
  18. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @jordan3216, дело не в том, что лучше. Мне показалось с выводом 3х категоий вопрос уже решен - Вам нужно было заняться выводом одного товара.
    А на будущее старайтесь отходить от практики смешивать html и php - разделив их будет проще искать ошибки в скриптах, потому что скрипты сами по себе короткие, а разбавленные html-ем они становятся огромным непроходимым лесом. Я вообще храню html с метками типа %name% в отдельных файлах и оператор echo использую только 1 раз в конце скрипта.
     
  19. jordan3216

    jordan3216 Новичок

    С нами с:
    20 июл 2017
    Сообщения:
    60
    Симпатии:
    0
    Как я понимаю Вы имеете ввиду подключение к html файлов php по средствам include
    --- Добавлено ---
    это то о чем Вы говорили?
    PHP:
    1. $popular = $pdo->prepare('SELECT `id`, `img`  FROM `sb10`');
    2. $popular->execute();
    3. $result2 = $popular->fetchall();
     
  20. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Можно и так, но я их содержимое записываю в переменные (file_get_contents), как в Вашем примере переменные $tovar, $category, чтобы можно было заменить в них метки %% на нужные значения.
     
  21. jordan3216

    jordan3216 Новичок

    С нами с:
    20 июл 2017
    Сообщения:
    60
    Симпатии:
    0
    Спасибо большое эта информация будет очень полезной.
     
  22. jordan3216

    jordan3216 Новичок

    С нами с:
    20 июл 2017
    Сообщения:
    60
    Симпатии:
    0
    меняю имя переменной но по какой причине выдает пустую страницу?