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

Форум PHP

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

 

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

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

тема: Notice: Undefined index: vubor
 
 автор: pautina   (21.07.2008 в 15:53)   письмо автору
 
 

Ни подскажете в чём ошибка

<?php 
// Условие проверки продавец или покупатель 
// if (isset($_POST['save_p']));
// {
 
if ($_POST['vubor'] == "2")
 {

// РЕГИСТРАЦИЯ ПРОДАВЦА  
 
if (isset($_POST['save_p']))   
  {   
// логин, имя, фамилия, электронная почта, пароль продавца
        
$login_pr htmlspecialchars(stripslashes(trim($_POST['login_pr']))); 
        
$name_pr htmlspecialchars(stripslashes(trim($_POST['name_pr']))); 
        
$fam_pr htmlspecialchars(stripslashes(trim($_POST['fam_pr'])));   
        
$email_pr htmlspecialchars(stripslashes(trim($_POST['email_pr'])));   
        
$password_pr htmlspecialchars(stripslashes(trim($_POST['password_pr']))); 
        
$repeatpas_pr htmlspecialchars(stripslashes(trim($_POST['repeatpas_pr'])));   

   if (empty(
$login_pr))   // логин продавца
       
{   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Ваш логин</b> осталось пустым! Это недопустимо. <p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
       }   

    else   
      if (
preg_match('/[^-a-z\d]/i'$login_pr))   // d - десятичное число
      
{   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Ваш логин</b> <font color = 'black' size = '4' face = 'Times'>\""
.$login_pr."\"</font> использует   
               запрещённый символ! Это недопустимо.<p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
      } 
//    имя продавца    
    
else 
     if (empty(
$name_pr))   
       {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Имя</b> осталось пустым! Это недопустимо. <p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
       }   

    else   
      if (
preg_match('/[^а-яё]/i'$name_pr))  // i- верхний и нижний регистр букв  
      
{   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Имя</b> <font color = 'black' size = '4' face = 'Times'>\""
.$name_pr."\"</font> использует   
               запрещённый символ! Это недопустимо.<p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
      }   
//  фамилия продавца
else 
     if (empty(
$fam_pr))   
       {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Фамилие</b> осталось пустым! Это недопустимо. <p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
       }   

    else   
      if (
preg_match('/[^а-яё]/i'$fam_pr))   // i- верхний и нижний регистр букв  
      
{   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Фамилие</b> <font color = 'black' size = '4' face = 'Times'>\""
.$fam_pr."\"</font> использует   
               запрещённый символ! Это недопустимо.<p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
      }   
// электронная почта продавца
    
else   
     if (empty(
$email_pr))   
       {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>E-mail</b> осталось пустым! Это недопустимо. <p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
       }   

    else   
     if (!
preg_match("/[0-9a-z_]+@[-0-9a-z_^\.]+\.[a-z]{2,4}$/i"$email_pr))   
      {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>E-mail</b> <font color = 'black' size = '4' face = 'Times'>\""
.$email_pr."\"</font>   
              использует запрещённый символ! Это недопустимо.<br>   
              Введите E-mail в виде: <b>mmm@sait.ru</b><p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
      }   
// Пароль продавца
    
else   
     if (empty(
$password_pr))   
       {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Пароль</b> осталось пустым! Это недопустимо. <p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
       }   


    else   
     if (
preg_match('/[^-_a-z\d]/i'$password_pr))   
      {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Пароль</b> <font color = 'black' size = '4' face = 'Times'>\""
.$password."\"</font>   
              использует запрещённый символ! Это недопустимо.<p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
      }   


// Подтверждение пароля продавца
    
else   
     if (empty(
$repeatpas_pr))   
       {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Повторите пароль</b> осталось пустым! Это недопустимо. <p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
       }   


    else   
     if (
preg_match('/[^-_a-z\d]/i'$repeatpas_pr))   
      {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Повторите пароль</b> <font color = 'black' size = '4' face = 'Times'>\""
.$repeatpas_pr."\"</font>   
              использует запрещённый символ! Это недопустимо.<p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
      }   


    else   
     if (
$password_pr != $repeatpas_pr)   
      {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              Ваши пароли <font color = 'black' size = '4' face = 'Times'>\""
.$password_pr."\" и \"".$repeatpas_pr."\"</font>   
              не совпадают! Это недопустимо.<p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
      }   

else   
 { 
     
$a=mysql_connect("localhost","root","");   // Создание БД и таблицы пишем в другом файле base.php и запускаем 1 раз
          
if(!$a)   
        { echo 
"Не могу соединится с базой!<br>";   
          echo 
mysql_error();   
          exit;   
        } 
    
mysql_query"CREATE DATABASE reg_pol" ) or die (mysql_error()); // БД регистрация пользователей
    
mysql_select_db"reg_pol"); 
    
mysql_query("CREATE TABLE pol_prod (  
                    id_user_pr SMALLINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,  
                    login_pr TINYTEXT NOT NULL,  
                    name_pr TINYTEXT NOT NULL,
                    fam_pr TINYTEXT NOT NULL,
                    email_pr TINYTEXT NOT NULL,  
                    password_pr TINYTEXT NOT NULL,  
                    )"
) or die (mysql_error());     // таблица пользователь продавец
                    
    
$login_pr $_POST['login_pr'];  // Если register globals отключены
      
$name_pr $_POST['name_pr'];
      
$fam_pr $_POST['fam_pr'];
      
$email_pr $_POST['email_pr']; 
    
$password_pr $_POST['password_pr'];
    
$repeatpas_pr $_POST['repeatpas_pr']; 
    if (!
get_magic_quotes_gpc()) 
     { 
       
$login_pr mysql_escape_string($login_pr); // Связано с экранированием (register globals)
         
$name_pr mysql_escape_string($name_pr);
         
$fam_pr mysql_escape_string(fam_pr);
        
$email_pr mysql_escape_string($email_pr);    
       
$password_pr mysql_escape_string($password_pr); 
         
$repeatpas_pr mysql_escape_string($repeatpas_pr); 
     } 
// Проверка условия если логин продавца дублируется а email нет
if  ($sql=mysql_query("select id_user_pr from pol_prod where login_pr='".$login_pr."' and email_pr != '".$email_pr."'") and (mysql_num_rows($sql)>      0)) 
    {     
     echo  
"<center>    
            <font color = 'blue' size = '3' face = 'Tahoma'>    
              Ошибка введённых в форму данных <font color = 'black' size = '4' face = 'Times'>\""
.$login_pr."\"</font>   
              Логин с таким именем уже существует в БД, введите другой логин<p>    
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'>НАЗАД</a>    
              </font>    
              </center>"
;        
      
    }  
// Проверка условия если email продавца дублируется а логин нет 
else 
 if  (
$sql=mysql_query("select id_user_pr from pol_prod where email_pr='".$email_pr."' and login_pr != '".$login_pr."'") and (mysql_num_rows($sql)>0)) 
    {     
     echo  
"<center>    
            <font color = 'blue' size = '3' face = 'Tahoma'>    
              Ошибка введённых в форму данных <font color = 'black' size = '4' face = 'Times'>\""
.$email_pr."\"</font>   
              email с таким именем уже существует в БД, введите другой email<p>    
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'>НАЗАД</a>    
              </font>    
              </center>"
;        
      
    }  
