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

Форум PHP

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

 

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

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

тема: запомнить выбор в select
 
 автор: class   (26.06.2010 в 09:14)   письмо автору
 
 

Здравствуйте.
Подскажите как сделать запоминание выбора select?

Делал таким способом, но работает как то не стабильно, то правильно выдает, то не правильно.

<?php
session_start
();
echo 
'<form action="1.php?i=ok" method="post">
<select name="act">'
;
if(isset(
$_SESSION['act']) && $_SESSION['act'] == 1){
echo 
'<option value="1" selected="selected">WMR</option>';
}else{
echo 
'<option value="1">WMR</option>';
}
if(isset(
$_SESSION['act']) && $_SESSION['act'] == 2){
echo 
'<option value="2" selected="selected">WMZ</option>';
}else{
echo 
'<option value="2">WMZ</option>';
}
if(isset(
$_SESSION['act']) && $_SESSION['act'] == 3){
echo 
'<option value="3" selected="selected">WME</option>';
}else{
echo 
'<option value="3">WME</option>';
}
if(isset(
$_SESSION['act']) && $_SESSION['act'] == 4){
echo 
'<option value="4" selected="selected">WMU</option>';
}else{
echo 
'<option value="4">WMU</option>';
}
echo 
'</select>
<input name="" type="submit" />
</form>'
;

if(!empty(
$_GET['i'])){
$act abs(intval($_POST['act']));
if(
$act || $act 4){
$act 1;
}
$_SESSION['act'] = $act;
}
?>

  Ответить  
 
 автор: Neverhood   (26.06.2010 в 10:17)   письмо автору
 
   для: class   (26.06.2010 в 09:14)
 

<option ... selected>

  Ответить  
 
 автор: sim5   (26.06.2010 в 10:18)   письмо автору
 
   для: class   (26.06.2010 в 09:14)
 

<?
$sel 
2;
$opt 4;
echo 
'<select name="act">';
for(
$i=1$i<=$opt$i++) echo '<option value="'.$i.'"'.($sel==$i ' selected="selected"' null).'>WMR</option>';
echo 
'</select>';


PS. Нужно сперва обработать переменную, поместив ее в сессию, прежде чем использовать ее в построении списка. Отсюда и "нестабильность".

  Ответить  
 
 автор: Neverhood   (26.06.2010 в 10:33)   письмо автору
 
   для: class   (26.06.2010 в 09:14)
 

И всё же вы работаете с POST, то лучше писать обработчик формы до вывода самой формы.

if(isset($_POST['act'])) {

$_SESSION['act'] = intval($_POST['act']); 
}

$array_wm = array(1 => 'WMR', 
                                 'WMZ', 
                                 'WME', 
                                 'WMU');

// ...
foreach($array_wm as $id => $wm) {
 if($_SESSION['act'] == $id) 
     echo '<option value="' . $id . '" selected>' . $wm . '</option>';
 else
    echo '<option value="' . $id . '">' . $wm . '</option>';
}
// ...

  Ответить  
 
 автор: Trianon   (26.06.2010 в 11:08)   письмо автору
 
   для: class   (26.06.2010 в 09:14)
 

автору рекомендуется познакомиться с циклами, либо уби

  Ответить  
 
 автор: class   (26.06.2010 в 11:31)   письмо автору
 
   для: class   (26.06.2010 в 09:14)
 

Решил свою задачу немного другим вариантом (сделал проверку до вывода формы).

