Граждане, попробовал написать простенькую авторизацию, ткните носом в дырки и недочеты. Ну и, может, кому поможет :lol: index.php PHP: <?php session_start(); require_once "sql.php"; require_once "funcs.php"; $sql = new class_mysql; $sql->sql_connect(); //АВТОРИЗАЦИЯ if($_GET['act']=="login"){ $login = htmlspecialchars(stripslashes($_POST['login'])); $pass = md5($_POST['pass']. "солим_раз"); $sql->sql_query = "SELECT * FROM user WHERE user_login='$login' and user_pass='$pass'"; $sql->sql_execute(); if(mysql_num_rows($sql->sql_res)>0){ session_register(); $_SESSION['login'] = $login; $_SESSION['code'] = md5($login."солим_два".$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']); update_session($login,$_SESSION['code']); } } if($_GET['act']=="logout"){ delete_session($_SESSION['login'],$_SESSION['code']); session_unset(); session_destroy(); $_SESSION = array(); header("Location: [url=http://]http://[/url]".$_SERVER['HTTP_HOST']."/n/index.php"); } if(!$_SESSION['login'] or !$_SESSION['code'] or (md5($_SESSION['login']."солим_два".$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']) != $_SESSION['code'])){ echo "<div id=form><form name='logForm' action='index.php?act=login' method='post'> Please enter ur login<br> <input name='login' type='text' value=''><br> and password<br> <input name='pass' type='text' value=''><br> <input type='submit' value='Send'> </form></div>"; die(); } //АВТОРИЗАЦИЯ ?> funcs.php PHP: <?php function update_session($login,$code){ global $sql; $sql->sql_query = "SELECT * FROM `session` WHERE `session_login` = '$login'"; $sql->sql_execute(); if(mysql_num_rows($sql->sql_res)>0){ $sql->sql_query = "UPDATE `session` SET `session_date` = NOW(), `session_code` = '$code' WHERE `session_login`='$login'"; }else{ $sql->sql_query = "INSERT INTO `session` VALUES('$login', NOW(),'$code')"; } $sql->sql_execute(); } ?> С базой, думается, и так все понятно. Спасибо за внимание.
Где точки? Может в последних версиях и допускается их не ставить но я бы на месте SQL посылыл бы такие запросы по известному адресу. А так с виду все правильно в чем конкретно заключается вопрос?
vuzy Какие точки? Вопрос в том, что на php раньше почти не писал, интересуюсь, говнокод получается или нет, собственно) Elkaz PHP: $login = htmlspecialchars(stripslashes($_POST['login'])); , вроде больше нигде данных со стороны не приходит.
Читаем хотя бы это http://content-management-systems.info/node/1039 $sql->sql_query = "SELECT * FROM `user` WHERE `user_login` = '".$login."' AND `user_pass` = '".$pass; и пароль проверить. Остальное не смотрел.
Ну и че ты щас написал? Нахрена делать конкатенацию строк, если человек спокойно вставляет в строку переменную и это абсолютно допустимо для РНР?
Apple 1. <? ?> 2. print_f для вывода через "ж" 3. do while на вскидку - это тоже все "абсолютно допустимо для РНР".
Тут не обсуждается Попов - это раз. Во-вторых ты написал полнейший говнокод, причем поднасрав в него ещё точками. Помедитируй и сообрази, что на что заменить, чтобы твой код оправдал себя. ЗЫ: и не print_f, а printf Полезнейшая штука, если к месту!
Apple Быкануть решил чтоли? За свой код мне не стыдно, могу даже хвастаться, потому как вставлять mysql_real_escape_string или что другое при надобности в моем случае куда удобней будет, чем все заново переписывать, если бы "спокойно вставляет в строку переменную" там была вставлена просто переменная. Медитируй над ответом.
Парень, ты выёбываешься с кодом, за который должно быть не просто стыдно. Твой вариант абсолютно ничем не отличается от варианта автора, и уж лучше он тем более не стал, только хуже. Кроме того, самое отвратительное - это экранировать строки напряую в запросах. Все строки должны быть заранее проверены и обработаны, и запросы вида PHP: <?php mysql_query("SELECT * FROM `table` WHERE `name` = '" . mysql_real_escape_string( ... ?> неприемлимы. Об это всегда писали и пишут. Есть такая вещь - "стиль написания програмного кода" называется. Ты можешь хоть лопнуть и стать из оранжевого красным, но твой вариант говно и спорить с этим бесполезно. Лучше потрать своё время и поищи информацию по красивому написанию кода. Может откроешь ещё для себя и плейсхолдеры, и то, что printf полезен там, где надо. И свою больную реакцию на всё подлечи. Твой код - говно, прими это как должное.
Друзья, не ругайтесь) Апельсин, где в моем коде использовать цикл и зачем?) И для чего здесь printf вместо echo? Apple, а он тут причем?)
Два его примера выше - поповский код. В общем случае просто не бери в голову, это он в оправдание своего недокода сказал =)
Apple ))))) Ну типа попытка подразнить засчитана))) Еще один учитель нашелся. Ты сам себе противоречишь - ибо запрос "SELECT * FROM user WHERE user_login='$login' and user_pass='$pass'"; и так содержит кучу "ошибок" в плане корректности твоей невидимой теории красоты кода, так как имена таблиц и полей обрамляются обратным апострофом. Это во-первых. 2. Не рассказывай мне тут свое субьективное мнение что и в какой момент должно быть заэкранировано. Это все, как ТЫ САМ СКАЗАЛ "абсолютно допустимо для РНР". Я не ставляю пять функция в запрос, чтоб в этом видеть говнокод. 3. Еще третий раз мне про printf повтори, то я первых два раза не смог прочитать.
gra4 Это не к твоему коду, а относительно бредовых слов "абсолютно допустимо для РНР". Apple Баба не дала сегодня чтоли? Продолжай в том же духе обобщать говнокодом все то, чего твои кривые руки не научились делать, меня это забавляет.
И поэтому напишем другой вариант, который содержит их не меньше? Логика ясна, дальнейший диалог бесполезен. Допустимо многое, только один человек воспользуется свободой и будет срать, а другой, воспользуясь той же свободой, творить. В этом-то и разница. Сейчас я вижу огромный кусок говна, который ещё хуже кода автора темы. Замена банана на банан не даст нам грушу. Никогда. Бедненький ^__^
Даже кривыми руками можно писать красивый код, а вот кривому мозгу, увы .. бесполезно даже объяснять это. Сидишь в своём дримвьювере, лацкаешь ковнокод и ещё споришь. Вот когда напишешь что-то стоящее, вот тогда я тебя и выслушаю, а сейчас я не буду тратить время на эти больные вопли очередного школьника-говнокодера.
Были б мозги у автора этого сообщения, он бы, наверно, знал, что выражение "кривые руки" в народном обиходе не несет прямого контекста и имеет ввиду некое неумение человека к чему-либо. Но это так.. как ты говорил - в свободное время почитаешь. Я бы согласился с этим, если бы были названы обьективные причины для того, а не чтото типа "я так считаю, я так слышал". Кстати, что там по-поводу printf? Что это такое? Функция чтоли? Серьезно?????
Апельсин, ты б чтоль бабу завел. Это ж детский раздел форума. Ну объяслин был свою позицию нормально сразу, не было бы срача. Зачем такие извратные самоутвержения?
Еще один спец на горизонт вышел. http://www.php.ru/forum/viewtopic.php?p=211593#211593 Все уже было мной обьяснено.
igordata Уж меня так учебники учили, а не вот выше отписавшийся оратор. И если следовать правилу "красоты" кода - то переменная в тексте, вставленная моим способом, куда более наглядна и легко находима в коде.
Вопрос изначально был не в том, чем запись БЕЗ конкатенации строк плоха. Вопрос заключался в том, чем лучше запись С неуместной конкатенацией строк. Любая IDE, предназначенная для РНР, умеет очень хорошо выделять inline-переменные в строках. Замена одного на другое, причем с таким выпердежом, что моё блин лучше и сосите все, — обычная реакция людей, которые может быть и понимают, что их код гавно, но их самолюбие не даёт им в этом признаться. Увы, таких идиотов на каждом шагу полно, так что лучше дать им наслаждаться своей самоуверенностью, чем что-то объяснять. Главное - другых бы не брались учить. Экранирование строк с конкатенацией результата ещё хуже (в тысячи раз), нежели обычное экранирование с последующим встраиванием переменных в строку. Когда уместно - да ради Бога, встраивайте, конкатенируйте и будьте счастливы. Или пишите код для себя, и пишите его так как хотите, не уча при этом других. Но человек даже не может понять чем оно хуже, а бросается в пляс. Как говорится: "не зная броду не лезь в воду".
Apple Какое самолюбие, дурик?)) Приведенным своим вариантом я пользуюсь всегда, а не конкретно для этого сообщения решил "повыпендриваться". Это ты тут решил гения показать из себя, высосав из пальца свою теорию "красоты" кода, известную одному тебе. В блокнот вставь, который так любят true программеры - посмотрю как у тебя подсветит. Тем не менее - мой вариант более будет легче отыскать в большом куске. А если запись без точек и с точками - не имеет синтаксических ошибок, и тем самым не имеет кардинальных отличий для пхп - то дело лишь в визуализации для себя любимого, чтобы было легче читать такой код. Твой говнокод с кучей невыделяемых переменных может читать только такой говнокодер как и ты. Лепить текст и переменные в одну кучу - такого я еще не слышал. Это правила "хорошего этикета" 2010 для программиста?? Давай еще в одну строку весь код писать, один хрен для пхп, всеравно поймет. Клоун.