Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > IF во вложенном WHILE


Автор: 0Z0NE 16.3.2013, 17:56
Доброго времени суток Уважаемые Знатоки. Прошу помочь с казалось бы тривиальной задачей, нужно вытащить с базы данных всех пользователей получивших бан, дальше с другой таблицы вытащить в <select> возможные причины бана и на причину бана полученную в первой таблице повесить selected="selected". Но к сожалению выходит два варианта, или выбраны ВСЕ варианты, или не одного ... Вот кусок кода ...

Код

$all_my_bans = mysql_query("SELECT `id`, `intruder`, `breach`, `comment` FROM `violation` WHERE `moderator`='".$auth[0]."'", $db)or die("База данных не доступна");
    while(($all_bans = mysql_fetch_array($all_my_bans)) != false){

      $reasons = mysql_query("SELECT `id`, `description` FROM `reasons`", $db)or die("База данных не доступна");
      echo('
      <tr>
        <td align="center" valign="bottom">
          '.$all_bans[0].'
        </td>
        <td align="center" valign="bottom">
          <a href="../my_page.php?u_id='.$all_bans[1].'">'.$all_bans[1].'</a>
        </td>
        <td align="center" valign="bottom">
          <select name="reasons">
            <option>'.$all_bans[2].'</option>
       '); 

       while(($reason = mysql_fetch_array($reasons)) != false){
                     
            $violation = (integer)$all_bans[2];

            if($violation == 1){
              $breach = 'selected="selected"';
            }elseif($violation == 2){
              $breach = 'selected="selected"';
            }elseif($violation == 3){
              $breach = 'selected="selected"';
            }elseif($violation == 4){
              $breach = 'selected="selected"';
            }elseif($violation == 5){
              $breach = 'selected="selected"';
            }elseif($violation == 6){
              $breach = 'selected="selected"';
            }elseif($violation == 7){
              $breach = 'selected="selected"';
            }elseif($violation == 8){
              $breach = 'selected="selected"';
            }elseif($violation == 9){
              $breach = 'selected="selected"';
            }else{
              $breach = '';
            };
                        
            
            
            echo('<option value="'.$reason[0].'" '.$breach.'>'.$reason[1].'</option>');

        }
        echo('
          </select>
        </td>
        <td align="center" valign="bottom">
          '.$all_bans[3].'
        </td>
        <td align="center" valign="bottom">
          Отмена<br />(право)
        </td>
      </tr>
      ');
    };


Подскажите пожалуйста в какую сторону копать ... а еще лучше ткните носом где я накрутил ... smile 
В идеальном варианте конечно это select для неограниченного списка возможных нарушений.... но всё начинается с малого  smile 

UPD(16.03.2013 21:30):

Судя по простоте решения моя логика в плане поиска альтернативных вариантов хромает, ну да ладно. Выкладываю ниже код, великоват конечно для таких простых задач но он работает, дальше думаю каждый сможет подпилить его под свои нужды (авось кому понадобиться, а коли тема посчитается мусорной так тому и быть под снос её  smile )

Код

    $all_my_bans = mysql_query("SELECT `id`, `intruder`, `breach`, `comment` FROM `violation` WHERE `moderator`='".$auth[0]."'", $db)or die("База данных не доступна");
    while(($all_bans = mysql_fetch_array($all_my_bans)) != false){
            
            switch($all_bans[2]){
              case 1:
                $breach_1 = 'selected="selected"';
              break;
              case 2:
                $breach_2 = 'selected="selected"';
              break;
              case 3:
                $breach_3 = 'selected="selected"';
              break;
              case 4:
                $breach_4 = 'selected="selected"';
              break;
              case 5:
                $breach_5 = 'selected="selected"';
              break;
              case 6:
                $breach_6 = 'selected="selected"';
              break;
              case 7:
                $breach_7 = 'selected="selected"';
              break;
              case 8:
                $breach_8 = 'selected="selected"';
              break;
              case 9:
                $breach_9 = 'selected="selected"';
              break;
              case 10:
                $breach_10 = 'selected="selected"';
              break;
              default:
                $breach_10 = '';
            };

      $reasons = mysql_query("SELECT `id`, `description` FROM `reasons`", $db)or die("База данных не доступна");
      echo('
      <tr>
        <td align="center" valign="bottom">
          '.$all_bans[0].'
        </td>
        <td align="center" valign="bottom">
          <a href="../my_page.php?u_id='.$all_bans[1].'">'.$all_bans[1].'</a>
        </td>
        <td align="center" valign="bottom">
          <select name="reasons">
            <option>'.$all_bans[2].'</option>
       '); 

        $i = 0;
        while(($reason = mysql_fetch_array($reasons)) != false){
                     
            $i++;

            if($i == 1){
              $breach = $breach_1;
            };
            if($i == 2){
              $breach = $breach_2;
            };
            if($i == 3){
              $breach = $breach_3;
            };
            if($i == 4){
              $breach = $breach_4;
            };
            if($i == 5){
              $breach = $breach_5;
            };
            if($i == 6){
              $breach = $breach_6;
            };
            if($i == 7){
              $breach = $breach_7;
            };
            if($i == 8){
              $breach = $breach_8;
            };
            if($i == 9){
              $breach = $breach_9;
            };
            if($i == 10){
              $breach = $breach_10;
            };
            
            echo('<option value="'.$reason[0].'" '.$breach.'>'.$reason[1].'</option>');
        
        }
        echo('
          </select>
        </td>
        <td align="center" valign="bottom">
          '.$all_bans[3].'
        </td>
        <td align="center" valign="bottom">
          Отмена<br />(право)
        </td>
      </tr>
      ');
    };


Примечание: неясно почему но параллельно с передачей selected передается ошибка о отсутствующей переменной  smile

Автор: Another 27.9.2013, 01:33
Цитата

Примечание: неясно почему но параллельно с передачей selected передается ошибка о отсутствующей переменной  smile

потому как оформление кода просто пипец)

Что мешало использовать массивы?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)