// Проверка условия при котором и логин и email прдавца дублируется      
else 
 if  (
$sql=mysql_query("select id_user_pr from pol_prod where login_pr='".$login_pr."' and email_pr='".$email_pr."'") and (mysql_num_rows($sql)>      0))   
    {     
     echo  
"<center>    
            <font color = 'blue' size = '3' face = 'Tahoma'>    
              Ошибка введённых в форму данных <font color = 'black' size = '4' face = 'Times'>\""
.$login_pr."\"</font>   
              Логин с таким именем уже существует в БД, введите другой логин<p>    
              </font>  
              <font color = 'blue' size = '3' face = 'Tahoma'>    
              Ошибка введённых в форму данных <font color = 'black' size = '4' face = 'Times'>\""
.$email_pr."\"</font>   
              email с таким именем уже существует в БД, введите другой email<p>    
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'>НАЗАД</a>    
              </font>      
              </center>"
;        
      
    }     

   
   else   
    {       
        
$save "INSERT INTO pol_prod VALUES (0,'$login_pr','name_pr','fam_pr','$email_pr','$password_pr')";   
        
$temp mysql_query($save);    
               
     if (
$temp)   
       {   

           echo 
"<center><strong><font color = 'red' size = '2' face = 'Tahoma'>   
                 Вы успешно зарегистрированы в системе.   
                </font></strong>"
;   
       }   

       else   
         echo 
"<center><font color = 'black' size = '4'><b>Ошибка при добавлении нового партнёра.   
         Пожалуйста, зайдите позже</b></font></center>"
;   

     }   

  }  
 }

 else   
   {   

        echo 
"<font color = 'blue' size = '4' face = 'Tahoma'>Регистрация нового пользователя</font><p>   

        <font color = 'gray'><b>все поля обязательны к заполнению</b></font>"
;   

        echo 
"<form action = 'register.php' method = 'post'>";   
         
        
// Изменение таблицы к нужному виду  
        
echo "<CENTER>
               <TABLE border = '0' width = '90%' cellpadding = '4' class = 'screen'>   
               <TR valign = 'top' align = 'left'>   
                 <TD><font size = '2' face = 'Tahoma'>Ваш логин:</font></TD>
                 <TD align='right'><img src='image/ico_reg.gif' width='6' height='18'></TD>   
                 <TD><input type = 'text' size = '45' name = 'login_pr' maxlength = '20'   
                 value = '"
.$_POST['login_pr']."' class = 'edit'></TD>   
                 <TD><font size = '2' face = 'Tahoma'>от A-z и цифр 0-9.<br>Максимальное количество символов 20.<br>
Минимальное количество символов 3.</font></TD>   
               </TR>   
               
               <TR valign = 'top' align = 'left'>   
                 <TD><font size = '2' face = 'Tahoma'>Имя:</font></TD> 
                 <TD align='right'><img src='image/ico_reg.gif' width='6' height='18'></TD>    
                 <TD><input type = 'text' size = '45' name = 'name_pr' maxlength = '20'   
                 value = '"
.$_POST['name_pr']."' class = 'edit'></TD>   
                 <TD><font size = '2' face = 'Tahoma'>от А-я максимальное количество символов 20.</font></TD>   
               </TR>   
               
               <TR valign = 'top' align = 'left'>   
                 <TD><font size = '2' face = 'Tahoma'>Фамилия:</font></TD>  
                 <TD align='right'><img src='image/ico_reg.gif' width='6' height='18'></TD>    
                 <TD><input type = 'text' size = '45' name = 'fam_pr' maxlength = '20'   
                 value = '"
.$_POST['fam_pr']."' class = 'edit'></TD>   
                 <TD><font size = '2' face = 'Tahoma'>от А-я максимальное количество символов 20.</font></TD>   
               </TR>   
               
               
              <TR valign = 'top' align = 'left'>   
                 <TD><font size = '2' face = 'Tahoma'>Электронная почта:</font></TD> 
                 <TD align='right'><img src='image/ico_reg.gif' width='6' height='18'></TD>     
                 <TD><input type = 'text' size = '45' maxlength = '40' name = 'email_pr'   
                 value = '"
.$_POST['email_pr']."' class = 'edit'></TD>
                 <TD><font size = '2' face = 'Tahoma'>Ваш личный (контактный) адрес электронной почты</font></TD>   
               </TR>   

               <TR valign = 'top' align = 'left'>   
                 <TD><font size = '2' face = 'Tahoma'>Пароль:</font></TD> 
                 <TD align='right'><img src='image/ico_reg.gif' width='6' height='18'></TD>     
                 <TD><input type = 'password' size = '45' maxlength = '20' name = 'password_pr'   
                 value = '"
.$_POST['password_pr']."' class = 'edit'></TD>
                 <TD><font size = '2' face = 'Tahoma'>пароль, который Вы будете использовать для входа   
                 в аккаунт</font></TD>   
               </TR>   

               <TR valign = 'top' align = 'left'>   
                 <TD><font size = '2' face = 'Tahoma'>Повторите пароль:</font></TD> 
                 <TD align='right'><img src='image/ico_reg.gif' width='6' height='18'></TD>     
                 <TD><input type = 'password' size = '45' maxlength = '20' name = 'repeatpas_pr'   
                 value = '"
.$_POST['repeatpas_pr']."' class = 'edit'></TD>
                 <TD><font size = '2' face = 'Tahoma'>повторите Ваш пароль</font></TD>   
               </TR>
               <TR>
                 <TD></TD>
                 <TD></TD>
                 <TD align = 'left'>
                   <input type = 'radio' name = 'vubor' value = '1'>
                   <font size = '2' face = 'Tahoma'>Продавец</font>  &nbsp; &nbsp; &nbsp; &nbsp;
                   <input type = 'radio' name = 'vubor' value = '2'>
                   <font size = '2' face = 'Tahoma'>Покупатель</font>
                 </TD>
                 <TD></TD>
               </TR>
               </TABLE>
              </CENTER>      
             <p>"
;   
             
        
// if ($_POST['vubor'] == "1")
        //  {}
        // else if ($_POST['vubor'] == "2")
        //  {}
         
        
echo "<center>   
              <input type = 'submit' name = 'save_p' value = 'Сохранить данные' class = 'button'>"
;   
        echo 
"</form></center>";   

   }   
  }

 
//}
?> 

Почему в строке
 if ($_POST['vubor'] == "2")
выводится ошибка? Как её исправить?

   
 
 автор: Veon   (21.07.2008 в 15:57)   письмо автору
 
   для: pautina   (21.07.2008 в 15:53)
 

Какая ошибка?

   
 
 автор: pautina   (21.07.2008 в 15:59)   письмо автору
 
   для: Veon   (21.07.2008 в 15:57)
 

Notice: Undefined index: vubor
Заметьте неопределённый индекс vubor

   
 
 автор: Valick   (21.07.2008 в 16:01)   письмо автору
 
   для: pautina   (21.07.2008 в 15:59)
 

Это не ошибка это предупреждение, что переменной vubor несуществует
И вообще непонятно зачем проверка продавец или покупатель? Что бы купить а потом продать мне увас надо два раза регистрироваться? ИМХО бред.

   
 
 автор: Veon   (21.07.2008 в 16:02)   письмо автору
 
   для: pautina   (21.07.2008 в 15:59)
 


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link href="css/style.css" type="text/css" rel="stylesheet">
<title>Доска объявлений</title>
</head>
<body>
<form method="post" action="">
                  <input type = 'radio' name = 'vubor' value = '1'>
                  <font size = '2' face = 'Tahoma'>Продавец</font>  &nbsp; &nbsp; &nbsp; &nbsp;
                   <input type = 'radio' name = 'vubor' value = '2'>
                   <font size = '2' face = 'Tahoma'>Покупатель</font>
<input type = 'submit' name = 'save_p' value = 'Сохранить данные' cl
</form>
</body>
</html>

<?php

if ( $_POST['vubor'] == "1" )
{
        echo 
"option 1 changed";
}
elseif ( 
$_POST['vubor'] == "2" )
{
        echo 
"option 2 changed";
}

?>


При выборе пишет все корректно без ошибок, посмотреть можно тут. Кодировка страницы - utf-8

http://veoncode.ru/test.php

   
 
 автор: Veon   (21.07.2008 в 16:04)   письмо автору
 
   для: Veon   (21.07.2008 в 15:57)
 

А файл со скриптом и файл с html - это разные файлы или один?

   
 
 автор: pautina   (21.07.2008 в 16:09)   письмо автору
 
   для: Veon   (21.07.2008 в 16:04)
 

Извините,
Что делать в моём участке кода?
Давйте я Вам весь код приведу, посмотрите его у себя, может что посоветуете.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link href="css/style.css" type="text/css" rel="stylesheet">
<title>Доска объявлений</title>
</head>

<body leftmargin="0" topmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0">
<center>

<table width="100%" height="auto" border="0" cellpadding="0" cellspacing="0">
 <tr>
  <td>
   <br>
   <center>
   <form name="myForm" action="" method="post">
   <table width="950" border="0" cellpadding="0" cellspacing="0"> <!-- таблица описывает модуль авторизации пользователей-->
    <tr>
     <td width="35"><img src="image/braket_l.gif" width="8" height="34"></td>
     <td width="100" align="left"><a href="" class="org">Регистрация</a></td>
     <td width="50" align="center">Логин</td>
     <td width="225" align="center"><input type="text" name="login" size="38" maxlength="32"></td>
     <td width="68" align="center">Пароль</td>
     <td width="225" align="center"><input type="password" name="password" size="38" maxlength="32"></td>
     <td width="120" align="center"><a href="" class="org">Забыли пароль</a></td>
     <td width="90" align="center"><img src="image/btn_ente.gif" width="47" height="30" border="0" onClick="document.forms.myForm.submit ()"></td> <!-- Рисунок вход -->
     <td><img src="image/braket_r.gif" width="8" height="34"></td>
    </tr>
   </table>
   </form>
   </center>

<?php 
// Условие проверки продавец или покупатель 
// if (isset($_POST['save_p']));
// {
 
if ($_POST['vubor'] == "2")
 {

// РЕГИСТРАЦИЯ ПРОДАВЦА  
 
if (isset($_POST['save_p']))   
  {   
// логин, имя, фамилия, электронная почта, пароль продавца
        
$login_pr htmlspecialchars(stripslashes(trim($_POST['login_pr']))); 
        
$name_pr htmlspecialchars(stripslashes(trim($_POST['name_pr']))); 
        
$fam_pr htmlspecialchars(stripslashes(trim($_POST['fam_pr'])));   
        
$email_pr htmlspecialchars(stripslashes(trim($_POST['email_pr'])));   
        
$password_pr htmlspecialchars(stripslashes(trim($_POST['password_pr']))); 
        
$repeatpas_pr htmlspecialchars(stripslashes(trim($_POST['repeatpas_pr'])));   

   if (empty(
$login_pr))   // логин продавца
       
{   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Ваш логин</b> осталось пустым! Это недопустимо. <p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
       }   

    else   
      if (
preg_match('/[^-a-z\d]/i'$login_pr))   // d - десятичное число
      
{   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Ваш логин</b> <font color = 'black' size = '4' face = 'Times'>\""
.$login_pr."\"</font> использует   
               запрещённый символ! Это недопустимо.<p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
      } 
//    имя продавца    
    
else 
     if (empty(
$name_pr))   
       {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Имя</b> осталось пустым! Это недопустимо. <p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
       }   

    else   
      if (
preg_match('/[^а-яё]/i'$name_pr))  // i- верхний и нижний регистр букв  
      
{   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Имя</b> <font color = 'black' size = '4' face = 'Times'>\""
.$name_pr."\"</font> использует   
               запрещённый символ! Это недопустимо.<p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
      }   
//  фамилия продавца
else 
     if (empty(
$fam_pr))   
       {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Фамилие</b> осталось пустым! Это недопустимо. <p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
       }   

    else   
      if (
preg_match('/[^а-яё]/i'$fam_pr))   // i- верхний и нижний регистр букв  
      
{   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Фамилие</b> <font color = 'black' size = '4' face = 'Times'>\""
.$fam_pr."\"</font> использует   
               запрещённый символ! Это недопустимо.<p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
      }   
// электронная почта продавца
    
else   
     if (empty(
$email_pr))   
       {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>E-mail</b> осталось пустым! Это недопустимо. <p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
       }   

    else   
     if (!
preg_match("/[0-9a-z_]+@[-0-9a-z_^\.]+\.[a-z]{2,4}$/i"$email_pr))   
      {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>E-mail</b> <font color = 'black' size = '4' face = 'Times'>\""
.$email_pr."\"</font>   
              использует запрещённый символ! Это недопустимо.<br>   
              Введите E-mail в виде: <b>mmm@sait.ru</b><p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
      }   
// Пароль продавца
    
else   
     if (empty(
$password_pr))   
       {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Пароль</b> осталось пустым! Это недопустимо. <p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
       }   


    else   
     if (
preg_match('/[^-_a-z\d]/i'$password_pr))   
      {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Пароль</b> <font color = 'black' size = '4' face = 'Times'>\""
.$password."\"</font>   
              использует запрещённый символ! Это недопустимо.<p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
      }   


// Подтверждение пароля продавца
    
else   
     if (empty(
$repeatpas_pr))   
       {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Повторите пароль</b> осталось пустым! Это недопустимо. <p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
       }   


    else   
     if (
preg_match('/[^-_a-z\d]/i'$repeatpas_pr))   
      {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              поле <b>Повторите пароль</b> <font color = 'black' size = '4' face = 'Times'>\""
.$repeatpas_pr."\"</font>   
              использует запрещённый символ! Это недопустимо.<p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
      }   


    else   
     if (
$password_pr != $repeatpas_pr)   
      {   
         echo 
"<center>   
              <font color = 'blue' size = '3' face = 'Tahoma'>   
              Ваши пароли <font color = 'black' size = '4' face = 'Times'>\""
.$password_pr."\" и \"".$repeatpas_pr."\"</font>   
              не совпадают! Это недопустимо.<p>   
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'><b>НАЗАД</b></a>   
              </font>   
              </center>"
;   
      }   

else   
 { 
     
$a=mysql_connect("localhost","root","");   // Создание БД и таблицы пишем в другом файле base.php и запускаем 1 раз
          
if(!$a)   
        { echo 
"Не могу соединится с базой!<br>";   
          echo 
mysql_error();   
          exit;   
        } 
    
mysql_query"CREATE DATABASE reg_pol" ) or die (mysql_error()); // БД регистрация пользователей
    
mysql_select_db"reg_pol"); 
    
mysql_query("CREATE TABLE pol_prod (  
                    id_user_pr SMALLINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,  
                    login_pr TINYTEXT NOT NULL,  
                    name_pr TINYTEXT NOT NULL,
                    fam_pr TINYTEXT NOT NULL,
                    email_pr TINYTEXT NOT NULL,  
                    password_pr TINYTEXT NOT NULL,  
                    )"
) or die (mysql_error());     // таблица пользователь продавец
                    
    
$login_pr $_POST['login_pr'];  // Если register globals отключены
      
$name_pr $_POST['name_pr'];
      
$fam_pr $_POST['fam_pr'];
      
$email_pr $_POST['email_pr']; 
    
$password_pr $_POST['password_pr'];
    
$repeatpas_pr $_POST['repeatpas_pr']; 
    if (!
get_magic_quotes_gpc()) 
     { 
       
$login_pr mysql_escape_string($login_pr); // Связано с экранированием (register globals)
         
$name_pr mysql_escape_string($name_pr);
         
$fam_pr mysql_escape_string(fam_pr);
        
$email_pr mysql_escape_string($email_pr);    
       
$password_pr mysql_escape_string($password_pr); 
         
$repeatpas_pr mysql_escape_string($repeatpas_pr); 
     } 
// Проверка условия если логин продавца дублируется а email нет
if  ($sql=mysql_query("select id_user_pr from pol_prod where login_pr='".$login_pr."' and email_pr != '".$email_pr."'") and (mysql_num_rows($sql)>      0)) 
    {     
     echo  
"<center>    
            <font color = 'blue' size = '3' face = 'Tahoma'>    
              Ошибка введённых в форму данных <font color = 'black' size = '4' face = 'Times'>\""
.$login_pr."\"</font>   
              Логин с таким именем уже существует в БД, введите другой логин<p>    
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'>НАЗАД</a>    
              </font>    
              </center>"
;        
      
    }  
// Проверка условия если email продавца дублируется а логин нет 
else 
 if  (
$sql=mysql_query("select id_user_pr from pol_prod where email_pr='".$email_pr."' and login_pr != '".$login_pr."'") and (mysql_num_rows($sql)>0)) 
    {     
     echo  
"<center>    
            <font color = 'blue' size = '3' face = 'Tahoma'>    
              Ошибка введённых в форму данных <font color = 'black' size = '4' face = 'Times'>\""
.$email_pr."\"</font>   
              email с таким именем уже существует в БД, введите другой email<p>    
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'>НАЗАД</a>    
              </font>    
              </center>"
;        
      
    }  
// Проверка условия при котором и логин и email прдавца дублируется      
else 
 if  (
$sql=mysql_query("select id_user_pr from pol_prod where login_pr='".$login_pr."' and email_pr='".$email_pr."'") and (mysql_num_rows($sql)>      0))   
    {     
     echo  
"<center>    
            <font color = 'blue' size = '3' face = 'Tahoma'>    
              Ошибка введённых в форму данных <font color = 'black' size = '4' face = 'Times'>\""
.$login_pr."\"</font>   
              Логин с таким именем уже существует в БД, введите другой логин<p>    
              </font>  
              <font color = 'blue' size = '3' face = 'Tahoma'>    
              Ошибка введённых в форму данных <font color = 'black' size = '4' face = 'Times'>\""
.$email_pr."\"</font>   
              email с таким именем уже существует в БД, введите другой email<p>    
              Чтобы внести исправления надо вернуться <a href = 'javascript:history.back(1)' class = 'enter'>НАЗАД</a>    
              </font>      
              </center>"
;        
      
    }     

   
   else   
    {       
        
$save "INSERT INTO pol_prod VALUES (0,'$login_pr','name_pr','fam_pr','$email_pr','$password_pr')";   
        
$temp mysql_query($save);    
               
     if (
$temp)   
       {   

           echo 
"<center><strong><font color = 'red' size = '2' face = 'Tahoma'>   
                 Вы успешно зарегистрированы в системе.   
                </font></strong>"
;   
       }   

       else   
         echo 
"<center><font color = 'black' size = '4'><b>Ошибка при добавлении нового партнёра.   
         Пожалуйста, зайдите позже</b></font></center>"
;   

     }   

  }  
 }

 else   
   {   

        echo 
"<font color = 'blue' size = '4' face = 'Tahoma'>Регистрация нового пользователя</font><p>   

        <font color = 'gray'><b>все поля обязательны к заполнению</b></font>"
;   

        echo 
"<form action = 'register.php' method = 'post'>";   
         
        
// Изменение таблицы к нужному виду  
        
echo "<CENTER>
               <TABLE border = '0' width = '90%' cellpadding = '4' class = 'screen'>   
               <TR valign = 'top' align = 'left'>   
                 <TD><font size = '2' face = 'Tahoma'>Ваш логин:</font></TD>
                 <TD align='right'><img src='image/ico_reg.gif' width='6' height='18'></TD>   
                 <TD><input type = 'text' size = '45' name = 'login_pr' maxlength = '20'   
                 value = '"
.$_POST['login_pr']."' class = 'edit'></TD>   
                 <TD><font size = '2' face = 'Tahoma'>от A-z и цифр 0-9.<br>Максимальное количество символов 20.<br>
Минимальное количество символов 3.</font></TD>   
               </TR>   
               
               <TR valign = 'top' align = 'left'>   
                 <TD><font size = '2' face = 'Tahoma'>Имя:</font></TD> 
                 <TD align='right'><img src='image/ico_reg.gif' width='6' height='18'></TD>    
                 <TD><input type = 'text' size = '45' name = 'name_pr' maxlength = '20'   
                 value = '"
.$_POST['name_pr']."' class = 'edit'></TD>   
                 <TD><font size = '2' face = 'Tahoma'>от А-я максимальное количество символов 20.</font></TD>   
               </TR>   
               
               <TR valign = 'top' align = 'left'>   
                 <TD><font size = '2' face = 'Tahoma'>Фамилия:</font></TD>  
                 <TD align='right'><img src='image/ico_reg.gif' width='6' height='18'></TD>    
                 <TD><input type = 'text' size = '45' name = 'fam_pr' maxlength = '20'   
                 value = '"
.$_POST['fam_pr']."' class = 'edit'></TD>   
                 <TD><font size = '2' face = 'Tahoma'>от А-я максимальное количество символов 20.</font></TD>   
               </TR>   
               
               
              <TR valign = 'top' align = 'left'>   
                 <TD><font size = '2' face = 'Tahoma'>Электронная почта:</font></TD> 
                 <TD align='right'><img src='image/ico_reg.gif' width='6' height='18'></TD>     
                 <TD><input type = 'text' size = '45' maxlength = '40' name = 'email_pr'   
                 value = '"
.$_POST['email_pr']."' class = 'edit'></TD>
                 <TD><font size = '2' face = 'Tahoma'>Ваш личный (контактный) адрес электронной почты</font></TD>   
               </TR>   

               <TR valign = 'top' align = 'left'>   
                 <TD><font size = '2' face = 'Tahoma'>Пароль:</font></TD> 
                 <TD align='right'><img src='image/ico_reg.gif' width='6' height='18'></TD>     
                 <TD><input type = 'password' size = '45' maxlength = '20' name = 'password_pr'   
                 value = '"
.$_POST['password_pr']."' class = 'edit'></TD>
                 <TD><font size = '2' face = 'Tahoma'>пароль, который Вы будете использовать для входа   
                 в аккаунт</font></TD>   
               </TR>   

               <TR valign = 'top' align = 'left'>   
                 <TD><font size = '2' face = 'Tahoma'>Повторите пароль:</font></TD> 
                 <TD align='right'><img src='image/ico_reg.gif' width='6' height='18'></TD>     
                 <TD><input type = 'password' size = '45' maxlength = '20' name = 'repeatpas_pr'   
                 value = '"
.$_POST['repeatpas_pr']."' class = 'edit'></TD>
                 <TD><font size = '2' face = 'Tahoma'>повторите Ваш пароль</font></TD>   
               </TR>
               <TR>
                 <TD></TD>
                 <TD></TD>
                 <TD align = 'left'>
                   <input type = 'radio' name = 'vubor' value = '1'>
                   <font size = '2' face = 'Tahoma'>Продавец</font>  &nbsp; &nbsp; &nbsp; &nbsp;
                   <input type = 'radio' name = 'vubor' value = '2'>
                   <font size = '2' face = 'Tahoma'>Покупатель</font>
                 </TD>
                 <TD></TD>
               </TR>
               </TABLE>
              </CENTER>      
             <p>"
;   
             
        
// if ($_POST['vubor'] == "1")
        //  {}
        // else if ($_POST['vubor'] == "2")
        //  {}
         
        
echo "<center>   
              <input type = 'submit' name = 'save_p' value = 'Сохранить данные' class = 'button'>"
;   
        echo 
"</form></center>";   

   }   
  }

 
//}
?> 
   
   
   
  </td>
 </tr>
</table>

</center>
</body>
</html>


Я не вижу форму, выводится только это сообщение.
Если условие регистрации продавца или покупателя использовать в конце кода (он закоментарен), то форму видно,
Мне нужно, чтобы вначале реализовывалась проверка условия
if ($_POST['vubor'] == "1")
{ код регистрации продавца}
else if ($_POST['vubor'] == "2")
{ код регистрации покупателя }
Именно так было бы правильно
Как быть? Что делать?

   
 
 автор: Veon   (21.07.2008 в 16:46)   письмо автору
 
   для: pautina   (21.07.2008 в 16:09)
 

то есть порядок работы следующий:
1) форма с 2 -мя полями ( логин и пасс ) + ссылка регистрация и забыл пасс
2) При нажатии на регистрацию выводится форма с выбором кто регистрируется - продавец или покупатель.

Я правильно Вас понимаю?

   
 
 автор: sim5   (21.07.2008 в 17:09)   письмо автору
 
   для: pautina   (21.07.2008 в 16:09)
 

Правильно составить структуру кода страницы, а вместо многочисленных javascript:history.back(1), сделать общий вывод ошибок, с формой, и уже заполненными пользователем данными (если был ввод).

   
 
 автор: pautina   (21.07.2008 в 18:18)   письмо автору
 
   для: sim5   (21.07.2008 в 17:09)
 

Насчёт многочисленных javascript.history.back(1)? полностью с Вами согласен.
К сожалению пока другой способ авторизации я разработать не могу.
А ту ошибку исправить нельзя? Как то ведь это можно сделать.
Если же ошибку в имеющемся коде исправить нельзя, могу взятся разрабытывать всё снова если Вы мне немного поможете в составлении структуры кода страницы.
Извините просто сейчас мне нужно отключить компьютер, давайте пообщаемся с Вами завтра, я постараюсь сделать всё что необходимо.

   
 
 автор: sim5   (21.07.2008 в 19:58)   письмо автору
 
   для: pautina   (21.07.2008 в 18:18)
 

Да собственно по поводу чего общаться. Мой вам совет - откройте любую книгу по цифровой электронике, где описывается какой либо программируемый цифровой автомат. Вы обязательно увидите блок-схему работы этого автомата - это собственно логика работы программы, ее обобщенный алгоритм. Такие же блок-схемы можно увидеть и в книгах по программированию.
Вот если вы сможете "карандашиком на бумаге" начертить работу вашего скрипта в виде такой блок-схемы, ответив на все если (if), то я уверен, что вы составите нормальную структуру своего кода. А она (блок-схема) собственно проста:
1. Определяем переменные с которыми будем работать - считаем это их инициализацией. В вашем случае, это удобно сделать с помощью условной операции: expression 1 ? expression 2 : expression 3.
2. Проверяем получение формы, и если она пришла, проверяем значение ее полей (см. пункт 1). Если поля формы имеют ошибки, указываем ошибку (ошибки). Если ввод правильный, значит выполняем требуемое.
3. Вывод формы по умолчанию и ошибках. Атрибутам value полей формы присваиваем ранее инициализированные переменные.

Вот и все.

   
 
 автор: pautina   (22.07.2008 в 08:46)   письмо автору
 
   для: sim5   (21.07.2008 в 19:58)
 

Спасибо "Пухальский, Новосёльцева" - Проектирование цифровых устройств, неплохая книга.
По своему коду, мне кажется что ошибка выдаётся потому что элемент формы radio ещё ни выбран, а я уже пишу условие для него
if ($_POST['vubor'] == "2")
{ }
Если например это условие поставит после описания элемента формы radio тогда всё хорошо,
Но тогда не получается всё правильно описать
Или так можно делать чтоб элемент ещё ни выбран а в коде сначала выполняется условие а после описание самого элемента.

   
 
 автор: sim5   (22.07.2008 в 12:14)   письмо автору
 
   для: pautina   (22.07.2008 в 08:46)
 

"Спасибо" в рот не наливается.) Если вам кажется, то это очень плохо. Вы должны, зная, быть уверены, либо не зная и сомневаясь, проверить. В противном случае, бросать РНР и в монастырь - по "кажущемуся" их специализация.
У вас весь код не имеет никакой логической структуры. Если бы она была, то вы бы проверяли if ($_POST['vubor'] == "2") не по месту этой строки в коде, а по получении формы.
Форум это не кафедра "Программирование", это решение конкретных вопросов, а вот учиться думать логически вам придется самому. Анализируя чужой код, учитесь понимать то, что скрыто за его строками - логику его работы. Ведь любой код, по большому счету, можно разбить на логические блоки, выполняющие ту или иную задачу, а их взаимодействие зачастую связано условиями.
Разбейте свой код на такие логические блоки, проанализирйте и оптимизируйте каждый из них - будет видно, что лишнее в нем. Место положение каждого блока может зависить от применяемого "инструментария", например, использование сессии, перенаправлений и т.п.. В этом случае блок ввода-вывода (назовем условно так вашу форму) должен выполняться после использования такого инструментария.
Вот это вам надо сделать, тогда ваш код будет намного короче, более читабельна будет логика его работы, а это плюс во всех отношениях.

   
 
 автор: pautina   (22.07.2008 в 12:55)   письмо автору
 
   для: sim5   (22.07.2008 в 12:14)
 

Извините пока я лучше отложу решение этого вопроса. Спасибо Вам всем за понимание.

   
 
 автор: sim5   (22.07.2008 в 14:20)   письмо автору
 
   для: pautina   (22.07.2008 в 12:55)
 

Что значит "не по месту строки в коде"? А то и значит, что проверять значения полей полученной формы, вы должны по получению этой формы, и какая по счету при этом будет эта строка в коде, роли не играет.
Вы никак и не можете, при сохранении страницы, получить ее РНР-код. РНР генерирует HTML код страницы, а не выдает пользователю свой скрипт.
Я туманно представляю, что значит продавец и покупатель в вашем случае, да это и не важно. Вы просто хотите зарегистрировать два типа пользователя у себя. Делать это все можно одной формой конечно, только вызывая ее по разному - либо двумя ссылками, которые определят уже тип пользователя, либо выбор типа происходит в самой форме. Насколько я понимаю, у вас как раз второе. И так, давайте определимся, что нам для этого нужно. Первое, при регистрации обязательно предусмотреть защиту от бота, а значит нам потребуется капча. Если нам она требуется, то мы должны где-то держать код отправленной капчи, для последующей проверки. Выбераем для этого механизм сессий. Что нам потребуется для регистрации - собственно три поля ввода, плюс две радиокнопки для выбора типа. Получение формы будем определять по кноке SUBMIT, которой даем имя "send". Пишем код, разделяя его на три условных блока.

Блок 1. Старт сессии, инициализация переменных, значения которых определяются полями формы, а также переменной, которая будет определять ошибки при вводе. Сказано, сделано, пишем:

<?
//стартуем сессию
session_start();
//опередляем переменные
$mode = isset($_POST['mode']) ? $_POST['mode'] : "";
$login = isset($_POST['login']) ? $_POST['login'] : "";
$pass = isset($_POST['pass']) ? $_POST['pass'] : "";
$secr = isset($_POST['secr']) ? $_POST['secr'] : "";
$error ""
?>

Все. Этого нам хватит. Мы определились, что если поля имени, пароля и кода капчи еще не получали, то соответсвующие им переменные пусты, как и переменная ошибок. Если же форма получена, то эти переменные получат значения соответсвующих полей. Далее пишем основной блок, который как раз и производит основную работу.

Блок 2. Проверяем, получена ли форма. Для этого проверим, установлена ли переменная $_POST['send']. Если форма пришла, начинаем проверку ее полей - переменных $mode, $login, $pass, $secr. Проверка включает - допустимость введенных символов в полях логина и пароля, их длину, а также (если все допустимо) проверку поля логина по уже существующим в базе. Если такой логин уже используется, то переменной $error добавляем сообщение об этом. Этой переменной, таким образом, добавляются все сообщения об ошибках ввода. Проверка капчи - если $secr не равна $_SESSION["secr"], значит также ошибка.
Если же проверка показала полное соответствие условиям, то записываем значения $mode, $login, $pass в базу и делаем перенаправление на страницу, где - либо сообщаем пользователю об успешной регистрации, либо напоминаем о том, что он должен потвердить ее, ответив на почтовое сообщение, которое ему выслано. Ну и т.п..

Блок 3. Если же форма еще не принималась или есть ошибки ($error не пуста), то выводим форму и ошибки ($error), значеними для атрибутов value, которой, вставляем соответсвующие переменные: $login, $pass. А значение поля капчи (secr) все время сбрасываем. Вывод капчи в форме происходит посредством вызова отдельного скрипта. Он же и будет заносить код капчи в переменную $_SESSION["secr"].

В общем это примерно так. Сам код будут гораздо короче, чем сейчас у вас, а если применить AJAX технологию (или использовать IFRAME), то и при ошибках ввода, это не будет обременительно для пользователя - вывод ошибок не будет приводить к перезагрузке всей страницы.

Что касается двух типов пользователей, то в чем проблема? Вы получаете значение зависимых радиокнопок, которое и определяет его тип. Это, если ваши пользователи находятся в одной таблице. Возможно вообще разделить все на две части, где каждый тип имеет свою таблицу, так и таблицы связанные с ней. Это уж я не знаю как у вас.

PS. Уже отложено?)

   
 
 автор: pautina   (23.07.2008 в 08:36)   письмо автору
 
   для: sim5   (22.07.2008 в 14:20)
 

Раз Вы откликнулись, можно и не откладывать
Извините а Вы ни поможете со 2-м блоком.
Хотелось бы разобратся, очень интересно, правда ни всё понятно.

   
 
 автор: sim5   (23.07.2008 в 11:18)   письмо автору
 
   для: pautina   (23.07.2008 в 08:36)
 

Чем конкретно я могу помочь? Непостредственно проверкой? Ну сложностей тут нет больших. А вообще все зависит от того, что значит "тип продавец" и "тип покупатель". Допустим, что об этих двух типах пользователя вам нужна только информация: имя, логин, пароль, мыло. То есть одинаковая для обеих, а тип (статус) пользователя определяет значение 1 или 2 в таблице. Если 1, то продавец, и его статус позволяет вносить в некую таблицу предложения, их редактирование, удаление и т.п.. А статус 2 - это покупатель, и ему эта таблица доступна только для чтения.
При входе на сайт, вы проверяете статус пользователя, разрешая в соответствии ему разрешенный тип операций и прочих првелегий. Если это так, то без разницы, что пришло вам в поле $_POST['vubor'], тут уж если проверять, то значение не должно быть меньше 1 и больше 2.
Длину полей имени, логина и пароля проверяйте стандатной функцией strlen(). Вы хотите видеть в полях имени и логина только символы алфавита и цифры, причем для имени можно и русский? Нет проблем - проверка с помощью рег. выражений.
Поля пароля и повтора пароля должны совпадать. Проверка мыла у вас есть. Капча. Тут тоже проблем нет (скрипт для капчи, кстати, вроде бы есть в разделе download SoftTime, да и просто в сети есть). Единственно, так это можно добавить блокировку. Например, вы точно знаете, что "9-ый вал" Айвазавского вашей капчи "честный" юзер точно не спутает с "Автопортретом с отрезанным ухом" Ван Гога, а вот "нехорший" юзер будет делать многократные попытки доказывать вам, что это Ван Гог. Тоже самое и с другими полями, отсылая вам всякие "непристойности". Чтобы исключить это безобразие, можете установить в сессии счетчик попыток, например 3, сбрасывая его при каждой неудаче. Если при проверке и сбросе счетчика он достиг значения 0, то устанавливаете в сессии переменную, которая будут блокировать вывод формы регистрации на странице, либо вообще доступ к этой странице. Закрываете страницу регистрации и уходите на главную.
При проверке полей и наличии ошибок, добавляете переменной $error текст соответствующей ошибки. Это можно делать как просто разделяя сообщение для каждой ошибкой тегом <br>, и все это выводить вверху формы в параграфе. Можно поступить иначе. Если поместить форму в элемент DIV, а сообщение каждой ошибки помещать также в элемент DIV, но с абсолютным позиционированием (по отношению к родительскому элементу DIV) и присвоением этим элементам либо ID, либо класс (например, равного имени поля формы), то с помощью CSS можно будет помещать текст ошибки у соответсвующего ей поля формы. Это примерно так:

<?
if (strlen($name) < 4$error .= "<div class=\"name\" 
id=\"name\">Поле имя должно содержать более четырех символов!</div>"
;
//и так далее по остальным полям
?>

Даже, если по данному полю будет две ошибки, например, малая длина и есть запрещенные символы, то даже в этом случае, можно поместь эти два предупреждения в один элемент DIV.
Таким образом, переменная $error будет содержать предупреждения о всех ошибках.
Если ввод произошел без ошибок, то заносите все данные в базу, значение пароля, конечно держать в ней как md5($pass). Отправляете почту пользователю (если требуется подтверждение регистрации), заносите в сессию имя зарегистрированного, тип регистрации (а можно и в хидер это прикрутить), и хидером перенаправляете пользователя на страницу, в которой сообщите: "Уважаемый Абвгд! Вы зарегистрировалиь у нас как ...". Перенаправление будет защитой от F5. Также можете заблокировать повторную регистрацию для этого пользователя (хотя бы на период этой сессии).
Примеров конкретной проверки полей формы, тем посвященным этому на форуме много. Если вам что-то конкретно по этому, то достаточно произвести поиск. Если вопросы непосредственно касающиеся базы, то в кабинет "Трепанация MySQL" к доктору Trianon'u.)
Если же у вас вызывает затрудениния иные вопросы, то какие?

   
 
 автор: pautina   (23.07.2008 в 12:22)   письмо автору
 
   для: sim5   (23.07.2008 в 11:18)
 

А вы ни скажете как мне вывести сообщение о ошибке поля (<4 символов например для логина) на странице формы,
как описать error

<?php
// логин продавца    
   
if (empty($login_pr)) $error .= "<div class=\"login_pr\"  
      id=\"login_pr\">Поле логин осталось пустым. Это недопустимо.</div>"

   else   
      if (
preg_match('/[^-a-z\d]/i'$login_pr)) $error .= "<div class=\"login_pr\"  
      id=\"login_pr\">поле логин использует запрещённый символ! Это недопустимо.</div>"
;   
   else 
     if
      (
strlen($login_pr) < 4$error .= "<div class=\"login_pr\"  
      id=\"login_pr\">Поле логин должно содержать не менее 4 символов!</div>"

      
// Поле логина дожно быть не менее 4 символов 
    
else 
     if
      (
strlen($login_pr) > 20$error .= "<div class=\"login_pr\"  
      id=\"login_pr\">Поле логин должно содержать не более 20 символов!</div>"

      
// Поле логина дожно быть не более 20 символов

//    else
//      if
//        ((strlen($login_pr) < 4) or (strlen($login_pr) > 20)) $error .= "div class\"login_pr\" id=\"login_pr\">Поле логина должно содержать не менее 4 и не болеее 20 символов</div>";
?>    

   
 
 автор: sim5   (23.07.2008 в 20:01)   письмо автору
 
   для: pautina   (23.07.2008 в 12:22)
 

Ну, если вы решили воспользоваться элементами DIV с позиционированием у соответствующих полей формы, то тут сам вывод элементов DIV решается таким образом. Форму ввода и элементы DIV с сообщениями ошибок помещаем в родительский элемент DIV. В стилях (CSS) этому элементу укажем позиционирование как relative, а элементы DIV содержащие сообщения ошибок, будут иметь абсолютное позиционирование. В простейшем случае, это выглядит так:

<style>
#father {position: relative;}
#d_name, #d_login {
  position: absolute;
  left: 160px;
}
#d_name {top: 0px}
#d_login {top: 24px}
</style>

<div id="father">
<div id="d_name">text</div>
<div id="d_login">text</div>
<form action="">
<input type="text" name="name"><br>
<input type="text" name="login">
</form>
</div>

Здесь элемент <div id="father"> является родителем для формы и элементов с сообщениями. При этом, при выводе формы также выводится и переменная $error. Если ошибок нет (она пуста), то будет выведена только форма, если ошибки есть, то будут выведены соответствующие ошибки у соответствующих полей. Вам нужно будет подобрать стили для элементов формы, сообщений и прочее, так, чтобы у поля формы могло поместиться столько сообщений одновременно, сколько это определяется условием проверки. За более подробной информацией по этому поводу лучше в раздел HTML, а здесь будем решать несколько иную задачу, связанную с таким способом вывода.
Если бы мы выводили сообщения "кучей", то можно было бы поступить просто, проверяя значения поля, и при ошибках, мы добавляли бы переменной соответствующее сообщение как:
$error .= "Сообщение 1<br>"
Затем, если на очередном шаге опять ошибка, то
$error .= "Сообщение 2<br>"
и т.д.

Затем, обрамили бы эту переменную тегом параграфа, например, и выдали на страницу. Было бы просто, но нам охота "круто".) В этом случае мы не можем так поступить, так как у нас разные поля могут содержать разное количество сообщений, а они должны помещаться в один для них определенный элемент DIV. То есть, мы не можем при каждой ошибке в поле, переменной ошибок добавлять: <div id="d_name">Сообщение 1</div>, <div id="d_name">Сообщение 2</div> и т.д., а должны добавить для поля так: <div id="d_name">Сообщение 1<br>Сообщение 2...</div>.
Можно, конечно, устроить все с помощью условий и прочая, но давайте попробуем написать некий цифровой автомат, который хоть и будет работать по жесткой программе, но достаточно ему изменить значения нескольких переменных, и он будет обрабатывать и выдавать ошибки для различного числа полей, с различным числом сообщений. Во как! )
Собственно задача не так сложна. Здесь только одно условие соблюсти надо, хотя это условие всего лишь для того, чтобы не сбиться, так как эту часть я не автоматизировал.) Хотя, если подумать, то может быть...
И так, в чем заключается это условие - будем проводить проверку полей формы строго по порядку, по всем условиям. Например, если поле имени может содержать два условия проверки - на длину и допустимые символы, следующее поле логина уже три условия (дополнительно - есть ли такой пользователь уже), а все остальные поля по два условия (кроме поля капчи, у него всего одно условие), то проверяем последовательно все, от поля к полю. При этом максимальное число условий у нас будет равно 3, и максимальное число ошибок на поле также равно 3. Это нам нужно будет в дальнейшем, и мы (для неавтоматизированной части) держим в уме, что:
0 - первое условие проверки поля имени
1 - второе условие проверки поля имени
2 - нет условия проверки для поля имени
3 - первое условие проверки поля логина
4 - второе условие проверки поля логина
5 - третье условие проверки поля логина
6 - первое условие проверки поля пароля
7 - второе условие проверки поля пароля
8 - нет условия проверки для поля пароля
и т.д..
Жирным отмечено то, что нам не нужно, и мы будем использовать, для данного в описании примера, только 0, 1, 3 - 7, 9. Для чего это нам нужно будет? Мы не будем при каждой проверке условия писать в переменную сообщение, а вместо этого используем переменную $mask, в которой будем формировать маску ошибок. Установленный бит (равно 1) этой маски укажет нам, что это условие не прошло проверку, и какое сообщение мы будем брать из массива ошибок $mess для этого условия. Как будем формировать маску? В примере я определил, что максимальное число ошибок (условий проверки) для поля равно 3, значит мы отдаем по три бита для ошибок в этой маске на одно поле формы, то есть так:
000.000.000.000
где правый крайний бит маски - младший ее разряд, и правые три крайних бита, это маска определяющая ошибки поля name. Следующим полем идет поле логина, и следующие три бита справа, это биты маски ошибок для поля login. Следующие для пароля, и последние три для капчи.
Если при проверке поля имени, у нас будут ошибки как на длину значения, так и на запрещенные символы, то мы должны установить в маске два крайних бита:
000.000.000.011
И так далее для других полей. При этом третий бит маски поля имени всегда будет сброшен, так как у этого поля всего два условия проверки. Если установленные биты перевести в десятичное значение, то можно заметить, что мы должны будем заносить в маску, при ошибках, следующие значения: 1, 2, 8, 16, 32 и т.д.. То есть 2 в степени N, где N будет равна шагу проверки полей (весу условий), которые я описал выше. То есть, для нашего примера, это будет так: pow(2,0), pow(2,1), pow(2,3), (pow(2,2) у нас отсутствует, так как для поля имени есть "пустое" условие), pow(2,4)... Можно, конечно, непосредственно заносить в маску 1, 2, 8, 16, 32... при проверке, но я использовал такое, а вдруг взбредет в голову и это автоматизировать.;-) Да и легче держать "в уме" вес условия, чем конкретные числа.
И так, переходим к самому автомату:

<?
//Этот массив будет определять id для элементов div,
//но можно использовать и указания класса
$id = array("d_name","d_login","d_pass","d_secr");
//Это массив ошибок
$mess = array(
array(
"Поле имя должно быть не менее 6 символов!<br>",
"В поле имя разрешается только символы и цифры!"),
array(
"Поле логин должно быть не менее 10 символов!<br>",
"В поле логин разрешается только латинские символы и цифры!<br>",
"Такой пользователь уже существует!"),
array(
"Поле пароля должно быть не менее 6 символов!<br>",
"Поля пороля и проверки не совпадают!"),
array(
"Не верно указан код проверки!"));
$error ""//признак ошибки
$mask 0;  //маска ошибок
$n 3//макс. число ошибок на поле (условий проверки)
$p 4//число проверяемых полей
//Проверяем значение полей и при наличии ошибок
//устанавливаем в маске бит ошибки,
//который соответствует весу условия (ошибки).
//Делаем это с помошью логической битовой операции ИЛИ: 
//$mask |= pow(2,М), где М должна соответствовать 
//шагу проверки - весу условия.
//Например, при проверке поля логина на длину значения
//вес условия равен 3
if (strlen($login 10)) $mask |= pow(2,3);
//После выполнения всех условий проверки для всех полей,
//проверяем значение маски ошибок, 
//и, если хотя бы один бит ее установлен,
//то начинаем заполнять переменную $error сообщениями
if ($mask) {
  for (
$i=0$i<$p$i++) {
    
//Формируем маску для проверки,
    //сдвигая маску ошибок вправо на младшие разряды
    
$msk $mask >> $n $i;
    
//Проверяем, если хотя бы один из трех младших битов
    //маски установлен, то получаем текст ошибки
    
if ($msk 7) {
      
//Открываем div, получая его соответствующий id для CSS 
      
$error .= "<div id=\""$id[$i] ."\">";
      
//Теперь, будем сдвигать единицу влево
      //по макс. числу ошибок, сравнивая ее
      //по лог. И с маской
      
for ($k=0$k<$n$k++) {
        
//Если бит маски установлен, то получаем текст ошибки
        
if ($msk << $k)  $error .= $mess[$i][$k];
      }
      
//Закрываем элемент div
      
$error .= "</div>\n";
    }
  }
}
?>

После работы нашего "умного автомата"), переменная $error будет содержать соответствующие сообщения. Теперь, проверив, что она не пуста (а в нашем случае теперь удобнее по $mask), выводим форму пользователю, в которой он их и получит. Все.

PS. Договорились написать автомат, а получился полуавтомат.) Дело в том, что запись:
if ($msk & 7)
для автомата не годится. Нам нужно менять только переменные задающие работу автомата, а тут придеться записывать "ручками" новое значение маски, для разного максимального числа условий проверки поля. Исправим это. Если у нас максимальное число условий на поле равно 1, то маска должна быть равна 1. Для 2 условий маска равна 3, для 3 равна 7 и т.д.. То есть, опять тоже самое - 2 в степени N, но за минусом 1. Привязываем это к переменной, которая определяет у нас максимальное число условий на поле - $n. В итоге получаем:

<?
if ($msk pow(2,$n)-1)
?>

   
 
 автор: pautina   (24.07.2008 в 09:22)   письмо автору
 
   для: sim5   (23.07.2008 в 20:01)
 

Да на самом деле круто. Спасибо Вам за участки кода.
Хотел Вас спросить про условие
В форме есть элемент radio

echo "<CENTER>
               <TABLE border = '0' width = '90%' cellpadding = '4' class = 'screen'> 
                 <TR valign = 'top' align = 'left'>   
...
<TD>
                   <input type = 'radio' name = 'vubor' value = '1'>
                   <font size = '2' face = 'Tahoma'>Продавец</font>  &nbsp; &nbsp; &nbsp; &nbsp;
                   <input type = 'radio' name = 'vubor' value = '2'>
                   <font size = '2' face = 'Tahoma'>Покупатель</font>
                 </TD>
...
 </TR>  
               </TABLE>
              </CENTER>      
             <p>";   

У меня не получается сделать чтобы это условие заработало

$vubor = isset( $_POST['vubor'] ) ? $_POST['vubor'] : 0;
if( $vubor == 1 )
 { регистрация продавца }
else if( $vubor == 2 ) 
 { регистрация покупателя }

В чём может быть ошибка? Как только я описываю if для radio форма регистрации вообще не выводится на странице.

   
 
 автор: sim5   (24.07.2008 в 09:42)   письмо автору
 
   для: pautina   (24.07.2008 в 09:22)
 

Интересно - как вы вообще в дальнейшем определяете кто продавец, а кто покупатель? Эти значения (1 и 2) пишутся в базу?

   
 
 автор: pautina   (24.07.2008 в 09:59)   письмо автору
 
   для: sim5   (24.07.2008 в 09:42)
 

А Вы ни скажете как записать условие если пользователь не выбрал ничего для radio?

   
 
 автор: sim5   (24.07.2008 в 11:12)   письмо автору
 
   для: pautina   (24.07.2008 в 09:59)
 

$vubor = isset( $_POST['vubor'] ) ? intval($_POST['vubor']) : 0;
Все будет зависить от того, как у вас организованы таблицы. Например, у вас есть таблица юзеров, статус которых определяется как 1 и 2, соответственно продавец и покупатель. Каждый юзер имеет естественно свой id. По этому id связана другая таблица, например, неких предложений. После входа зарегистрированного пользователя, вы считываете и его статус из базы, уставливая в соотвествии ему переменную в сессии, например, $_SESSION['type']. Проверяя эту переменную, вы можете определить, например, для статуса 1 (продавец) разрешено выводить форму для редактирования записей таблицы предложений, но только записй этого юзера, которые определяете по его id. А для статуса 2 (покупатель), эта форма не доступна, и он может только просматривать записи таблицы предложений. Ну и т.п.. Если это примерно так, то вам нужно знать при получении выбора радиокнопки:
1. Если значение равно 0, то выдаем ошибку о невыбранном типе.
2. Если значение меньше 1 или больше 2, то вам кто-то "липу" шлет.
Если же соответствует вашему условию, пишите это значение в таблицу юзеров. Более вам об этих радиокнопках ничего знать и не надо.
То есть, повторяю, все зависит от того, что и как вы делаете. А вообще по базам - как лучше, что и чего, в разделе MySQL.

   
 
 автор: pautina   (24.07.2008 в 12:21)   письмо автору
 
   для: sim5   (24.07.2008 в 11:12)
 

Странно почему то проскочил условие и всё равно зарегистрировал пользователя,
условие должно работать, могу я Вам дать весь код.

   
 
 автор: sim5   (24.07.2008 в 15:59)   письмо автору
 
   для: pautina   (24.07.2008 в 12:21)
 

Не надо кода, его тут уже предастаточно, да еще без картинок, а я не люблю читать книжки без картинок.))
А если серьезно, то я так и не понял - что же вы хотите сделать? Если судить по новой созданной вами теме, то вы все пытаесь скрестить ежика со змеей, и зачем вам метры колючей проволоки? Ну скажите мне - зачем вы по поводу каждой ошибки выводите на страницу код с ошибкой да еще со ссылкой на хистори браузера? Ну что за бред?
Я уже устал много говорить, у меня уже мозоль на языке.) Пвоторяю последний раз - забудьте вы весь этот "ужас", который у вас сейчас в коде. Проверяйте все поля формы сразу, по всем условиям нужных вам проверок, и все отчеты об ошибках в одну переменную и ее выводить на страницу один раз для всех ошибок - не мучайте своего пользователя. Далее, сразу после проверки полей, прверяете:
Если переменная ошибок пуста (это значит что нет ошибок ввода), то сейчас и только сечас можно записать полученные данные в базу!!! А у вас что? Если вы делаете так, как это у вас в новой теме, то чему вы удивляетесь, что у вас "проскочила проверка"?

   
 
 автор: pautina   (24.07.2008 в 16:42)   письмо автору
 
   для: sim5   (24.07.2008 в 15:59)
 

Извините, с проверкой на выбор сейчас всё нормально, согласен с Вами, лучше выводить сообщение на страницу один раз для всех ошибок, просто мне там не всё понятно, позднее обязательно ещё подумаю как это реализовать.
И большое Вам спасибо за информацию о том что значение radio хранится в базе, я вообще не по тому пути шёл.

   
 
 автор: sim5   (24.07.2008 в 17:29)   письмо автору
 
   для: pautina   (24.07.2008 в 16:42)
 

Вы должны делать так, чтобы было удобно пользователю, а не так как вам хорошо. Вы же не хотите, чтобы вас материли?)) Впрочем, дело хозяйское.

   
Rambler's Top100
вверх

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