За последние 24 часа нас посетили 49802 программиста и 1729 роботов. Сейчас ищут 798 программистов ...

(PHP+MySQL)Прокоментируйте код.

Тема в разделе "PHP для новичков", создана пользователем alexander.pro, 11 июл 2008.

  1. alexander.pro

    alexander.pro Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Г. Кострома
    Пожалуйста прокоментируйте готовый код системы регистрации.Напишите, что лишнее, а что нужно добавить.
    Вот код:
    PHP:
    1.  
    2. <?php
    3. //Удаляем пробелы,слеши,символы//
    4. $nik = trim(strtolower(htmlspecialchars(stripcslashes(@$_GET['nik']))));
    5. $name = trim(strtolower(htmlspecialchars(stripcslashes(@$_GET['name']))));
    6. $password = trim(strtolower(htmlspecialchars(stripcslashes(@$_GET['passw']))));
    7. //Проверяем форму если одна из трёх пуста, записываем в массив//
    8. if (empty($regform)){
    9. if (empty($nik)){ $u_mass[] = "Ник"; }
    10. if (empty($name)){ $u_mass[] = "Имя пользователя"; }
    11. if (empty($password)){ $u_mass[] = "Пароль"; }}
    12. if (empty($u_mass)){ $m_status = 1; } else { $m_status = 0; }
    13. //Проверяем существует ли массив если нет, то//
    14. if ($m_status == 0){ echo ("Пожалуйста заполните форму: ");
    15. for ($i=0;$i<count($u_mass);$i++){ echo ("$u_mass[$i] "); }}
    16. //Соединяемся с базой данных и проверяем данные//
    17. else { echo ("Все поля формы заполнены.<br>");
    18. $connect = mysql_connect ("localhost","root");
    19. $data = mysql_select_db ("portal");
    20. $string = mysql_query("select*from client");
    21. $num = mysql_num_rows($string);
    22. $t_nik = mysql_query("select*from client where nik ='$nik'");
    23. $r_nik = mysql_fetch_array($t_nik);
    24. if (!$r_nik > 0){
    25. $num = $num+1;
    26. $contact = ("$nik@portal.ru");
    27. $rec = "insert into client (c_no,nik,name,email,passw) values ('".$num."','".$nik."','".$name."','".$contact."','".$password."')";
    28. $result = mysql_query($rec); if ($result) { echo ("Успешно добавлен");}}
    29. else { echo ("Пользователь с таким ником уже существует.<br><a href = inst.php>Правила регистрации.</a>");}
    30. ?>
    31.  
     
  2. dAllonE

    dAllonE Guest

    Код подсвечивайте, пожалуйста.

    Нечего заморачиваться с этим
    PHP:
    1. <?php $password = trim(strtolower(htmlspecialchars(stripcslashes(@$_GET['passw'])))); ?>
    и хранить пароль в открытом виде. Лучше, ИМХО, хранить md5 хэш с солью.

    Форматирование кода не очень.

    Я обычно пишу в ООП стиле, но даже если Вам по душе процедурный, по моему, лучше все же вынести конект к БДв отдельный файл и инклюдить его. Вынести в отдельную функцию проверку формы, в отдельную добавление пользователя, а в самом файле на который ссылается скрипт только выводить данные.

    не совсем понимаю, чего вы хотите добиться данным действием:
    PHP:
    1. <?php $nik = trim(strtolower(htmlspecialchars(stripcslashes(@$_GET['nik'])))); ?>
    Зачем тут stripslashes поясните пожалуйста. И вообще данные лучше хранить в чистом виде, просто пропустите через mysql_escape_string();, а уже на выходе запускайте htmlspecialchars что бы не XSS-ли. Или же вообще жестко задайте допустимый набор символов для имени/ника.

    ....$name = trim(strtolower(....
    А если у меня имя начинается с Большой буквы, что мне делать?


    Ну и т.д.

    P.S. еще раз повторюсь, что код нечитабелен. ;)
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. <?
    2. $nik=(isset($_GET['nik'])?trim(strtolower(htmlspecialchars(stripcslashes($_GET['nik'])))):null);
    Использование собачек - дурной тон ;)
     
  4. alexander.pro

    alexander.pro Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Г. Кострома
    Просто мне хотелось избежать так называемой путаницы.чтобы небыло одинаковых по смыслу но разных по регистру ников.
     
  5. alexander.pro

    alexander.pro Активный пользователь

    С нами с:
    11 июл 2008
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Г. Кострома
    Всем спасибо!
     
  6. dAllonE

    dAllonE Guest

    alexander.pro, так ник это одно дело, а имя совсем другое :)
     
  7. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Все плохо, очень плохо.

    Начнем с базы:
    Так Вы выясняете, сколько у вас пользователей зарегистрировано. А теперь представьте, что их 10 000? Все выбираются и аж следующей командой считаются. То есть, выборка происходит зря.
    Читайте про функции http://www.mysql.ru/docs/man/SELECT.html

    Строки 1-11: зачем сначала обрабатывать строку, а потом проверять "пуста ли она?" ?

    Смысл этой строки с трудом понятен.
    Функция mysql_fetch_array возвращает либо массив, либо False в случае, если выборка из базы пустая. Существующий массив - это true.
    Получается, что Ваше условие проверяет:
    if (!true > 0) или (!false > 0) - что это значит, мне не понятно.

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

    Кстати, код очень похож на тестовый.
     
  8. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    дайте ему какой-нить класс для работы с БД, да хай упражняется. Хоть из готовых решений, http://php.ru/forum/viewtopic.php?t=12857