Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2010, 22:26   #1
snikers987
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 63
Вопрос Как передать несколько значений checkbox?

Есть почтовая форма, в которой тема письма представляет собой форму checkbox, как передать все отмеченные флажки? Сейчас из всех отмеченных передается толко последний омеченый..
snikers987 вне форума Ответить с цитированием
Старый 04.12.2010, 22:28   #2
snikers987
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 63
По умолчанию

ВОт форма:
PHP код:
opentable($locale['400']);
    echo 
$locale['401']."<br /><br />\n";
    echo 
"<form name='userform' method='post' action='".FUSION_SELF."'>\n";
    echo 
"<table cellpadding='0' cellspacing='0' class='center'>\n<tr>\n";
    echo 
"<td width='100' class='tbl'>".$locale['402']."</td>\n";
    echo 
"<td class='tbl'><input type='text' name='mailname' maxlength='50' class='textbox' style='width: 200px;' /></td>\n";
    echo 
"</tr>\n<tr>\n";
    echo 
"<tr style='display:none;'><td width='100' class='tbl'>".$locale['403']."</td></tr>\n";
    echo 
"<tr style='display:none;'><td class='tbl'><input type='text' name='email' maxlength='100' value='vam@zakaz.ua' class='textbox' style='width: 200px;' /></td></tr>\n";
    echo 
"</tr>\n<tr>\n";
    echo 
"<td width='100' class='tbl'>".$locale['10003']."</td>\n";
    echo 
"<td class='tbl'><input type='text' name='phone' maxlength='100' class='textbox' style='width: 200px;' /></td>\n";
    echo 
"</tr>\n<tr>\n";
    echo 
"<td width='100' class='tbl'>".$locale['404']."</td>\n";
    echo 
"<td class='tbl'><input id='fc21' type='checkbox' name='subject' value='Кредитка &quot;Универсальная&quot;'> <label for='fc21'>Кредитка &quot;Универсальная&quot;</label><br /><input id='fc22' type='checkbox' name='subject' value='mini Кредитка'> <label for='fc22'>mini Кредитка</label><br /><input id='fc23' type='checkbox' name='subject' value='Карта Юниора'> <label for='fc23'>Карта Юниора</label><br /><input id='fc24' type='checkbox' name='subject' value='Социальная карта'> <label for='fc24'>Социальная карта</label><br /><input id='fc25' type='checkbox' name='subject' value='Пенсионная карта'> <label for='fc25'>Пенсионная карта</label><br /><input id='fc26' type='checkbox' name='subject' value='Расчетная карта(только г.Белая Церковь)'> <label for='fc26'>Расчетная карта(только г.Белая Церковь)</label><br /><input id='fc27' type='checkbox' name='subject' value='Я хочу стать агентом ПриватБанка'> <label for='fc27'>Я хочу стать агентом ПриватБанка</label><br /><input id='fc28' type='checkbox' name='subject' value='МОРЕ возможностей(только для моряков)'> <label for='fc28'>МОРЕ возможностей(только для моряков)</label><br /><input id='fc29' type='checkbox' name='subject' value='Дебетные карты'> <label for='fc29'>Дебетные карты</label><br /><input id='fc210' type='checkbox' name='subject' value='Агент расчетных карт'> <label for='fc210'>Агент расчетных карт</label><br /><input id='fc211' type='checkbox' name='subject' value='Карта Gold'> <label for='fc211'>Карта Gold</label><br /><input id='fc212' type='checkbox' name='subject' value='Дебетные карты Platinum'> <label for='fc212'>Дебетные карты Platinum</label><br /><input id='fc213' type='checkbox' name='subject' value='Купить авто в ПриватБанке'> <label for='fc213'>Купить авто в ПриватБанке</label><br /><input id='fc214' type='checkbox' name='subject' value='PrivatAssistance-помощь автомобилистам'> <label for='fc214'>PrivatAssistance-помощь автомобилистам</label><br /><input id='fc215' type='checkbox' name='subject' value='Страхование'> <label for='fc215'>Страхование</label><br /><input id='fc216' type='checkbox' name='subject' value='Залоговая Ипотека'> <label for='fc216'>Залоговая Ипотека</label><br /><input id='fc217' type='checkbox' name='subject' value='Ломбардный кредит'> <label for='fc217'>Ломбардный кредит</label></td>\n";
    echo 
"</tr>\n<tr>\n";
    echo 
"<td width='100' class='tbl'>".$locale['405']."</td>\n";
    echo 
"<td class='tbl'><input id='msg111' type='checkbox' name='msg' value='Согласен(а) на контакт со мной со стороны банка!'><label for='msg111'>Согласен(а) на контакт со мной со стороны банка!</label></td>\n";
    echo 
"</tr>\n<tr>\n";
    
    echo 
"<td align='center' colspan='2' class='tbl'>\n";
    echo 
"<input type='submit' name='sendmessage' value='".$locale['406']."' class='button' /></td>\n";
    echo 
"</tr>\n</table>\n</form>\n";
    
closetable(); 
snikers987 вне форума Ответить с цитированием
Старый 04.12.2010, 22:59   #3
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

У вас все чекбоксы, которые "Тема письма", имеют одно имя(name='subject'):
Цитата:
echo "<td class='tbl'>
<input id='fc21' type='checkbox' name='subject' value='Кредитка &quot;Универсальная&quot;'>
<label for='fc21'>Кредитка &quot;Универсальная&quot;</label><br />
<input id='fc22' type='checkbox' name='subject' value='mini Кредитка'>
<label for='fc22'>mini Кредитка</label>
.....
<input id='fc217' type='checkbox' name='subject' value='Ломбардный кредит'>
<label for='fc217'>Ломбардный кредит</label></td>\n";
потому форма и передаёт только 1 элемент.

Вам нужно объединить эти checkbox-ы (которые "тема") в массив:
Цитата:
name='subject[0]'
name='subject[1]'
....
name='subject[N]'
Ну и в обработчике соответственно проверить переданные элементы этого массива.
ПОмните - checkbox передаёт в обработчик только отмеченные элементы.

Похожая тема
Andkorol вне форума Ответить с цитированием
Старый 04.12.2010, 23:40   #4
snikers987
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 63
По умолчанию

А как правильно передать обработчику этот масив?Так не работает:
PHP код:
$subject descript(stripslash(trim(isset($_POST['subject[]'])?$_POST['subject[]']:''))); 
PHP код:
if (isset($_POST['sendmessage'])) {
    include_once 
INCLUDES."securimage/securimage.php";
    
$error "";
    
$mailname substr(stripinput(trim($_POST['mailname'])), 050);
    
$phone substr(stripinput(trim($_POST['phone'])), 050);
    
$email substr(stripinput(trim($_POST['email'])), 0100);
    
$subject descript(stripslash(trim(isset($_POST['subject'])?$_POST['subject']:'')));
    
$msg descript(stripslash(trim(isset($_POST['msg'])?$_POST['msg']:'')));
    
$message $locale['401'].chr(13).chr(10).chr(13).chr(10).
    
$locale['10005'].' '.$subject.chr(13).chr(10).chr(13).chr(10).
    
$locale['402'].' '.$mailname.chr(13).chr(10).
    
$locale['10003'].' '.$phone.chr(13).chr(10).
    
$locale['405'].' '.chr(13).chr(10).$msg.chr(13).chr(10);
    
$phone descript(stripslash(trim($_POST['phone']))); 
snikers987 вне форума Ответить с цитированием
Старый 04.12.2010, 23:56   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от snikers987 Посмотреть сообщение
А как правильно передать обработчику этот масив?Так не работает:
$_POST['subject'] = это и есть ваш массив.

Работа с формами
Andkorol вне форума Ответить с цитированием
Старый 05.12.2010, 01:16   #6
snikers987
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 63
По умолчанию

Цитата:
Вам нужно объединить эти checkbox-ы (которые "тема") в массив:
Цитата:name='subject[0]'
name='subject[1]'
....
name='subject[N]'
Сделал так:
PHP код:
echo "<td class='tbl'><input type='checkbox'id='k1' name='subject[0]' value='Кредитка &quot;Универсальная&quot;'> <label for='k1'>Кредитка &quot;Универсальная&quot;</label><br />
    <input id='k2' type='checkbox' name='subject[1]' value='mini Кредитка'> <label for='k2'>mini Кредитка</label><br />
    <input id='fc23' type='checkbox' name='subject[2]' value='Карта Юниора'> <label for='fc23'>Карта Юниора</label><br />
    <input id='fc24' type='checkbox' name='subject[3]' value='Социальная карта'> <label for='fc24'>Социальная карта</label><br />
    <input id='fc25' type='checkbox' name='subject[4]' value='Пенсионная карта'> <label for='fc25'>Пенсионная карта</label><br />
    <input id='fc26' type='checkbox' name='subject[5]' value='Расчетная карта(только г.Белая Церковь)'> <label for='fc26'>Расчетная карта(только г.Белая Церковь)</label><br />
    <input id='fc27' type='checkbox' name='subject[6]' value='Я хочу стать агентом ПриватБанка'> <label for='fc27'>Я хочу стать агентом ПриватБанка</label><br />
    <input id='fc28' type='checkbox' name='subject[7]' value='МОРЕ возможностей(только для моряков)'> <label for='fc28'>МОРЕ возможностей(только для моряков)</label><br />
    <input id='fc29' type='checkbox' name='subject[8]' value='Дебетные карты'> <label for='fc29'>Дебетные карты</label><br />
    <input id='fc210' type='checkbox' name='subject[9]' value='Агент расчетных карт'> <label for='fc210'>Агент расчетных карт</label><br />
    <input id='fc211' type='checkbox' name='subject[10]' value='Карта Gold'> <label for='fc211'>Карта Gold</label><br />
    <input id='fc212' type='checkbox' name='subject[11]' value='Дебетные карты Platinum'> <label for='fc212'>Дебетные карты Platinum</label><br />
    <input id='fc213' type='checkbox' name='subject[12]' value='Купить авто в ПриватБанке'> <label for='fc213'>Купить авто в ПриватБанке</label><br />
    <input id='fc214' type='checkbox' name='subject[13]' value='PrivatAssistance-помощь автомобилистам'> <label for='fc214'>PrivatAssistance-помощь автомобилистам</label><br />
    <input id='fc215' type='checkbox' name='subject[14]' value='Страхование'> <label for='fc215'>Страхование</label><br />
    <input id='fc216' type='checkbox' name='subject[15]' value='Залоговая Ипотека'> <label for='fc216'>Залоговая Ипотека</label><br />
    <input id='fc217' type='checkbox' name='subject[16]' value='Ломбардный кредит'> <label for='fc217'>Ломбардный кредит</label></td>\n"

В результате получаю письмо с темой Array..
И предупреждение: Notice: Array to string conversion in X:\home\test1.ru\www\contact.php on line 30
вот 30 строка:
PHP код:
$subject descript(stripslash(trim(isset($_POST['subject'])?$_POST['subject']:''))); 

Последний раз редактировалось snikers987; 05.12.2010 в 01:24.
snikers987 вне форума Ответить с цитированием
Старый 05.12.2010, 02:00   #7
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Нет,ну так вы массив пытаетесь обработать как строку....

Вы по ссылке "Работа с формами" ходили..?
Читали там что-нибудь - или вам лень..?

Статья подробно описывает практически все задачи по работе с формами,которые только могут возникнуть...
Вот вам выборочно:
Цитата:
мы оказались в ситуации, когда один параметр имеет несколько значений. Это напоминает нам массив данных. Действительно, множественный список можно представить в виде массива, а обработать его элементы с помощью цикла foreach. Нам даже не обязательно знать колличество элементов множественного списка. Нам нужно лишь предварительно дать понять PHP, что мы будем передавать массив:
<select name="day_m[]" size=7 mutiple>
Квадратные скобки []- это признак массива.
Циклическая обработка массива осуществляется так:
foreach ($_POST['day_m'] as $key=>$value) echo "$key = $value <br>";
........
С параметрами checkbox1, checkbox2, checkbox3, и radiobutton дело обстоит несколько сложнее. Если переключатель не активен, то перечисленные параметры вообще не будут переданы на сервер, как будто их вообще не было. Следовательно, при попытке обратиться в скрипте к этим параметрам, мы получим сообщение, что переменная не существует. Поэтому просто написать echo $_POST['checkbox1']; мы не можем, нам необходимо сначала проверить существование этих параметров в запросе. Проверка существования параметра осуществляется с помощью функции isset(), которая служит для проверки существования переменных.
if (isset($_POST['checkbox1'])) echo $_POST['checkbox1'];
Обработайте массив $_POST['subject'] при помощи foreach().
Затем используйте полученные значения - сформируйте из них единую строку,которую потом и используете в качестве "Темы письма".
Кстати - у вас там довольно много вариантов - не слишком ли длинная "тема" может получиться..???

Читайте линки,которые вам приводят - пытайтесь разобраться и понять,а не ждите готовое решение.

PS: просмотреть все переданные значения в массиве $_POST можно при помощи var_dump().
Andkorol вне форума Ответить с цитированием
Старый 05.12.2010, 13:15   #8
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию

subject[0], subject[1], subject[2] и т.д.
то же самое, что
subject[], subject[], subject[] и т.д.

Так что индексы можно не проставлять, если они идут по порядку.
Никки вне форума Ответить с цитированием
Старый 06.12.2010, 19:07   #9
snikers987
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 63
По умолчанию

В общем что-то получилось. Может можно было сделать как-то и умнее...

Цитата:
if (isset($_POST['sendmessage'])) {
include_once INCLUDES."securimage/securimage.php";
$error = "";
$mailname = substr(stripinput(trim($_POST['mailname'])), 0, 50);
$phone = substr(stripinput(trim($_POST['phone'])), 0, 50);
$email = substr(stripinput(trim($_POST['email'])), 0, 100);
$subject = isset($_POST['subject'])?$_POST['subject']:'';
if(isset($_POST['subject'])){
foreach ($_POST['subject'] as $key=>$value) echo "$value <br>";
$subject = implode(",", $_POST['subject']);
}

$msg = descript(stripslash(trim(isset($_PO ST['msg'])?$_POST['msg']:'')));
$message = $locale['401'].chr(13).chr(10).chr(13).chr(10).
$locale['10005'].' '.$subject.chr(13).chr(10).chr(13). chr(10).
$locale['402'].' '.$mailname.chr(13).chr(10).
$locale['10003'].' '.$phone.chr(13).chr(10).
$locale['405'].' '.chr(13).chr(10).$msg.chr(13).chr( 10);
$phone = descript(stripslash(trim($_POST['phone'])));
Я далеко не проффесионал, но по крайней мере сейчас все работает так как я хотел! Предупреждений нет и ошибок нет! Всем спасибо!
snikers987 вне форума Ответить с цитированием
Старый 06.12.2010, 19:10   #10
snikers987
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 63
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Кстати - у вас там довольно много вариантов - не слишком ли длинная "тема" может получиться..???
Как показывает практика, отмечают не более трех пунктов...
snikers987 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как присвоить одной ячейке несколько значений? Хорошая Девочка Microsoft Office Excel 2 10.10.2010 20:58
Как в MsgBox, выводить несколько значений valerij Microsoft Office Excel 12 22.03.2010 23:17
Сохранение значений checkbox DjRusya Помощь студентам 0 11.03.2010 16:48
как OptionButton сделать не доступними несколько CheckBox-ов mars56 Microsoft Office Excel 14 20.01.2010 14:27
Подскажите пожалуйста как одновременно ввести несколько входных значений IVR Microsoft Office Excel 2 25.11.2009 14:37