Итак, поехали. Есть база MySQL пятой версии, на веб-сервере висит PHP5.2.8.
Рассматриваемая страничка вставляет кортеж из БД назад в форму для того, чтобы пользователь мог её отредактировать и загнать обратно в БД под тем же первичным ключом.
Для начала мы вытягиваем запись с нужным нам ключом из БД:
$edit = mysql_fetch_array (mysql_query("SELECT * FROM report WHERE no='" . $_GET ['no'] . "' "));
Одна из интересующих нас записей - дата. В БД она храниться в формате yyyy-mm-dd, то есть сегодняшнее 5е апреля в базе - 2012-04-05 в поле под именем 'date'.
Я ещё не дружу с аяксом и прочими наворотами, по этому приходиться просить пользователей вбивать дату через обычный
<select>
(отдельно по селекту на год, месяц и день).<label>День:<select name=date>
<option value=01 >01</option>
__________________
<option value=31 >31</option>
</select>
</label>
<label>месяц:
<select name=month>
<option value=01 >Январь</option>
__________________
<option value=12 >Февраль</option>
</select>
</label>
<label>год:
<select name=year>
<option value=2009 >2009</option>
___________________
<option value=2012 >2012</option>
</select></label>
сразу скажу, что точная дата в этом проекте не очень критична, да и контингент юзверей приличный. Проверки ставить нет необходимости пока.
Все данные в том числе и дата вводятся назад в эту же форму, чтобы пользователь заново не вписывал всё, что он вписывал ранее. Данные, с которыми у нас проблем нет и соответствующие части формы упущены.
И так, разбиваем дату на нужные нам части:
$date = explode ('-', $edit[date]); //собственно, разбиваем по признаку дефиса
print_r ($date); //выводит Array ( [0] => 2012 [1] => 04 [2] => 05 )
$dday = array($date[2] => "selected"); //создаём массив, где ключ-текущая дата, значение - выбрано
$dmonth = array($date[1] => "selected");//то же для месяца
$dyear = array($date[0] => "selected");//и для года
print_r ($dyear);//Array ( [2012] => selected )
print_r ($dmonth);//Array ( [04] => selected )
print_r ($dday);//Array ( [05] => selected )
Теперь моя задача - выбрать именно ту опцию в селекте, которая нам надо:
<label>День:<select name=date>
<option value=01 {$dday[01]}>01</option>
.....
<option value=31 {$dday[31]}>31</option>
</select>
</label>
<label>месяц:
<select name=month>
<option value=01 {$dmonth[01]}>Январь</option>
.....
<option value=12 {$dmonth[12]}>Февраль</option>
</select>
</label>
<label>год:
<select name=year>
<option value=2009 {$dyear[2009]}>2009</option>
.....
<option value=2012 {$dyear[2012]}>2012</option>
</select></label>
Но тут начинается САМОЕ интересное! Выбирается только год! Причём раньше не выбирался только месяц, а теперь, ещё и дата! Код в браузере:
.....
<option value=03 >03</option>
<option value=04 >04</option>
<option value=05 >05</option>
.....
<option value=03 >Март</option>
<option value=04 >Апрель</option>
<option value=05 >Май</option>
.....
<option value=2011 >2011</option>
<option value=2012 selected>2012</option>
Выбирается только год! Почему? Ни ошибок, ни предупреждений! Простите за много кода, но это для большей ясности картины. Буду крайне признателен, если кто выявит проблему.
Спустя 1 час, 22 минуты, 5 секунд (5.04.2012 - 17:21) Nikitian написал(а):
Непонятно чем и как вы формируете селекты. Есть подозрение, что проблема в предваряющем нуле у даты и месяца.
Спустя 1 минута, 37 секунд (5.04.2012 - 17:22) inpost написал(а):
Свойства надо в кавычки брать. Свойства аттрибутов тегов.
Спустя 5 дней, 17 часов, 31 минута, 53 секунды (11.04.2012 - 10:54) Rhiozan написал(а):
Спасибо! Действительно в нулях проблема. Буду ковыряться и пытаться решить.
UPD:
сделал так:
Заработало.
Ох уж эти нестрогие интерпретароты, которые в сочетании с таким нубьём как я дают такой результат :)
Всем спасибо!
UPD:
сделал так:
<option value=01 {$dmonth['01']}>Январь</option>
Заработало.
Ох уж эти нестрогие интерпретароты, которые в сочетании с таким нубьём как я дают такой результат :)
Всем спасибо!