Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Работа с чекбоксами
 
 автор: CassIO   (27.03.2008 в 06:10)   письмо автору
 
 

У меня возник вопрос работы с множеством чекбоксов, например когда надо удалить сразу несколько новостей выделенных чекбоксами или записать в базу список категорий в которых состоит товар или сотрудник...вот например мне на данный момент нужно:

Есть большой список категорий вакансий, при добавлении вакансии нужно указать категорию или категории в которых будет состоять вакансия...вот как это сделать?

Вот пример кода где и стоят те самые чекбоксы...

  <input name="cat" type="checkbox" value="1"> 
  Архитектура<br>
  <input name="cat" type="checkbox" value="2">
  Дизайн
  <br>
  <input name="cat" type="checkbox" value="3"> 
  Безопасность<br>
  <input name="cat" type="checkbox" value="4">
  Информационные технологии и Интернет<br>
  <input name="cat" type="checkbox" value="5">
  Логистика, перевозки, транспорт, склад, доставка<br>
  <input name="cat" type="checkbox" value="6">
  Маркетинг<br>
  <input name="cat" type="checkbox" value="7">
  Медицина и фармация<br>
  <input name="cat" type="checkbox" value="8">
  Персонал гостиниц, ресторанов, кафе, предприятий сферы обслуживания<br>
  <input name="cat" type="checkbox" value="9">
  Промышленное производство, оборудование<br>
  <input name="cat" type="checkbox" value="10">
  Реклама, СМИ, издательство, полиграфия<br>
  <input name="cat" type="checkbox" value="11">
  Руководители, управляющие, топ-менеджеры<br>


Заранее благодарен!

   
 
 автор: sim5   (27.03.2008 в 07:17)   письмо автору
 
   для: CassIO   (27.03.2008 в 06:10)
 

В вашем случае вы всегда будете получать только одно значение, а именно - последнего отмеченно чекбокса. Все потому, что вы имена одинаковые даете чекбоксам. Нужно так, например, cat1, cat2,cat3... Тогда можно определить все что угодно из полученного массива, и приемов не один. Например, определить ключи и их знаения. Для этого можно воспользоваться циклами, или же функциями работы с массивами. Все зависит от того, чего вы хотите и для чего.

   
 
 автор: ONYX   (27.03.2008 в 07:22)   письмо автору
 
   для: CassIO   (27.03.2008 в 06:10)
 

Есть два варианта:
1 Если у тебя все чекбоксы известны и имеют конкретные но разные имена cat1, cat2, cat3 и т.д.
2 Если задать чекбокс в виде массива, тоесть
 Архитектура<br> 
  <input name="ca[]t" type="checkbox" value="2"> 
  Дизайн 
  <br> 
  <input name="cat[]" type="checkbox" value="3">  
  Безопасность<br> 
  <input name="cat[]" type="checkbox" value="4"> 
  Информационные технологии и Интернет<br> 
  <input name="cat[]" type="checkbox" value="5"> 
  Логистика, перевозки, транспорт, склад, доставка<br> 
  <input name="cat[]" type="checkbox" value="6"> 
  Маркетинг<br> 
  <input name="cat[]" type="checkbox" value="7"> 
  Медицина и фармация<br> 

PHP сам вытянет все данные из чекбокса в массив

   
 
 автор: CassIO   (27.03.2008 в 12:02)   письмо автору
 
   для: ONYX   (27.03.2008 в 07:22)
 

Спасибо огромное! :)

Потом сделал через implode и explode че надо :)

   
 
 автор: knotya   (31.03.2008 в 16:50)   письмо автору
 
   для: ONYX   (27.03.2008 в 07:22)
 

здравствуйте уважаемые, хорошая тема сам искал ответ на этот вопрос, для меня этот вопрос остался открытым))
подскажите пожалуйста, для примера, как после вышеприведённого кода создать кнопочку или ссылку, которая отображала бы на экране категории которые отмечены чекбоксами???

   
 
 автор: CassIO   (31.03.2008 в 19:40)   письмо автору
 
   для: knotya   (31.03.2008 в 16:50)
 

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

Мож кто уже делал такое, поможете? :)

   
 
 автор: sim5   (31.03.2008 в 20:00)   письмо автору
 
   для: CassIO   (31.03.2008 в 19:40)
 

Что значит уже отмеченные - у ранее выбранных категорий должны быть отмечены чекбоксы? Если так, то при выводе списка категорий проверяйте, например, их id со значением полученных чекбоксов, и если они равны, то этому чекбокусу указывайте атрибут checked. Вот только зачем это нужно?

   
 
 автор: CassIO   (31.03.2008 в 20:09)   письмо автору
 
   для: sim5   (31.03.2008 в 20:00)
 

Допустим смотри...я подал вакансию и отметил 5 категорий к которым относится категория. Потом забыл что не добавил еще одну категорию, хочу это сделать, захожу в админку, выбираю "Редактировать вакансию". Там у меня вываливается писок категорий вида: чекбокс Архитектура

