За последние 24 часа нас посетили 22809 программистов и 1227 роботов. Сейчас ищут 730 программистов ...

Условие в цикле

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

  1. kuzmich

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

    С нами с:
    6 мар 2017
    Сообщения:
    39
    Симпатии:
    0
    Всем привет!
    Делал форму для сортировки, сама форма у меня динамическая – для каждого раздела форма разная. Все данные берутся из БД.
    Сама сортировка работает идеально.
    Возник такой момент – после сортировки в <input type=’radio’ name=’… должно быть checked.
    Input – ы у меня выводятся через цикл. Решил сделать данный момент условие в цикле, но что то не получается.
    Вот пример что я сделал:
    PHP:
    1.         do
    2.         {
    3.         echo "<li>
    4.        <input type='radio' name='".$type_sort_db_row['variable']."' value='";
    5.         if ($sort_db_row['title'] = $_GET[''.$type_sort_db_row['variable'].'']) {echo "".$sort_db_row['title']."' checked>".$sort_db_row['title']."";}
    6.         else {echo "".$sort_db_row['title']."'>".$sort_db_row['title'].""}
    7.         echo "</li>";
    8.         }
    9.         while ($sort_db_row = mysql_fetch_array($sort_db));
    Получается на экран вообще ничего не выводит сейчас, а если условие уберу то все выводит.
    подскажите в чем проблема?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.825
    Симпатии:
    738
    Адрес:
    Татарстан
    сравнение - это
    Код (Text):
    1. ==
    а у вас идет = - это присвоение, которое выполняется ВСЕГДА
     
  3. kuzmich

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

    С нами с:
    6 мар 2017
    Сообщения:
    39
    Симпатии:
    0
    @ADSoft, все равно не работает!
     
  4. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @kuzmich покажите полный код
     
  5. kuzmich

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

    С нами с:
    6 мар 2017
    Сообщения:
    39
    Симпатии:
    0
    @Artur_hopf,

    PHP:
    1. <?php
    2. $msection_db = mysql_query("select * from `section` where `mtitle`='".$msection."'",$db);
    3. if (!$msection_db)
    4. {
    5. echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    6. }
    7. if (mysql_num_rows($msection_db) > 0){
    8. $msection_db_row = mysql_fetch_array($msection_db);}
    9.  
    10.     $min_price_db = mysql_query("SELECT `price` FROM `goods` WHERE `section`='".strip_tags($msection_db_row['title'])."' ORDER BY `price` ASC ",$db);
    11.     if (!$min_price_db)
    12.     {
    13.     echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    14.     exit(mysql_error());
    15.     }
    16.     if (mysql_num_rows($min_price_db) > 0){
    17.     $min_price_db_row = mysql_fetch_array($min_price_db);
    18.     }
    19.    
    20.     $max_price_db = mysql_query("select `price` from `goods` where `section`='".strip_tags($msection_db_row['title'])."' order by `price` desc",$db);
    21.     if (!$max_price_db)
    22.     {
    23.     echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    24.     exit(mysql_error());
    25.     }
    26.     if (mysql_num_rows($max_price_db) > 0){
    27.     $max_price_db_row = mysql_fetch_array($max_price_db);}
    28. if (!isset($price_one,$price_two)) {
    29.  
    30.  
    31. if (!isset($msection)) {}
    32. else {
    33. echo "<div class='sort'>";
    34.     $type_sort_db = mysql_query("select * from `type-sort`",$db);
    35.     if (!$type_sort_db)
    36.     {
    37.     echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    38.     exit(mysql_error());
    39.     }
    40.     if (mysql_num_rows($type_sort_db) > 0){
    41.     $type_sort_db_row = mysql_fetch_array($type_sort_db);
    42.     echo "<form action='../../section/?msection=".$msection."' method='get'><input type='hidden' name='msection' value='".$msection."'>";
    43.     do
    44.     {
    45.         $sort_db = mysql_query("select * from `sort` where `msection`='".$msection."' and `type`='".$type_sort_db_row['title']."'",$db);
    46.         if (!$sort_db)
    47.         {
    48.         echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    49.         exit(mysql_error());
    50.         }
    51.         if (mysql_num_rows($sort_db) > 0){
    52.         $sort_db_row = mysql_fetch_array($sort_db);
    53.         echo "
    54.        <div class='sort_title'><strong>".$type_sort_db_row['title']."</strong></div>
    55.         <div class='sort_radio'>
    56.         <ul>
    57.        ";
    58.         do
    59.         {
    60.         echo "<li><input type='radio' name='".$type_sort_db_row['variable']."' value='".$sort_db_row['title']."'>".$sort_db_row['title']."</li>";
    61.         }
    62.         while ($sort_db_row = mysql_fetch_array($sort_db));
    63.         echo "
    64.         </ul></div>
    65.        ";
    66.         }
    67.     }
    68.     while ($type_sort_db_row = mysql_fetch_array($type_sort_db));
    69.     echo "
    70.    <div class='sort_title'><strong>Рознечная цена</strong></div>
    71.    <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>
    72.    <div align='center'><input type='submit' value='Показать' style='margin:0.5vw; border:0; background:#E82C31; color:#FFFFFF; padding:10px 20px;'></div></form>
    73.    </div>";
    74.     }
    75.     else
    76.     {}}
    77. }
    78. else {
    79. echo "<div class='sort'>";
    80.     $type_sort_db = mysql_query("select * from `type-sort`",$db);
    81.     if (!$type_sort_db)
    82.     {
    83.     echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    84.     exit(mysql_error());
    85.     }
    86.     if (mysql_num_rows($type_sort_db) > 0){
    87.     $type_sort_db_row = mysql_fetch_array($type_sort_db);
    88.     echo "<form action='../../section/?msection=".$msection."' method='get'><input type='hidden' name='msection' value='".$msection."'>";
    89.     do
    90.     {
    91.         $sort_db = mysql_query("select distinct * from `sort` where `msection`='".$msection."' and `type`='".$type_sort_db_row['title']."'",$db);
    92.         if (!$sort_db)
    93.         {
    94.         echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    95.         exit(mysql_error());
    96.         }
    97.         if (mysql_num_rows($sort_db) > 0){
    98.         $sort_db_row = mysql_fetch_array($sort_db);
    99.        
    100.         echo "
    101.        <div class='sort_title'><strong>".$type_sort_db_row['title']."</strong></div>
    102.         <div class='sort_radio'>
    103.         <ul>
    104.        ";
    105.         do
    106.         {
    107.         echo "<li>
    108.       <input type='radio' name='".$type_sort_db_row['variable']."' value='";
    109.         if ($sort_db_row['title'] == $_GET[''.$type_sort_db_row['variable'].'']) {echo "".$sort_db_row['title']."' checked>".$sort_db_row['title']."";}
    110.         else {echo "".$sort_db_row['title']."'>".$sort_db_row['title'].""}
    111.         echo "</li>";
    112.         }
    113.         while ($sort_db_row = mysql_fetch_array($sort_db));
    114.         echo "
    115.         </ul></div>
    116.        ";
    117.         }
    118.     }
    119.     while ($type_sort_db_row = mysql_fetch_array($type_sort_db));
    120.     echo "
    121.    <div class='sort_title'><strong>Рознечная цена</strong></div>
    122.    <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>
    123.    <div align='center'><input type='submit' value='Показать' style='margin:0.5vw; border:0; background:#E82C31; color:#FFFFFF; padding:10px 20px;'></div></form>
    124.    </div>";
    125.     }
    126.     else
    127.     {}}
    128.  
    129. ?>
     
  6. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Вот прям начиная отсюда сильно сомневаюсь.
    Увидел "код". Сомнений больше нет.
    --- Добавлено ---
    @kuzmich, код до неприличия ужасен, даже не принимая во внимание ни mysql_ ни отсутствие эскейпирования...
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    [OFFTOP]Код – мама, не горюй.[/OFFTOP]
    --- Добавлено ---
    P.S. В ТАКОЕ вникать оч. тяжко ;)
     
  8. kuzmich

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

    С нами с:
    6 мар 2017
    Сообщения:
    39
    Симпатии:
    0
    @Valick, вообще есть какое либо решение?
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Может, в do-while проблема. В лучшем случае у вас должен быть поповский вариант с дублированием команды присваивания перед циклом. Это тоже криво, но хоть временами может работать.
     
  10. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    у вас дублируется запрос, это нормально?:
    PHP:
    1.     $min_price_db = mysql_query("SELECT `price` FROM `goods` WHERE `section`='".strip_tags($msection_db_row['title'])."' ORDER BY `price` ASC ",$db);
    2.     if (!$min_price_db)
    3.     {
    4.     echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    5.     exit(mysql_error());
    6.     }
    7.     if (mysql_num_rows($min_price_db) > 0){
    8.     $min_price_db_row = mysql_fetch_array($min_price_db);
    9.     }
    10.  
    11.     $max_price_db = mysql_query("select `price` from `goods` where `section`='".strip_tags($msection_db_row['title'])."' order by `price` desc",$db);
    12.     if (!$max_price_db)
    13.     {
    14.     echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    15.     exit(mysql_error());
    16.     }
    17.     if (mysql_num_rows($max_price_db) > 0){
    18.     $max_price_db_row = mysql_fetch_array($max_price_db);
    19. }
     
  11. kuzmich

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

    С нами с:
    6 мар 2017
    Сообщения:
    39
    Симпатии:
    0
    @miketomlin, мне не нужно чтобы временами работало, мне нужно стабильно
     
  12. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Тогда лучше все переписать.

    P.S. Сама подобная портянка – большой фактор нестабильности :)
     
  13. kuzmich

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

    С нами с:
    6 мар 2017
    Сообщения:
    39
    Симпатии:
    0
    @Artur_hopf, да. один запрос выводит минимальную цену, а второй максимальную цену
    --- Добавлено ---
    @miketomlin,
    да зачем его переписывать? без условия в цикле все работает идеально. мне только решить вопрос с условием
     
  14. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @kuzmich к херам переписать sql запрос, и вообще весь код, вам так не помогут к сожалению.
    Если есть доступ к mysql, могу вам помочь с запросом.
     
  15. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Ну ОК. Решайте :(
     
  16. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Artur_hopf, дело не в запросе, человек даже не понимет, что запрос надо собирать, ну и понятия не имеет о нормальной структуре кода, я уж не говорю про MVC.
     
  17. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.825
    Симпатии:
    738
    Адрес:
    Татарстан
    тогда пишите НОРМАЛЬНЫЙ код....
    обычно перебор полученных значений их БД идет через
    PHP:
    1. while ($sort_db_row = mysql_fetch_array($sort_db)) {
    2. }
    это раз,
    выводите в том же цикле
    PHP:
    1. echo $_GET[$type_sort_db_row['variable']]
    и глазками увидите что там
     
  18. kuzmich

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

    С нами с:
    6 мар 2017
    Сообщения:
    39
    Симпатии:
    0
    @Artur_hopf, к сожалению доступа к базе нету
     
  19. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @kuzmich просто чтобы вы понимали, ваши три sql запроса можно написать примерно так

    PHP:
    1. <?php
    2. $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
    3.  
    4.     printf("Не удалось подключиться: %s\n", mysqli_connect_error());
    5.     exit();
    6. }
    7.  
    8. $sql = "SELECT  se.title , MIN(pr.price) AS minprise, MAX(pr.price) AS maxprise
    9. FROM `section` AS se
    10. LEFT JOIN `goods` AS pr ON se.title = pr.section
    11. WHERE mtitle = ?";
    12.  
    13. if( $stmt = $mysqli->prepare($sql) )
    14. {
    15.     $stmt->bind_param('s', $msection);
    16.     $stmt->execute();
    17.     $result = $stmt->get_result();
    18.  
    19.     if( $result->num_rows > 0)
    20.     {
    21.         while ( $row = $result->fetch_assoc() ) {
    22.             print_r($row);
    23.         }
    24.     }
    25.  
    26.     $stmt->close();
    27. }
    28.  
    29. $mysqli->close();
    люди тут просто не могут разобраться в вашем коде, не обижайтесь
     
  20. kuzmich

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

    С нами с:
    6 мар 2017
    Сообщения:
    39
    Симпатии:
    0
    @Artur_hopf,
    если не могут разобраться то пусть свою альтернативу предоставят. я сделал так как смог сообразить
     
  21. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @kuzmich
    это вы зря :)
     
  22. kuzmich

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

    С нами с:
    6 мар 2017
    Сообщения:
    39
    Симпатии:
    0
    @Artur_hopf, я что виноват то, что люди не могут разобраться в коде?
     
  23. lastdays

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

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    А дом с видом на пляжных шлюх тебе не прикупить, если ты сообразил построить только хижину.............

    Элементарные вещи ты должен знать, мануал не платный.

    strip_tags в запросе, интересно. => https://php.ru/manual/function.strip-tags.html
     
  24. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Как же мы свою альтернативу предоставим, если не понятно, чему? ;)
    --- Добавлено ---
    Отдели логику от разметки, почитай про суррогатные ключи (быстрые запросы по тайтлам не делают) и т.п.
    --- Добавлено ---
    P.S. И, как выше писали, много дублирующегося кода. Пробуй делать хотя бы простейшую сборку запроса при помощи конкатенации, implode и т.п. Вместо многократного «Запрос из выборки базы данных не прошел...» дергай обработчик ошибки или пробрасывай исключение.