Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Форма с проверками полей
 
 автор: bestel   (14.02.2007 в 10:44)   письмо автору
 
 

Добрый день!
Имеется к примеру форма:
<html><body>
<form action="../step_2/index.php" name=web_order method=post>
Имя: <input type=text name="name"><br>
<a onclick="document.web_order.reset(); return false;" href="#"><IMG src="../clear.gif" align=absMiddle border=0 alt="Отчистить форму"></a>
<input type=image src=../next.gif align="absmiddle" alt="Далее...">
</form>
</body></html>

Я так понимаю, это можно реализвать, если использовать вывод формы на страницу require("form.inc"). Каким образом можно сделать проверку на заполненность полей перед тем, как передать данные в "../step_2/index.php"? Чтобы при не правильном заполнении под полем выводилась к примеру подсказка в виде текста красного цвета? И при прогрузке странички в первый раз сразу все поля не подсвечивалиь?

   
 
 автор: cheops   (14.02.2007 в 13:02)   письмо автору
 
   для: bestel   (14.02.2007 в 10:44)
 

В этом случае HTML-форму и обработчик объединяют в один файл
<?php
  $error 
"";
  if(!empty(
$_POST))
  {
    
// Проверка на заполнение
    
...
    
// Если проверка не удалась $error - не пустая
    
if(empty($error))
    {
      
// Обработчик
      
...
      
// Переадресация на страницу, сообщающую об
      // успешной обработки данных
      
...
      exit();
    }
  }
  
// Если имеются ошибки выводим их
  
if(!empty($error)) echo $error;
?>
<html-форма>

   
 
 автор: bestel   (14.02.2007 в 14:58)   письмо автору
 
   для: cheops   (14.02.2007 в 13:02)
 

cheops, спасибо тебе!

Файл: index.php


<form action="index2.php" name=web_order method=post>
<?
# Вывод заголовков
require("header.inc");

$error ""
  if(!empty(
$_POST)) 

    
// Проверка на заполнение 
    
if(empty($name)) $error .= "Не введено имя!<br />\n";
    
// Если проверка не удалась $error - не пустая 
    
if(empty($error)) 
    { 
      
// Обработчик 
      
$name=htmlspecialchars($name);
      
$name=ereg_replace("\n"," "$name);
      
// Переадресация на страницу, сообщающую об 
      // успешной обработки данных 
      
... 
      exit(); 
    } 
  } 
  
// Если имеются ошибки выводим их 
  
if(!empty($error)) echo $error;

# Вывод формы
  
echo "<tr><td align=\"center\">";
  require(
"form_1.inc");
?>
<!--Вывод JavaScript, кнопка "Отчистить форму" -->
<a onclick="document.web_order.reset(); return false;" href="#"><IMG src="../clear.gif" align=absMiddle border=0 alt="Отчистить форму"></a>
<? 
# Кнопки
  
echo "<input type=\"image\" src=\"../next.gif\" align=\"absmiddle\" alt=\"Далее...\"></td>\r\n";
?>



Файл: form_1.inc

Имя: <input type=text name="name"><br>


На сколько я понимаю сначала данные надо отправить для проверки на эту странцу, можно это сделать: <form action='".$_SERVER['PHP_SELF']."' method='post'> ; ну а после проверки эти данные надо передать в index2.php. Как это реализовать:
// Переадресация на страницу, сообщающую об 
 // успешной обработки данных 
 ... 


???

   
 
 автор: cheops   (15.02.2007 в 11:29)   письмо автору
 
   для: bestel   (14.02.2007 в 14:58)
 

А так и пишите
<form action="index2.php" name=web_order method=post> 
<? 
# Вывод заголовков 
require("header.inc"); 

$error "";  
  if(!empty(
$_POST))  
  {  
    
// Проверка на заполнение  
    
if(empty($_POST['r_name'])) $error "Не заполнено поле \"Имя\"";
    
// Если проверка не удалась $error - не пустая  
    
if(empty($error))  
    {  
      
// Обработчик  
      
...  
      
// Переадресация на страницу, сообщающую об  
      // успешной обработки данных  
      
...  
      exit();  
    }  
  }  
  
// Если имеются ошибки выводим их  
  
if(!empty($error)) echo $error

# Вывод формы 
  
echo "<tr><td align=\"center\">"
  require(
"form_1.inc"); 
?> 
<!--Вывод JavaScript, кнопка "Отчистить форму" --> 
<a onclick="document.web_order.reset(); return false;" href="#"><IMG src="../clear.gif" align=absMiddle border=0 alt="Отчистить форму"></a> 
<?  
# Кнопки 
  
echo "<input type=\"image\" src=\"../next.gif\" align=\"absmiddle\" alt=\"Далее...\"></td>\r\n"
?>

   
 
 автор: bestel   (15.02.2007 в 13:43)   письмо автору
 
   для: cheops   (15.02.2007 в 11:29)
 

Как сделать, чтоб скрипт сам отправил проверенные данные на следуйщую страницу index2.php?

<?
// Сохранение данных в скрытом поле
// и отсылка их на страницу index2.php
echo "<form action=\"../step_2/index.php\" name=\"web_order\" method=\"post\">";
echo 
"<input type=\"hidden\" name=\"name\" value=\"name\">";
exit(); 
?>

   
 
 автор: cheops   (15.02.2007 в 16:19)   письмо автору
 
   для: bestel   (15.02.2007 в 13:43)
 

Если необходимо отправить данные именно методом POST, то придётся воспользоваться сокетами
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1879
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=9050
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=8931

   
 
 автор: bestel   (15.02.2007 в 18:55)   письмо автору
 
   для: cheops   (15.02.2007 в 16:19)
 

