Вход

Просмотр полной версии : сохранение/вывод данных, введенных в форму после вывода ошибки


johnsnow91
18.02.2013, 15:25
Здравствуйте, столкнулся с непреодолимой для меня проблемой. Казалось бы тривиальная задача, но... Ситуация такая: Нужно сохранять заполненные поля формы, если выдается ошибка. Перепробовал и готовые скрипты и сам пытался написать, не вышло. Может местные умельцы смогут помочь.

tsigel
18.02.2013, 15:32
Ситуация такая: Нужно сохранять заполненные поля формы, если выдается ошибка.
Что это значит? Какая ошибка?

Создайте массив со значениями из полей и всегда сможете вернуть их в случае чего.

DjDiablo
18.02.2013, 22:07
какая ошибка ?
Заполняется форма, нажимается отправить. На сервере происходит ошибка, и после перезагрузки страницы вы видите пустые формы ?
Тобишь форма отправляется на сервер post/get запросом без использования ajax ?

Всё верно ???????????

Если да, то это проблема не клиента а сервера, jQuery тут не причём.

пример php
если его запустить то переменная comment из post запроса снова окажется в поле comment.

<textarea name="comment" cols="40" rows="3"><?=$_POST['comment'] ?></textarea>

Смотрите работа с формами на Php если используете php конечно, если пишите на другом языке ищите пример на него.

johnsnow91
22.02.2013, 15:09
какая ошибка ?
Заполняется форма, нажимается отправить. На сервере происходит ошибка, и после перезагрузки страницы вы видите пустые формы ?
Тобишь форма отправляется на сервер post/get запросом без использования ajax ?

Всё верно ???????????

Если да, то это проблема не клиента а сервера, jQuery тут не причём.

пример php
если его запустить то переменная comment из post запроса снова окажется в поле comment.

<textarea name="comment" cols="40" rows="3"><?=$_POST['comment'] ?></textarea>

Смотрите работа с формами на Php если используете php конечно, если пишите на другом языке ищите пример на него.
Всё верно, но вот дело в том, что форма написана на HTML и когда я встраиваю <textarea name="comment" cols="40" rows="3"><?=$_POST['comment'] ?></textarea>, у меня админка коментит код вот таким образом: <!--?=$_POST['comment'] ?-->

DjDiablo
22.02.2013, 16:14
Движок какой, и куда именно вы встраиваете ?

johnsnow91
25.02.2013, 08:25
Движок какой, и куда именно вы встраиваете ?
Движок - никому неизвестная active portal lite cms, редактор там стоит ckedit, вроде. Я в редакторе сделал форму и подключил к ней скрипт-обработчик на php. Могу и ссылку на сайт прислать, если здесь это не запрещено.

danik.js
25.02.2013, 08:53
johnsnow91, для начала сделайте валидацию полей (есть плагины для jquery) на javascript. Чтобы некорректная форма даже не смогла отправиться. Если не все можно проверить на клиенте - делайте ajax-запросы на сервер для валидации на сервере.
Далее, если есть желание и возможность, сделайте проверку полей на сервере (она вроде у вас уже есть), и если есть ошибки, прописывайте value полям формы значения из POST массива параметров. Так форма будет уже заполненной.

Впринципе можно сделать только первое, или второе. Но лучше и то и это.

johnsnow91
25.02.2013, 09:14
Далее, если есть желание и возможность, сделайте проверку полей на сервере (она вроде у вас уже есть), и если есть ошибки, прописывайте value полям формы значения из POST массива параметров.
как раз вот это я и пробовал сделать и получается, что пхп код просто выводится в поле, вместо срабатывания

danik.js
25.02.2013, 09:58
пхп код просто выводится в поле, вместо срабатывания
ПХП код исполняется во всех файлах с расширением .php (по умолчанию). Или же через eval(). Видимо у вас ни то ни сё. Приведите проблемный участок кода - посмотрим.

