Элементы формы, созданные с помощью JavaScript, не $ _POST в php при отправке формы - PullRequest
2 голосов
/ 21 февраля 2011

Общий обзор:

У меня есть три страницы php:

  • одна - это страница ввода данных , в которой есть текстовое поле, которое onkeydown изменяет URL-адрес iFrame,
  • iFrame содержит страницу, которая ищет адреса электронной почты в базе данных LDAP и mySQL. При щелчке по результату поиска на страницу ввода данных добавляется отключенный текстовый ввод.
  • и существует страница действия , которая получает информацию о форме и отправляет электронные письма.

Проблема заключается в том, что ни одна из данных формы не передается на страницу действия ни из статических элементов формы, ни из динамических, созданных JavaScript.

form.php </p> <pre><code><SCRIPT type="text/javascript"> // <!-- function delRecipient(object) { var answer = window.confirm("Remove recipient?") if (answer){ countChildren = object.parentNode.parentNode.childNodes.length; oldName = "recipient" + countChildren; newName = object.parentNode.id; object.parentNode.parentNode.removeChild(object.parentNode); document.getElementById(oldName).id = newName; } } function iFrameHeight(id) { var content_height=document.getElementById(id).contentWindow.document.body.scrollHeight; document.getElementById(id).height=content_height; document.getElementById(id).style.display='block'; } function iFrameOpen(id) { document.getElementById(id).style.display='block'; iFrameHeight(id); } function iFrameClose(id) { var dt = new Date(); while ((new Date()) - dt <= 250) { /* Do nothing for 250 miliseconds. */ } document.getElementById(id).style.display='none'; } var selectNum=-1; function iFrameSearch(e) { var keynum; var keychar; var numcheck; if(window.event) { keynum = e.keyCode; } else if(e.which) { keynum = e.which; } // Use up and down arrow keys to select recipient: // Keynum 38 is the up arrow key, // 40 is the down arrow key // 13 is the enter key (for future use...) if(keynum==38) { --selectNum; } else if(keynum==40) { ++selectNum; } else { selectNum=-1; } keychar = String.fromCharCode(keynum); keychar = keychar.replace(/([^- 'a-zA-Z])/gi,""); document.getElementById('members').src='iframe.php?keyword=' + document.getElementById('search').value + keychar + '&select=' + selectNum; iFrameHeight('members'); return false; } // --> </SCRIPT> <div class="content"> <form name="form" id="form" method="post" action="action.php"> <h3>Select Recipients</h3> To: <div id="recipients" class="recipients"></div> <input type="text" id="search" class="search" autocomplete="off" onfocus="iFrameOpen('members'); iFrameHeight('members'); if(this.value=='Type name here to add a recipient...'||this.value=='Type name here to add another recipient...'){this.value='';}" onblur="if(this.value==''&&document.getElementById('recipients').getElementsByTagName('div').length>0){this.value='Type name here to add another recipient...';} else if(this.value==''){this.value='Type name here to add a recipient...';}" value="Type name here to add a recipient..." onkeydown="iFrameOpen('members'); iFrameSearch(event); iFrameHeight('members');" /><br> <iframe src="" id="members" width="400" height="0" frameborder="0" scrolling="no" onmouseout="iFrameClose('members')" style="display: none; position:relative; top:0px; left:0px;"></iframe> <input type="hidden" name="message" value="<?php $_REQUEST['var_from_previous_page'] ?>" /> <input type="submit" value="Send" /> </form> </div>

iFrame.php </p> <pre><SCRIPT type="text/javascript"> // <!-- function newRecipient(name,email) { var recipientNumber = parent.document.getElementById("recipients").childNodes.length++; var recipient = document.createElement("DIV"); recipient.id = "recipient" + recipientNumber; recipient.className = "recipient"; recipient.innerHTML = "<INPUT type=\"text\" name=\"recipient" + recipientNumber + "\" value=\"" + name + " <" + email + ">\" disabled=\"disabled\" /><div class=\"delete\" onclick=\"javascript:delRecipient(this)\">&nbsp;</div>"; parent.document.getElementById("recipients").appendChild(recipient); parent.document.forms[0].search.value = ""; parent.document.forms[0].search.focus(); parent.document.getElementById("members").style.display="none"; } // --> </SCRIPT> <?php // CUT-OUT A BUNCH OF IRRELEVANT PHP which searches the LDAP and mySQL databases, sorts, formats, etc. echo "<TABLE cellspacing=\"0\" callpadding=\"0\" width=\"1000\">\n"; for ($i=0; $i<$returned; $i++) { $row_type = ($i%2 == 0) ? "even" : "odd"; $select = $_REQUEST['select'] % $returned; if($i == $select) { $row_type .= " selected"; $selected = true; } else { $selected = false; } $name = explode(" (",$info[$i]["cn"][0]); $name_boldkeyword = nameCapitalize(str_ireplace(strtolower($_REQUEST['keyword']), "<b>" . strtolower($_REQUEST['keyword']) . "</b>", $name[0])); $email_boldkeyword = strtolower(str_ireplace( $_REQUEST['keyword'], "<b>" . $_REQUEST['keyword'] . "</b>", $info[$i]["mail"][0])); echo '<tr class="' . $row_type . '" onclick="newRecipient(\'' . addslashes(ucwords($name[0])) . '\',\'' . $info[$i]["mail"][0] . '\');"><td height="20" style="overflow: hidden;">' . ucwords($name_boldkeyword) . ' &lt;' . $email_boldkeyword . "&gt;</td></tr>\n"; } echo '<tr class="last"><td>Showing ' . $returned . ' of ' . $info["count"] . " entries.</td></tr>\n"; echo "</table>";

action.php

var_dump ($ _ REQUEST) содержит только сеансовые куки и рекламные куки. Нет переменных $ _POST.

Если вы поиграете с URL, он выведет добавленные вами переменные.

Ответы [ 4 ]

4 голосов
/ 21 февраля 2011

Вы, похоже, не указываете какие-либо name="" параметры, кроме <form>, где это не очень полезно.

Попробуйте сделать это, и вы должны быть хорошими.

2 голосов
/ 16 апреля 2011

У меня была такая же проблема.Мое решение было также добавить атрибут имени.

это способ, которым я создаю свой элемент

var myElement = document.createElement('input');
myElement.setAttribute('type', 'text');
myElement.setAttribute('id', 'txtElement');
myElement.setAttribute('name', 'txtElement');
myElement.setAttribute('style', 'margin:5px;width:120px;');
myElement.setAttribute('value', 'my value');

так я добавляю свой элемент в div в форме.

document.getElementById("myDiv").appendChild(myElement);
0 голосов
/ 08 марта 2014

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

0 голосов
/ 07 сентября 2013

У меня была эта проблема ... искать и искать решение этой проблемы и не найти ничего ...

через много минут ... я это исправлю.

Сначала вы должны создать форму так же, как вы создаете или создадите элементы формы ... но этот процесс, когда вы загружаете страницу:

var formGrabar = document.createElement('form');

сейчас .. вы можете создать таблицу и заполнить ее объектами формы ... всегда помните с document.create

так важно также динамически создавать кнопку типа ввода.

Вывод:

для отправки элементов формы, созданных с помощью JavaScript методом POST, все элементы должны создаваться динамически, поскольку при создании элементов эти объекты являются объектами, отличными от тех, которые создаются непосредственно с помощью html.

@ m4rloncs @ 3inlabs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...