Есть форма, не могу понять как написать форму... Помогите пожалуйста
<form method="GET" action="#">
<input class="form-control" name="names" type="text" style="width:300px;" placeholder="Введите ваше имя">
<input class="form-control" type="text" name="email" style="width:300px;" placeholder="Ваш e-mail">
<div id="parentId">
<div>
<nobr>
<input class="form-control" name="name[1]" type="text" style="width:300px;" placeholder="Название товара" />
<input class="form-control" name="link[1]" type="text" style="width:300px;" placeholder="Ссылка на товар" />
<input class="form-control" name="color[1]" type="text" style="width:300px;" placeholder="Цвет" />
<input class="form-control" name="size[1]" type="text" style="width:300px;" placeholder="Размер товара" />
<input class="form-control" name="price[1]" type="text" style="width:300px;" placeholder="Цена товара" />
<input class="form-control" name="quantity[1]" type="text" style="width:300px;" placeholder="Количество" />
<a class="btn btn-danger" onclick="return deleteField(this)" href="#">Удалить товар</a>
<a class="btn btn-success" onclick="return addField()" href="#">Добавить товар</a>
</nobr>
</div>
</div>
<textarea class="form-control" name="textarea" cols="30" rows="10" style="width:300px;" placeholder="Например: если не будет размера 10, можно взять на размер больше."></textarea>
<input class="btn btn-primary" type="submit" value="Отправить" />
</form>
<script>
var countOfFields = 1; // Текущее число полей
var curFieldNameId = 1; // Уникальное значение для атрибута name
var maxFieldLimit = 25; // Максимальное число возможных полей
function deleteField(a) {
if (countOfFields > 1) {
// Получаем доступ к ДИВу, содержащему поле
var contDiv = a.parentNode;
// Удаляем этот ДИВ из DOM-дерева
contDiv.parentNode.removeChild(contDiv);
// Уменьшаем значение текущего числа полей
countOfFields--;
}
// Возвращаем false, чтобы не было перехода по сслыке
return false;
}
function addField() {
// Проверяем, не достигло ли число полей максимума
if (countOfFields >= maxFieldLimit) {
alert("Число полей достигло своего максимума = " + maxFieldLimit);
return false;
}
// Увеличиваем текущее значение числа полей
countOfFields++;
// Увеличиваем ID
curFieldNameId++;
// Создаем элемент ДИВ
var div = document.createElement("div");
// Добавляем HTML-контент с пом. свойства innerHTML
div.innerHTML = "<nobr><input class=\"form-control\" name=\"name[" + curFieldNameId + "]\" type=\"text\" style=\"width:300px;\" placeholder=\"Название товара\"/> <input class=\"form-control\" name=\"link[" + curFieldNameId + "]\" type=\"text\" style=\"width:300px;\" placeholder=\"Ссылка на товар\"/> <input class=\"form-control\" name=\"color[" + curFieldNameId + "]\" type=\"text\" style=\"width:300px;\" placeholder=\"Цвет\"/> <input class=\"form-control\" name=\"size[" + curFieldNameId + "]\" type=\"text\" style=\"width:300px;\" placeholder=\"Размер товара\"/> <input class=\"form-control\" name=\"price[" + curFieldNameId + "]\" type=\"text\" style=\"width:300px;\" placeholder=\"Цена товара\"/> <input class=\"form-control\" name=\"quantity[" + curFieldNameId + "]\" type=\"text\" style=\"width:300px;\" placeholder=\"Количество\"/> <a class=\"btn btn-danger\" onclick=\"return deleteField(this)\" href=\"#\">Удалить товар</a> <a class=\"btn btn-success\" onclick=\"return addField()\" href=\"#\">Добавить товар</a></nobr>";
// Добавляем новый узел в конец списка полей
document.getElementById("parentId").appendChild(div);
// Возвращаем false, чтобы не было перехода по сслыке
return false;
}
</script>
Сам обработтчик https://yadi.sk/d/g69DrsEA3RcY6y
<?php
$_SERVER['debug'] = true;
$back = "<p><a href=\"javascript: history.back()\">Вернуться назад</a></p>";
if(!empty($_POST['name']) and !empty($_POST['color']) and !empty($_POST['link'])
and !empty($_POST['quantity'])){
$name = trim(strip_tags($_POST['name[]']));
$link = trim(strip_tags($_POST['link[]']));
$color = trim(strip_tags($_POST['color[]']));
$size = trim(strip_tags($_POST['size[]']));
$price = trim(strip_tags($_POST['price[]']));
$quantity = trim(strip_tags($_POST['quantity[]']));
$textarea = trim(strip_tags($_POST['textarea']));
mail('never3d22@gmail.com', 'Письмо с адрес_вашего_сайта',
'Имя покупателя: '.$name.'<br />Ссылка на товар: '.$link.'<br />Цвет товара: '.$color.'<br />
Размер: '.$size.' <br />Количество: '.$quantity.' <br />Сообщение '.$textarea,"Content-type:text/html;charset=windows-1251");
echo "Ваше сообщение успешно отправлено!<Br> Вы получите ответ в
ближайшее время<Br> $back";
exit;
}
else {
echo "Для отправки сообщения заполните все поля! $back";
exit;
}
?>
В вашем обработчике вы, используете метод POST
, а в форме пишете method="GET"
- по этому и не работает, напишите method="POST"
и все заработает.
По поводу action
- по сути его можно не указывать и не писать вообще, если обработчик будет на этой же странице, где и форма или запрос будет отправляться через AJAX
.
Иначе, нужно обязательно указывать путь до обработчика.
Но проблема кроется в другом, вы передаете в input
массив название[]
и в $_POST
придет массив с опять-же, массивами: name, link, color, size, price, quantity и т.д.
.
Для использования этих массивов нужно обращаться к пост так:
$name = $_POST['name'];
Это массив с именами, если сделать дамп:
var_dump($name);
Нам вернет
array(2) {
[1]=> string(1) "1"
[2]=> string(1) "2"
}
Следовательно и обращаться нужно как $name[1], $name[2]
:
Либо воспользоваться функцией join
или implode
- для склеивания массива в строку, данная функция за нас собирает массив в строку, через указанный разделитель первым агрументом (параметром) функции join
или implode
то
-есть так:
join(' ',$name);
где ' '
- пробел, указывает, что склеивать каждое значение массива через пробел. Мы можем указать что угодно в качестве разделителя.
Иначе воспользоваться циклом foreach
и используя конкатенацию .
склеить все значения в переменную.
http://php.net/manual/ru/language.variables.external.php
Думаю проблема в том, что action="#"
не верно указан
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Привет! В документации php заявлено, что фильтр FILTER_SANITIZE_FULL_SPECIAL_CHARS эквивалентен вызову htmlspecialchars(), но по факту данный фильтр не экранирует амперсанд,...