Deff
25.02.2013, 10:32
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
var memryForm;
function copy(){
$("#copy").html("");
memryForm.clone().appendTo("#copy")
}
$(document).ready(function(){
memryForm=$("#form").clone();

$("#form *").on('change',function(){
memryForm=$("#form").clone();
});

});
</script>


<form id="form" style="border:3px ridge #B6CEFB;padding:8px;">
<input type=text><Br>
<input type=hidden value="1"><Br>
<input type="radio" name="browser" value="firefox"> Firefox<Br>
<input type="radio" name="browser" value="firefox"> Opera<Br>
<p><select name="hero[]">
<option disabled selected>Выберите героя</option>
<option value="Чебурашка">Чебурашка</option>
<option value="Крокодил Гена">Крокодил Гена</option>
</select></p>
</form>
<input type=button value="Получить Дубликат сохранённого" onclick="copy()" /><Br><Br>
===============================
<div id=copy></div>

danik.js
25.02.2013, 10:43
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
var memryForm;
function copy(){
$("#copy").html("");
memryForm.clone().appendTo("#copy")
}
$(document).ready(function(){
memryForm=$("#form").clone();

$("#form *").on('change',function(){
memryForm=$("#form").clone();
});

});
</script>


<form id="form" style="border:3px ridge #B6CEFB;padding:8px;">
<input type=text><Br>
<input type=hidden value="1"><Br>
<input type="radio" name="browser" value="firefox"> Firefox<Br>
<input type="radio" name="browser" value="firefox"> Opera<Br>
<p><select name="hero[]">
<option disabled selected>Выберите героя</option>
<option value="Чебурашка">Чебурашка</option>
<option value="Крокодил Гена">Крокодил Гена</option>
</select></p>
</form>
<input type=button value="Получить Дубликат сохранённого" onclick="copy()" /><Br><Br>
===============================
<div id=copy></div>



$("#copy").html("");
Это заменяется на $('#copy').empty()

