[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проблема с MySQL
Serdg
не так давно с этим столкнулся и немного в замешательстве, вобщем ситуация следующая, делал регистрацию на сайте, сделал в MySQL таблицу с полями логина и пароля пользователя, так вот, регистрация проходит нормально, логин и пароль заносятся в базу, всё хорошо, вход под этими логином и паролем тоже проходит нормально, но только поначалу, по какой-то причине, допустим через день, или через два, или позже, или раньше начинается глюк какой-то вводишь те же самые логин пароль, но подтверждение не проходит, потомучто вводимые логин пароль почему-то не совпадают с теми что в базе данных, хотя вводишь вточности всё как в БД, даже из базы данных пробовал вставлять значения логин пароль прямо в атрибут VALUES полей ввода, и просто копировать пробовал, всё равно проверка не проходит, говорит не совпадают и всё, хотя например вчера всё работало, и никаких изменений после этого в код не вносил, поначалу думал может с моей локальной базой глюк какой-то мало ли, но потом и на хосте та же ерунда случилась, подскажите пожалуйста из-за чего такое может случится?



Спустя 1 минута, 5 секунд (26.06.2011 - 20:58) Админ написал(а):
код покажи

Спустя 8 минут, 15 секунд (26.06.2011 - 21:06) Serdg написал(а):
код такой


if(isset($_POST["login"])){$login=$_POST["login"];}
if(isset($_POST["password"])){$password=$_POST["password"];}

if($login==""){unset($login);}
if($password==""){unset($password);}

if(isset($login) && isset($password)){
$login=trim($login);
$password=trim($password);
$podtvergdenie="podtvergdeno";

include_once("add/conect.php");
$mysql_select=mysql_query("SELECT * FROM users", $db);
proverka();
if ($proverka==TRUE){echo "Вы успешно авторизовались!
Добро пожаловать на сайт  <span id='nazad'>"
.$_SESSION["login"]."
</span>
<center><a href='index.php' id='nazad'>На главную</a></center>"
;}
else {echo "Вы ввели неверный логин или пароль!
<center><a href='enter.php' id='nazad'>Назад</a></center>"
;}}
else {echo "Вы заполнили не все поля!
<center><a href='enter.php' id='nazad'>Назад</a></center>"
;}

function proverka(){global $arr, $login, $password, $proverka, $mysql_select,
$_SESSION, $podtvergdenie;
while($arr=mysql_fetch_array($mysql_select)){
if(($login==trim($arr["login"])) AND ($password==trim($arr["password"])) AND
($podtvergdenie==trim($arr["podtvergdenie"]))){
$_SESSION["login"]=$arr["login"]; $proverka=TRUE;
} else {$proverka=false;}
}

return $proverka; }

Спустя 12 минут, 43 секунды (26.06.2011 - 21:19) bulgakov написал(а):
Код какой-то дикий.... А покажите какие данные вы в базу записываете?

Спустя 56 секунд (26.06.2011 - 21:20) bulgakov написал(а):
Да и на будущее что бы знать врага в лицо, скажите пожалуйста по каким материалам вы учились?...

Спустя 2 минуты, 6 секунд (26.06.2011 - 21:22) Админ написал(а):
bulgakov
попов там ж видно

Спустя 2 минуты, 49 секунд (26.06.2011 - 21:25) neadekvat написал(а):
Боже, боже.
А где WHERE `login` = $login или хоть что-нибудь, что обращается к конкретной-единственной строке?

Спустя 35 секунд (26.06.2011 - 21:26) Админ написал(а):
Цитата
if($login==""){unset($login);}
if($password==""){unset($password);}

это зачем.

Спустя 2 минуты, 14 секунд (26.06.2011 - 21:28) bulgakov написал(а):
И еще много много вопросов зачем и почему к такому вроде небольшому кусочку кода... так тоже надо уметь, нет ну правда товарищ ТС даже желания взять ваш код и проанализировать нету... желание удалить все и переписать... хотя даже такого желания нету...

Спустя 49 секунд (26.06.2011 - 21:29) bulgakov написал(а):
Но все таки покажите кусочек кода который ложит данные в базу... поищите там где нибудь волшебное слово INSERT например....

Спустя 1 минута, 41 секунда (26.06.2011 - 21:30) neadekvat написал(а):
Ой, понял. Ты же всю базу перебираешь! Это ни в какие ворота.

А переменные он уничтожает, чтобы потом проверить их существование.

Спустя 1 минута, 13 секунд (26.06.2011 - 21:32) Serdg написал(а):
Цитата (bulgakov @ 26.06.2011 - 18:19)
Код какой-то дикий.... А покажите какие данные вы в базу записываете?

ну в базу записываются обычные логин пароль и электронный адрес, логин может состоять из английских букв и цифр и так же пароль и адрес эл. почты, записывается это в базу с помощью запроса
mysql_query("INSERT INTO users(login, password, email, md5) VALUES ('$login', '$password', '$email', '$cnfrm')");



а почему код дикий и какие в нём ошибки?
по поводу учебников, мне просто интересна тема создания сайтов и веб страничек и всё что с этим связано, но соответствующего образования нет, поэтому учу по различным самоучителям, начал учить PHP по книге "Энди Харрис - PHP MySQL для начинающих" и немного по курсам Попова, как раз MySQL запросы по его курсам!

заодно если не трудно подскажите какие лучше книги использовать для самообучения? ну может знаете толковые?

Спустя 38 секунд (26.06.2011 - 21:32) bulgakov написал(а):
Ну он не базу а все поля таблицы перебирает но так-как по его заявлению в базе одна таблица то можно считать что всю базу, а с переменными... я даже дар речи потерял правда...

Спустя 2 минуты, 13 секунд (26.06.2011 - 21:34) bulgakov написал(а):
Вот читаю тему и не пойму почему у меня ощущение что у него какой-то косяк с сессиями... но в этом коде ничего не вижу...

Спустя 2 минуты, 4 секунды (26.06.2011 - 21:36) bulgakov написал(а):
хм кстати а где session_start()? или просто не привели в коде? приведите полный код пожалуйста... а так же можете зайти в тему полезные ссылки, раздел - для новичков, там есть мой пост с сылкой на хорошую библиотечку книг и от других пользователей тоже ссылки. Ну и плюс в моей подписи последняя ссылка.

Спустя 16 секунд (26.06.2011 - 21:37) Serdg написал(а):
Цитата (Админ @ 26.06.2011 - 18:26)
Цитата
if($login==""){unset($login);}
if($password==""){unset($password);}

это зачем.

эти строчки нужны на тот случай если пользователь оставит поля логина и пароля пустыми!
если они пустые, то эти переменные удаляются. а дальше идёт проверка на существование переменных, если их нет, то пользователь не заполнил поля, если переменные существуют. то уже идёт продолжение работы скрипта и идёт проверка данных введёных пользователем с данными в базе данных

Спустя 1 минута, 29 секунд (26.06.2011 - 21:38) bulgakov написал(а):
Так стоп, стоп, стоп! Что это???


function proverka(){global $arr, $login, $password, $proverka, $mysql_select, // вот это что???
$_SESSION, $podtvergdenie; // и это??
while($arr=mysql_fetch_array($mysql_select)){
if(($login==trim($arr["login"])) AND ($password==trim($arr["password"])) AND
($podtvergdenie==trim($arr["podtvergdenie"]))){
$_SESSION["login"]=$arr["login"]; $proverka=TRUE;
} else {$proverka=false;}
}

return $proverka; }

Спустя 2 минуты, 2 секунды (26.06.2011 - 21:40) Serdg написал(а):
Цитата (bulgakov @ 26.06.2011 - 18:36)
хм кстати а где session_start()? или просто не привели в коде? приведите полный код пожалуйста... а так же можете зайти в тему полезные ссылки, раздел - для новичков, там есть мой пост с сылкой на хорошую библиотечку книг и от других пользователей тоже ссылки. Ну и плюс в моей подписи последняя ссылка.

спасибо, обязательно посмотрю!) а session_start() есть, я просто в примере не привёл его, а так всё нормально и сессия открывается!

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

Спустя 2 минуты, 22 секунды (26.06.2011 - 21:43) Serdg написал(а):
Цитата (neadekvat @ 26.06.2011 - 18:30)
Ой, понял. Ты же всю базу перебираешь! Это ни в какие ворота.

А переменные он уничтожает, чтобы потом проверить их существование.

он не может уничтожить переменные, они уничтожаются только если они содержат пустое значение, в противном случае переменные не уничтожаются

Спустя 19 секунд (26.06.2011 - 21:43) neadekvat написал(а):
В общем, решил, что указывать на ошибки там бессмысленно - реально все надо выкинуть и написать по-новой.

Не претендует на единственное верное решение (это в принципе каркас), но с этим хотя бы можно работать.
Разбирайтесь.
Читайте информацию о sql-запросах, об обработке данных для подстановки их в запросы, о том, как организовать авторизацию на сайте. Это то, что сразу в голову пришло.

// Вспомогательная функция
function login_error($msg)
{
return $msg .'<center><a href="enter.php" id="nazad">Назад</a></center>';
}


// expr ? true : false - это тернарный оператор
// mysql_real_escape_string - обязательно нужно использовать для данных,
// которые будут подставляться в запрос

$login = isset($_POST['login']) ? mysql_real_escape_string(trim($_POST['login'])) : null;
$password = isset($_POST['login']) ? mysql_real_escape_string(trim($_POST['login'])) : null;

if ( ! empty($login) AND ! empty($password)) {
$sql = "SELECT `login`, `password` FROM `users`
WHERE `login` = '
$login'";
$query = mysql_query($sql);
if (mysql_num_rows($query)) {
$arr = mysql_fetch_assoc($query);

if ($arr['password'] == $password) {
$_SESSION['login'] = $arr['login'];

echo "Вы успешно авторизовались!
Добро пожаловать на сайт,
<span id='nazad'>
$arr[login]</span>
<center><a href='index.php' id='nazad'>На главную</a></center>"
;
} else
echo login_error('Пароль введен неверно');
} else
echo login_error('Пользователь не существует');
} else
echo login_error('Логин и пароль не введены');

Спустя 4 минуты, 17 секунд (26.06.2011 - 21:47) bulgakov написал(а):

function proverka($login, $password, $proverka, $mysql_select, $podtvergdenie){
while($arr=mysql_fetch_array($mysql_select)){
if(($login==trim($arr["login"])) AND ($password==trim($arr["password"])) AND
($podtvergdenie==trim($arr["podtvergdenie"]))){
$_SESSION["login"]=$arr["login"]; $proverka=TRUE;
} else {$proverka=false;}
}

return $proverka; }

Может эту функцию попробуете так оформить?

Спустя 13 секунд (26.06.2011 - 21:47) Админ написал(а):



$login = (!isset($_POST['login'])) ? '' : $_POST['login'];
$password = (!isset($_POST['password'])) ? '' : $_POST['password'];

if(!empty($login) && !empty($password)){
$login=trim($login);
$password=trim($password);
$podtvergdenie="podtvergdeno";

include_once("add/conect.php");
$mysql_select=mysql_query("SELECT * FROM `users` WHERE `login`='$login' AND `password` = '$password'");

if (mysql_num_rows ($mysql_select) > 1){echo "Вы успешно авторизовались!
Добро пожаловать на сайт <span id='nazad'>"
.$_SESSION["login"]."
</span>
<center><a href='index.php' id='nazad'>На главную</a></center>"
;}
else {echo "Вы ввели неверный логин или пароль!
<center><a href='enter.php' id='nazad'>Назад</a></center>"
;}}
else {echo "Вы заполнили не все поля!
<center><a href='enter.php' id='nazad'>Назад</a></center>"
;}


самое простое и доходчивое не пинать всякие валидаторы и прочее лень

Спустя 5 минут, 30 секунд (26.06.2011 - 21:53) neadekvat написал(а):
Админ, ага, и сразу ошибок куча.
Например:
Цитата (Админ @ 26.06.2011 - 22:47)
mysql_num_rows ($mysql_select) > 1

Если такое случилось - то это нифига не "авторизация успешна", это значит, что в базе как минимум два человека с одинаковыми никами и паролями.

Спустя 2 минуты, 53 секунды (26.06.2011 - 21:56) Админ написал(а):
Цитата
Если такое случилось - то это нифига не "авторизация успешна", это значит, что в базе как минимум два человека с одинаковыми никами и паролями.

такого вообще быть не должно

Спустя 1 минута, 6 секунд (26.06.2011 - 21:57) neadekvat написал(а):
Цитата (Админ @ 26.06.2011 - 22:56)
такого вообще быть не должно

Да, не должно. Посмотри на свой код. Аутентификация не пройдет даже при верных данных.

Спустя 12 секунд (26.06.2011 - 21:57) Serdg написал(а):
нет, ребят, это всё понятно, что с оформлением и смекалкой у меня щас неочень, я только только, можно сказать, начал всё это учить, дело то в том что мой код, хоть и безобразный, но он работает, и всё нормально, если бы в нём были бы критические ошибки, то он бы с самого начала не хотел бы работать и с самого начала выдавал бы что вводимые данные не совпадают с теми, которые в базе, но он работает а потом вдруг внезапно, вот например на хост когда я его перенёс, попробовал зарегиться, всё успешно, попробовал зайти под своим логин паролем, всё супер всё заходит, и так каждый день, а потом в один прекрасный день, примерно через неделю, он берёт и пишет, что несовпадают данные, как такое возможно? тем более что изменений я в этот код либо ещё куда не вносил!

или это всё из-а моих корявых запросов в коде? тогда непонятно почему они поначалу хорошо работают

Спустя 2 минуты (26.06.2011 - 21:59) Админ написал(а):
neadekvat
это почему ?

Спустя 29 секунд (26.06.2011 - 22:00) neadekvat написал(а):
Serdg, я не просто так взял и переделал полностью твой код. Просто он работал по неверному принципу.
Представь, что тебя позвали помочь достроить будку для собаки: течет она что-то, и сквозняк там - ты приходишь, смотришь и понимаешь, что вот в этом случаи проще просто сломать и сделать заново.
Это твой твой случай.
Откажись от принципа "работает - и ладно" прямо сейчас, это бич многих программистов.

Спустя 37 секунд (26.06.2011 - 22:00) neadekvat написал(а):
Цитата (Админ @ 26.06.2011 - 22:59)
это почему ?

Я же сказал:
Цитата (neadekvat @ 26.06.2011 - 22:53)
Если такое случилось - то это нифига не "авторизация успешна", это значит, что в базе как минимум два человека с одинаковыми никами и паролями.

Как мне еще тебе объяснить, что истино твое условие будет только в случаи, который невозможен?
Представь, что данные верные, то есть под условие подходит одна строка. И что у тебя остается в чистом виде?
if (1 > 1)
А разве один больше одного?

Спустя 3 минуты, 2 секунды (26.06.2011 - 22:03) Админ написал(а):
neadekvat
снимаю шляпу - нда надо было => 1 или == 1-> дак сёдня выходной - причём слова феноменально ленив- ко мне тож относятся
много слабого алкоголя приводят к расфокусировке внимания

Спустя 6 секунд (26.06.2011 - 22:03) Serdg написал(а):
Цитата (neadekvat @ 26.06.2011 - 19:00)
Serdg, я не просто так взял и переделал полностью твой код. Просто он работал по неверному принципу.
Представь, что тебя позвали помочь достроить будку для собаки: течет она что-то, и сквозняк там - ты приходишь, смотришь и понимаешь, что вот в этом случаи проще просто сломать и сделать заново.
Это твой твой случай.
Откажись от принципа "работает - и ладно" прямо сейчас, это бич многих программистов.

ок, ещё раз большое спасибо, попробую всё переписать и заодно поучить правильное оформление!) надеюсь всё получится!)

Спустя 1 минута, 48 секунд (26.06.2011 - 22:05) Serdg написал(а):
ребят, всем большое спасибо за участие и объяснения!

Спустя 37 секунд (26.06.2011 - 22:06) neadekvat написал(а):
Цитата (Админ @ 26.06.2011 - 23:03)
нда надо было => 1

Нет, надо ==

Цитата (Serdg @ 26.06.2011 - 23:03)
надеюсь всё получится!)

Надеюсь, ты показался мне доходчивым.

Цитата (Serdg @ 26.06.2011 - 23:03)
заодно поучить правильное оформление

Существуют стандарты кодирования, которые описывают, какие и где делать отсупты и прочее. Если же ты работаешь на себя (а в не в компании, где они уже выработны), то можешь выработать свой на основе существующий.

Спустя 2 минуты, 38 секунд (26.06.2011 - 22:08) Админ написал(а):
или == 1
дописывал не видя твоего поста rolleyes.gif

Спустя 3 минуты, 27 секунд (26.06.2011 - 22:12) neadekvat написал(а):
Цитата (Админ @ 26.06.2011 - 23:08)
или == 1

Тут именно == , а не "или ==", потому что "=>" по сути описывает ошибочную ситуацию, которой не должно возникнуть. Зачем заносить в код заведомо невозможные ситуации? Все должно быть максимально четко, конкретизированно.

Спустя 4 минуты, 5 секунд (26.06.2011 - 22:16) Админ написал(а):
neadekvat
да ладно ну ошибочка вышла. Я хотел суть передать. А вообще в подписи есть картинка, характерезующая уровень моей квалификации. Ну и 6ая банка дизеля сказывается

Спустя 2 минуты, 27 секунд (26.06.2011 - 22:18) neadekvat написал(а):
Цитата (Админ @ 26.06.2011 - 23:16)
да ладно ну ошибочка вышла. Я хотел суть передать.

Ты считаешь, что учиться на этом форуме могут только те, кто создает темы? Участие в обсуждениях должно быть полезным. Внемли, так сказать, о чем я говорю и прими на вооружение.
Я, к слову, тут тоже кое-чему учусь, а не сижу из желания поумничать, как многие думают.

Спустя 4 минуты, 46 секунд (26.06.2011 - 22:23) Админ написал(а):
Цитата
Ты считаешь, что учиться на этом форуме могут только те, кто создает темы

я вообще считать не умею - у меня образование 8 классов. Не психуй. и никто не умничает - я ошибся - ошибку признал. давай без холиваров (хотя иногда поднимают настроение)

Спустя 2 минуты, 20 секунд (26.06.2011 - 22:26) neadekvat написал(а):
Цитата (Админ @ 26.06.2011 - 23:23)
я вообще считать не умею - у меня образование 8 классов.

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

Цитата (Админ @ 26.06.2011 - 23:23)
Не психуй

Это ирония, там должен был быть смайлик, просто я про них как-то забываю.

Цитата (Админ @ 26.06.2011 - 23:23)
и никто не умничает - я ошибся - ошибку признал.

Я сейчас не про ошибку говорю - это со всеми бывает.
Я про "==", "=>" и логику. Но это уже мой педантизм во мне говорит.

Спустя 3 минуты, 35 секунд (26.06.2011 - 22:29) Winston написал(а):
Цитата (Админ @ 26.06.2011 - 22:03)
=>

blink.gif Где такую запись видели ?
Вообще то так пишется >= smile.gif

Спустя 1 минута, 20 секунд (26.06.2011 - 22:30) neadekvat написал(а):
Цитата (PHPprogramer @ 26.06.2011 - 23:29)
Где такую запись видели ?
Вообще то так пишется >=

Во, блин, думаю, почему у меня значок "следовательно" постоянно получается, хотя обычно такого ощущения нет.

Спустя 3 минуты, 14 секунд (26.06.2011 - 22:34) Админ написал(а):
neadekvat
да правильно всё. я знаю как всё это правильно писать. И я тож не люблю расплывчивости и не логичности. Математика точная наука. Про смайлики я тож забываю. И я тож иногда педант.
про 8 классов я не наврал - то что я знаю только моя заслуга. Потому раздражают люди которые ломятся на форум с вопросами, не желая тратить время на анализ своей писанины (общее замечание) - и програмирование это для меня хобби. для души.

Спустя 4 минуты, 4 секунды (26.06.2011 - 22:38) Админ написал(а):
Цитата
почему у меня значок "следовательно" постоянно получается

короче все лоханулись - действительно правильно >=
Быстрый ответ:

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