Для редактирования статьи рядом с ее заголовком есть кнопка на файл редактирования, параметры передаются в ссылке.
Вся имеющаяся информация уже вписана в текстовые поля, для удобства.
что-то вроде
<input name="" value="полученная из базы инфа">
Но поскольку статья принадлежит к определенный категории, нужно чтобы в выпадающем списке стояло именно то значение, которое было выбрано при создании статьи, на случай если надо, к примеру переместить. То есть одно из полей должно иметь атрибут selected. Но это цикл, все значения обрабатываются одинаково.
А у меня получаются либо все категории, с первой по последнюю, с первой в списке, либо одна только "родная".
Прошу помощи.
Спустя 7 минут, 35 секунд (28.01.2009 - 12:21) FatCat написал(а):
Цитата (Grey @ 28.01.2009 - 12:14) |
статья принадлежит к определенный категории |
Где хранится эта информация?
Спустя 38 минут, 53 секунды (28.01.2009 - 13:00) Grey написал(а):
Действительно, не уточнил.
Все хранится в бд, для категорий - отдельная таблица. В таблице с новостями, указывается id категории.
Список должен быть динамический. Поскольку со скриптом предстоит работать теткам бальзаковского возраста, поэтому хочу чтобы было меньше свободы. Поэтому все названия категорий, видоВ, ДОЛЖНОСТЕЙ будут храниться в базе и предоставляться исключительно для выбора.
Спустя 22 минуты, 31 секунда (28.01.2009 - 13:23) twin написал(а):
Нужно сравнить категории из связанных полей и выплюнуть selected в случае совпадения.
Спустя 11 минут, 7 секунд (28.01.2009 - 13:34) FatCat написал(а):
ИМХО, проще и быстрее будет 2 запроса.
Первым запросом к таблице с новостями получаем ID категории, к которой относится новость. Пусть это будет $n_id.
Далее вместо
PHP |
print "<option value=\"".$res["id"]."\">".$res["catname"]."</option>"; |
использовать
PHP |
print "<option value=\"".$res['id']."\" "; if($res['id'] == $n_id) print "checked=checked"; print ">".$res["catname"]."</option>"; |
Спустя 7 часов, 45 минут, 1 секунда (28.01.2009 - 21:19) Sylex написал(а):
selected по-моему, а не checked. А вообще для таких вещей лучше написать функцию.
Спустя 10 часов, 50 минут, 51 секунда (29.01.2009 - 08:10) FatCat написал(а):
Цитата (Sylex @ 28.01.2009 - 21:19) |
selected по-моему, а не checked |
Да, конечно.
Спустя 1 месяц, 4 дня, 5 часов, 12 минут, 44 секунды (3.03.2009 - 13:23) Grey написал(а):
Продолжу эту тему, ибо проблема аналогична
PHP |
<?php require "config.php"; if (isset($_POST['school'])&& isset($_POST['num'])&& isset($_POST['let'])) { // Методом пост были присланы все поля формы $num = $_POST['num']; $let = $_POST['let']; $school = $_POST['school']; // Массив ошибок $errors = array(); // Проверки переменных if(empty($_POST['num'])) { $errors['num'] = "Не указан класс"; } if(empty($_POST['let'])) { $errors['let'] = "Не указана буква класса"; } if(empty($_POST['school'])) { $errors['school'] = "Не выбрана школа"; } if(count($errors)) { // Если массив ошибок не пуст, заново выводим форму, отсылая в нее сообщения об ошибках showform($errors); } else { $exist = mysql_query("SELECT * FROM klass WHERE nomer='$num' and letter='$let' and id_school='$school'" ,$db); if(mysql_num_rows($exist)>0) { echo "Школа с такими данными уже есть в списке!"; showform($errors); } else { // Если массив ошибок пуст - значит все переменные подходят под условия, и можно производить соот-щие действия с ними $result_ins_otm = mysql_query("INSERT INTO klass (nomer,letter,id_school) VALUES ('$num','$let','$school')"); if ($result_ins_otm == false) { echo "Данные не записаны"; } else { header('Location: redirect.php?act=add'); } } } } else { showform(); } // Содержит отображение формы function showform(array $errors = array()) { require "config.php"; $result = mysql_query("SELECT * FROM schools",$db); // Генерация значений по умолчанию, если значение установлено с предыдущего запроса - присваивается оно, иначе NULL $num = isset($_POST['num'])?$_POST['num']:NULL; $let = isset($_POST['let'])?$_POST['let']:NULL; $school = isset($_POST['school'])?$_POST['school']:NULL; // Генерация сообщений об ошибках $err1 = isset($errors['num'])?$errors['num']:NULL; $err2 = isset($errors['let'])?$errors['let']:NULL; $err3 = isset($errors['school'])?$errors['school']:NULL; // Вывод формы echo '<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />' .'<title>Добавить новую школу</title>' .'<link href="styles.css" rel="stylesheet" type="text/css" />' .'</head>'; echo '<form action="'.$_SERVER['REQUEST_URI'].'" method="post">'; //*************список школ для выбора****************8 echo '<select name="school" size = 1>'; echo '<option value="">Выберите школу</option>'; while ($myrow = mysql_fetch_assoc($result)) { echo "<option "; if($school == $myrow['id']) { echo " selected "; } echo ' value="'.$myrow['id'].'">'.$myrow['sh_title'].'</option>'; } echo'</select>'.$err3.'<br>'; //номера 1-12 echo '<select name="num" size = 1>' .'<option value="">Укажите номер</option>' .'<option value="1">1</option>' .'<option value="2">2</option>' .'<option value="3">3</option>' .'<option value="4">4</option>' .'<option value="5">5</option>' .'<option value="6">6</option>' .'<option value="7">7</option>' .'<option value="8">8</option>' .'<option value="9">9</option>' .'<option value="10">10</option>' .'<option value="11">11</option>' .'<option value="12">12</option> </select>'.$err1.'<br />' // Букафки .'<select name="let" size = 1> ' .'<option value="">Укажите букву</option>' .'<option value="а">А</option>' .'<option value="б">Б</option>' .'<option value="в">В</option>' .'<option value="г">Г</option>' .'<option value="д">Д</option>' .'<option value="е">Е</option>' .'</select>'.$err2.'<br />' .'<input type="submit" />' .'</form>'; }
|
Скрипт работает, данные вносятся как надо. Одна проблема - если заполнен неверно, данные, выбранные в списке обнуляются. То есть все надо выбирать заново. В списке школ попытался решить, получилось, выбранное значение сохраняется. Он работает. Но там выборка идет, можно условие впихнуть. А как то же самое провернуть с двумя оставшимися списками? номерами и буквами?
Спустя 6 часов, 43 минуты, 10 секунд (3.03.2009 - 20:06) Grey написал(а):
Немного пораскинул мозгами, мозги раскидались в следующее.
Списки select сформировал следующим образом:
//список номеров
PHP |
echo '<select name="num" size = 1>'; $list_n = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"); echo '<option value="">Укажите класс</option>'; foreach ($list_n as $numb) { echo "<option "; if($num == $numb) { echo " selected "; } echo ' value="'.$numb.'">'.$numb.'</option>'; } echo '</select>'.$err1.'<br />'; //список букаф echo '<select name="let" size = 1>'; $list_l = array("а", "б", "в", "г", "д", "е", "ж", "з"); echo '<option value="">Укажите класс</option>'; foreach ($list_l as $letter) { echo "<option "; if($let == $letter) { echo " selected "; } echo ' value="'.$letter.'">'.$letter.'</option>'; } echo '</select>'.$err2.'<br />'; |
Если кто с позиции опыта и рационализма знает лучше вариант, подскажите:) Вдруг ресурсов меньше есть будет.
Спустя 30 минут, 40 секунд (3.03.2009 - 20:36) kirik написал(а):
Может так?
PHP |
<?php function getOptions($array, $selected=null, $first=null) { $return = empty($first) ? null : '<option value="">'.$first.'</option>'; for($i = 0, $c = count($array); $i < $c; $i++) { $return .= '<option value="'.$array[$i].'"'.($array[$i] == $selected ? 'selected="selected"' : null).'>'.$array[$i].'</option>'."\n"; } return $return; }
$num = 10; $let = 'г'; // -------
$list_n = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12');
echo '<select name="num" size="1">'; echo getOptions($list_n, $num, 'Укажите класс'); echo '</select>'.$err1.'<br />'; //список букаф $list_l = array('а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з');
echo '<select name="let" size="1">'; echo getOptions($list_l, $let, 'Укажите класс'); echo '</select>'.$err2.'<br />'; |