$("#form *").on(
Это очень топорно и нерационально. Что, всем p, option, button, br и тд тоже будем навешивать обработчик onchange?
Делается это так:
$('#form').on('change', function() {..})

DjDiablo
25.02.2013, 12:54
php введённый в редакторе очевидно не исполняется. Ищите плагин для форм, либо какойнибудь виджет который позволяет встраивать php прямо в контент.

Хотя есть альтернатива через ajax.

johnsnow91
25.02.2013, 16:30
<form id="contact-form" action="http://topazelectro.ru/files/sendmail/sendmail.php" method="post" enctype="multipart/form-data">
<fieldset style="width:760px">
<table>
<tbody>
<tr>
<td><h2>Контактные данные</h2></td>
</tr>
<tr>
<td><label><span class="text-form" style="color:#ff0000">*</span>ФИО:</label></td>
<td><input name="p1" type="text"></td>
</tr>
<tr>
<td><label><span class="text-form" style="color:#ff0000">*</span>Город</label></td>
<td><input name="p2" type="text"></td>
</tr>
<tr>
<td><label><span class="text-form" style="color:#ff0000">*</span>Организация:</label></td>
<td><input name="p3" type="text"></td>
</tr>
<tr>
<td><label><span class="text-form" style="color:#ff0000">*</span>Телефон:</label></td>
<td><input name="p4" type="text"></td>
</tr>
<tr>
<td><label><span class="text-form" style="color:#ff0000">*</span>E-mail:</label></td>
<td><input name="p5" type="text"></td>
</tr>
<tr>
<td><h2>Информация об изделии</h2></td>
</tr>
<tr>
<td><label><span class="text-form" style="color:#ff0000">*</span>Полное наименование устройства:</label></td>
<td><input name="p6" type="text"></td>
</tr>
<tr>
<td><label><span class="text-form" style="color:#ff0000">*</span>ID-номер устройства:</label></td>
<td><input name="p7" type="text"></td>
</tr>
<tr>
<td><label><span class="text-form" style="color:#ff0000">*</span>Заводской номер устройства:</label></td>
<td><input name="p8" type="text"></td>
</tr>
<tr>
<td><label><span class="text-form">&nbsp;Дата изготовления устройства:</span></label></td>
<td><input name="p9" type="text"></td>
</tr>
<tr>
<td><label><span class="text-form" style="color:#ff0000">*</span>Информация о требуемой прошивке или документация:</label></td>
<td><input name="p10" type="text"></td>
</tr>
<tr>
<td><label><span class="text-form" style="color:#ff0000">*</span>Причина перепрограммирования:</label></td>
<td><input name="p11" type="text"></td>
</tr>
<tr>
<td colspan="2">
<div class="wrapper">
<div class="text-form">Дополнительные сведения:</div>
<div class="extra-wrap">
<textarea name="message"></textarea>
<div cass="clear"></div>
<div class="buttons" style="width:100%">
<table style="border:0px solid #000" width="100%">
<tbody>
<tr>
<td style="align:left;border:0px solid #000">
<a class="button-2" href="#" onclick="getElementById('contact-form').reset()"><img src="http://topazelectro.ru/img/formbutton2.PNG" onmousemove="this.src='http://topazelectro.ru/img/formbutton4.PNG'" onmouseout="this.src='http://topazelectro.ru/img/formbutton2.PNG'"></a>
</td>
<td style="align:right;border:0px solid #000;text-align:right">
<a class="button-2" href="#" onclick="getElementById('contact-form').submit()"><img src="http://topazelectro.ru/img/formbutton.PNG" onmousemove="this.src='http://topazelectro.ru/img/formbutton3.PNG'" onmouseout="this.src='http://topazelectro.ru/img/formbutton.PNG'"></a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div></td>
</tr>
</tbody></table><span style="color:#ff0000">*</span> - поля, обязательные для заполнения</fieldset> </form>

Этот код у меня написан в редакторе в админке, если вставлять пхп в значение value или же просто между тегами <input> </input> в поле выводится просто код

DjDiablo
25.02.2013, 17:12
спокойствие, только спокойствие.
Дышим глубоко

Повторяю ещё раз.
Твой редактор верятно просто выплёвывает контент как текст, теги из текста исполнятся небудут, потому что текст это не код. Интерпритатор содержимое текстовых переменных будет всегда рассматрвать как текст, несмотря на то что в них написано.

echo "<?='привет'>"; выведет <?='привет'?> вместо привет.
Потому что код это код, а текст это текст.

Тобиш PHP засовывать в редактор бесполезно. Потому что всё содержимое видимо дальше будет рассматриваться как текст, включай твой php код.

Аналогичная хренотень в joomla но там есть плагин если его поставить то между специальных тегов можно записывать php код, а ещё там есть различные компоненты для форм. Хотя между нами, всё это уродливое говно.

Когда этого говна мало пишут свой плагин/компонент/модуль или что у вас там. Если для каждой страницы можно сделать свой шаблон как в modx или хотябы в wordpress, то вы можете попытаться форму в шаблон хотя бы засунуть.

Ищите решение под свой движок, пошукайте на форуме своей cms.

johnsnow91
27.02.2013, 10:29
Когда этого говна мало пишут свой плагин/компонент/модуль или что у вас там. Если для каждой страницы можно сделать свой шаблон как в modx или хотябы в wordpress, то вы можете попытаться форму в шаблон хотя бы засунуть.

Ищите решение под свой движок, пошукайте на форуме своей cms.
Может попробовать Iframe'ом вставить форму в редактор?обычная html страница увидит код?

не дождался ответа, попробовал. Уже лучше, если писать
<input name="p1" type="text" value="<? echo $_POST['p1'];?>">, то кода уже не видно, но и смодержимого нет. Если писать строку обычную после echo, то эта строка в инпуте отображается.