При попытке вывести данные из бд с разбиением на страницы и пагинацией, вместо каждой первой записи (т.е. 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: <html> <head> <title>Интернет магазин электроники МедиаМарт</title> <link rel="stylesheet" href="style.css"> </head> <body> <h3 text align = "center">Интернет магазин электроники "МедиаМарт"</h3> <?php //$page - задаёт номер страницы таблицы по умолчанию если page не прописан в url $page = 1; //$itemPerPage - количество записей на странице $itemsPerPage = 10; if (isset($_GET['page'])){ $page = $_GET['page']; }; //Параметры для подключения $db_host = "site.local"; $db_password ="123"; $db_user = "root"; mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); //Подключение к БД $db = mysqli_connect("site.local","root","");//расположение, имя пользователя // Выборка базы mysqli_select_db($db, "database3internetshop"); //Установление кодировки mysqli_query($db, "SET NAMES 'utf8'"); //$art - показывает с какой записи выводить. $art = ($page * $itemsPerPage) - $itemsPerPage; //вывод параметров из таблицы $result2 = mysqli_query($db,"SELECT * FROM `tv` LIMIT $art,$itemsPerPage"); $myrow2 = mysqli_fetch_row($result2); do{ echo "Артикль - ".$myrow2['article']."<br>"; echo "Наименование продукта - ".$myrow2['producte name']."<br>"; echo "Цена - ".$myrow2['price']."<br>"; }while ($myrow2 = mysqli_fetch_array($result2)); //echo $art; // Разбиваем все записи на нужное количество страниц $result2 = mysqli_query($db,"SELECT * FROM `tv` LIMIT $itemsPerPage"); //Определяем страницу на которой находимся if (isset($_GET['page'])){ $page = $_GET['page']; }else $page = 1; //Запрос для получения количества записей $res = mysqli_query($db,"SELECT COUNT(*) FROM `tv`"); $row = mysqli_fetch_row($res); $total = $row[0]; //всего записей //Расчёт необходимого количества страниц $str_pag = ceil($total / $itemsPerPage); //Формируем ссылки для построения пагинации for ($i = 1; $i <= $str_pag; $i++){ echo "<a href=?page=".$i."> Страница ".$i."</a>"; } ?> </body> </html> Где у меня ошибка и как её исправить?
ну напляшешся с бубном в присядку @-Artem-, судя по всему код вы писали своими руками - это хорошо. 1) Будьте внимателнее у вас Код (Text): if (isset($_GET['page'])){ $page = $_GET['page']; }; продублирован. Ну и переменная $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>"; }
Большое вам спасибо что откликнулись. Код (Text): <?php //$page - задаёт номер страницы таблицы по умолчанию если page не прописан в url $page = 1; //$itemPerPage - количество записей на странице $itemsPerPage = 10; //Параметры для подключения $db_host = "site.local"; $db_password ="123"; $db_user = "root"; mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); //Подключение к БД $db = mysqli_connect("site.local","root","");//расположение, имя пользователя // Выборка базы mysqli_select_db($db, "database3internetshop"); //Установление кодировки mysqli_query($db, "SET NAMES 'utf8'"); //$art - показывает с какой записи выводить. $art = ($page * $itemsPerPage) - $itemsPerPage; //вывод параметров из таблицы $result2 = mysqli_query($db,"SELECT * FROM `tv` LIMIT $art,$itemsPerPage"); while($myrow2 = mysqli_fetch_array($result2){ echo "Артикль -".$myrow2['article']."<br>"; echo "Наименование продукта - ".$myrow2['producte name']."<br>"; echo "Цена -".$myrow2['price']."<br>"; }) //echo $art; // Разбиваем все записи на нужное количество страниц $result2 = mysqli_query($db,"SELECT * FROM `tv` LIMIT $itemsPerPage"); //Определяем страницу на которой находимся if (isset($_GET['page'])){ $page = $_GET['page']; }else $page = 1; //Запрос для получения количества записей $res = mysqli_query($db,"SELECT COUNT(*) FROM `tv`"); $row = mysqli_fetch_row($res); $total = $row[0]; //всего записей //Расчёт необходимого количества страниц $str_pag = ceil($total / $itemsPerPage); //Формируем ссылки для построения пагинации for ($i = 1; $i <= $str_pag; $i++){ echo "<a href=?page=".$i."> Страница ".$i."</a>"; } ?> <html> <head> <title>Интернет магазин электроники МедиаМарт</title> <link rel="stylesheet" href="style.css"> </head> <body> <h3 text align = "center">Интернет магазин электроники "МедиаМарт"</h3> </body> </html> Но теперь пишет что echo неожиданный.
Найди ошибку, а был бы у тебя IDE он бы поругался. PHP: while($myrow2 = mysqli_fetch_array($result2){ })
Посмотреть вложение 3410 Посмотреть вложение 3410 Нашёл, спасибо. Visual Studio Code Код (Text): <?php //$page - задаёт номер страницы таблицы по умолчанию если page не прописан в url $page = 1; //$itemPerPage - количество записей на странице $itemsPerPage = 10; //Параметры для подключения $db_host = "site.local"; $db_password ="123"; $db_user = "root"; mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); //Подключение к БД $db = mysqli_connect("site.local","root","");//расположение, имя пользователя // Выборка базы mysqli_select_db($db, "database3internetshop"); //Установление кодировки mysqli_query($db, "SET NAMES 'utf8'"); //$art - показывает с какой записи выводить. $art = ($page * $itemsPerPage) - $itemsPerPage; //вывод параметров из таблицы $result2 = mysqli_query($db,"SELECT * FROM `tv` LIMIT $art,$itemsPerPage"); while($myrow2 = mysqli_fetch_array($result2)){ echo "Артикль -".$myrow2['article']."<br>"; echo "Наименование продукта - ".$myrow2['producte name']."<br>"; echo "Цена -".$myrow2['price']."<br>"; } //echo $art; // Разбиваем все записи на нужное количество страниц $result2 = mysqli_query($db,"SELECT * FROM `tv` LIMIT $itemsPerPage"); //Определяем страницу на которой находимся if (isset($_GET['page'])){ $page = $_GET['page']; }else $page = 1; //Запрос для получения количества записей $res = mysqli_query($db,"SELECT COUNT(*) FROM `tv`"); $row = mysqli_fetch_row($res); $total = $row[0]; //всего записей //Расчёт необходимого количества страниц $str_pag = ceil($total / $itemsPerPage); //Формируем ссылки для построения пагинации for ($i = 1; $i <= $str_pag; $i++){ echo "<a href=?page=".$i."> Страница ".$i."</a>"; } ?> <html> <head> <title>Интернет магазин электроники МедиаМарт</title> <link rel="stylesheet" href="style.css"> </head> <body> <h3 text align = "center">Интернет магазин электроники "МедиаМарт"</h3> </body> </html> Теперь у меня все числа отрицательные. И пагинация не работает, только значение ?page в url меняется.
Сначала выводим список, а потом смотрим на кол-во страниц? А если указать 100500-ую страницу, тоже будете что-то выводить? Как выше написали, отделите логику от представления. Проверяйте результаты запросов, даже если с виду они корректные: Как сделать пагинацию? Как сделать вывод списка статей? --- Добавлено --- Это что за странный орфан: Код (Text): // Разбиваем все записи на нужное количество страниц $result2 = mysqli_query($db,"SELECT * FROM `tv` LIMIT $itemsPerPage");