[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: MySQL и PHP
alexander.pro
Всем доброго времени суток.Я работаю с PHP немного (примерно два месяца), за это время достаточно много прочитал литературы.На днях решил написать систему регистрации на базе MySQL, но почему то код работает неверно.Пожалуйса подскажите в чём ошибка.

<?
//Код проверки ввода данных в форму//
if (empty($regform)){
if (empty($nik)){ $u_mass[] = "Ник"; }
if (empty($name)){ $u_mass[] = "Имя пользователя"; }
if (empty($contact)){ $u_mass[] = "Телефон"; }
if (empty($password)){ $u_mass[] = "Пароль"; }}
if (empty($u_mass)){ $m_status = 1; } else { $m_status = 0; }
//Конец кода//

//Предупреждение о неполном вводе//
if ($m_status == 0){ echo ("Пожалуйста заполните форму: ");
for ($i=0;$i<count($u_mass);$i++){ echo ("$u_mass[$i] "); }}
//Конец кода//


//Тех.операция - конект :)//
else { echo ("Все поля формы заполнены.<br>");
$connect = mysql_connect ("localhost","root");
$data = mysql_select_db ("portal");
$t_nik = "select*from client where nik ='".$nik."'";
$r_nik = mysql_query ($t_nik);
//Конец кода//

//Проверка юзера по нику//
if (!$r_nik){ КОД ДОБАВЛЕНИЯ ЗАПИСИ В ТАБЛИЦУ }
else {СООБЩЕНИЕ "ТАКОЙ ЮЗЕР ЕСТЬ" }
mysql_close();}

Ну дак вот почемуто даже если такого ника нет в таблице, выводиться "ТАКОЙ ЮЗЕР ЕСТЬ".Как вы наверное уже догадались данные заносятся из формы.



Спустя 59 минут, 15 секунд (10.07.2008 - 12:08) alexander.pro написал(а):
Спасибо! А если надо сделать сразу две проверки, что'б только в результате истиности этих двух проверок, писала в базу.Например одновременная проверка ника и имени.

Спустя 2 минуты, 46 секунд (10.07.2008 - 12:11) Professor написал(а):
в общем,
if(!$r_nik)
ты этим условием проверяешь, прошел запрос или нет
А если так, то
Код
$total = mysql_query ($t_nik);
$r_nik=mysql_fetch_array($total);

то проверяешь нашел ли он что нибудь

Спустя 47 секунд (10.07.2008 - 12:12) Professor написал(а):
Опаздал=))

Спустя 8 минут, 14 секунд (10.07.2008 - 12:20) alexander.pro написал(а):
Такая фигня появилась.Если вводишь в форму запись идентичную записи в таблице, то "ужу есть", а если вместо паролься в форме написать "password" ,регистрит любого пользователя.

Спустя 7 минут, 41 секунда (10.07.2008 - 12:28) Niemand написал(а):
Цитата(Вебмастер @ 10.7.2008, 13:05) [snapback]42891[/snapback]
$total=mysql_num_rows($result); // читаем количество рядов

if ($total>0)
{
echo"Такое имя ужу зарегистрированно, выберите пожалуйста другое!";
exit();
}


для подсчета кол-ва рядов не нужно использовать fetch_array, вы же не собираетесь работать с данными? используем num_rows. кроме того, fetch-массив не даст вам значение больше нуля.
кроме того в запросе
SELECT * FROM `userlist
достаточно выбрать одно поле (например индекс), опять же из тех же соображений, да и работать быстрее будет.

а еще у меня подозрения, что у вас включены globals. выключите, запишите все данные в переменные через $_POST (или $_GET, в зависимости от метода)

Спустя 14 минут (10.07.2008 - 12:42) Niemand написал(а):
Цитата(alexander.pro @ 10.7.2008, 13:20) [snapback]42899[/snapback]
Такая фигня появилась.Если вводишь в форму запись идентичную записи в таблице, то "ужу есть", а если вместо паролься в форме написать "password" ,регистрит любого пользователя.

весь код в студию и пожалуйста используйте тэги кода smile.gif

Спустя 3 минуты, 19 секунд (10.07.2008 - 12:45) Niemand написал(а):
Цитата(Вебмастер @ 10.7.2008, 13:30) [snapback]42905[/snapback]
Вот работающий скрипт регистрации посмотри:

Источник: http://www.forum.webering.ru

жигули - тоже машина, еще и ездит )

Спустя 1 час, 36 минут, 18 секунд (10.07.2008 - 14:21) alexander.pro написал(а):
Никогда не понимал, зачем отключать globals.Что мне это даст? excl.gif

Спустя 5 часов, 13 минут, 10 секунд (10.07.2008 - 19:35) Marty написал(а):
Пользуюсь случаем. Есть ворос. Как правильно сформировать запрос с LIKE и переменной. Не получается никак.
Переменная $сh и поиск с любым вхождением

$res = mysql_query("SELECT Name FROM `Table` WHERE Name LIKE `$`+ '$ch' + `$` ") ;

Проблема с формированием строки и кавычками в конце запроса совместно с `$` Как правильно сформировать строку?

Спустя 1 час, 25 минут, 3 секунды (10.07.2008 - 21:00) Dezigo написал(а):
Цитата(Marty @ 10.7.2008, 16:35) [snapback]43051[/snapback]
Пользуюсь случаем. Есть ворос. Как правильно сформировать запрос с LIKE и переменной. Не получается никак.
Переменная $сh и поиск с любым вхождением

$res = mysql_query("SELECT Name FROM `Table` WHERE Name LIKE `$`+ '$ch' + `$` ") ;

Проблема с формированием строки и кавычками в конце запроса совместно с `$` Как правильно сформировать строку?
что значит +?

Спустя 46 минут, 24 секунды (10.07.2008 - 21:46) redow написал(а):
alexander.pro, отключается для безопастности.

Marty, вот так запрос
Код
$res = mysql_query("SELECT Name FROM `Table` WHERE Name LIKE `%".$ch."%` ");

в пхп соединения происходят не "+" а "." smile.gif

Спустя 11 часов, 4 минуты, 38 секунд (11.07.2008 - 08:51) Marty написал(а):
Спасибо redow, написал как вы подсказали. Но вот что вываливает.....
Unknown column '%значение моей переменной ch%' in 'where clause'

$res = mysql_query("SELECT Name FROM `Table` WHERE Name LIKE `%".$ch."%` ");

Спустя 17 минут, 21 секунда (11.07.2008 - 09:08) Marty написал(а):
все спасибо разобрался

Спустя 5 часов, 17 минут, 12 секунд (11.07.2008 - 14:25) alexander.pro написал(а):
Пожалуйста прокоментируйте готовый код системы регистрации.Напишите, что лишнее, а что нужно добавить.
Вот код:

//Удаляем пробелы,слеши,символы//
$nik = trim(strtolower(htmlspecialchars(stripcslashes(@$_GET['nik']))));
$name = trim(strtolower(htmlspecialchars(stripcslashes(@$_GET['name']))));
$password = trim(strtolower(htmlspecialchars(stripcslashes(@$_GET['passw']))));
//Проверяем форму если одна из трёх пуста, записываем в массив//
if (empty($regform)){
if (empty($nik)){ $u_mass[] = "Ник"; }
if (empty($name)){ $u_mass[] = "Имя пользователя"; }
if (empty($password)){ $u_mass[] = "Пароль"; }}
if (empty($u_mass)){ $m_status = 1; } else { $m_status = 0; }
//Проверяем существует ли массив если нет, то//
if ($m_status == 0){ echo ("Пожалуйста заполните форму: ");
for ($i=0;$i<count($u_mass);$i++){ echo ("$u_mass[$i] "); }}
//Соединяемся с базой данных и проверяем данные//
else { echo ("Все поля формы заполнены.<br>");
$connect = mysql_connect ("localhost","root");
$data = mysql_select_db ("portal");
$string = mysql_query("select*from client");
$num = mysql_num_rows($string);
$t_nik = mysql_query("select*from client where nik ='$nik'");
$r_nik = mysql_fetch_array($t_nik);
if (!$r_nik > 0){
$num = $num+1;
$contact = ("$nik@portal.ru");
$rec = "insert into client (c_no,nik,name,email,passw) values ('".$num."','".$nik."','".$name."','".$contact."','".$password."')";
$result = mysql_query($rec); if ($result) { echo ("Успешно добавлен");}}
else { echo ("Пользователь с таким ником уже существует.<br><a href = inst.php>Правила регистрации.</a>");}
mysql_close();}


Спустя 5 часов, 42 минуты, 20 секунд (11.07.2008 - 20:08) sergeiss написал(а):
Если честно, то я не глубоко вникал в написанное... Поэтому советы чисто по структуре языка (в основном на основе тех граблей, по которым сам попрыгал smile.gif).

0. Лучше через POST передавать, чтобы не было видно в явном виде передаваемые переменные. У тебя же тут и ник, и пароль...

1. Лучше не empty, а isset использовать для проверки. И назначение в переменные делать уже после проверки.
Типа такого:
if( isset( $_GET['nik']) ) $u_mass['nik']=trim(strtolower(htmlspecialchars(stripcslashes($_GET['nik']))));
При этом получаем следующее:
а) Проверка и назначение рядом, проще искать ошибки (если будут) и корректировать (если понадобится);
б) Назначение будет сделано только в случае, если переменная передана
в) я предпочитаю делать в подобной ситуации ассоциативный массив - это просто изумительная вещь, которой нету практически ни в одном языке

2. Проверку

--- if (empty($u_mass)){ $m_status = 1; } else { $m_status = 0; } ---

лучше заменить на более изящную, простую и понятную
--- $m_status = isset( $u_mass) ); ---

И далее ты можешь смело писать, if( $m_status ), подразумевая if( $m_status == true ) или if( !$m_status ) для сравнения с false.

3. Запрос можно упростить (чисто грамматически, чтоб прозрачнее был)
Вместо ('".$num."','".$nik."','".$name."','".$contact."','".$password."') напиши ('$num','$nik','$name','$contact','$password'). Все замены на величины из переменных будут сделаны.
Быстрый ответ:

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