Модераторы: 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   Вверх
MoLeX
Дата 5.12.2007, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



MrDmitry приведи лучше сюда свою базу


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


Опытный
**


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

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



Цитата(capitan @ 5.12.2007,  00:59)
MrDmitry,  А в какой кодировке у тебя всё в базе хранится?
возможно код:
Код

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


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

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

Я же написал что сейчас у меня тут все работает просто 
MoLeX сказал что мой вариант не очень хорош и я его попросил чтоб он если знает написал вариант лучше  smile 
PM MAIL   Вверх
MoLeX
Дата 6.12.2007, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



MrDmitry, лови готовый и рабочим пример, раз сам не мог докумекать

SQL - запрос:
Код

CREATE TABLE users 
(
    id int(11) NOT NULL auto_increment,
    login text NOT NULL,
    pass text NOT NULL,
    PRIMARY KEY (id) 
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
INSERT INTO `users` VALUES (1, 'MoLe-X', 'pass');    


index.php:
Код

<?php
//    Соединение с базой
    $db_host  = "localhost";    
    $db_uname = "root";    
    $db_pass = "pass";    
    $db_name = "test";    
    $error_sql = "<script>alert('Ошибка в составлении запроса.')</script>";    
    $error_db = "<script>alert('Ошибка подключения к БД.')</script>";
    $msg_error_tabl = "<script>alert('Произошла ошибка в выборе таблицы.')</script>";
    
    mysql_connect($db_host, $db_uname, $db_pass) or die($error_sql);
    mysql_select_db($db_name) or die($error_db);    
    @mysql_query ("set character_set_client='cp1251'");
    @mysql_query ("set character_set_results='cp1251'");
    @mysql_query ("set collation_connection='cp1251_general_ci'");    
    
//    Форма для регистрации нового юзера
    echo "<form name=\"pr\" action=\"index.php\" method=\"post\">
          <input type=\"text\" name=\"login\" /><br/>
          <input type=\"text\" name=\"pass\" /><br/>
          <input type=\"submit\" name=\"auto\" value=\"Вход\" /></form>";

//    Проверка и регистрация        
    $proverka = mysql_query("SELECT * FROM `users` WHERE login = '".mysql_escape_string($_POST['login'])."'");
    if(mysql_num_rows($proverka)!==0)
    {
        echo "<b style=\"color: red\">Данный пользователь уже зарегистрирован!!!</b>";
    }
    else
    {
        $user = "INSERT INTO `users` (`id`, `login`, `pass`) VALUES ('', '".mysql_escape_string($_POST['login'])."', '".mysql_escape_string($_POST['pass'])."'";
        mysql_query($user);
        echo "<b>Пользователь - ".htmlspecialchars($_POST['login'])." зареган</b>";
    }
?>




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


Опытный
**


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

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



Цитата(MoLeX @ 6.12.2007,  08:55)
MrDmitry, лови готовый и рабочим пример, раз сам не мог докумекать

SQL - запрос:
Код

CREATE TABLE users 
(
    id int(11) NOT NULL auto_increment,
    login text NOT NULL,
    pass text NOT NULL,
    PRIMARY KEY (id) 
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
INSERT INTO `users` VALUES (1, 'MoLe-X', 'pass');    


index.php:
Код

<?php
//    Соединение с базой
    $db_host  = "localhost";    
    $db_uname = "root";    
    $db_pass = "pass";    
    $db_name = "test";    
    $error_sql = "<script>alert('Ошибка в составлении запроса.')</script>";    
    $error_db = "<script>alert('Ошибка подключения к БД.')</script>";
    $msg_error_tabl = "<script>alert('Произошла ошибка в выборе таблицы.')</script>";
    
    mysql_connect($db_host, $db_uname, $db_pass) or die($error_sql);
    mysql_select_db($db_name) or die($error_db);    
    @mysql_query ("set character_set_client='cp1251'");
    @mysql_query ("set character_set_results='cp1251'");
    @mysql_query ("set collation_connection='cp1251_general_ci'");    
    
//    Форма для регистрации нового юзера
    echo "<form name=\"pr\" action=\"index.php\" method=\"post\">
          <input type=\"text\" name=\"login\" /><br/>
          <input type=\"text\" name=\"pass\" /><br/>
          <input type=\"submit\" name=\"auto\" value=\"Вход\" /></form>";

//    Проверка и регистрация        
    $proverka = mysql_query("SELECT * FROM `users` WHERE login = '".mysql_escape_string($_POST['login'])."'");
    if(mysql_num_rows($proverka)!==0)
    {
        echo "<b style=\"color: red\">Данный пользователь уже зарегистрирован!!!</b>";
    }
    else
    {
        $user = "INSERT INTO `users` (`id`, `login`, `pass`) VALUES ('', '".mysql_escape_string($_POST['login'])."', '".mysql_escape_string($_POST['pass'])."'";
        mysql_query($user);
        echo "<b>Пользователь - ".htmlspecialchars($_POST['login'])." зареган</b>";
    }
?>

спс
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




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


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

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