Я понял,... пытаюсь воплатить это в жизнь:

Файл index1.php

<form action="index1.php" name=web_order method=post> 
<? 
# Вывод заголовков 
require("header.inc"); 

$error "";  
  if(!empty(
$_POST))  
{  
    
// Проверка на заполнение  
    
if(empty($name)) $error .= "Не введено имя!<br />\n"
    
// Если проверка не удалась $error - не пустая  
    
if(empty($error))  
    {  
      
// Обработчик  
      
$name=htmlspecialchars($name); 
      
$name=ereg_replace("\n"," "$name); 
      
// Переадресация на страницу, сообщающую об  
      // успешной обработки данных  
        
      // передаваемые данные 
  
$name "$_POST[name]";
  
$hostname "www.sm.com"
  
$fp fsockopen($hostname,80); 

  
// формируем строку с отправляемымы данными 
  
$data "name=".urlencode($name)."\r\n\r\n"
  
$headers "POST /order/order/web/metod/test_bestel/step/index2.php HTTP/1.1\r\n" 
            
."Host: $hostname\r\n" 
            
."Content-type: application/x-www-form-urlencoded\r\n" 
            
."Content-Length: ".strlen($data)."\r\n\r\n"
  
// отправляем 
  
fwrite($fp,$headers.$data); 
 
  
// читаем один 
  // байт или все содержимое: 
  
while(!feof($fp)) 
    echo 
fread($fp,1024); 

  
fclose($fp); 

      exit();  
    }  
  }  
  
// Если имеются ошибки выводим их  
  
if(!empty($error)) echo $error

# Вывод формы 
  
echo "<tr><td align=\"center\">"
  require(
"form_1.inc"); 
?> 
<!--Вывод JavaScript, кнопка "Отчистить форму" --> 
<a onclick="document.web_order.reset(); return false;" href="#"><IMG src="../clear.gif" align=absMiddle border=0 alt="Отчистить форму"></a> 
<?  
# Кнопки 
  
echo "<input type=\"image\" src=\"../next.gif\" align=\"absmiddle\" alt=\"Далее...\"></td>\r\n"
?>


Каким образом сделать, чтобы после того как данные передались посредством сокета, в страничку index2.php, она открыылась и польз. мог продолжить заполнение формы???
как в страничке index2.php получить данные и закрыть сокет?

   
 
 автор: bestel   (16.02.2007 в 13:29)   письмо автору
 
   для: bestel   (15.02.2007 в 18:55)
 

Решели я уйти от решения сего вопроса, при помощи сокетов.

Вот, что вышло, форма многостраничная выполняется на одной странице...


<? 

# Запуск обработчика
require("errors.inc");

# Вывод формы
  
echo "<tr><td align=\"center\">"
  require(
"form_1.inc"); 
?>
<form action="index.php" name=web_order method=post> 
<!--Вывод JavaScript, кнопка "Отчистить форму" --> 
<a onclick="document.web_order.reset(); return false;" href="#"><IMG src="clear.gif" align=absMiddle border=0 alt="Отчистить форму"></a> 
<?  
# Кнопки 
  
echo "<input type=\"image\" src=\"next.gif\" align=\"absmiddle\" alt=\"Далее...\"></td>\r\n"
?>


Файл form1.inc

Имя: <input type=text name="name"><br>
<font color="red"> <? if(!empty($name_error)) echo $name_error// Если имеются ошибки выводим их ?> </font>
фамилия: <input type=text name="surname"><br>
<font color="red"> <? if(!empty($surname_error)) echo $surname_error// Если имеются ошибки выводим их ?> </font>
Пол: 
<input type=radio name=pol value=1>М
<input type=radio name=pol value=2>Ж<br>


Файл errors.inc

<?
$name_error 
"";
  if(!empty(
$_POST))  
{  
    
// Проверка на заполнение  
    
if(empty($name)) $name_error .= "Пожалуйста, введите имя!<br />\n";
    
// Если проверка не удалась $error - не пустая  
    
if(empty($name_error))  
    {  
      
// Обработчик  
      
$name=htmlspecialchars($name); 
      
$name=ereg_replace("\n"," "$name); 
      
      
// Переадресация на страницу, сообщающую об  
      // успешной обработки данных
    
    
if (@"$_POST[pol]"==="1"//Определение сценрария в зависимости от выбора занчения перменной pol
    
{ include "form_2.1.inc";} //
    
elseif(@"$_POST[pol]"==="2")    //
  
{ include "form_2.2.inc";}
      exit();
     }
      }
?>
<?
$surname_error 
"";
  if(!empty(
$_POST))  
{  
    
// Проверка на заполнение  
    
if(empty($surname)) $surname_error .= "Пожалуйста, введите фамилию!<br />\n";
    
// Если проверка не удалась $error - не пустая  
    
if(empty($surname_error))  
    {  
      
// Обработчик  
      
$surname=htmlspecialchars($surname); 
      
$surname=ereg_replace("\n"," "$surname); 
      
      
// Переадресация на страницу, сообщающую об  
      // успешной обработки данных
    
    
if (@"$_POST[pol]"==="1"//Определение сценрария в зависимости от выбора занчения перменной pol
    
{ include "form_2.1.inc";} //
    
elseif(@"$_POST[pol]"==="2")    //
  
{ include "form_2.2.inc";}
      exit();
     }
      }
?>


Каким образом сделать, чтобы при вводе данных не полность, пользователь возвращался к предведущей форме и значения корректно введеных полей не обнулялись? А то при таком коде, если пользователь недозаполнил какое-то поле, открывается заново index.php с подсветкой всех полей.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования