За последние 24 часа нас посетили 17385 программистов и 1294 робота. Сейчас ищут 1606 программистов ...

Вывод данных из БД.

Тема в разделе "PHP для новичков", создана пользователем -Artem-, 22 янв 2019.

  1. -Artem-

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

    С нами с:
    14 окт 2018
    Сообщения:
    5
    Симпатии:
    0
    При попытке вывести данные из бд с разбиением на страницы и пагинацией, вместо каждой первой записи (т.е. 1, 11, 21, и т.д.) в браузере получаю это

    Notice: Undefined index: article in C:\xampp\htdocs\index.php on line 45
    Артикль -

    Notice: Undefined index: producte name in C:\xampp\htdocs\index.php on line 46
    Наименование продукта -

    Notice: Undefined index: price in C:\xampp\htdocs\index.php on line 47
    Цена -

    PHP:
    1. <html>
    2. <head>
    3.     <title>Интернет магазин электроники МедиаМарт</title>
    4.     <link rel="stylesheet" href="style.css">
    5. </head>
    6. <body>
    7.     <h3 text align = "center">Интернет магазин электроники "МедиаМарт"</h3>
    8.     <?php
    9.         //$page - задаёт номер страницы таблицы по умолчанию если page не прописан в url
    10.         $page = 1;
    11.         //$itemPerPage - количество записей на странице
    12.         $itemsPerPage = 10;
    13.    
    14.     if (isset($_GET['page'])){
    15.         $page = $_GET['page'];
    16.  
    17.     };
    18.     //Параметры для подключения
    19.     $db_host = "site.local";
    20.     $db_password ="123";
    21.     $db_user = "root";
    22.  
    23.     mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    24.    
    25.     //Подключение к БД
    26.     $db = mysqli_connect("site.local","root","");//расположение, имя пользователя
    27.  
    28.     // Выборка базы
    29.     mysqli_select_db($db, "database3internetshop");
    30.  
    31.     //Установление кодировки
    32.     mysqli_query($db, "SET NAMES 'utf8'");
    33.  
    34.     //$art - показывает с какой записи выводить.
    35.     $art = ($page * $itemsPerPage) - $itemsPerPage;
    36.  
    37.     //вывод параметров из таблицы
    38.     $result2 = mysqli_query($db,"SELECT * FROM `tv` LIMIT $art,$itemsPerPage");
    39.     $myrow2 = mysqli_fetch_row($result2);
    40.     do{
    41.        
    42.         echo "Артикль - ".$myrow2['article']."<br>";
    43.         echo "Наименование продукта - ".$myrow2['producte name']."<br>";
    44.         echo "Цена - ".$myrow2['price']."<br>";
    45.        
    46.     }while ($myrow2 = mysqli_fetch_array($result2));
    47.     //echo $art;
    48.  
    49.     // Разбиваем все записи на нужное количество страниц
    50.     $result2 = mysqli_query($db,"SELECT * FROM `tv` LIMIT $itemsPerPage");
    51.  
    52.     //Определяем страницу на которой находимся
    53.     if (isset($_GET['page'])){
    54.         $page = $_GET['page'];
    55.     }else $page = 1;
    56.    
    57.     //Запрос для получения количества записей
    58.     $res = mysqli_query($db,"SELECT COUNT(*) FROM `tv`");
    59.     $row = mysqli_fetch_row($res);
    60.     $total = $row[0]; //всего записей
    61.  
    62.     //Расчёт необходимого количества страниц
    63.     $str_pag = ceil($total / $itemsPerPage);
    64.  
    65.     //Формируем ссылки для построения пагинации
    66.     for ($i = 1; $i <= $str_pag; $i++){
    67.     echo "<a href=?page=".$i."> Страница ".$i."</a>";
    68.     }
    69.  
    70.     ?>
    71. </body>
    72. </html>
    Где у меня ошибка и как её исправить?
     

    Вложения:

  2. username1

    username1 Новичок

    С нами с:
    23 янв 2019
    Сообщения:
    33
    Симпатии:
    2
    ставьте линукс сначала
     
  3. -Artem-

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

    С нами с:
    14 окт 2018
    Сообщения:
    5
    Симпатии:
    0
    Как установка линукса может помочь мне в данной ситуации?
     
  4. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    ну напляшешся с бубном в присядку :D

    @-Artem-, судя по всему код вы писали своими руками - это хорошо.
    1) Будьте внимателнее у вас
    Код (Text):
    1.     if (isset($_GET['page'])){
    2.         $page = $_GET['page'];
    3.     };
    продублирован. Ну и переменная $page ни обработки ни валидации, что не есть гуд.
    2) Учитесь отделять логику скрипта от представления. Грубо говоря весь РНР вверху, "весь" HTML внизу. Не надо начинать код с <html>, код должен начинаться с <?php, а <html> как я уже сказал должен быть внизу файла, а в лучшем случаее вообще в другом файле (так называемый файл шаблона).
    3) Не хочется давать вам готовый пагинатор, потому как "своими руками" запоминается лучше и на подольше. Вот думаю как аккуратно вас направить на путь истинный. (Хотя обычно советую для начала книжек почитать, причём именно бумажных, купленных за свои кровные денежки, это стимулирует к пониманию описанного в этих самых книгах)
    --- Добавлено ---
    @-Artem-, хех... старею... глаза мои больные)) Жтож классический говнокод от ЖпОПОВА (хотя он сам его спёр из-за бугра, в лохматом году))) Не надо использовать цикл do{}while() там где он не нужен.
    --- Добавлено ---
    $myrow2 = mysqli_fetch_row($result2);
    вот этой строкой вы забрали первую запись, а дальше обращаетесь к ассоциативному массиву, хотя для этого есть mysqli_fetch_array
    удалите вот это
    и напишите вот так
    while ($myrow2 = mysqli_fetch_array($result2){
    echo "Артикль - ".$myrow2['article']."<br>";
    echo "Наименование продукта - ".$myrow2['producte name']."<br>";
    echo "Цена - ".$myrow2['price']."<br>";
    }
     
    -Artem- нравится это.
  5. -Artem-

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

    С нами с:
    14 окт 2018
    Сообщения:
    5
    Симпатии:
    0
    Большое вам спасибо что откликнулись.
    Код (Text):
    1. <?php
    2.     //$page - задаёт номер страницы таблицы по умолчанию если page не прописан в url
    3.     $page = 1;
    4.     //$itemPerPage - количество записей на странице
    5.     $itemsPerPage = 10;
    6.  
    7.     //Параметры для подключения
    8.     $db_host = "site.local";
    9.     $db_password ="123";
    10.     $db_user = "root";
    11.  
    12.     mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    13.  
    14.     //Подключение к БД
    15.     $db = mysqli_connect("site.local","root","");//расположение, имя пользователя
    16.  
    17.     // Выборка базы
    18.     mysqli_select_db($db, "database3internetshop");
    19.  
    20.     //Установление кодировки
    21.     mysqli_query($db, "SET NAMES 'utf8'");
    22.  
    23.     //$art - показывает с какой записи выводить.
    24.     $art = ($page * $itemsPerPage) - $itemsPerPage;
    25.  
    26.     //вывод параметров из таблицы
    27.     $result2 = mysqli_query($db,"SELECT * FROM `tv` LIMIT $art,$itemsPerPage");
    28.     while($myrow2 = mysqli_fetch_array($result2){
    29.         echo "Артикль -".$myrow2['article']."<br>";
    30.         echo "Наименование продукта - ".$myrow2['producte name']."<br>";
    31.         echo "Цена -".$myrow2['price']."<br>";
    32.     })
    33.     //echo $art;
    34.  
    35.     // Разбиваем все записи на нужное количество страниц
    36.     $result2 = mysqli_query($db,"SELECT * FROM `tv` LIMIT $itemsPerPage");
    37.  
    38.     //Определяем страницу на которой находимся
    39.     if (isset($_GET['page'])){
    40.             $page = $_GET['page'];
    41.     }else $page = 1;
    42.  
    43.     //Запрос для получения количества записей
    44.     $res = mysqli_query($db,"SELECT COUNT(*) FROM `tv`");
    45.     $row = mysqli_fetch_row($res);
    46.     $total = $row[0]; //всего записей
    47.  
    48.     //Расчёт необходимого количества страниц
    49.     $str_pag = ceil($total / $itemsPerPage);
    50.  
    51.     //Формируем ссылки для построения пагинации
    52.     for ($i = 1; $i <= $str_pag; $i++){
    53.     echo "<a href=?page=".$i."> Страница ".$i."</a>";
    54.     }
    55.  
    56.     ?>
    57. <html>
    58. <head>
    59.     <title>Интернет магазин электроники МедиаМарт</title>
    60.     <link rel="stylesheet" href="style.css">
    61. </head>
    62. <body>
    63.     <h3 text align = "center">Интернет магазин электроники "МедиаМарт"</h3>
    64.  
    65. </body>
    66. </html>
    Но теперь пишет что echo неожиданный.
     

    Вложения:

  6. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Найди ошибку, а был бы у тебя IDE он бы поругался.
    PHP:
    1. while($myrow2 = mysqli_fetch_array($result2){
    2. })
     
    -Artem- нравится это.
  7. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    ну нельзя тупо перенести <html> вниз и радоваться
    каким редактором кода пользуетесь?
     
  8. -Artem-

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

    С нами с:
    14 окт 2018
    Сообщения:
    5
    Симпатии:
    0
    Посмотреть вложение 3410 Посмотреть вложение 3410
    Нашёл, спасибо.
    Visual Studio Code
    Код (Text):
    1. <?php
    2.     //$page - задаёт номер страницы таблицы по умолчанию если page не прописан в url
    3.     $page = 1;
    4.     //$itemPerPage - количество записей на странице
    5.     $itemsPerPage = 10;
    6.  
    7.     //Параметры для подключения
    8.     $db_host = "site.local";
    9.     $db_password ="123";
    10.     $db_user = "root";
    11.  
    12.     mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    13.  
    14.     //Подключение к БД
    15.     $db = mysqli_connect("site.local","root","");//расположение, имя пользователя
    16.  
    17.     // Выборка базы
    18.     mysqli_select_db($db, "database3internetshop");
    19.  
    20.     //Установление кодировки
    21.     mysqli_query($db, "SET NAMES 'utf8'");
    22.  
    23.     //$art - показывает с какой записи выводить.
    24.     $art = ($page * $itemsPerPage) - $itemsPerPage;
    25.  
    26.     //вывод параметров из таблицы
    27.     $result2 = mysqli_query($db,"SELECT * FROM `tv` LIMIT $art,$itemsPerPage");
    28.     while($myrow2 = mysqli_fetch_array($result2)){
    29.         echo "Артикль -".$myrow2['article']."<br>";
    30.         echo "Наименование продукта - ".$myrow2['producte name']."<br>";
    31.         echo "Цена -".$myrow2['price']."<br>";
    32.     }
    33.     //echo $art;
    34.  
    35.     // Разбиваем все записи на нужное количество страниц
    36.     $result2 = mysqli_query($db,"SELECT * FROM `tv` LIMIT $itemsPerPage");
    37.  
    38.     //Определяем страницу на которой находимся
    39.     if (isset($_GET['page'])){
    40.             $page = $_GET['page'];
    41.     }else $page = 1;
    42.  
    43.     //Запрос для получения количества записей
    44.     $res = mysqli_query($db,"SELECT COUNT(*) FROM `tv`");
    45.     $row = mysqli_fetch_row($res);
    46.     $total = $row[0]; //всего записей
    47.  
    48.     //Расчёт необходимого количества страниц
    49.     $str_pag = ceil($total / $itemsPerPage);
    50.  
    51.     //Формируем ссылки для построения пагинации
    52.     for ($i = 1; $i <= $str_pag; $i++){
    53.     echo "<a href=?page=".$i."> Страница ".$i."</a>";
    54.     }
    55.  
    56.     ?>
    57. <html>
    58. <head>
    59.     <title>Интернет магазин электроники МедиаМарт</title>
    60.     <link rel="stylesheet" href="style.css">
    61. </head>
    62. <body>
    63.     <h3 text align = "center">Интернет магазин электроники "МедиаМарт"</h3>
    64.  
    65. </body>
    66. </html>
    Теперь у меня все числа отрицательные.

    И пагинация не работает, только значение ?page в url меняется.
     

    Вложения:

    #8 -Artem-, 24 янв 2019
    Последнее редактирование: 24 янв 2019
  9. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @-Artem- это не отрицание, это тире , ты же сам пишешь:
    PHP:
    1. echo "Артикль -";
     
    -Artem- нравится это.
  10. -Artem-

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

    С нами с:
    14 окт 2018
    Сообщения:
    5
    Симпатии:
    0
    Спасибо поправил.
     
  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.840
    Симпатии:
    651
    Сначала выводим список, а потом смотрим на кол-во страниц? А если указать 100500-ую страницу, тоже будете что-то выводить?

    Как выше написали, отделите логику от представления. Проверяйте результаты запросов, даже если с виду они корректные:
    Как сделать пагинацию?
    Как сделать вывод списка статей?
    --- Добавлено ---
    Это что за странный орфан:
    Код (Text):
    1.     // Разбиваем все записи на нужное количество страниц
    2.     $result2 = mysqli_query($db,"SELECT * FROM `tv` LIMIT $itemsPerPage");
     
    -Artem- нравится это.