2013-08-20 2 views
0

Новичок здесь ... Я пытался адаптировать свой код от hereпредварительно заполнить выпадающий список меню с несколькими вариантами из базы данных MySQL

Список заполняется должным образом, но я не могу заставить его предварительно выбрать. Что я делаю не так? Заранее спасибо!

$q = "SELECT cat_id FROM category_user WHERE cat_id=$d"; 
     while ($row = mysqli_fetch_array($q)) { 
      $cat = (int)$row['cat_id']; 
     } 
     $q = "SELECT cat_id, cat FROM category";   
     $r = mysqli_query ($dbc, $q); 
     if (mysqli_num_rows($r)> 0) { 
      while ($row = mysqli_fetch_array ($r, MYSQLI_NUM)) { 
       echo "<option value=\"$row[0]\""; 
       $selected = ''; 
       $cid=(int)$row[0]; 
       if ($cid=$cat) { 
        $selected='selected="selected"'; 
        echo $selected; 
       echo ">$row[1]</option>\n"; 
       }else{ 


       //Check for stickyness 
       if (isset($_POST['category'])&&($_POST['category']== $row[0])) 
       echo 'selected="selected"'; 
       echo ">$row[1]</option>\n"; 
      } 
      } 
     } 

category 
--------------- 
|cat_id | cat | 
--------------- 


category_user 
------------------------- 
|cu_id | user_id | cat_id| 
------------------------- 
+1

Ваш первый запрос возвращает cat_id, когда вы поставляете cat_id ... так что вы можете удалить это. На что он должен быть предварительно заполнен? Что-то из базы данных или что-то, отправленное через $ _POST? – thelastshadow

+0

woops! В первом запросе я сделал boo-boo. таблица должна читать «category_user», поскольку я сопоставляю числа из двух таблиц. Извините, что я дорка. – artsyL

+0

ОК, я вижу ваше изменение, но ваш столбец должен быть ошибочным в предложении select или where вашего первого запроса. Даже если вы используете другую таблицу, вы получаете тот же столбец, который вы указываете в предложении where ... 'cat_id' – amaster

ответ

0

Выяснил это. цикл foreach предварительно выбирает все для выпадающего меню. В основном проблемы заключались в том, что массив из таблицы mysql перебирался по итерации. Последней частью головоломки были скобки [] после $ кошек.

Спасибо за вашу помощь, и извините, что я не очень четко понял, чего я пытаюсь выполнить. Виноват.

<p><select class=\"box\" name=\"wkType[]\" multiple=\"multiple\">"; 
$q = "SELECT cat_id FROM category_user WHERE user_id=$d"; 
$r = mysqli_query ($dbc, $q); 
    while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { 
    $cats[]=$row['cat_id'];      
} 
    $q = "SELECT cat_id, cat FROM category";   
    $r = mysqli_query ($dbc, $q); 
    if (mysqli_num_rows($r)> 0) { 
     while ($row = mysqli_fetch_array ($r, MYSQLI_NUM)) { 
      echo "<option value=\"$row[0]\""; 
      foreach ($cats as $key =>$cat) { 
     if ($row[0]==$cat){ 
     echo 'selected="selected"'; 
        //Check for stickyness 
     if (isset($_POST['category'])&&($_POST['category']== $row[0])) 
      echo 'selected="selected"'; 
     } 
        } 
     echo ">$row[1]</option>\n"; 
      } 
}else{ 
echo '<p>Please select a category.</p>';  
} 
echo "</select></p>"; 
0

Зачем компрометировать код. Вы можете попробовать что-то вроде этого

<?php 
    $result = mysqli_query($dbc, "SELECT cat_id, cat FROM category"); 
    if ($result) { 
     echo "<select name='whatever_you_want'>"; 
     while ($row = mysqli_fetch_array($result)) { 
      echo "<option value='{$row[0]}'"; 
      if (intval($row[0]) == intval($cat_id)) { 
       echo " selected"; 
      } 
      echo ">{$row[1]}</option>"; 
     } 
     echo "</select>"; 
    } 
?> 
+0

Я действительно думал, что это слишком сложно, но мне нужно сопоставить идентификаторы из двух таблиц, чтобы получить несколько предварительных настроек. Итак, как мне это сделать? – artsyL

+0

(только что понял, что я сделал ошибку и поставить неправильную таблицу в первом запросе. Фиксированное это! Извините ... – artsyL

0
if($cid=$cat){ 

должен быть

if($cid==$cat){ 

и

$cid=(int)$row[0]; 

(int) ненужно, потому что строка INT сравниваются автоматически.

+0

Это очень полезно. Мне было интересно об этом. – artsyL

+0

@artsyL просто убедитесь, что вы используете '' == а не '===', так как это будет сравнивать не только значение, но и тип. Например, ''2' == 2 && 2 === 2' приведет к истине, но' '2' === 2' приведет к в false. И только один параметр '=' устанавливает значение, и большую часть времени это не то, что вы хотите делать. – amaster

Смежные вопросы