Всем привет! Делал форму для сортировки, сама форма у меня динамическая – для каждого раздела форма разная. Все данные берутся из БД. Сама сортировка работает идеально. Возник такой момент – после сортировки в <input type=’radio’ name=’… должно быть checked. Input – ы у меня выводятся через цикл. Решил сделать данный момент условие в цикле, но что то не получается. Вот пример что я сделал: PHP: do { echo "<li> <input type='radio' name='".$type_sort_db_row['variable']."' value='"; if ($sort_db_row['title'] = $_GET[''.$type_sort_db_row['variable'].'']) {echo "".$sort_db_row['title']."' checked>".$sort_db_row['title']."";} else {echo "".$sort_db_row['title']."'>".$sort_db_row['title'].""} echo "</li>"; } while ($sort_db_row = mysql_fetch_array($sort_db)); Получается на экран вообще ничего не выводит сейчас, а если условие уберу то все выводит. подскажите в чем проблема?
@Artur_hopf, PHP: <?php $msection_db = mysql_query("select * from `section` where `mtitle`='".$msection."'",$db); if (!$msection_db) { echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>"; exit(mysql_error()); } if (mysql_num_rows($msection_db) > 0){ $msection_db_row = mysql_fetch_array($msection_db);} $min_price_db = mysql_query("SELECT `price` FROM `goods` WHERE `section`='".strip_tags($msection_db_row['title'])."' ORDER BY `price` ASC ",$db); if (!$min_price_db) { echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>"; exit(mysql_error()); } if (mysql_num_rows($min_price_db) > 0){ $min_price_db_row = mysql_fetch_array($min_price_db); } $max_price_db = mysql_query("select `price` from `goods` where `section`='".strip_tags($msection_db_row['title'])."' order by `price` desc",$db); if (!$max_price_db) { echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>"; exit(mysql_error()); } if (mysql_num_rows($max_price_db) > 0){ $max_price_db_row = mysql_fetch_array($max_price_db);} if (!isset($price_one,$price_two)) { if (!isset($msection)) {} else { echo "<div class='sort'>"; $type_sort_db = mysql_query("select * from `type-sort`",$db); if (!$type_sort_db) { echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>"; exit(mysql_error()); } if (mysql_num_rows($type_sort_db) > 0){ $type_sort_db_row = mysql_fetch_array($type_sort_db); echo "<form action='../../section/?msection=".$msection."' method='get'><input type='hidden' name='msection' value='".$msection."'>"; do { $sort_db = mysql_query("select * from `sort` where `msection`='".$msection."' and `type`='".$type_sort_db_row['title']."'",$db); if (!$sort_db) { echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>"; exit(mysql_error()); } if (mysql_num_rows($sort_db) > 0){ $sort_db_row = mysql_fetch_array($sort_db); echo " <div class='sort_title'><strong>".$type_sort_db_row['title']."</strong></div> <div class='sort_radio'> <ul> "; do { echo "<li><input type='radio' name='".$type_sort_db_row['variable']."' value='".$sort_db_row['title']."'>".$sort_db_row['title']."</li>"; } while ($sort_db_row = mysql_fetch_array($sort_db)); echo " </ul></div> "; } } while ($type_sort_db_row = mysql_fetch_array($type_sort_db)); echo " <div class='sort_title'><strong>Рознечная цена</strong></div> <div align='center'>От <input type='text' name='price_one' style='width:39.5%;' value='".$min_price_db_row['price']*$course_db_row['ruble']."'> до <input type='text' name='price_two' style='width:39.5%;' value='".$max_price_db_row['price']*$course_db_row['ruble']."'></div> <div align='center'><input type='submit' value='Показать' style='margin:0.5vw; border:0; background:#E82C31; color:#FFFFFF; padding:10px 20px;'></div></form> </div>"; } else {}} } else { echo "<div class='sort'>"; $type_sort_db = mysql_query("select * from `type-sort`",$db); if (!$type_sort_db) { echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>"; exit(mysql_error()); } if (mysql_num_rows($type_sort_db) > 0){ $type_sort_db_row = mysql_fetch_array($type_sort_db); echo "<form action='../../section/?msection=".$msection."' method='get'><input type='hidden' name='msection' value='".$msection."'>"; do { $sort_db = mysql_query("select distinct * from `sort` where `msection`='".$msection."' and `type`='".$type_sort_db_row['title']."'",$db); if (!$sort_db) { echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>"; exit(mysql_error()); } if (mysql_num_rows($sort_db) > 0){ $sort_db_row = mysql_fetch_array($sort_db); echo " <div class='sort_title'><strong>".$type_sort_db_row['title']."</strong></div> <div class='sort_radio'> <ul> "; do { echo "<li> <input type='radio' name='".$type_sort_db_row['variable']."' value='"; if ($sort_db_row['title'] == $_GET[''.$type_sort_db_row['variable'].'']) {echo "".$sort_db_row['title']."' checked>".$sort_db_row['title']."";} else {echo "".$sort_db_row['title']."'>".$sort_db_row['title'].""} echo "</li>"; } while ($sort_db_row = mysql_fetch_array($sort_db)); echo " </ul></div> "; } } while ($type_sort_db_row = mysql_fetch_array($type_sort_db)); echo " <div class='sort_title'><strong>Рознечная цена</strong></div> <div align='center'>От <input type='text' name='price_one' style='width:39.5%;' value='".$_GET['price_one']."'> до <input type='text' name='price_two' style='width:39.5%;' value='".$_GET['price_two']."'></div> <div align='center'><input type='submit' value='Показать' style='margin:0.5vw; border:0; background:#E82C31; color:#FFFFFF; padding:10px 20px;'></div></form> </div>"; } else {}} ?>
Вот прям начиная отсюда сильно сомневаюсь. Увидел "код". Сомнений больше нет. --- Добавлено --- @kuzmich, код до неприличия ужасен, даже не принимая во внимание ни mysql_ ни отсутствие эскейпирования...
Может, в do-while проблема. В лучшем случае у вас должен быть поповский вариант с дублированием команды присваивания перед циклом. Это тоже криво, но хоть временами может работать.
у вас дублируется запрос, это нормально?: PHP: $min_price_db = mysql_query("SELECT `price` FROM `goods` WHERE `section`='".strip_tags($msection_db_row['title'])."' ORDER BY `price` ASC ",$db); if (!$min_price_db) { echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>"; exit(mysql_error()); } if (mysql_num_rows($min_price_db) > 0){ $min_price_db_row = mysql_fetch_array($min_price_db); } $max_price_db = mysql_query("select `price` from `goods` where `section`='".strip_tags($msection_db_row['title'])."' order by `price` desc",$db); if (!$max_price_db) { echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>"; exit(mysql_error()); } if (mysql_num_rows($max_price_db) > 0){ $max_price_db_row = mysql_fetch_array($max_price_db); }
@Artur_hopf, да. один запрос выводит минимальную цену, а второй максимальную цену --- Добавлено --- @miketomlin, да зачем его переписывать? без условия в цикле все работает идеально. мне только решить вопрос с условием
@kuzmich к херам переписать sql запрос, и вообще весь код, вам так не помогут к сожалению. Если есть доступ к mysql, могу вам помочь с запросом.
@Artur_hopf, дело не в запросе, человек даже не понимет, что запрос надо собирать, ну и понятия не имеет о нормальной структуре кода, я уж не говорю про MVC.
тогда пишите НОРМАЛЬНЫЙ код.... обычно перебор полученных значений их БД идет через PHP: while ($sort_db_row = mysql_fetch_array($sort_db)) { } это раз, выводите в том же цикле PHP: echo $_GET[$type_sort_db_row['variable']] и глазками увидите что там
@kuzmich просто чтобы вы понимали, ваши три sql запроса можно написать примерно так PHP: <?php $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world'); if (mysqli_connect_errno()) { printf("Не удалось подключиться: %s\n", mysqli_connect_error()); exit(); } $sql = "SELECT se.title , MIN(pr.price) AS minprise, MAX(pr.price) AS maxprise FROM `section` AS se LEFT JOIN `goods` AS pr ON se.title = pr.section WHERE mtitle = ?"; if( $stmt = $mysqli->prepare($sql) ) { $stmt->bind_param('s', $msection); $stmt->execute(); $result = $stmt->get_result(); if( $result->num_rows > 0) { while ( $row = $result->fetch_assoc() ) { print_r($row); } } $stmt->close(); } $mysqli->close(); люди тут просто не могут разобраться в вашем коде, не обижайтесь
@Artur_hopf, если не могут разобраться то пусть свою альтернативу предоставят. я сделал так как смог сообразить
А дом с видом на пляжных шлюх тебе не прикупить, если ты сообразил построить только хижину............. Элементарные вещи ты должен знать, мануал не платный. strip_tags в запросе, интересно. => https://php.ru/manual/function.strip-tags.html
Как же мы свою альтернативу предоставим, если не понятно, чему? --- Добавлено --- Отдели логику от разметки, почитай про суррогатные ключи (быстрые запросы по тайтлам не делают) и т.п. --- Добавлено --- P.S. И, как выше писали, много дублирующегося кода. Пробуй делать хотя бы простейшую сборку запроса при помощи конкатенации, implode и т.п. Вместо многократного «Запрос из выборки базы данных не прошел...» дергай обработчик ошибки или пробрасывай исключение.