Ребята, я почесываю голову вокруг этого.
У меня есть этот сайт, который в основном содержит несколько форм, заполненных пользователем. Затем пользователь может загрузить эту информацию в удобочитаемом формате (pdf) или машиночитаемом формате (xml), но у меня небольшая проблема с отправкой текстовых полей.
У меня есть несколько из них, например, в разделе описания, но когда я обращаюсь к значению $ _POST ['Desc_Desc_desc'], он пуст, хотя я могу видеть контент в текстовом поле. Странно то, что когда я использую firebug для проверки элемента, он показывает элемент, как будто у него не было содержимого.
Кто-нибудь может понять, что вызывает это странное поведение?
В service_level_library.buttons.prepForSubmit
текстовое поле клонируется вместе с остальной частью формы с помощью метода DOM cloneNode
. Это копирует атрибуты элемента HTML, но не свойства DOM. (Иногда свойства узла узла DOM имеют соответствующий атрибут , поэтому обновление свойства влияет на атрибут, который может заставить его отображать, что свойства DOM копируются.)
В то время как объекты textarea DOM имеют свойство value
, HTML-элемент textarea не имеет соответствующего атрибута value
, поэтому свойство value
не подвергает атрибуту. Таким образом, когда вы клонируете узел, атрибут (пустой) value
– это то, что копируется, оставляя текущее значение элемента (доступное через свойство value
).
Чтобы исправить свой скрипт, выполните одно из следующих действий:
defaultValue
либо установив текстовое содержимое узла, перед клонированием. Это работает, потому что текущее значение клонированного узла будет установлено на его начальное значение, а глубокая копия текстового поля скопирует его текстовое содержимое (источник его начального значения). Вы говорите в своем вопросе $_POST['Desc_Desc_desc']
, хотя в коде я вижу текстовое поле с именем Dep_desc
и id Dep_Desc_Desc
. Затем вы должны написать $_POST['Dep_desc']
, то есть name
<textarea>
вместо id
.
Кроме того, textarea
s не имеет атрибута value
, поэтому в вашем html вы должны написать начальное содержимое между открытием и закрывающим тегом.
HTML
<textarea name="Dep_desc" id="Dep_Desc_Desc">Initial content</textarea>
PHP
echo "The content of the textarea is ".nl2br(htmlspecialchars($_POST['Dep_desc']));
заметки
nl2br
: Уважайте новые строки в выходе html, заменяя символ \n
на <br />
.
htmlspecialchars
: Предотвратите возможные атаки XSS
.
Я использовал firebug для анализа того, что будет отправлено на ваш скрипт
document.getElementById('descriptionForm').submit()
Данные формы отправляются правильно
Content-Type: application / x-www-form-urlencoded Content-Length: 113
Desc_Desc_name = SO & Desc_Desc_keywords = переполнение & Desc_Desc_concept = HTTP% 3A% 2F% 2Fso.com & Desc_Desc_desc = переполнение стека +
Итог: форма не передается предполагаемому получателю.
У меня была аналогичная проблема, но позже я узнал, что где-то внизу, я использовал одно и то же имя для другого элемента, который был пуст. Это стерло мой необходимый элемент в var_dump, print_r. Потребовалось время, чтобы это понять.