Вот форма Код (Text): <form name=form ACTION="http://vision.biz/forma1.php" method=post> <TABLE BORDER=0 CELLSPACING=3 cellpadding="3"> <TR><TD align="right">Имя:</td><td><input type=text name="TOEMAIL[name]"SIZE=39></td></tr> <TR><TD align="right">Адрес, телефон:</td> <td><input type=text name="TOEMAIL[adres]"SIZE=39></td></tr> <TR><TD align="right">E-mail:</td><td> <input type=text name="TOEMAIL[email]"SIZE=39></td></tr> <TR><TD valign="top">В этом поле напишите Ваш вопрос :</td><td><TEXTAREA name="TOEMAIL[zakaz]" rows=5 cols=43 WRAP></TEXTAREA></td></tr> </table></CENTER> <CENTER><p> <HR WIDTH=75% ALIGN=center SIZE=1> <p><INPUT TYPE=SUBMIT VALUE="Отправить вопрос"> <INPUT TYPE=RESET VALUE="Очистить форму"></p> </CENTER> </form> а вот скрипт forma1.php Код (Text): <?php $email = "xvid@inbox.ru"; $subj = "привет!пришел заказ!"; $ToEmail = $HTTP_POST_VARS['TOEMAIL']; $headers = "Content-type: text/plain; charset=windows-1251 rn"; $msg = "форма обработана rn"; if(strlen( $HTTP_POST_VARS['TOEMAIL'])==0) { die("Ne vse polya zapolneny"); } foreach($ToEmail as $key=>$val) $msg .= "Поле ".htmlspecialchars($key).". Значение: ".htmlspecialchars($val)."rn"; mail($email, $subj, $msg, $headers); if ( !defined ( 'S_MOD' ) ) { echo "<meta http-equiv='refresh' content='0; url=/vopr1.htm'>"; exit; } ?> вопрос в том,как проверить поля формы на заполнение.сколько пытаюсь не как не выходит. может кто то делал подобное.поделитись полезными мыслями.плиз. с уважением, Клюев Александр.
- strlen - строковая функция, и работать она должна со строками (для массивов она, если не ошибаюсь, будет всегда возвращать число 5 - длину строки "array"); если вам нужно посчитать количество элементов массива, воспользуйтесь sizeof. - $HTTP_POST_VARS - уже старая конструкция (тем не менее, пока еще работает), лучше использовать $_POST. чтобы проверить, все ли поля заполнены, можно сделать, например, так: PHP: <?php $ToEmail = $_POST['TOEMAIL']; $all_fields = sizeof($_POST['TOEMAIL']); $msg = "форма обработана \r\n"; $not_empty = 0; foreach ($ToEmail as $key => $val) { $val = trim($val); $msg .= "Поле ".htmlspecialchars($key).". Значение: ".htmlspecialchars($val)."\r\n"; if ( !empty($val) ) $not_empty++; } if ( $not_empty != $all_fields ) die("Ne vse polya zapolneny"); else mail($email, $subj, $msg, $headers); ?>
я так понимаю вы сравниваете в этом скрипте общую длину массива с фактическим количеством элементов в нем.если эти две величины не равны,значит не все поля заполнены.верно?
а как тогда проверить каждое поле по отдельности.если для меня например важно,чтобы только отдельные поля были заполнены? могу я считать количество элементов массива каждого поля так например Код (Text): $all_fields1 = sizeof($_POST['TOEMAIL[name1]']); $all_fields2 = sizeof($_POST['TOEMAIL[name2]']); ....... $all_fieldsN = sizeof($_POST['TOEMAIL[nameN]']); с чем сравнивать $all_fields1, $all_fields2........ $all_fieldsN? что такое $not_empty, trim($val), !empty($val)?
Клюев Александр проверяйте каждое поле регулярным выражением, те, которые могут быть пропущены, задайте возможное количество символов как 0.
общая длина массива - это и есть фактическое количество элементов в нем. я сравниваю это количество с количеством заполненных элементов. Код (Text): if ( empty($_POST['TOEMAIL']['name1']) ) die('Field "name1" is empty"); и т.д. $not_empty - переменная; как можно догадаться из названия, в ней содержится количество не пустых элементов. про trim и empty почитайте в мануале.
а почему у меня на емэйл приходит форма обработана Поле name. Значение: ывфы ывфвф Поле adres. Значение: фвыфы 34 676 Поле email. Значение: ыфывфы Поле zakaz. Значение: вфыфввфы ыавыаываы ыаваываыва ываываыв вавыапук а без проверки заполнения приходило так форма обработана Поле name. Значение: ывфы ывфвф Поле adres. Значение: фвыфы 34 676 Поле email. Значение: ыфывфы Поле zakaz. Значение: вфыфввфы ыавыаываы ыаваываыва ываываыв вавыапук вроде бы все также осталось просто второй вариант лучше для восприятия! всем спасибо!!!
когда не все поля заполнены загружется страничка с сообщением:"не все поля заполнены" и ссылка"назад", которая заново загружает форму. вопрос: как сделать, чтобы те данные,которые пользователь уже внес в поля формы, заново подгрузились в форму при переходе на нее по ссылке "назад" ибо многих это раздражает, когда заново надо вносить всю инфу Заранее спасибо!
Клюев Александр это обработчик на php выдает надпись? если да, то выведите вывод формы в отдельную функцию, ее параметры - это переданные значения этой формы, по-умолчанию - пустое значение. и вызывайте в этом случае эту же функцию, только передав ей значения, которые ввел пользователь. либо проверяйте заполнение формы средствами javascript например еще до отправки на сервер
обработчик на php загружает страничку html, а в ней ссылка на форму.форма загружается заново.фактически надо как то запоминать, что вводит пользователь,чтобы в случае неполного заполнения формы заново это загрузить,если пользователь нажмет ссылку,чтобы вернуться и заполнить все поля
function contact_form_gen($name="",$mail="",$zakaz=""){ $name = @$_POST['name']; ... print("<input type='text' name='user_name' value='".$name."'>"); } и в таком духе..
Небольшая поправка Код (Text): print('<input type="text" name="user_name" value="'.htmlspecialchars($name).'">');
Mavir фишка в том, что эта функция выводит форму независимо от того, в какой раз это происходит.. А параметры, да, их пожалуй можно и удалить
как средствами php перелестнуть страницу обратно. т.е. как вручную мы нажимаем в броузере назад.вот то же самое сделать только автоматически с помощью php или скрипта?
DarkElf, это понятно. Только я бы это еще оптимизировал, чтобы не нужно было писать отдельную функция для каждого поля. PHP: <?php function postData($key){ if (isset($_POST[$key])){ return htmlspecialchars($_POST[$key]); }else{ return ''; } } ?> <input type="text" name="user_name" value="<?php echo postData('user_name'); ?>"> <input type="text" name="login" value="<?php echo postData('login'); ?>">
А якщо в користувача відключина опція використання яви (у фаєрфоксі по умовчанню вимкнено)? Це некращий спосіб.
taran2l 1) сайт - русскоязычный. будь любезен писать на русском языке или убирайся, хлопец, на *.ua . Хотя и приятно читать родной язык.. 2) а еще использование регулярок замедляет выполнение скриптов. мож их тоже уберем?
Не всі поля заповнено <a href="javascript:history.back(1)">поверніться назад</a> та заповніть їх коректно. Нажимаючи поверніться назад користувач буде отримувати те ж саме що нажавши назад в браузері.
taran2l просто представь реакцию, если в рядах оранжевых уродцев начать говорить на русском языке. а теперь объясни, почему на вас должны реагировать иначе?