|
|
|
| Здравствуйте.
Подскажите как сделать запоминание выбора 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 < 1 || $act > 4){
$act = 1;
}
$_SESSION['act'] = $act;
}
?>
|
| |
|
|
|
|
|
|
|
для: class
(26.06.2010 в 09:14)
| | <option ... selected> | |
|
|
|
|
|
|
|
для: 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. Нужно сперва обработать переменную, поместив ее в сессию, прежде чем использовать ее в построении списка. Отсюда и "нестабильность". | |
|
|
|
|
|
|
|
для: 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>';
}
// ...
|
| |
|
|
|
|
|
|
|
для: class
(26.06.2010 в 09:14)
| | автору рекомендуется познакомиться с циклами, либо уби | |
|
|
|
|
|
|
|
для: class
(26.06.2010 в 09:14)
| | Решил свою задачу немного другим вариантом (сделал проверку до вывода формы).
<?php
session_start();
if(!empty($_GET['i'])){
$act = abs(intval($_POST['act']));
if($act < 1 || $act > 4){
$act = 1;
}
$_SESSION['act'] = $act;
}
echo '<form action="1.php?i=ok" method="post">
<select name="act">';
$wm_array = array(1 => 'WMR', 2 => 'WMZ', 3 => 'WME', 4 => '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>';
?>
|
| |
|
|
|
|
|
|
|
для: 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 только на первый взгляд кажется непонятной. | |
|
|
|
|
|
|
|
для: 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'])), 0, 100);
$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>";
}
?>
|
| |
|
|
|
|
|
|
|
для: leon2009sp
(12.04.2016 в 14:47)
| | >как сделать чтобы название в селект не прыгало обратно?
а человеческим языком можно озвучить хотелку?
и не надо писать в чужих темах, тем более в теме 2010 года
для нового вопроса лучше создать отдельную тему | |
|
|
|
|
|
|
|
для: 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
(12.04.2016 в 22:11)
| | как оставить выбранное значение в селект боксе. выбрал Новосибирск что бы он и остался ?
уже не знаю как спросить чтоб понятно было | |
|
|
|
|
|
|
|
для: leon2009sp
(13.04.2016 в 09:47)
| | у Котерова было. возвращает значения полей обратно в форму. Посмотрите может оно
h@@p://dklab.ru/lib/HTML_FormPersister/ | |
|
|
|
|
|
|
|
для: 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__)?>
|
| |
|
|
|
|
|
|
|
для: 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 но его многие недолюбливают из за того, что много лишнего в нем. | |
|
|
|
|
|
|
|
для: indexer
(14.04.2016 в 22:19)
| | >Cкажите, вот я не понимаю, что означает эта запись?
Сам не пользуюсь, но насколько я помню она значит примерно следующее:
<?php echo $_REQUEST['test']['text']['first']?>
|
| |
|
|
|
|
|
|
|
для: KPETuH
(15.04.2016 в 10:33)
| | да в общем то сделал: и рекуест отвалился
echo "<option value=\"" . $vals[ob] . "\" " . $selected . ">" . $vals . "</option>";
|
http://dklab.ru/lib/HTML_FormPersister/ здесь почитай | |
|
|
|