Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнения с данными 
:(
    Опции темы
MrDmitry
Дата 2.12.2007, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Зраствуйте. Проблема в следуещем
Нужно написать запрос сравнения данных введенных в текстовое поле с базой данных
Если такое имя уже есть то не чего в бд добовлять не нужно если нет то добовляються записи.
Написал так:
Код

$us = mysql_query("select * from user;");
if($us)
{
while($user = mysql_fetch_array($us))
  {
     if ($login<>$user['login'])
        {
      echo "<center><b><font color=red>Логин $login уже существует!!</font></b></center>";
  exit();
}
}
}
else
{
$str_sql_query = "INSERT INTO user (login, password, name, dev, City, sex, lev) values        ('$login', '$psw', '$name', '$dev', '$city', '$sex', '1')";
        if (!mysql_query($str_sql_query, $link))
         {
           echo "<b><font color=red>Не могу выполнить заполнение</font></b><br>";
           exit();
         }
}

Но он почемуто считает все введенные данные в текстовое поле как существующее в бд ((
Помогите плиз!
PM MAIL   Вверх
vasac
Дата 2.12.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 3
Всего: 36



Попробуйте прокомментировать построчно что вы делаете в сценарии. Возможно и сами поймете где ошибка.
Так же разберитесь зачем вам вообще нужно база данных. Большинству она нужна именно для того, чтобы вместо наворочанных циклов и ветвлений делать всё в одну строчку.
PM WWW   Вверх
capitan
Дата 2.12.2007, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 2
Всего: 13



Можно начать даже с первой строки:
Код

$us = mysql_query("select * from user;");


А почему бы не сделать так:
Код

$us = mysql_query("select login from user WHERE login = ".$_POST['login']);

PM MAIL WWW ICQ   Вверх
vasac
Дата 3.12.2007, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 3
Всего: 36



Так не сделать хотя бы потому что строковые данные нужно заключать в кавычки и экранировать опасные символы.
PM WWW   Вверх
MoLeX
Дата 3.12.2007, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 7
Всего: 140



Код

<?php
$СheckUserAdd = mysql_query("SELECT * FROM TABLES WHERE Login = '".mysql_real_escape_string($_POST['Login'])."'");
if(mysql_num_rows($СheckUserAdd) !== "0")
{
    //    Твои действия
}
else
{
    //    Твои действия
}                                        
?>


думаю поймешь


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
MrDmitry
Дата 3.12.2007, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Цитата(MoLeX @ 3.12.2007,  08:50)
Код

<?php
$СheckUserAdd = mysql_query("SELECT * FROM TABLES WHERE Login = '".mysql_real_escape_string($_POST['Login'])."'");
if(mysql_num_rows($СheckUserAdd) !== "0")
{
    //    Твои действия
}
else
{
    //    Твои действия
}                                        
?>


думаю поймешь

Что-то не получаеться
Вот часть кода:
Код

<?php
  $СheckUserAdd = mysql_query("SELECT * FROM TABLES WHERE Login = '".mysql_real_escape_string($_POST['Login'])."'");
if(mysql_num_rows($СheckUserAdd) !== "0")
{
//Добовление новой записи в таблицу user
       $str_sql_query = "INSERT INTO user (login, password, name, dev, City, sex, lev) values        ('$login', '$psw', '$name', '$dev', '$city', '$sex', '1')";
        if (!mysql_query($str_sql_query, $link))
         {
           echo "<b><font color=red>Не могу выполнить заполнение</font></b><br>";
           exit();
         }
        echo  "<center><b><font color=blue>Поздровяем $login вы успешно        зарегестрированы</font></b></center>";
}
else
{
 echo  "<center><b><font color=red>Такой логин уже существует!!</font></b></center>";    
}                       
      ?>


В итоге выходит ошибка 
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in z:\home\game\www\register.php on line 85

Это сообщение отредактировал(а) MrDmitry - 3.12.2007, 13:06
PM MAIL   Вверх
skyboy
Дата 3.12.2007, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(MrDmitry @  3.12.2007,  12:04 Найти цитируемый пост)
on line 85

какая из строк у тебя имеет номер 85? первая?! последняя?!
впрочем, помедетировав, предполагаю, что ошибка происходит при выполнении строки
Код

if(mysql_num_rows($СheckUserAdd) !== "0")

и происходит оттого, что в $CheckUserAdd - не результат выполнения запроса, а false. A false там, потому что по какой-то причине не сработал запрос 
Код

 $СheckUserAdd = mysql_query("SELECT * FROM TABLES WHERE Login = '".mysql_real_escape_string($_POST['Login'])."'");

И если выведешь mysql_error(), то сможешь узнать причину: отчего же не сработал.
PM MAIL   Вверх
MrDmitry
Дата 3.12.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Цитата(skyboy @ 3.12.2007,  13:27)
Цитата(MrDmitry @  3.12.2007,  12:04 Найти цитируемый пост)
on line 85

какая из строк у тебя имеет номер 85? первая?! последняя?!
впрочем, помедетировав, предполагаю, что ошибка происходит при выполнении строки
Код

if(mysql_num_rows($СheckUserAdd) !== "0")

и происходит оттого, что в $CheckUserAdd - не результат выполнения запроса, а false. A false там, потому что по какой-то причине не сработал запрос 
Код

 $СheckUserAdd = mysql_query("SELECT * FROM TABLES WHERE Login = '".mysql_real_escape_string($_POST['Login'])."'");

И если выведешь mysql_error(), то сможешь узнать причину: отчего же не сработал.

Ошибку нашол и исправил но код все равно не работает!
Код почемуто все равно принимает значение falsе и не выпоняеться.  
Не зависимо от того есть такая записаь или нет новая запись все равно добовляеться в БДsmile 


Код

<?php

//Определение БД
$sdb_name ="localhost"; 
$user_name = "root";
$user_pass = "";
$db_name = "test_db";

//Сравнение корекции данных 
 if ($psw<>$conf_pass)
  {
   echo "<b><font color=red>При повторном введении пароля была допущена    ошибка!!</font></b>";
   exit();
  }
 if ($login=="" )
  {
   echo "<b><font color=red>Поле логин не заполнено!!</font></b>";
   exit();
  }
   if ($psw=="" )
   {
    echo "<b><font color=red>Пароль небыл введен!!!</font></b>";
  }
else

     //Подключение к БД
     If (!$link = mysql_connect($sdb_name, $user_name, $user_pass))
      {
       echo "<b><font color=red>Не могу соедениться с сервером базы        данных!!</font></b><br>";
       exit();
      }
       
       //Выбор нужной БД
       if (!mysql_select_db($db_name, $link))
      {
       echo "<b><font color=red>Не могу выбрать Базу данных!</font></b><br>";
       exit();
      }
     $СheckUserAdd = mysql_query("SELECT * FROM user WHERE Login = '".mysql_real_escape_string($_POST['Login'])."'");
if(mysql_num_rows($СheckUserAdd) !== "0")
{
//Добовление новой записи в таблицу user
       $str_sql_query = "INSERT INTO user (login, password, name, City, sex) values        ('$login', '$psw', '$name', '$city', '$sex')";
        if (!mysql_query($str_sql_query, $link))
         {
           echo "<b><font color=red>Не могу выполнить заполнение</font></b><br>";
           exit();
         }
        echo  "<center><b><font color=blue>Поздровяем $login вы успешно        зарегестрированы</font></b></center>";
}
else
{
   echo  "<center><b><font color=red>Такой логин уже существует!!</font></b></center>";
}          
      ?>


Это сообщение отредактировал(а) MrDmitry - 3.12.2007, 14:42
PM MAIL   Вверх
skyboy
Дата 3.12.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(MrDmitry @  3.12.2007,  13:41 Найти цитируемый пост)
Код почемуто все равно принимает значение falsе и не выпоняеться.

А если такой запрос:
Код

SELECT * FROM `tables`
? выполняется?
вообще, имя TABLES используется, потому лучше экранировать обратными апострофами

PM MAIL   Вверх
MrDmitry
Дата 3.12.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Все написал )))

Код

//Запрос на сравнения введенных данных с данными БД
$str_sql_query = "SELECT login FROM user";
if (!$result=mysql_query($str_sql_query, $link))
 {
   echo "<b><font color=red>Не могу выполнить запрос</font></b><br>";
   exit();
 }
  while ($user=mysql_fetch_row($result))
   {
    foreach($user as $acces)
     {
       if ($login==$acces)
         {
 echo  "<center><b><font color=red>Такой логин уже существует!!</font></b></center>";
exit();
} 

else
{
//Добовление новой записи в таблицу user
       $str_sql_query = "INSERT INTO user (login, password, name, dev, City, sex, lev) values        ('$login', '$psw', '$name', '$dev', 

'$city', '$sex', '1')";}}}
        if (!mysql_query($str_sql_query, $link))
         {
           echo "<b><font color=red>Не могу выполнить заполнение</font></b><br>";
           exit();
         }
        echo  "<center><b><font color=blue>Поздровяем $login вы успешно зарегестрированы</font></b></center>";


Код получился конечно большим но пока меня такой устраивает. 
Спасибо всем кто помогал ))

Это сообщение отредактировал(а) MrDmitry - 3.12.2007, 15:07
PM MAIL   Вверх
skyboy
Дата 3.12.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(MrDmitry @  3.12.2007,  14:07 Найти цитируемый пост)
Код

SELECT login FROM user

Используй обратный апостроф "`" для указания имен полей и таблиц. Избежишь недетских проблем, когда имя поля/таблицы совпадает с синтаксической конструкцией. Например, "show" или "create"
PM MAIL   Вверх
MoLeX
Дата 3.12.2007, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 7
Всего: 140



MrDmitry, смотри у тебя по циклу идет проверка логинов а если в БД записей 100000 или более как думаешь сколько по времени будет пахать твой скрипт?


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
MrDmitry
Дата 4.12.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 556
Регистрация: 10.11.2006

Репутация: нет
Всего: нет



Цитата(MoLeX @ 3.12.2007,  15:50)
MrDmitry, смотри у тебя по циклу идет проверка логинов а если в БД записей 100000 или более как думаешь сколько по времени будет пахать твой скрипт?

Ну это пока единственый рабочий вариант к которому я пришол. Если есть идеи как это реализовать по другому то делись ))
PM MAIL   Вверх
Цербер
Дата 4.12.2007, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 21.11.2007

Репутация: нет
Всего: 1



Цитата(MrDmitry @ 4.12.2007,  15:20)
Цитата(MoLeX @ 3.12.2007,  15:50)
MrDmitry, смотри у тебя по циклу идет проверка логинов а если в БД записей 100000 или более как думаешь сколько по времени будет пахать твой скрипт?

Ну это пока единственый рабочий вариант к которому я пришол. Если есть идеи как это реализовать по другому то делись ))

А если при создании таблицы в базе поле логин сделать первичным??
PM MAIL ICQ   Вверх
capitan
Дата 5.12.2007, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 2
Всего: 13



MrDmitry,  А в какой кодировке у тебя всё в базе хранится?
возможно код:
Код

$СheckUserAdd = mysql_query("SELECT * FROM user WHERE Login = '".mysql_real_escape_string($_POST['Login'])."'");


не сработал из-за того, что ты на проверку посылаешь данные в другой кодировке, чем в которой всё лежит в базе.

А потом у тебя поле в таблице "Login" или "login" и данные постом прилетают из поля с именем "Login" или "login"?

Это сообщение отредактировал(а) capitan - 5.12.2007, 01:02
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.