Те к которым вакансия уже относится должны быть отмеченными...т.е. с атрибутом cheked или как он там.

Всю голову изломал, как сделать не знаю, теоретически знаю а как практически нет :(

   
 
 автор: sim5   (31.03.2008 в 21:19)   письмо автору
 
   для: CassIO   (31.03.2008 в 20:09)
 

Ну если для админа, тогда да. Делайте так, как я сказал выше, только отмеченны должны бы те, которые у вас базе указаны как отмеченные или как пренадлежащие какой-то вакансии, т.е. признак по которому вы это узнаете, типа:

<input type="checkbox" value="" <? if (условие) print 'checked' ?>>

   
 
 автор: CassIO   (31.03.2008 в 22:10)   письмо автору
 
   для: sim5   (31.03.2008 в 21:19)
 

Не, ты маленько не так понял ))
Вот например урл:

index.php?act=cabinet&sub=vacancy_edit&id=2

Из него мы как обычно получаем id и вот как пробовал я...но маленько не так получилось :(

<?

    
if (session_is_registered(login) AND $type == 1) {
    
        
$id clear($_REQUEST['id']);
        
        if (isset(
$id)) {
            
            
$sql "SELECT * FROM `work_vacansii` WHERE `v_id`='$id'";
            
$result mysql_query($sql);
            
            
$data mysql_fetch_array($result);
            
                if (
strlen($data['v_cats']) > 1) {
                    
                    
$cat_list explode(","$data['v_cats']);
                    
$new_cat_list = array();
                        
                    foreach (
$cat_list as $element) {
                    
                        
$sql "SELECT * FROM `work_cats`";
                        
$result mysql_query($sql);
                        
                        while (
$data mysql_fetch_array($result)) {
                        
                            if (
$data['cat_id'] == $element) {
                            
                                
$top .= "SELECTED $element <br>";
                            
                            } else {
                                
                                
$top .= "DESELECTED ".$data['cat_id']."<br>";
                                
                            }
                        
                        }
                        
                    }
                
                }
            
        }    
    
    } else {
        
        
$errors "Ошибка авторизации!";
        
$parse->get_tpl('templates/errors.tpl'); 
        
$parse->set_tpl('{errors}',$errors);
        
$parse->tpl_parse();
        
$top .=$parse->template;
        
    }

?>

   
 
 автор: CassIO   (01.04.2008 в 07:09)   письмо автору
 
   для: CassIO   (31.03.2008 в 22:10)
 

В общем ночью спал и меня осенило что лучше бы операции местами поменять и вот че получилось:

<?

    
if (session_is_registered(login) AND $type == 1) {
    
        
$id clear($_REQUEST['id']);
        
        if (isset(
$id)) {
            
            
$sql "SELECT * FROM `work_vacansii` WHERE `v_id`='$id'";
            
$result mysql_query($sql);
            
            
$data mysql_fetch_array($result);
            
                if (
strlen($data['v_cats']) > 1) {
                    
                    
$cat_list explode(","$data['v_cats']);
                    
$new_cat_list = array();
                    
                    
$sql "SELECT * FROM `work_cats`";
                    
$result mysql_query($sql);
                    
                    while (
$data mysql_fetch_array($result)) {
                        
                        foreach (
$cat_list as $element) {
                        
                            if (
$data['cat_id'] == $element) {
                            
                                
$top .= "<input name=\"cat[]\" type=\"checkbox\" value=\"".$element."\" checked> ".$data['cat_name']."<br />";
                                
$check $element;
                            
                            }                    
                        
                        }
                        
                            if (
$check == $data['cat_id']) {
                                
$top .="";
                            } else {
                                
$top .= "<input name=\"cat[]\" type=\"checkbox\" value=\"".$data['cat_id']."\"> ".$data['cat_name']."<br />";
                            }
                    
                    }
                
                }
            
        }    
    
    } else {
        
        
$errors "Ошибка авторизации!";
        
$parse->get_tpl('templates/errors.tpl'); 
        
$parse->set_tpl('{errors}',$errors);
        
$parse->tpl_parse();
        
$top .=$parse->template;
        
    }

?>


Все работает! А там дальше, как хоти так и вороти...

   
 
 автор: sim5   (01.04.2008 в 07:13)   письмо автору
 
   для: CassIO   (31.03.2008 в 22:10)
 

Ну слава богу, зря писал, пришлось удалить.

   
 
 автор: CassIO   (01.04.2008 в 10:57)   письмо автору
 
   для: CassIO   (27.03.2008 в 06:10)
 

Впринципе если кто то найдет способ по проще или удобней, пишите :)

   
 
 автор: Zilog   (01.04.2008 в 13:44)   письмо автору
 
   для: CassIO   (01.04.2008 в 10:57)
 

>Впринципе если кто то найдет способ по проще или удобней, пишите :)

чекбоксы проименуй так: cat.$id

foreach($_POST['cat'] as $id => $v)
{
$sql="DELETE FROM volume_items WHERE id='$id'";
mysql_query($sql);
}

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования