Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: checkbox : как отправить значения флажков созданных при помощи массива  (Прочитано 48539 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Pavel
Участник

ua
Offline Offline

« : 03-03-2008 10:28 » 

У меня такая проблема, при помощи массива я создаю список предметов под каждым из которого флажок:

<form>

<?
$Predmet = array ("Биология","Химия","Экономика");
foreach ($Predmet as $value){
echo ("<input    type = 'checkbox'
      name = 'Predm[]'
      value = '$value'>$value");
}

?>

<br>
<input type =  "submit"
       value = "Отправить">   
</form>

Проблема заключается в том что не знаю что нужно прописать , чтобы при нажатии кнопки показывало список предметов выбранных флажками, т.е. если мы выбираем например Биология и Экономика был результат:

Перечень предметов выбранных флажком: Биология, Экономика.

Если я указываю $Predm то показывает только название последнего предмета, помеченного флажком.
Записан
Chuda
Гость
« Ответ #1 : 03-03-2008 10:36 » 

что-то намудрил определённо лишнего
Записан
Chuda
Гость
« Ответ #2 : 03-03-2008 10:40 » 

из того, что должно получиться (правда не пробовала у себя запускать): несколько чекбоксов с одинаковыми именами, содержащими нежелательный символ.
Что-то удивляет?
Последний элемент формы и считается действительным в таком случае.
И то это какая-то извращённая квирксмода наверно должна быть.
На этот вывод же наверняка должны орать неблагим матом и валидатор и консоль ошибок. Не смутило?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 03-03-2008 10:45 » 

а что говорит
print_r($_POST)
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 03-03-2008 11:16 » 

и наверное нужно еще и так
Код:
i=0;
foreach ($Predmet as $value){
echo ("<input    type = 'checkbox'
      name = 'Predm[i]'
      value = '$value'>$value");
      i++;
}
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Pavel
Участник

ua
Offline Offline

« Ответ #5 : 03-03-2008 11:35 » 

здесь если мы так назовем имя чекбокса name = 'Predm[]', то на выходе как я понимаю создатся массив (при выборе Биология, Экономика): $Predm  = array (Биология, Экономика);

Если это так то остается только вывести из него значения:

<? echo ("$Predm") ?>

а фиг возвращает пустое значение((
Записан
Pavel
Участник

ua
Offline Offline

« Ответ #6 : 03-03-2008 11:45 » 

print_r($_POST) - создает пустой массив Array ()
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 03-03-2008 12:47 » 

Pavel, implode(', ', $predm)

Пустой $_POST говорит, что данные передаются методом GET - для POST надо указать в форме method="post".

Все полученные от в запросе параметры находятся в массивах $_GET и $_POST. Глобальные переменные создаются только при включенной опции register_global в на стройках PHP! В современных версиях (и уже давно) эта опция по умолчанию выключена (что правильно).

Шильгия, тут все путем - это стандартный метод передачи N значений под одним именем для PHP.

N отмеченных чекбоксов с именем "predm[]" создадут N строк "predm[]=...." в запросе к серверу. PHP обрабатывает такой случай, создавая массив $_POST['predm'] и заполняя его всеми полученными вариантами.
« Последнее редактирование: 03-03-2008 12:55 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Pavel
Участник

ua
Offline Offline

« Ответ #8 : 03-03-2008 12:54 » 

На выходе: Выполняемые предметы: implode(', ', Array) ;

Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 03-03-2008 12:56 » 

Pavel, дык, это не просто строка - это команда!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Pavel
Участник

ua
Offline Offline

« Ответ #10 : 03-03-2008 13:01 » 

а где ее разместить?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 03-03-2008 14:00 » 

print_r($_GET) что дает?

хелп на implode(', ', Array)  не рулит?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Aveic
Постоялец

ru
Offline Offline
Пол: Мужской
Yellow


« Ответ #12 : 03-03-2008 14:48 » 

Почитал ваши посты. Странно как-то все. Изначально, была просьба просто добавить код, который выведет список выбранных предметов.
Цитата
Проблема заключается в том что не знаю что нужно прописать , чтобы при нажатии кнопки показывало список предметов выбранных флажками, т.е. если мы выбираем например Биология и Экономика был результат:
Перечень предметов выбранных флажком: Биология, Экономика.
Раз форма не содержит аттрибут action и method, то данные придут на эту же страницу методом GET. Значит, надо просто проверить пришло ли что-нибудь, и если да, то вывести массив $_GET['Predm'].
Вот пример, как это можно сделать:
Код: (PHP)
<?php
if(!empty($_GET['Predm']))
{
  echo "Список предметов: ".implode(', ', $_GET['Predm'])."<br/>";
}
?>
<form>

<?
$Predmet = array ("Биология","Химия","Экономика");
foreach ($Predmet as $value){
echo ("<input    type = 'checkbox'
      name = 'Predm[]'
      value = '$value'>$value"
);
}

?>

<br>
<input type =  "submit"
       value = "Отправить">  
</form>
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 03-03-2008 15:11 » 

Aveic, а где видно из стартпоста, что форма не содержит аттрибут action и method,

чтобы при нажатии кнопки показывало  - где показывало?

Каков вопрос - такой ответ, и что мы что-то не то посоветовали?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Aveic
Постоялец

ru
Offline Offline
Пол: Мужской
Yellow


« Ответ #14 : 03-03-2008 16:34 » 

Aveic, а где видно из стартпоста, что форма не содержит аттрибут action и method,
Вот:
У меня такая проблема, при помощи массива я создаю список предметов под каждым из которого флажок:

<form>

<?
Я не хотел никого обижать, простите. Просто показалось все странным Улыбаюсь


Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 03-03-2008 16:45 » 

Aveic, а вот слона-то я и не заметил Жаль, каюсь
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Pavel
Участник

ua
Offline Offline

« Ответ #16 : 03-03-2008 21:03 » 

Извините выложил не полностью суть проблемы:

Итак имеем:

<?
if (empty($userName)){ //вывод формы пустой
?>
<h2><center>Пожалуйста внимательно заполните все поля в нижеприведенной форме</center></h2>

<form>
Фамилия, Имя, Отчество:
<input type =  "text"
       size = 50   
       name =  "userName"><br>
<?
$Predmet = array ("Биология","Химия","Экономика");
foreach ($Predmet as $value){
echo ("<input    type = 'checkbox'
      name = 'Predm[]'
      value = '$value'>$value");

}
?>

<br>
<input type =  "submit"
       value = "Отправить">   
</form>
<?
} else { //после нажатия кнопки Отправить получаем

<h2>Проверьте корректность введенных данных</h2><br> 
<h3>Фамилия, Имя, Отчество: $userName;<br>
Предметы, помеченные флажком: .... , ... ,  ; //вот тут то и суть проблемы что сюда вписать чтобы предметы помеченные флажком в if вот сюда передались ?
Записан
Aveic
Постоялец

ru
Offline Offline
Пол: Мужской
Yellow


« Ответ #17 : 03-03-2008 21:17 » 

ну собственно ответ уже прозвучал Улыбаюсь
вставить
Код: (PHP)
echo "Список предметов: ";
if(!empty($_GET['Predm']))
   echo implode(', ', $_GET['Predm']);
else
  echo "(нет выбранных предметов)";
В ветвь else Улыбаюсь
« Последнее редактирование: 03-03-2008 21:20 от Aveic » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 03-03-2008 23:46 » 

Aveic, empty() применять здесь нельзя - надо использовать isset(). Хороший код не должен выдавать ошибок никакого уровня.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Aveic
Постоялец

ru
Offline Offline
Пол: Мужской
Yellow


« Ответ #19 : 04-03-2008 00:02 » 

Aveic, empty() применять здесь нельзя - надо использовать isset(). Хороший код не должен выдавать ошибок никакого уровня.
Исправлюсь Улыбаюсь
Хотя, а какую ошибку он может выдасть? Вроде он ничего не выдает
« Последнее редактирование: 04-03-2008 00:05 от Aveic » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 04-03-2008 01:46 » 

Aveic, а ты включи все сообщения - включая NOTICE. Получишь ошибку, что переменная не существует. empty() проверяет на "пустое" значение - это эквивалент логической операции, а наличие переменной проверяет isset().

Цитата
Returns FALSE if var  has a non-empty and non-zero value.

The following things are considered to be empty:

    * "" (an empty string)
    * 0 (0 as an integer)
    * "0" (0 as a string)
    * NULL
    * FALSE
    * array() (an empty array)
    * var $var; (a variable declared, but without a value in a class)
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Pavel
Участник

ua
Offline Offline

« Ответ #21 : 04-03-2008 07:43 » 

Закинул код в конструкцию поl else, вот что пишет обработчик:

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\apache\htdocs\index.php on line 110

под десятой строкой числится команда:
if(!empty($_GET['Predm']))
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 04-03-2008 08:10 » 

Pavel, оформи код тегами code в кавадратных скобках
Код: (PHP)
<?php
if (empty($userName)){ //вывод формы пустой
   echo ("
     <h2><center>Пожалуйста внимательно заполните все поля в нижеприведенной форме</center></h2>
    <form>
     Фамилия, Имя, Отчество:
    <input type =  "
text"
       size = 50  
       name =  "
userName"><br>");
     $Predmet = array ("Биология","Химия","Экономика");
    foreach ($Predmet as $value){
        echo ("<input    type = 'checkbox'
        name = 'Predm[]'
        value = '$value'>$value"
);
   }
   echo("
     <br>
     <input type =  "
submit"    value = "Отправить">  
   </form>"
);
} else {
    //после нажатия кнопки Отправить получаем
   echo ("
  <h2>Проверьте корректность введенных данных</h2><br>
  <h3>Фамилия, Имя, Отчество: $userName;<br>"
);
  );
}
?>
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Pavel
Участник

ua
Offline Offline

« Ответ #23 : 04-03-2008 08:34 » 

А в каком редакторе можно видеть код разными цветами? дрим вьювер?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 04-03-2008 10:08 » 

Pavel, notepad++

Закинул код в конструкцию поl else, вот что пишет обработчик:

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\apache\htdocs\index.php on line 110

под десятой строкой числится команда:
if(!empty($_GET['Predm']))

Еще раз:
Код: (PHP)
if (isset($_GET['Predm']) && !empty($_GET['Predm']))
{
  // .......
}
else
{
  // ........
}
Всегда надо проверять наличие входного параметра!

Выполни такой код (на отдельной пустой странице):
Код: (PHP)
<?php

header('Content-type: text/plain');
print_r($_GET);

?>
Вызывать страницу надо с произвольными параметрами. Например: mypage.php?a=1&b=2&c=qwerty
Если страница выдаст ошибку отсутствия переменной, то дело в настройках (или очень древней версии) PHP.
« Последнее редактирование: 04-03-2008 11:03 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Pavel
Участник

ua
Offline Offline

« Ответ #25 : 04-03-2008 10:59 » 

notepad++ - отличная программка спасибо! )
Записан
Pavel
Участник

ua
Offline Offline

« Ответ #26 : 04-03-2008 11:12 » new

После вызова страницы с командой:

<?php

header('Contetnt-type: text/plain');
print_r($_GET);

?>

Выдало:

Array ( )



Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #27 : 04-03-2008 13:12 » 

Pavel, значит все путем. Следуй советам, проверяй все входные параметры сперва на существование, а потом на допустимость значений, и все будет хорошо.
Кстати, посмотри книжку - тут Aveic перевел на русский - полезно будет: https://club.shelek.ru/download.php?id=359
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Aveic
Постоялец

ru
Offline Offline
Пол: Мужской
Yellow


« Ответ #28 : 04-03-2008 17:11 » 

да, почитай переводик Улыбаюсь
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #29 : 04-03-2008 19:08 » 

Код:
<?php

header
(&#39;Contetnt-type: text/plain&#39;);
print_r($_GET);
echo (
"
     <h2><center>Пожалуйста внимательно заполните все поля в нижеприведенной форме</center></h2>
    <form>
     Фамилия, Имя, Отчество:
    <input type =  &#39;text&#39;
       size = 50
       name =  &#39;userName&#39;><br>"
);
    
$Predmet = array ("Биология","Химия","Экономика");
    foreach (
$Predmet as $value){
        echo (
"<input    type=&#39;checkbox&#39;  name=&#39;Predm[]&#39; value=&#39;".$value."&#39;> $value");
  echo("<br>");
 }
echo(
"
     <br>
     <input type =  &#39;submit&#39;    value = &#39;Отправить&#39;>
   </form>"
);

?>

у меня  работает
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines