Добавление элемента в массив $_POST

DerAlSem

Guest
Добавление элемента в массив $_POST

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

Есть форма post, с некоторым количеством инпутов. Инпуты все прекрасно передаются и считываются в массиве $_POST. Перепробовал несколько разных способов добавить в этот самый массив еще один элемент, значение которого будет меняться в зависимости от того, что в самих инпутах, но че-т не очень получается. Ну, например, есть два чекбокса, если ни один из них не отмечен, то в массив $_POST надо добавить елемент error со значением 1.

Собсна, интересует именно как добавить в массив $_POST элемент и значение, а не как определить, че там с чекбоксами (точнее, это все уже определяется нормально :)
 

Ринат

Новичок
непонятна задача
ну определи в скрипте значение переменной, в зависимости от переданного чекбокса
 

kvf77

Red Devil
DerAlSem

каким местом приложить твой вопрос к PHP?

это делается через JavaScript - на onsubmit вешаешь проверку на чекбоксы. выставляешь скрытый type="hidden" инпут в нужное значение
 

Фанат

oncle terrible
Команда форума
kvf77
пхп здесь простым местом.
всё можно сделать в нём, безо всякого уродского яваскрипта.

Собсна, интересует именно как добавить в массив $_POST элемент
$_POST['element'] = 'value';
 

DerAlSem

Guest
Фанат

Угу. Только все равно не срабатывает... :)
Т.е., по ходу, так как я хочу, не сработает...

Типа вот так это выглядит (тут небольшой кусок, но суть отражает):

Т.е, в принципе - если отмечен только первый чекбокс, то после обработки, он и должен остаться отмеченным. А этого не происходит. :( В принципе, можно из проверки убрать AND $_POST[2] == 1, но меня это не спасает, т.к. есть еще условия, по которым надо проверять, чего там в форме сделано и исходя из них все равно должна меняться переменная...

PHP:
<table border>
	<tr>
		<th>One</th>
		<th>Two</th>
		<th></th>
	</tr>
	<form action="temp.php" method="post">
	<tr>
		<td><input type="checkbox" name="one" <?php if ( $_POST[one] == "on" AND $_POST[2] == 1) echo "checked" ?>></td>
	<td><input type="checkbox" name="two"></td>
	</tr>
	<td><input type="submit"></td>
	</form></tr>	

<?php	
//function to insert something
/* example
$a = array_insert($a,1,"Mike");
*/
function array_insert($array,$pos,$val)
{
   $array2 = array_splice($array,$pos);
   $array[] = $val;
   $array = array_merge($array,$array2);   
   return $array;
}

$checkboxes = array(0 => one, 1 => two);
while ($checkbox = current($checkboxes)) {
	$key = key($checkboxes);
	if (!array_key_exists($checkbox, $_POST)) $_POST = array_insert($_POST,$key,NULL);
	next($checkboxes);
}

if ($_POST[one] == on AND $_POST[1] == NULL) $_POST[2] = 1;
?>
 

Andreika

"PHP for nubies" reader
а чего, пхп уже научился $_POST['two'] в $_POST[2] переделывать?
 

DerAlSem

Guest
Нет. А должен был?
$_POST['two'] - это чекбокс.
$_POST[2] - это переменная проверки.
 

Фанат

oncle terrible
Команда форума
чё-та не пойму ничего в этом небольшом куске большого кода.
Зачем здесь форма?
зачем функция array_insert?

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

откуда вообще вся эта галиматья набралась, если вся задача (как она была описана в начале) сводится к одной строчке -
if (empty($_POST['check1']) AND empty($_POST['check2'])) $_POST['error'] = 1;
?

-~{}~ 19.09.05 18:34:

кстати.
почитал внимательнее
в массив $_POST надо добавить елемент error со значением 1.
это ещё зачем?
зачем ошибку писать в этот массив?
 

DerAlSem

Guest
Так, кажется, надо было сразу всю задачу рассказать, а не кусочек... По ходу, так не проще было.
В общем, изначально: есть форма из 10 пунктов, если ее неправильно заполнили, то после перезагрузки страницы заполненные пункты должны опять "заполниться". А если правильно заполнили - то не должны заполняться... Вот для этого и надо писать ошибку в этот массив.
 

Фанат

oncle terrible
Команда форума
непонятно, почему обязательно ошибку писать именно в $_POST.
почему нельзя обойтись обычной переменной.

если форма заполнена правильно, то после её обработки надо делать РЕДИРЕКТ гетом. Это азбука.
после редиректа никакого поста не будет и в помине.
всё очень просто.
 

Andreika

"PHP for nubies" reader
ты можешь определить когда у тебя ошибка, а когда нет? замечательно..
а если завести переменную $horoshayaperemennayasoshibkoy?
потом
if ( $_POST[one] == "on" & $horoshayaperemennayasoshibkoy) echo "checked"
а причем тут массив $_POST и ошибки?
 

DerAlSem

Guest
А как еще переменную передать? Т.е. по идее, только в посте она и передается. Разве нет?

Хм. А тогда непонятно, как ДО submitа проверить правильность заполнения формы? (ну понятно, что можно яваскриптом, но хотелось бы PHP обойтись...)
 

Ринат

Новичок
ДО submitа проверить правильность заполнения формы? (ну понятно, что можно яваскриптом, но хотелось бы PHP обойтись...)
читай как PHP работает (на стороне сервера), до SUBMITA только js (на стороне клиента)
самые основы, в FAQ погляди
 

Фанат

oncle terrible
Команда форума
цыц.
не путайте человека.

А как еще переменную передать?
какую ещё переменную передать?
куда? зачем?

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

DerAlSem

Guest
Andreika
Ну... :)) Там чуть выше мой пост, с тем, что мне надо. :) Как это сделать? :) Т.е., я думал, что путем передачи переменной... Блин, я похоже, сам запутался уже... Давайте без передачи переменной. :)))

Фанат
Задачу понял. Ночью подумаю, завтра сюда вернусь. :)
 
Сверху