[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Редактирование информации
Grey
Всем привет
Суть проблемы:
Есть статья, относитя к определенной категории. Категории в проекте выводятся выпадающим списком вида
PHP
$query=mysql_query("SELECT id, catname FROM table");
print 
"<select size=\"1\" name=\"zn\">";
while(
$res=mysql_fetch_array($query))
{
print 
"<option value=\"".$res["id"]."\">".$res["catname"]."</option>";
}
print 
"</select>";


Для редактирования статьи рядом с ее заголовком есть кнопка на файл редактирования, параметры передаются в ссылке.
Вся имеющаяся информация уже вписана в текстовые поля, для удобства.
что-то вроде
<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 />';
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.