[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нужна помощь с формой регистрации
Kruger
нашел скрипт для регистрации пользователей, вот только есть одно НО - скрипт не выводит ошибку, если новый пользователь регистрируеться с логином и паролем, которые уже существуют в базе. Как это исправить?

PHP
<?php
$err_msg 
= array("email_1" => "<center><font color=#ff0000><p>Укажите Ваш E-mail</font></center></p>",
"email_2" => "<center><font color=#ff0000><p>E-mail должен быть в формате mybox@domen.com</font></center></p>",
"login_1" => "<center><font color=#ff0000><p>Укажите Ваш Логин</font></center></p>",
"login_2" => "<center><font color=#ff0000><p>Логин должен быть без пробелов, состоять из букв латинского алфавита и может <br>
содержать цифры, символ подчёркивания и тире. Минимальное кол-во символов - 2.</font></center></p>"
,
"login_3" => "<center><font color=#ff0000><p>Такий логін вже існує</font></center></p>",
"pass_1" => "<center><font color=#ff0000><p>Не указан пароль</font></center></p>",
"pass_2" => "<center><font color=#ff0000><p>Пароль должен быть без пробелов, состоять из букв латинского алфавита и может <br>
содержать цифры, символ подчёркивания и тире. Минимальное кол-во символв - 6.</font></center></p>"
,
"confirm_pass" => "<center><font color=#ff0000><p>Повторите пароль</font></center></p>",
"confirm_pass_2" => "<center><font color=#ff0000><p>Не совпадают пароли</font></center></p>");
function 
fields_emp($field)
{
$val true;
if(
trim($field) == '')
$val false;
return 
$val;
}
if (isset(
$_POST['login']))       
{
$_POST['login'] = trim($_POST['login']);
$_POST['login'] = stripslashes($_POST['login']);
$_POST['login'] = htmlspecialchars($_POST['login']);
}
if (isset(
$_POST['email']))       
{
$_POST['email'] = trim($_POST['email']);
$_POST['email'] = stripslashes($_POST['email']);
$_POST['email'] = htmlspecialchars($_POST['email']);
}
if (isset(
$_POST['pass']))       
{
$_POST['pass'] = trim($_POST['pass']);
$_POST['pass'] = stripslashes($_POST['pass']);
$_POST['pass'] = htmlspecialchars($_POST['pass']);
}
if (isset(
$_POST['confirm_pass']))       
{
$_POST['confirm_pass'] = trim($_POST['confirm_pass']);
$_POST['confirm_pass'] = stripslashes($_POST['confirm_pass']);
$_POST['confirm_pass'] = htmlspecialchars($_POST['confirm_pass']);
}

function 
chekFormatMail($str)
{
return 
ereg("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$"$str);
}
function 
chekFormatLog($str)
{
return 
ereg("^[_0-9a-z-]{2,15}$"$str);
}
function 
chekFormatPass($str)
{
return 
ereg("^[_\.0-9a-z-]{6,15}$"$str);
}
function 
formatConfirmPass($str)
{
return 
ereg("^[_\.0-9a-z-]{6,15}$"$str);
}
function 
confirmPass($str)
{
$val true;
if(
$_POST['pass'] != $_POST['confirm_pass'])
$val false;
return 
$val;
}
// Функция проверки формы
function chekForm()
{
$errors 0;
global 
$errors$err_msg;
if(!
fields_emp($_POST['email']))
{
$errors['email_1'] = 1;
}
elseif(!
chekFormatMail($_POST['email']))
{
$errors['email_2'] = 1;
}
if(!
fields_emp($_POST['login']))
{
$errors['login_1'] = 1;
}
elseif(!
chekFormatLog($_POST['login']))
{
$errors['login_2'] = 1;
}
$query00="SELECT login FROM regy WHERE login='$_POST[login]'";
if (
mysql_query($query00)) 
{
$errors['login_3'] = 1;
}
if(!
fields_emp($_POST['pass']))
{
$errors['pass_1'] = 1;
}
elseif(!
chekFormatPass($_POST['pass']))
{
$errors['pass_2'] = 1;
}
elseif(!
fields_emp($_POST['confirm_pass']))
{
$errors['confirm_pass'] = 1;
}
elseif(!
chekFormatPass($_POST['pass']))
{
$errors['confirm_pass_2'] = 1;
}
elseif(!
confirmPass($_POST['confirm_pass']))
{
$errors['confirm_pass_2'] = 1;
}
форма
if(sizeof($errors)>0) {
foreach(
$errors as $key => $value)
{
echo 
"{$err_msg[$key]}";
}
{
echo 
"<hr>";
echo 
"<p>";
showForm();
}
}
else {
require_once(
"config.php");

$query "INSERT INTO regy VALUES (NULL, '".($_POST['email'])."','$_POST[login]','".md5($_POST['pass'])."')"
  if(
mysql_query($query))
{
echo(
"<center><font color=#ff0000><p>Ваша информация отправлена!<br>
Вы успешно зарегестрированы.<br>
Теперь Вы можете авторизоваться под своим логиным и паролем.
<p><a href='index.php'>Вернуться на главную</a></p></font></center></p>"
);
}
  else
  {
  echo 
"<center><font color=#ff0000><p>Ошибка при добавлении пользователя в базу данных</font></center></p>";
  
showForm();
    exit;
  }
$subj "Новый пользователь";
$text "Уважаемый администратор!<br>
У нас зарегистрировался новый клиент:<br>
Его логин - "
.$_POST['login']."<br>
Пароль: "
.$_POST['pass']."<br>
E-mail:  "
.$_POST['email']."";
mail("box@domein.ru"$subj$text"Content-Type: text/html; charset=windows-1251\n");

// Для пользователя об успешной регистрации
$subj "Регистрация";
$text "Доброго времени суток!<br>
Вы успешно зарегистрировались у нас на сайте.<br>
Ваш логин: "
.$_POST['login']."<br>
Ваш пароль: "
.$_POST['pass']."<br>
E-mail:  "
.$_POST['email']."";

mail($_POST['email'], $subj$text"Content-Type: text/html; charset=windows-1251\n");
}
//
}
function 
showForm() {
if (!isset(
$_POST['submit'])) {
$value_email "";
$value_log "";
}
elseif (isset(
$_POST['submit']))
{
if(!
eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$"$_POST['email'])) {
$value_email ""; }
else {
$value_email = ($_POST['email']);
}
if(!
eregi("^[_\.0-9a-z-]{2,15}$"$_POST['login'])) {
$value_log ""; }
else {
$value_log = ($_POST['login']);
}
}
// отображение формы
echo "<html><head><title>Форма регистрации</title>
<style type='text/css'>
<!--
body,td,th {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 11px;
}
.style1 {color: #FF0000}
-->
</style></head><body>"
;

echo 
"<table width='390' border='0' align='center' cellpadding='0' cellspacing='0'>
  <tr>
    <td width='394' height='156' valign='top'>
      <form action='{$_SERVER['PHP_SELF']}' method='post'>
  <table width='394' border='0' align='center'>
  <tr>
  <td width='165' height='24' valign='middle'>Ваш E-mail<span class='style1'>*</span> </td>
    <td width='210' valign='middle'><input type='text' size='35' name='email' value='$value_email'/></td>
  </tr>
  <tr>
  <td height='24' valign='middle'>Логин/Псевдоним<span class='style1'>*</span></td>
    <td valign='middle'><input type='text' size='35' maxlength='15' name='login' value='$value_log'/></td>
    </tr>
  <tr>
  <td height='24' valign='middle'>Пароль<span class='style1'>*</span></td>
    <td valign='middle'><input type='password' size='35' maxlength='20' name='pass' /></td>
    </tr>
  <tr>
  <td height='24' valign='middle'>Ещё раз пароль<span class='style1'>*</span> </td>
    <td valign='middle'><input type='password' size='35' maxlength='20' name='confirm_pass' /></td>
    </tr>
  <tr>
    <td height='24'></td>
    <td></td>
  </tr>
  </table>
  <input type='submit' name='submit' value='Зарегистрироваться' />
  <input name='reset'  type='reset' value='Сброс' />
      </form></td>
  </tr>
</table>"
;
echo 
"</body></html>";
}
if(!isset(
$_POST['submit']))
{
showForm();
}
else {
chekForm();
}




Спустя 5 минут, 43 секунды (28.12.2008 - 19:33) Hunter80 написал(а):
проверить базу перед регистрацией на наличие совпадающего логина.
или сделать в таблице поле логина уникальным. Тогда будет возвращаться ошибка mysql что невозможно добавить новую строку.

Спустя 23 минуты, 11 секунд (28.12.2008 - 19:57) Guest написал(а):
Делаю проверку таким способом:
PHP
$result mysql_query ("SELECT * FROM regy WHERE login='$_POST[login]'");
$myrow mysql_fetch_array ($result);
if (
$result 'true'
{
$errors['login_3'] = 1;
}


Работает, но в добавок выводит такой текст:
SQL
Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in T:\home\localhost\reg\self.php on line 91

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in T:\home\localhost\reg\self.php on line 91

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in T:\home\localhost\reg\self.php on line 92

Спустя 47 минут, 12 секунд (28.12.2008 - 20:44) Alchemist написал(а):
Гмм... работает ?

Спустя 25 минут, 39 секунд (28.12.2008 - 21:09) Kruger написал(а):
Цитата (Alchemist @ 28.12.2008 - 19:44)
Гмм... работает ?

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

Спустя 17 минут, 6 секунд (28.12.2008 - 21:27) Гость написал(а):
Kruger, а вы пробовали перевести ошибки ?
Как вы думаете что они значат?

PHP
if ($result 'true'
{
$errors['login_3'] = 1;
}

Это уловие всегда истинно. Подумайте почему.

Спустя 7 минут, 40 секунд (28.12.2008 - 21:34) Kruger написал(а):
Цитата (Гость @ 28.12.2008 - 20:27)
Kruger, а вы пробовали перевести ошибки ?
Как вы думаете что они значат?

PHP
if ($result = 'true') 
{
$errors['login_3'] = 1;
}

Это уловие всегда истинно. Подумайте почему.

А если в базе нету аналогичного логина, то разве оно будет истинным?

Спустя 34 минуты, 44 секунды (28.12.2008 - 22:09) sergeiss написал(а):
Цитата (Kruger @ 28.12.2008 - 21:34)
А если в базе нету аналогичного логина, то разве оно будет истинным?

Это условие - будет smile.gif Почему - тебе предложили подумать. Подумай.
И оно будет истинным вообще вне зависимости от базы...

Ежели до утра не догадаешься, то подскажем.

Спустя 27 минут, 12 секунд (28.12.2008 - 22:36) Hunter80 написал(а):
я тоже мучился с таким условием... smile.gif но я догадался на следующий день smile.gif перечитай раздел про оператор if smile.gif

Спустя 41 минута, 33 секунды (28.12.2008 - 23:18) sergeiss написал(а):
И еще.
Когда создаешь запрос, то "сложные" переменные (типа элементов массивов) надо ставить в символьной строке в фигурные скобки:
"SELECT * FROM regy WHERE login='{$_POST['login']}'"

Спустя 19 часов, 52 минуты, 6 секунд (29.12.2008 - 19:10) Kruger написал(а):
не додумался я:(

Спустя 6 часов, 18 минут, 13 секунд (30.12.2008 - 01:28) Alchemist написал(а):
Ну тогда начнем помолясь...

Цитата (Guest @ 28.12.2008 - 18:57)
Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in T:\home\localhost\reg\self.php on line 91

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in T:\home\localhost\reg\self.php on line 91

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in T:\home\localhost\reg\self.php on line 92


Сильно подозреваю, что вы даже не пытались выяснить что эти ошибки значат, потому что это находится даже банальным копи/пейст'ом текста ошибки в Гугл или Яндекс.

Тем не менее, это значит следущее:
Доступ запрещен для юзера 'ODBC'@'localhost' (без пароля).
Не удалось установить связь с [MySQL] сервером.

Именно поэтому я и удивился, как это у вас все работает, если вы даже подсоединиться к MySQL серверу не смогли.

Ну а дальше идет стандартный набор новичка не желающего читать мануалы:

1) в PHP в отличие от SQL оператор "=" - это только оператор присвоения, а оператор сравнения "равно" - это "=="

2) конструкция 'true' является не булевым значением "истина", как вы предполагаете, а является, как это ни удивительно, простой строкой состоящей из букв t-r-u-e. Булевые значения записываются просто true или false (безо всяких кавычек). Пример:
PHP
$var true;

3) функция mysql_fetch_array() никогда не возвращает true! Она возвращает либо массив содержащий строку из результата какого-то запроса, либо false, если больше строк не осталось или не было изначально.

Истинно говорю вам, учитесь читать мануалы!


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.