массив. продолжение.

Don Arana

Новичок
массив. продолжение.

Столкнулся с такой проблемой при редактировании написанной статьи (идет разбивка статей по разделам.)

разделы находятся в массиве
$nav_sections=array(''1", "2", ..., ...);

При первичном внесении написанной статьи в БД для выбора раздела используется вот что:

<SELECT name="section_id">

<?php
for($i=0, $counted=count($nav_sections); $i<$counted; $i++)
echo "<OPTION value=".$i.">$nav_sections[$i]</OPTION>";
?>

</SELECT>


Но когда возникает необходимость отредактировать все это дело, то ОЧЕНЬ нужно, чтобы в форме редактирования выводился именно тот раздел, к которому принадлежит статья.

то есть чтобы было что то вроде:

<OPTION value="выбранный раздел" selected>$nav_sections[$i]</OPTION>"; но в то же время, чтобы value стало равным этому или другому значению (если захочется поменять раздел для данной статьи).

Названия разделов помещаются в поле таблицы section (вот так - UPDATE navigator SET ... , section_id='$section_id', section='$nav_sections[$section_id]' ...), соответственно section_id, полученная из формы помещается в поле section_id.

Попробовал сделать вот так -

<SELECT name="section_id">

<?php
echo "<OPTION value=".$nav_sections[$section_id]." selected>$section</OPTION>";
for($i=0, $counted=count($nav_sections); $i<$counted; $i++)
echo "<OPTION value=".$i.">$nav_sections[$i]</OPTION>";
?>

</SELECT>


но это приводит к появлению продублированного выбранного раздела и вообщзе вроде как то не по программистски.

не подскажите как можно решить задачку?
 

tony2001

TeaM PHPClub
PHP:
for($i=0, $counted=count($nav_sections); $i<$counted; $i++) {
  if ($i == $nav_selections[$section_id]) {
   echo "<OPTION value=".$i." selected>".$nav_sections[$i]."</OPTION>\n";
  }
  else {
   echo "<OPTION value=".$i.">".$nav_sections[$i]."</OPTION>\n";
  }
}
 

RomikChef

Guest
ну вот, циклы ты освоил.
теперь переходим к следующему оператору в программировании - условному переходу.
он традиционно называется IF
проверка по условию.
проверяем какое либо условие, и в зависимости от истинности или ложности условия, выполняем или не выполняем какое-то действие.
В данном случае это действие - писать или не писать слово "selected"
 

pupkin

Guest
Ну конечно это приводит к дублированию, если ты руками выводишь нужный раздел, а потом в цикле выводишь все раздела снова.
 

Don Arana

Новичок
ух ты! какие вы классные! так быстро отвечаете :)
спасибо-спасибо!

RomikChef ну вот, циклы ты освоил.
:) ура!

tony2001
биг сенкс, сейчас будем копаться! только вот зачем вот это - \\n ? вроде как символ перевода строки? и почему лучше ипсользовать \n, а не <BR>? Для универсальности?
 

pupkin

Guest
Имхо \n используется для вывода читаемого html-кода
 

Don Arana

Новичок
кстати, tony2001 ошибся.

не
PHP:
for($i=0, $counted=count($nav_sections); $i<$counted; $i++) {
if ($i == $nav_sections[$section_id]) {
echo "<OPTION value=".$i." selected>
...
а
PHP:
for($i=0, $counted=count($nav_sections); $i<$counted; $i++) {
if ($i == $section_id) { 
echo "<OPTION value=".$i." selected>
...
:) а то не работало
 

RomikChef

Guest
по хорошему, надо было тебе читать не Тони, а меня.
не надо дублировать код.
а у тебя целая строчка повторяется.
и зачем?

и вот эта строчка вызывает у меня недоумение
$counted=count($nav_sections); $i<$counted

первый оператор надо вынести ДО цикла.
 

Don Arana

Новичок
какая строчка повторяется?

if (..)
echo "<OPTION value=".$i." selected>".$nav_sections[$i]."</OPTION>\\n";

и

else
echo "<OPTION value=".$i." >".$nav_sections[$i]."</OPTION>\\n";

?
то есть вы хотите сказать, что эта конструкция, которую тони подсказал - неверна?
 

RomikChef

Guest
она верна, но не оптимальна.

if ($i == $nav_selections[$section_id]) $sel=" selected"; else $sel="";
echo "<option value=".$i.$sel">".$nav_sections[$i]."</option>\n";
 

Larson

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

tony2001

TeaM PHPClub
нет, в for(1;2;3) при каждой итерации выполняются только блоки 2 и 3.

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

RomikChef

Guest
я торможу, все понял.
А по поводу Ларсона - это личная переписка. Я ответил ему в привате, поскольку сздесь эту дискуссию считаю лишней
 

Don Arana

Новичок
RomikChef
да, разобрался, вариант действителньо оптимизированный, но заработал он только с фигурными скобками:

PHP:
$counted=count($nav_sections);
for($i=0; $i<$counted; $i++)
{
if($i==$section_id) $sel=" selected"; else $sel=""; 
   { 
       echo "<OPTION value=".$i.$sel.">".$nav_sections[$i]."</OPTION>\n";
   }
}
 

RomikChef

Guest
какие еще фигурные скобки???
убери их на фиг - они тут совершенно бессмысленные!
 

Don Arana

Новичок
блин! ну не работает без них! сейчас еще раз проверю!
по список Select не появляется (точнее появляется но пустой)

проверил, не получается!

PHP:
$counted=count($nav_sections);
for($i=0; $i<$counted; $i++)
if($i==$section_id) $sel=" selected"; else $sel=""; echo "<OPTION value=".$i.$sel.">".$nav_sections[$i]."</OPTION>\n";
 

alpes

Весь мир на ладони
Подсказка: в коде html значение value надо заключать в ""

Хотя сори, не всмотрелся в код, все равно проблему не вылечит
 

Don Arana

Новичок
alpes - ок! сделал.

if($i==$section_id) $sel=" selected"; else $sel="";
{
echo "<OPTION value=\"".$i."\"".$sel.">".$nav_sections[$i]."</OPTION>";
}

какую проблему? с кавычками и скобками все ок!
 
Сверху