На главную Статьи Функции

Добавление поля в форму методами PHP.




Добавление поля в форму методом PHP.
Ежедневно мы встречаемся с формами на интернет страницах, очень часто в них есть кнопка добавить строку. Эта кнопка передает функции JavaScript что нужно добавить еще одно поле. В интернете есть множество скриптов позволяющих это сделать, однако, для тех кто незнаком с JavaScript, или еще плохо в нем разбирается, понять как работает такой скрипты задача довольно сложная. В этой статье я постараюсь подробно описать, как создать добавление поля в форму методами PHP.

Задача: в форме есть поле, нужно нажатием на кнопку добавить еще одно.
Основная проблема в казалось бы простой задаче: у формы не может быть два действия action, если бы можно было задать их два, то проблемы бы не стояло, мы бы просто делали два обработчика, один обрабатывает форму, другой – добавляет поля.
Логика скрипта:

  1. Создадим элемент формы checkbox, если отметить который мы добавляем новое поле, а если он пустой – отправляем форму обработчику.
  2. Пишем простую функцию для проверки, отмечен ли флажок, которая меняет значение кнопки «Отправить» на значение «Добавить поле»:

<script type="text/javascript" language="javascript">
function Cheker()
{
with (document.forms.form1)
{
if (check.checked == false)
/* check есть id элемента chekbox */
{
/* button1 есть id элемента button который отправляет форму */
button1.value = "Отправить";
}
else
{
button1.value = "Добавить строку";
}
}
}
</script>

  1. Нужны скрытые поля: первое – сообщает скрипту что форма была отправлена, второе – количество строк в форме.
  2. Если мы добавляем строку, нужно сохранить строки с уже введенными значениями.

Окончательно страница будет выглядеть так:

<script type="text/javascript" language="javascript">
function Cheker()
{
with (document.forms.form1)
{
if (check.checked == false)
{
button1.value = "Отправить";
}
else
{
button1.value = "Добавить строку";
}
}
}
</script>
<?php
/*---Проверяем была ли отправлена форма---*/
if (!isset($_POST['added']))
/*---Фома не была отправлена---*/
{
?>
<form action="index.php" method="post" name="form1">
<input name="text[0]" type="text" /><br>
<input name="check" type="checkbox" value="addrow" onChange="Cheker()"/>
<!--  Поле added не передает никакого значения, однако сообщает обработчику, что форма уже отправлялась -->
<input name="added" type="hidden" value="" />

<input name="button1" type="submit" value="Отправить" />
</form>
<?php
}
else
/*---Форма отправлена---*/
{
/*---Проверяем стоит ли галочка "Добавить поле"---*/
if (!empty($_POST['check']))
/*---Добавляем еще одно поле---*/           
{
?>       
<form action="index.php" method="post" name="form1">
<?php
/*---Проверяем было ли уже добавлено поле---*/
if (!isset($_POST['row_count']))
/*---Поле добавлено не было, нужно добавить еще одно---*/
{

// $row_count - счетчик количества полей в форме.
$row_count=2;
for ($i=0; $i<($row_count - 1); $i++)
{
?>
<input name="text[<?php echo($i);?>]" type="text" value="<?php echo($text[$i])?>"/><br>
<?php
}
?>
<!--Строка с пустыми полями-->
<input name="text[<?php echo($i);?>]" type="text" value=""/><br>
<?                              
$row_count = $row_count + 1;                                 
?>
<input name="row_count" type="hidden" value="<?php echo($row_count);?>" />                             
<?php 
}
else
{
$row_count = $_POST['row_count'];
for ($i=0; $i<($row_count - 1); $i++)
{
?>
<input name="text[<?php echo($i);?>]" type="text"  value="<?php echo($text[$i]);?>"/><br>
<?php
}
?>
<!--Строка с пустыми полями-->
<input name="text[<?php echo($i);?>]" type="text" value=""/><br>
<?       
$row_count = $row_count + 1;                                 
?>
<input name="row_count" type="hidden" value="<?php echo($row_count);?>" />                             
<?php 
}
?>
<input name="check" type="checkbox" value="addrow" onChange="Cheker()"/>
<input name="added" type="hidden" value="" />
<input name="added" type="hidden" value="" />
<input name="button1" type="submit" value="Отправить" />
</form>
<?php
}
else
{

//Печатаем переданный массив.
print_r($_POST);
}
}
?>

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



© 2010-2019 При использовании материалов ссылка на сайт www.webchaynik.ru обязательна

обратная связь