<?php 
session_start
();
if(!empty(
$_GET['i'])){ 
$act abs(intval($_POST['act'])); 
if(
$act || $act 4){ 
$act 1

$_SESSION['act'] = $act
}
echo 
'<form action="1.php?i=ok" method="post"> 
<select name="act">'

$wm_array = array(=> 'WMR'=> 'WMZ'=> 'WME'=> 'WMU');
for(
$a 1$a <= 4$a++){
if(isset(
$_SESSION['act']) && $_SESSION['act'] == $a){
echo 
'<option value="'.$a.'" selected="selected">'.$wm_array[$a].'</option>';
}else{
echo 
'<option value="'.$a.'">'.$wm_array[$a].'</option>';
}
}
echo 
'</select> 
<input name="" type="submit" /> 
</form>'

?>

  Ответить  
 
 автор: sim5   (26.06.2010 в 11:51)   письмо автору
 
   для: class   (26.06.2010 в 11:31)
 

В случе с массивом, тогда уж максимум итераций определяйте по числу элементов массива, иначе добавляя в него новые элементы, нужно не забывать изменить и число итераций цикла. Хотя если предполагается фиксированное число элементов, то возможно и такая запись.
Вот это:
if(isset($_SESSION['act']) && $_SESSION['act'] == $a){
echo '<option value="'.$a.'" selected="selected">'.$wm_array[$a].'</option>';
}else{
echo '<option value="'.$a.'">'.$wm_array[$a].'</option>';
}
заменяется одной строкой, как показано выше. Условная запись a ? в : c только на первый взгляд кажется непонятной.

  Ответить  
 
 автор: leon2009sp   (12.04.2016 в 14:47)   письмо автору
 
   для: sim5   (26.06.2010 в 11:51)
 

как сделать чтобы название в селект не прыгало обратно?
<?php
$xml_city 
simplexml_load_file("xml/city.xml") or die("Error: Cannot create object");
if(isset(
$_POST['select'])) {
    
setcookie("select",(int)$_POST['select']); 
    
$s_city =  substr(htmlspecialchars(trim($_POST['select'])), 0100);
    
$select[(int)$_POST['select']] = 'selected'
} elseif(isset(
$_COOKIE["select"])) { 
    
$select[(int)$_COOKIE["select"]] = 'selected';
}
echo 
"---------".$select;
echo 
"========".$s_city;


echo 
"<form method=post>";
if(!empty(
$xml_city->city->page))
{
    
$agrs $xml_city->city->page;
    echo 
"<select  name=\"select\" onchange=\"this.form.submit()\">";
    foreach (
$agrs as $vals)
    {

    echo 
iconv('UTF-8''WINDOWS-1251'"<option value=$vals[ob] selected=$select>$vals$select</option>");
    
    
}
    echo 
"</select></form>";
}

?>

  Ответить  
 
 автор: Valick   (12.04.2016 в 16:53)   письмо автору
 
   для: leon2009sp   (12.04.2016 в 14:47)
 

>как сделать чтобы название в селект не прыгало обратно?
а человеческим языком можно озвучить хотелку?
и не надо писать в чужих темах, тем более в теме 2010 года
для нового вопроса лучше создать отдельную тему

  Ответить  
 
 автор: leon2009sp   (12.04.2016 в 22:11)   письмо автору
 
   для: Valick   (12.04.2016 в 16:53)
 

не хотел создавать новую, т.к. увидел тему про селект. (не знал что она древняя).
при выборе из селекта выбираются города, все хорошо, кроме одной маленькой детали.
название в селекте все время возвращаться или на первое значение или на последние.
вот сам ХМЛ
<?xml version="1.0" encoding="utf-8"?>
<category>
<city category="city">
<page ob="city">Город:</page>
<page ob="moscu">Москва</page>
<page ob="omsk">Омск</page>
<page ob="novosib">Новосибирск</page>
</city>
</category>

  Ответить  
 
 автор: leon2009sp   (13.04.2016 в 09:47)   письмо автору
 
   для: leon2009sp   (12.04.2016 в 22:11)
 

как оставить выбранное значение в селект боксе. выбрал Новосибирск что бы он и остался ?
уже не знаю как спросить чтоб понятно было

  Ответить  
 
 автор: indexer   (13.04.2016 в 17:25)   письмо автору
 
   для: leon2009sp   (13.04.2016 в 09:47)
 

у Котерова было. возвращает значения полей обратно в форму. Посмотрите может оно
h@@p://dklab.ru/lib/HTML_FormPersister/

  Ответить  
 
 автор: leon2009sp   (14.04.2016 в 15:59)   письмо автору
 
   для: indexer   (13.04.2016 в 17:25)
 

да это она, но там про селект ничего не сказано, только как в input оставить
<form method="get">
    <input type="text"    name="test[text][first]"    value="<?=@$_REQUEST['test']['text']['first']?>"  >    
    <input type="radio" name="test[radio]" value="first"
        <?=@$_REQUEST['test']['radio']=='first''checked':''?>
    >first
    <input type="radio" name="test[radio]" value="second"
        <?=@$_REQUEST['test']['radio']=='second''checked':''?>
    >second
    <input type="submit" value="Submit">
</form>
<xmp><?print_r($_GET)?></xmp>
<hr><?show_source(__FILE__)?>

  Ответить  
 
 автор: indexer   (14.04.2016 в 22:19)   письмо автору
 
   для: leon2009sp   (14.04.2016 в 15:59)
 

библиотеке нет разницы, что возвращать input или select


Cкажите, вот я не понимаю, что означает эта запись?

<?=@$_REQUEST['test']['text']['first']?>

Может вдруг, что то поменялось в php, а я и не знаю, ткните носом где рассказывают про это в мануале по php
@ понятно давите ошибки но что за символ очень похожий на равно? чему присваивается переменная из многомерного массива _REQUEST.

не проще ли с формами работать как то примерно так?

<?php
$TEMPLATE
['form']=<<<EOF
<form method="get">
    <input type="text"    name="test[text][first]"    value="[one]"  >    
    <input type="radio" name="test[radio]" value="first" [check1]>first
    <input type="radio" name="test[radio]" value="second"[check2]>second
    <input type="submit" value="Submit">
</form> 
</form> 
EOF;


$replace = array(
                
"[one]" => $one,
                 
"[check1]"=>'checked="checked"',
                 
"[check2]"=>''
                
);
echo 
strtr($TEMPLATE['form'],$replace);


писал на вскидку могут быть ошибки
в коде отделено php от html и используются шаблон. Для простого сайта еще пойдет но для более сложного нужно использовать шаблонизатор. Очень нравится smarty но его многие недолюбливают из за того, что много лишнего в нем.

  Ответить  
 
 автор: KPETuH   (15.04.2016 в 10:33)   письмо автору
 
   для: indexer   (14.04.2016 в 22:19)
 

>Cкажите, вот я не понимаю, что означает эта запись?
Сам не пользуюсь, но насколько я помню она значит примерно следующее:
<?php echo $_REQUEST['test']['text']['first']?>

  Ответить  
 
 автор: leon2009sp   (15.04.2016 в 10:59)   письмо автору
 
   для: KPETuH   (15.04.2016 в 10:33)
 

да в общем то сделал: и рекуест отвалился
echo  "<option value=\"" . $vals[ob] . "\" " . $selected . ">" . $vals . "</option>";

http://dklab.ru/lib/HTML_FormPersister/ здесь почитай

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

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