Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как выбрать одно поле из Selecta?
 
 автор: diman   (29.07.2009 в 12:16)   письмо автору
 
 

Из БД формирую поочередно значения и заношу их в таблицу. Как мне узнать, какое поле выбрано из selecta?

$arr=array('user', 'moderator', 'admin');
       echo "<td valign=center><p class=zag2>".$usr['priority']."
                  <select class=input type=text name='prior[]'>";
             for($i = 0; $i <= 2; $i++){  
                 if($priority == $i) $temp = "selected"; else $temp = ""; 
                 echo "<option value=$i $temp>".$arr[$i]."</option>"; 
                 $f=print_r($_POST['prior'][$i]);
             } 
            echo "</select></td>
             <td><p class=zag2>".$usr['ip']."</td>
             <td><a href='index.php?id_user=".$usr['id_user']."&prior=$f'>Изменить</a><br>
                 <a href='del_user.php?id_user".$usr['id_user']."'>Удалить</a>
             </td>
           </tr>";

  Ответить  
 
 автор: sim5   (29.07.2009 в 13:18)   письмо автору
 
   для: diman   (29.07.2009 в 12:16)
 

prior[] - так дают имена спискам с мультивыбором, а у вас зачем? А узнать по значению поля выбранного опшена, и если $i равно выбранному значит установить атрибут SELECTED ему.

  Ответить  
 
 автор: Diman   (29.07.2009 в 13:44)   письмо автору
 
   для: sim5   (29.07.2009 в 13:18)
 

знаю, что именно так и надо делать, давно не прибегал к select и уже совсем забыл как это осуществить. Впереди кода из БД выбирается нужное поле, значения поля заносятся в массив, а затем в цикле while и происходит выше описанный код. Никак не могу понять как передать по ссылке выбранное поле. Помогите пожалуйста

  Ответить  
 
 автор: sim5   (29.07.2009 в 13:55)   письмо автору
 
   для: Diman   (29.07.2009 в 13:44)
 

