Jump to content
  • 0

Условие для Мультиселекта


slavok47
 Share

Question

Здравствуйте! Подскажите как реализовать такое:

Имеетря элемент селект со множественным выбором, задача сделать так чтобы при последуючем фходе в форму, в элементе били выбранны те опшины которые сохранились, для обычного селекта я сделал так:

if ($i <= 5)  {
$sel='';
if ($row['id'] == $usares['usa_prem'])
$sel=' selected';
$usaprem.= "<option id=\"$row[usaplid]\" value=\"$row[id]\"{$sel}>".$row['usaprem']."</option>";
}

где в

if ($row['id'] == $usares['usa_prem'])

сравниваются значения, и если они равны то подставляется selected к опшину, а из мультиселекта значения в БД записываются как 1,2,3.... значит selected должен подставится к 1,2 и 3 опшину, собственно в этом и проблема, помогите пожалуйста решить ее.

Спасибо!

Весь код

$usares = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "sword WHERE user_id = '$user_id'" ); //Выбор данных из таблицы sword

$usabbres = $db->query_read("SELECT * FROM " . TABLE_PREFIX . "usa"); //Выбор данных из таблицы usa
$i = 1;

while ($row = $db->fetch_array($usabbres) ) //Формирует значения для элемента option id, value и тд
{
$ces = explode(",", $usares['usa_prem']); //в БД значения хранятся в виде 1,2,3 и тд, тут соответственно идет разделение строки
if ($i <= 5) {
$max = 5;
for ($t=0; $t < $max; $t++)
{
$sel='';
if (in_array($t,$ces))
$sel=' selected';
$usaprem.= "<option id=\"$row[usaplid]\" value=\"$row[id]\"{$sel}>".$row['usaprem']."</option>"; //формирование элемента option
}}}

тут 2 цикла и это как то не правильно, помогите решить проблему

Edited by slavok47
Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Ничего не понимаю. Работает - не трогайте. Не работает - поставьте задачу так, чтобы я ваш код мог засунуть в дебагер и посмотреть в чём ошибка. Тут же просто вырван кусок кода, в котором непонятно чего происходит - хоть бы прокомментировали его, что ли...

Link to comment
Share on other sites

  • 0

забыл сказать, в данном случае, формируется 5 опшинов, но при данной конструкции 5 опшинов дублируются 5 раз (25), а задача такова, выбрал пользователь несколько опций, и сохранил, когда он опять будет заходить на эту форуму, опшины должны быть уже выбраны так как он сохранил, в случае с обычным селектом все работает, а вот с мульти проблема, добавил коментов немного

вот так делал для обычного селекта

if ($i <= 4)  { //выводить только 4 строки
$sel=''; //Обнуляем переменную
if ($row['id'] == $usares['usa_pl']) //сравниваем значения из 2-х таблиц, если значения равны то к опшину подставляем selected
$sel=' selected';
$usapl.= "<option id=\"$row[usaplid]\" value=\"$row[id]\"{$sel}>".$row['usapl']."</option>";
}

Собственно для сравнения и сделал 2 запроса в разные таблицы

Edited by slavok47
Link to comment
Share on other sites

  • 0

тот for ($t.., который у тебя, должен стоять вместо while, потому что именно именно его я подразумевал циклом по всем имеющимся опшенам.

И зачем explode делать при каждом проходе цикла? Можно сделать один раз.

$usares = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "sword WHERE user_id = '$user_id'" );
$ces = explode(",", $usares['usa_prem']);

$usabbres = $db->query_read("SELECT * FROM " . TABLE_PREFIX . "usa");
$max=Get_max_lines_of_query($usabbres); //Я не знаю, какая эта функция в твоём классе, но вообще это mysql_num_rows()

for ($t=0; $t < $max; $t++)
{
$row = $db->fetch_array($usabbres);
if ($t <= 5)
{
$sel='';
if (in_array($t,$ces))
$sel=' selected';
$usaprem.= '<option id="'.$row[usaplid].'" value="'.$row[id].'"{$sel}>'.$row['usaprem'].'</option>';
}
}

попробуй. Но если тебе нужно только 5 штук, заменяй на $max=5 и убирай if ($t <=5)

Edited by Int
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy