Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2010, 21:25   #1
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию Поиск совпадений в БД

Приступив к php недавно, понял, что большинство позабыл. Мне понадобился простейший запрос, чтобы узнать существует ли такой логин в базе или нет. Связь с базой нормальная. Выражением INSERT INTO... VALUES, записи добавляются. Выложу код.
PHP код:
<?php
session_start
();
include(
"mysqlpass_h_u.php");
$login trim($_POST['login']);
$pass  trim($_POST['password']);
$pass2 trim($_POST['repassword']);
$name trim($_POST['name']);
$lastname trim($_POST['lastname']);
$icq "no";
mysql_connect($host$user$password) or die("Cоединение с базой данных невозможно. Попробуйте позже.");
mysql_select_db($db_name) or die(mysql_error());
$query mysql_query("SELECT * FROM $table WHERE login='$login'");
while(
$row mysql_fetch_array($query))
{
 if(
$login == $row['login'])
 {
  public 
$n true;
 }
}
if(!
preg_match("/^[a-z0-9_]{5,20}+$/i",$login) and $n == false)
{
  
$error['login'] = "Логин содержит недопустимые символы или совпадает с чужим. ";
  
$error['on']    = true;
}
if(
$pass == $pass2 and preg_match("/^[a-z0-9]{6,20}+$/i",$pass))
{}
else
{
  
$error['pass'] = "Пароль содержит недопустимые символы. ";
  
$error['on']   = true;
}
if(!
preg_match("/^[a-zа-я]{3,20}+$/i",$name))
{
  
$error['name'] = "Имя содержит недопустимые символы. ";
  
$error['on']   = true;
}
if(!
preg_match("/^[a-zа-я]{3,20}+$/i",$lastname))
{
  
$error['lastname'] = "Фамилия содержит недопустимые символы. ";
  
$error['on']   = true;
}
$error['all'] = "{$error['login']}{$error['pass']}{$error['name']}{$error['lastname']}";
if(
$error['on'])
{
  
$_SESSION['errors'] = $error['all'];
  
$query "INSERT INTO info VALUES('$name', '$lastname', '$login', '$icq', 'no', '$pass', 'text')";
  
mysql_query($query);
  echo 
"<script type='text/javascript'>location.href='../registration.php';</script>";
}
?>
Но чтобы укоротить, напишу отдельно проблемную часть.
PHP код:
$query mysql_query("SELECT * FROM $table WHERE login='$login'");
while(
$row mysql_fetch_array($query))
{
 if(
$login == $row['login'])
 {
  public 
$n true;
 }
}
if(!
preg_match("/^[a-z0-9_]{5,20}+$/i",$login) and $n == false)
{
  
$error['login'] = "Логин содержит недопустимые символы или совпадает с чужим. ";
  
$error['on']    = true;

Все работает нормально, но сравнения не происходит, хотя в базе 4 одинаковых логина.
Заранее спасибо.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 18.05.2010, 21:39   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

по моему достаточно узнать кол-во таких логинов а не его самого

PHP код:
$query mysql_query("SELECT count(*) as c FROM $table WHERE login='$login'"); 
$row mysql_fetch_array($query);
if(
$row[0]['c']>0)
 {
  
$n true;
 } 
далее по тексту
ADSoft вне форума Ответить с цитированием
Старый 18.05.2010, 22:49   #3
Vertexxx
Заблокирован
 
Регистрация: 10.04.2010
Сообщений: 145
По умолчанию

Цитата:
if(!preg_match("/^[a-z0-9_]{5,20}+$/i",$login) and $n == false)
Зачем там квантор, если уже указан конкретно диапазон?
Vertexxx вне форума Ответить с цитированием
Старый 19.05.2010, 07:32   #4
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Под словами "4-е логина" я имел в виду, что скрипт постоянно добавляет и добавляет их. Вроди бы проверка проводится, а ошибки нет. Попробую объяснить чуть по подробнее.
Пользователь заполняет логин и прочии поля, потом, естественно, жмет на кнопку "submit" и идет проверка. Так вот, если такой логин в базе уже есть, то должно следовать перенаправление, но его нет, все записывается в базу.
Цитата:
Зачем там квантор, если уже указан конкретно диапазон?
Как-то же работает. А если так?
Код:
if(!preg_match("/^[a-z0-9_]{5,20}/i",$login) and $n == false)

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 19.05.2010 в 07:35.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 19.05.2010, 08:15   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

я не тупой ... и смысл ваших опраций понимаю... и предлагаю не сам логин искать а их количество.. .если есть хотябы один ( >0) - значит такой логин есть... - будет ошибка иначе - пишите в базу
ADSoft вне форума Ответить с цитированием
Старый 19.05.2010, 19:51   #6
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

ADSoft, с запросом правильно. Где-то логика нарушена. Я переделал, только что и заработало.
PHP код:
<?php
session_start
();
include(
"mysqlpass_h_u.php");
$login trim($_POST['login']);
$pass  trim($_POST['password']);
$pass2 trim($_POST['repassword']);
$name trim($_POST['name']);
$lastname trim($_POST['lastname']);
$icq "no";
$mail $_POST['mail'];
$info $_POST['info'];
mysql_connect($host$user$password) or die("Cоединение с базой данных невозможно. Попробуйте позже.");
mysql_select_db($db_name) or die(mysql_error());
$query mysql_query("SELECT * FROM $table WHERE login='$login';");
while(
$row mysql_fetch_array($query))
{
 if(
$login == $row['login'])
 {
   
$error['on'] = true;
   
$error['login_db'] = "Введенный вами логин занят другим пользователем, попробуйте ввести другой. ";
 }
}
if(!
preg_match("/^[a-z0-9_]{5,20}+$/i",$login))
{
  
$error['login'] = "Логин содержит недопустимые символы. ";
  
$error['on']    = true;
}
if(
$pass == $pass2 and preg_match("/^[a-z0-9]{6,20}+$/i",$pass))
{}
else
{
  
$error['pass'] = "Пароль содержит недопустимые символы. ";
  
$error['on']   = true;
}
if(!
preg_match("/^[a-zа-я]{3,20}+$/i",$name))
{
  
$error['name'] = "Имя содержит недопустимые символы. ";
  
$error['on']   = true;
}
if(!
preg_match("/^[a-zа-я]{3,20}+$/i",$lastname))
{
  
$error['lastname'] = "Фамилия содержит недопустимые символы. ";
  
$error['on']   = true;
}

if(
$error['on'])

  
$error['all'] = "{$error['login']}{$error['login_db']}{$error['pass']}{$error['name']}{$error['lastname']}";
  
$_SESSION['errors'] = $error['all'];
  echo 
"<script type='text/javascript'>location.href='../registration.php';</script>";
}
else
{
   
$query "INSERT INTO info VALUES('$name', '$lastname', '$login', '$icq', '$mail', '$pass', '$info')";
  
mysql_query($query) or die(mysql_error());
}
?>
Нарушена логика при переходе к if.
P.S. Недоделано малость. Еще регулярные выражения для e-mail и icq пропишу.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 19.05.2010 в 19:53.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 21.05.2010, 13:53   #7
VY_CMa
Пользователь
 
Аватар для VY_CMa
 
Регистрация: 13.03.2010
Сообщений: 38
По умолчанию

Зачем mysql_fetch_array,когда есть mysql_num_rows...
VY_CMa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск совпадений и вывод на новую страницу Mr.Wonderful Microsoft Office Excel 13 21.03.2011 11:26
Поиск совпадений ячейки в массиве VPavlov Microsoft Office Excel 1 02.04.2010 19:29
пересечение совпадений в регекспах wall66 PHP 6 03.09.2009 19:31
Поиск совпадений mistx Microsoft Office Excel 22 14.08.2009 13:41
Академические задачи по с++ (гдз) Сортировка и поиск совпадений по массиву Andrew#90 Общие вопросы C/C++ 2 10.01.2009 18:44