Ссылка передается методом GET, и, например, значение этого списка (выбранного опшена) приходит от клиента в переменной с именем sel. Тогда:
<?
echo "<select class=input type=text name='prior'>"
for(
$i 0$i <= 2$i++){   
  
$temp intval($_GET['sel']) == $i "selected"  "";

Еще раз повторяю - если у вас один список, и он не имеет атрибута multiple, то именовать его как prior[], это проблемы для самого себя.

PS. У вас список содержит всего три опшена, и первый не выбран по умолчанию, от сюда можно предположить, что выбрать можно только два значения 1 и 2. Не проще ли в таком случае применить вместо списка радиокнопки?

  Ответить  
 
 автор: Diman   (29.07.2009 в 15:34)   письмо автору
 
   для: sim5   (29.07.2009 в 13:55)
 

Немного изменяю код и всё равно нужное поле не выбирается
Не использую радиокнопки, т.к. приоритеты могут в будущем добавиться

echo "<td valign=center><p class=zag2>".$usr['priority']."
           <select class=input type=text name='prior'>";
for($i = 0; $i <= 2; $i++){  
      $temp = intval($_GET['prior']) == $i ? "selected"  : "";

if (intval($_GET['prior']) == $i) {
    $pr=$i;
   switch($pr)
    {
          case 0: $prior="user";
           break;
          case 1: $prior="moderator";
          break;
         case 2: $prior="admin";
         break;
        default: $prior=$usr['priority'];
   } 
}
echo "<option value=$i $temp>".$arr[$i]."</option>";
} // End for 
echo "</select></td>";

  Ответить  
 
 автор: sim5   (29.07.2009 в 16:07)   письмо автору
 
   для: Diman   (29.07.2009 в 15:34)
 

Во-первых, что это ерунда такая, switch в цикле? Проверять принятые данные надо не по итерации цикла, а по....? Думайте.

<?
$prior 
= isset($_GET['prior']) ? intval($_GET['prior']) : 0;

echo 
"<form><select class='input' type='text' name='prior'>
  <option value=0>Selected</option>"

  for(
$i 1$i <= 3$i++) {   
    
$temp $prior == $i "selected"  ""
    echo 
"<option value=$i $temp>Select $i</option>"
  }  
echo 
"</select><input type='submit' value='Send'></form>";

if (
$prior) {
  switch(
$prior) { 
    case 
$prior="user"
             break; 
    case 
$prior="moderator"
             break; 
    case 
$prior="admin"
             break; 
    default: 
$prior=$usr['priority']; 
  }
}


А вообще, весь код на какой-то маразм похож, ну честное слово.

  Ответить  
 
 автор: Diman   (30.07.2009 в 09:12)   письмо автору
 
   для: sim5   (29.07.2009 в 16:07)
 

Тогда забудем про этот уже действительно получаемый бред. Создадим простую форму
<form action=index.php?id_user=<? $usr['id_user']?> method=post>
 <table>
<tr>
   <td>
     <select class=input type=text name=h>
          <option value=1 <? if($h==1) echo "selected";?>>user
          <option value=2 <? if($h==2) echo "selected";?>>moderator
          <option value=3 <? if($h==3) echo "selected";?>>admin
      </select></td>
    <td><input class=button type=submit value=Изменить></td>
</tr>
</table>
<input type=hidden name=action value=post>
</form>

<? if (isset($_POST['action'])) echo "Приоритет = "print_r($_POST['h']);?>


Выводится всё время 1. Что не так?

  Ответить  
 
 автор: Diman   (30.07.2009 в 09:29)   письмо автору
 
   для: Diman   (30.07.2009 в 09:12)
 

Прошу прощенья. Простая форма рабочая. А если так:
<table class=bodytable border=1>
<?
  $query
="Select * From userlist";
  
$rez=mysql_query($query);
  if(!
$rez)   error("Ошибка при обращении таблице пользователей");

  
// Если в текущей группе пользователей имеется хотя бы один
  // - формируем таблицу с  пользователями
if(mysql_num_rows($rez) > 0)
{
    while(
$usr mysql_fetch_array($rez))
    {
      echo 
"<tr><td valign=center><p class=zag2>".$usr['priority'];
       
?>
       <form action=index.php?id_user=<? $usr['id_user']?> method=post>
       <select class=input type=text name=h>
                     <option value=1 <? if($h==1) echo "selected";?>>user
                     <option value=2 <? if($h==2) echo "selected";?>>moderator
                    <option value=3 <? if($h==3) echo "selected";?>>admin
                </select></td>
               <td><input class=button type=submit value=Изменить></td>
<?
    
}
 }
?>
</table>
<input type=hidden name=action value=post>
</form>
<? if (isset($_POST['action'])) echo "Приоритет = "print_r($_POST['h']);?>


Тогда всё время выводится 1 для первых строк, а с последней всё как надо. Где-то наверное я не туда включил строку кнопки.
Конечно это не все поля формы. Я включил только те, которые требуются.

  Ответить  
 
 автор: Diman   (30.07.2009 в 09:53)   письмо автору
 
   для: Diman   (30.07.2009 в 09:29)
 

Закрываю данную тему. Вопрос решен. Нужно было для каждого пользователя создавать отдельную форму в цикле while. Надо было раньше об этом сказать, что действие происходит именно так и давно бы всё решилось. А то пришлось уже разный маразм сочинять

  Ответить  
 
 автор: ride   (29.07.2009 в 15:49)   письмо автору
 
   для: diman   (29.07.2009 в 12:16)
 

когда вам надо узнать:
1. при построении селекта
2. при изменении (onchange) вашего селекта
3. после сабмита формы
?
upd
и для чего?

  Ответить  
 
 автор: Diman   (29.07.2009 в 15:54)   письмо автору
 
   для: ride   (29.07.2009 в 15:49)
 

сразу после изменения селекта переменная $prior должна принимать нужное значение, а затем это значение мне надо передать при помощи $_GET по ссылке.
Хочу чтобы в админ-панели можно было сразу изменять приоритеты пользователя. Удобно, выбираешь из списка нужный приоритет и нажимаешь на ссылку изменить. После чего в БД будет идти апдейт поля приоритета.

  Ответить  
 
 автор: ride   (29.07.2009 в 16:06)   письмо автору
 
   для: Diman   (29.07.2009 в 15:54)
 

если так, то вам нужен яваскрипт
или же два <input type=submit> (вместо ссылок)
я предпочитаю второй вариант

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования