Спустя 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 или хоть что-нибудь, что обращается к конкретной-единственной строке?
А где 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) | ||
это зачем. |
эти строчки нужны на тот случай если пользователь оставит поля логина и пароля пустыми!
если они пустые, то эти переменные удаляются. а дальше идёт проверка на существование переменных, если их нет, то пользователь не заполнил поля, если переменные существуют. то уже идёт продолжение работы скрипта и идёт проверка данных введёных пользователем с данными в базе данных
Спустя 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-запросах, об обработке данных для подстановки их в запросы, о том, как организовать авторизацию на сайте. Это то, что сразу в голову пришло.
Не претендует на единственное верное решение (это в принципе каркас), но с этим хотя бы можно работать.
Разбирайтесь.
Читайте информацию о 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-> дак сёдня выходной - причём слова феноменально ленив- ко мне тож относятся
много слабого алкоголя приводят к расфокусировке внимания
снимаю шляпу - нда надо было => 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
дописывал не видя твоего поста
дописывал не видя твоего поста
Спустя 3 минуты, 27 секунд (26.06.2011 - 22:12) neadekvat написал(а):
Цитата (Админ @ 26.06.2011 - 23:08) |
или == 1 |
Тут именно == , а не "или ==", потому что "=>" по сути описывает ошибочную ситуацию, которой не должно возникнуть. Зачем заносить в код заведомо невозможные ситуации? Все должно быть максимально четко, конкретизированно.
Спустя 4 минуты, 5 секунд (26.06.2011 - 22:16) Админ написал(а):
neadekvat
да ладно ну ошибочка вышла. Я хотел суть передать. А вообще в подписи есть картинка, характерезующая уровень моей квалификации. Ну и 6ая банка дизеля сказывается
да ладно ну ошибочка вышла. Я хотел суть передать. А вообще в подписи есть картинка, характерезующая уровень моей квалификации. Ну и 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) |
=> |
Где такую запись видели ?
Вообще то так пишется >=
Спустя 1 минута, 20 секунд (26.06.2011 - 22:30) neadekvat написал(а):
Цитата (PHPprogramer @ 26.06.2011 - 23:29) |
Где такую запись видели ? Вообще то так пишется >= |
Во, блин, думаю, почему у меня значок "следовательно" постоянно получается, хотя обычно такого ощущения нет.
Спустя 3 минуты, 14 секунд (26.06.2011 - 22:34) Админ написал(а):
neadekvat
да правильно всё. я знаю как всё это правильно писать. И я тож не люблю расплывчивости и не логичности. Математика точная наука. Про смайлики я тож забываю. И я тож иногда педант.
про 8 классов я не наврал - то что я знаю только моя заслуга. Потому раздражают люди которые ломятся на форум с вопросами, не желая тратить время на анализ своей писанины (общее замечание) - и програмирование это для меня хобби. для души.
да правильно всё. я знаю как всё это правильно писать. И я тож не люблю расплывчивости и не логичности. Математика точная наука. Про смайлики я тож забываю. И я тож иногда педант.
про 8 классов я не наврал - то что я знаю только моя заслуга. Потому раздражают люди которые ломятся на форум с вопросами, не желая тратить время на анализ своей писанины (общее замечание) - и програмирование это для меня хобби. для души.
Спустя 4 минуты, 4 секунды (26.06.2011 - 22:38) Админ написал(а):
Цитата |
почему у меня значок "следовательно" постоянно получается |
короче все лоханулись - действительно правильно >=