Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Метод submit() не передает массив $_POST (https://javascript.ru/forum/misc/29233-metod-submit-ne-peredaet-massiv-%24_post.html)

ZaValera 20.06.2012 15:06

Метод submit() не передает массив $_POST
 
Добрый день!
Есть форма для отправки данных на сервер:
<form id="loadForm" enctype="multipart/form-data" action="upload.php"  method="post" >
<input  type="button" name="upload" value="Загрузить" onClick = "document.forms[0].submit()"/>
</form>

Содержание файла upload.php:
<?php
print_r($_POST);
?>


Проблема заключается в том, что если инициировать submit с помощью метода формы, то PHP-скрипт выдает - Array ( ) . Т.е. массив $_POST пустой. А вот если заменить
<input  type="button" name="upload" value="Загрузить" onClick = "document.forms[0].submit()"/>

на
<input  type="submit" name="upload" value="Загрузить"/>

то все в порядке - Array ( [upload] => Загрузить ).

Везде пишут, что разница между кнопкой submit и методом submit() только в том, что не вызывается событие onsubmit. Видимо есть еще отличия?!
Скорее всего я чего-то не понимаю, помогите пожалуйста разобраться.

Deff 20.06.2012 15:21

ZaValera,
1. Нужон код страницы с формой
2. Формы имхо лучше субмитить
a) По кнопке
b) через Name или document.getElementById("MyForm");
<form id="MyForm" ..

ZaValera 20.06.2012 15:35

Вот код страницы с формой:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link REL=STYLESHEET TYPE="text/css" HREF="main.css"> 
</head>

<body>
<form id="loadForm" enctype="multipart/form-data" action="upload.php"  method="post" >
<input  type="button" name="upload" value="Загрузить" onClick = "document.forms[0].submit()"/>
</form>
</body> 

</html>


Цитата:

Сообщение от Deff (Сообщение 182763)
2. Формы имхо лучше субмитить
a) По кнопке

Это конечно да, но как раз вопрос и состоит в том, чтобы обойтись без стандартной кнопки.
Цитата:

Сообщение от Deff (Сообщение 182763)
b) через Name или document.getElementById("MyForm");
<form id="MyForm" ..

Я почти уверен, что от того, КАК найти форму в DOM, ничего не зависит. Я попробовал и через name, и через ID - все то же самое.

Deff 20.06.2012 20:34

ZaValera,
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link REL=STYLESHEET TYPE="text/css" HREF="main.css"> 
</head>

<body>
<form id="loadForm" class="container" method="post" enctype="multipart/form-data" action="upload.php" >
<input  type="text" value="Загрузить"/>
<input id="submit" style="display:none" type="submit" name="upload" value="Загрузить"/>
</form>

</body>
<input  type="button"value="Загрузить"  onclick="document.getElementById('submit').click()"/>

</html>

bes 20.06.2012 21:00

Deff, факт есть факт, submit() данные не передаёт, интересно в чём причина

devote 20.06.2012 21:15

тип кнопки submit это не просто кнопка отправляющая форму, у нее есть свои плюсы. Как известно, в одной форме можно хоть сотню кнопок submit сунуть, и все они будут отправлять форму. Но отличие у них таково, submit ведет себя присуще input с типом radio, тоесть лишь единственный результат. Либо ничего если его не трогали.

Возмем к примеру радиобатоны:
<input type="radio" value="1" />
<input type="radio" value="2" />
<input type="radio" value="3" />
У каждого радио батона есть свойство value и на сервер будет отправлен value выбранного радиобатона. Если же мы не тронем ни одно радиобатона, то и на сервер ничего не придет связанного с радиобатонами.

Собственно та же ситуация и с кнопками submit, они работают примерно так же как и радиобатоны, но еще и отправляют форму.

Поэтому если вы отправляете форму напрямую через тег form то и параметров этих кнопок submit вы не увидите на сервере.

Deff 20.06.2012 21:30

Цитата:

Сообщение от bes
Deff, факт есть факт, submit() данные не передаёт, интересно в чём причина

Да мну сталкивался.. но склероз (- могет зависит от enctype="multipart/form-data" и method ?

bes 20.06.2012 22:37

По моим экспериментам, submit() нормально отправляет данные из элементов с заданным атрибутом name, кроме кнопочных элементов, а input type="submit" также игнорирует кнопочные элементы, но отправляет своё value.
В этом наверное и правило.

Deff 20.06.2012 22:39

bes,
Да - про Name - читал - точно!

bes 20.06.2012 22:47

И где-то про всё это в мудрых источниках написано, поискал в MDN - не нашёл, поисковик тоже мало, что даёт, подобных тем - тьма, в большинстве нет ответа, но раз эксперимент показал.


Часовой пояс GMT +3, время: 12:15.