За последние 24 часа нас посетили 19157 программистов и 1641 робот. Сейчас ищут 962 программиста ...

Авторизация, мой блин.

Тема в разделе "PHP для новичков", создана пользователем gra4, 21 апр 2010.

Статус темы:
Закрыта.
  1. gra4

    gra4 Активный пользователь

    С нами с:
    9 сен 2009
    Сообщения:
    12
    Симпатии:
    0
    Граждане, попробовал написать простенькую авторизацию, ткните носом в дырки и недочеты. Ну и, может, кому поможет :lol:
    index.php
    PHP:
    1.  
    2. <?php
    3. require_once "sql.php";
    4. require_once "funcs.php";
    5. $sql = new class_mysql;
    6. $sql->sql_connect();
    7.  
    8. //АВТОРИЗАЦИЯ
    9. if($_GET['act']=="login"){
    10.     $login = htmlspecialchars(stripslashes($_POST['login']));
    11.     $pass =  md5($_POST['pass']. "солим_раз");
    12.     $sql->sql_query = "SELECT * FROM user WHERE user_login='$login' and user_pass='$pass'";
    13.     $sql->sql_execute();
    14.     if(mysql_num_rows($sql->sql_res)>0){
    15.         session_register();
    16.         $_SESSION['login'] = $login;
    17.         $_SESSION['code'] = md5($login."солим_два".$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']);
    18.         update_session($login,$_SESSION['code']);
    19.     }
    20.  
    21. }
    22. if($_GET['act']=="logout"){
    23.     delete_session($_SESSION['login'],$_SESSION['code']);
    24.     session_unset();
    25.     $_SESSION = array();
    26.     header("Location: [url=http://]http://[/url]".$_SERVER['HTTP_HOST']."/n/index.php");
    27. }
    28. if(!$_SESSION['login'] or !$_SESSION['code'] or (md5($_SESSION['login']."солим_два".$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']) != $_SESSION['code'])){
    29.     echo "<div id=form><form  name='logForm' action='index.php?act=login' method='post'>
    30.            Please enter ur login<br> <input name='login' type='text' value=''><br>
    31.            and password<br> <input name='pass' type='text' value=''><br>
    32.            <input type='submit' value='Send'>
    33.        </form></div>";
    34.     die();
    35. }
    36. //АВТОРИЗАЦИЯ
    37. ?>
    38.  
    funcs.php
    PHP:
    1.  
    2. <?php
    3. function update_session($login,$code){
    4.     global $sql;
    5.     $sql->sql_query = "SELECT * FROM `session` WHERE `session_login` = '$login'";
    6.     $sql->sql_execute();
    7.     if(mysql_num_rows($sql->sql_res)>0){
    8.         $sql->sql_query = "UPDATE `session` SET `session_date` = NOW(), `session_code` = '$code'  WHERE `session_login`='$login'";
    9.     }else{
    10.         $sql->sql_query = "INSERT INTO `session` VALUES('$login', NOW(),'$code')";
    11.     }
    12.     $sql->sql_execute();
    13. }
    14. ?>
    15.  
    С базой, думается, и так все понятно. Спасибо за внимание.
     
  2. vuzy

    vuzy Активный пользователь

    С нами с:
    11 мар 2010
    Сообщения:
    199
    Симпатии:
    0
    Адрес:
    киев
    Где точки? Может в последних версиях и допускается их не ставить но я бы на месте SQL посылыл бы такие запросы по известному адресу.

    А так с виду все правильно в чем конкретно заключается вопрос?
     
  3. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Экранирование есть?
     
  4. gra4

    gra4 Активный пользователь

    С нами с:
    9 сен 2009
    Сообщения:
    12
    Симпатии:
    0
    vuzy
    Какие точки?
    Вопрос в том, что на php раньше почти не писал, интересуюсь, говнокод получается или нет, собственно)
    Elkaz
    PHP:
    1. $login = htmlspecialchars(stripslashes($_POST['login']));
    , вроде больше нигде данных со стороны не приходит.
     
  5. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Читаем хотя бы это http://content-management-systems.info/node/1039
    $sql->sql_query = "SELECT * FROM `user` WHERE `user_login` = '".$login."' AND `user_pass` = '".$pass;
    и пароль проверить. Остальное не смотрел.
     
  6. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Какие точки?
     
  7. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Кто здесь?
     
  8. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Ну и че ты щас написал?
    Нахрена делать конкатенацию строк, если человек спокойно вставляет в строку переменную и это абсолютно допустимо для РНР?
     
  9. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Apple
    1. <? ?>
    2. print_f для вывода через "ж"
    3. do while
    на вскидку - это тоже все "абсолютно допустимо для РНР".
     
  10. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Тут не обсуждается Попов - это раз.
    Во-вторых ты написал полнейший говнокод, причем поднасрав в него ещё точками.
    Помедитируй и сообрази, что на что заменить, чтобы твой код оправдал себя.

    ЗЫ: и не print_f, а printf
    Полезнейшая штука, если к месту!
     
  11. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Apple
    Быкануть решил чтоли?
    За свой код мне не стыдно, могу даже хвастаться, потому как вставлять mysql_real_escape_string или что другое при надобности в моем случае куда удобней будет, чем все заново переписывать, если бы "спокойно вставляет в строку переменную" там была вставлена просто переменная. Медитируй над ответом.
     
  12. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Парень, ты выёбываешься с кодом, за который должно быть не просто стыдно.
    Твой вариант абсолютно ничем не отличается от варианта автора, и уж лучше он тем более не стал, только хуже.
    Кроме того, самое отвратительное - это экранировать строки напряую в запросах.
    Все строки должны быть заранее проверены и обработаны, и запросы вида
    PHP:
    1. <?php
    2.  
    3. mysql_query("SELECT * FROM `table` WHERE `name` = '" . mysql_real_escape_string( ...
    4.  
    5. ?>
    неприемлимы.
    Об это всегда писали и пишут.
    Есть такая вещь - "стиль написания програмного кода" называется.
    Ты можешь хоть лопнуть и стать из оранжевого красным, но твой вариант говно и спорить с этим бесполезно.
    Лучше потрать своё время и поищи информацию по красивому написанию кода.
    Может откроешь ещё для себя и плейсхолдеры, и то, что printf полезен там, где надо.

    И свою больную реакцию на всё подлечи.
    Твой код - говно, прими это как должное.
     
  13. gra4

    gra4 Активный пользователь

    С нами с:
    9 сен 2009
    Сообщения:
    12
    Симпатии:
    0
    Друзья, не ругайтесь)

    Апельсин, где в моем коде использовать цикл и зачем?) И для чего здесь printf вместо echo?


    Apple, а он тут причем?)
     
  14. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Два его примера выше - поповский код.
    В общем случае просто не бери в голову, это он в оправдание своего недокода сказал =)
     
  15. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Apple
    ))))) Ну типа попытка подразнить засчитана)))
    Еще один учитель нашелся. Ты сам себе противоречишь - ибо запрос "SELECT * FROM user WHERE user_login='$login' and user_pass='$pass'"; и так содержит кучу "ошибок" в плане корректности твоей невидимой теории красоты кода, так как имена таблиц и полей обрамляются обратным апострофом. Это во-первых.
    2. Не рассказывай мне тут свое субьективное мнение что и в какой момент должно быть заэкранировано. Это все, как ТЫ САМ СКАЗАЛ "абсолютно допустимо для РНР". Я не ставляю пять функция в запрос, чтоб в этом видеть говнокод.
    3. Еще третий раз мне про printf повтори, то я первых два раза не смог прочитать.
     
  16. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    gra4
    Это не к твоему коду, а относительно бредовых слов "абсолютно допустимо для РНР".

    Apple
    Баба не дала сегодня чтоли?
    Продолжай в том же духе обобщать говнокодом все то, чего твои кривые руки не научились делать, меня это забавляет.
     
  17. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    И поэтому напишем другой вариант, который содержит их не меньше?
    Логика ясна, дальнейший диалог бесполезен.

    Допустимо многое, только один человек воспользуется свободой и будет срать, а другой, воспользуясь той же свободой, творить. В этом-то и разница.
    Сейчас я вижу огромный кусок говна, который ещё хуже кода автора темы.
    Замена банана на банан не даст нам грушу. Никогда.

    Бедненький ^__^
     
  18. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Даже кривыми руками можно писать красивый код, а вот кривому мозгу, увы .. бесполезно даже объяснять это.
    Сидишь в своём дримвьювере, лацкаешь ковнокод и ещё споришь.
    Вот когда напишешь что-то стоящее, вот тогда я тебя и выслушаю, а сейчас я не буду тратить время на эти больные вопли очередного школьника-говнокодера.
     
  19. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Были б мозги у автора этого сообщения, он бы, наверно, знал, что выражение "кривые руки" в народном обиходе не несет прямого контекста и имеет ввиду некое неумение человека к чему-либо. Но это так.. как ты говорил - в свободное время почитаешь.
    Я бы согласился с этим, если бы были названы обьективные причины для того, а не чтото типа "я так считаю, я так слышал".
    Кстати, что там по-поводу printf? Что это такое? Функция чтоли? Серьезно?????
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Апельсин, ты б чтоль бабу завел. Это ж детский раздел форума.
    Ну объяслин был свою позицию нормально сразу, не было бы срача. Зачем такие извратные самоутвержения?
     
  21. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну так чем плоха запись без точек, товарищ Апельсиновый?
     
  23. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    igordata
    Уж меня так учебники учили, а не вот выше отписавшийся оратор.
    И если следовать правилу "красоты" кода - то переменная в тексте, вставленная моим способом, куда более наглядна и легко находима в коде.
     
  24. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Вопрос изначально был не в том, чем запись БЕЗ конкатенации строк плоха.
    Вопрос заключался в том, чем лучше запись С неуместной конкатенацией строк.
    Любая IDE, предназначенная для РНР, умеет очень хорошо выделять inline-переменные в строках.
    Замена одного на другое, причем с таким выпердежом, что моё блин лучше и сосите все, — обычная реакция людей, которые может быть и понимают, что их код гавно, но их самолюбие не даёт им в этом признаться.
    Увы, таких идиотов на каждом шагу полно, так что лучше дать им наслаждаться своей самоуверенностью, чем что-то объяснять. Главное - другых бы не брались учить.
    Экранирование строк с конкатенацией результата ещё хуже (в тысячи раз), нежели обычное экранирование с последующим встраиванием переменных в строку.
    Когда уместно - да ради Бога, встраивайте, конкатенируйте и будьте счастливы.
    Или пишите код для себя, и пишите его так как хотите, не уча при этом других.
    Но человек даже не может понять чем оно хуже, а бросается в пляс.
    Как говорится: "не зная броду не лезь в воду".
     
  25. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Apple
    Какое самолюбие, дурик?))
    Приведенным своим вариантом я пользуюсь всегда, а не конкретно для этого сообщения решил "повыпендриваться". Это ты тут решил гения показать из себя, высосав из пальца свою теорию "красоты" кода, известную одному тебе.
    В блокнот вставь, который так любят true программеры - посмотрю как у тебя подсветит. Тем не менее - мой вариант более будет легче отыскать в большом куске. А если запись без точек и с точками - не имеет синтаксических ошибок, и тем самым не имеет кардинальных отличий для пхп - то дело лишь в визуализации для себя любимого, чтобы было легче читать такой код. Твой говнокод с кучей невыделяемых переменных может читать только такой говнокодер как и ты.
    Лепить текст и переменные в одну кучу - такого я еще не слышал. Это правила "хорошего этикета" 2010 для программиста?? Давай еще в одну строку весь код писать, один хрен для пхп, всеравно поймет. Клоун.
     
Статус темы:
Закрыта.