За последние 24 часа нас посетили 108538 программистов и 5433 робота. Сейчас ищут 2295 программистов ...

Жажду критики

Тема в разделе "PHP для новичков", создана пользователем VampiR_WAR, 23 июл 2012.

  1. VampiR_WAR

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

    С нами с:
    19 авг 2009
    Сообщения:
    409
    Симпатии:
    1
    Адрес:
    Нижний Новгород
    Здравствуйте. Вот что то поковырял, начинаю вникать что к чему) Посмотрите пожалуйста, если не трудно, все вроде работает... Хотелось бы критики =)
    Код (PHP):
    1. <?php
    2.  
    3. //Проверка введеных данных пользователем
    4.  
    5.  
    6.  
    7. if (!$_POST['name'])
    8. {
    9.     echo "Вы не заполнили форму имя!";
    10.     exit();
    11. }
    12. else
    13. {    
    14.     
    15.     
    16.         $name = filter_input(INPUT_POST, 'name',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW);
    17.    
    18. }
    19.  echo "<br>";
    20.  
    21.  
    22.  
    23.  
    24.  
    25. if      (!$_POST['email'])
    26. {
    27.         echo "Вы не заполнели форму E-mail";
    28.         exit();
    29.     
    30.         }    
    31. else
    32. {
    33.  $email= filter_input(INPUT_POST,'email', FILTER_VALIDATE_EMAIL);
    34.  
    35. }
    36.  
    37.  
    38.  
    39.  
    40.  
    41. //Проверка корректности эл.почты
    42.  
    43. if($_POST["email"]&& !preg_match("/^[a-z0-9\._-]+@(.{1,}\.)*[a-z0-9]+[a-z0-9-]*[a-z0-9]+\.[a-z]{2,6}$/i",$_POST["email"]))
    44. {
    45.         echo "Введите корректный формат электронной почты";
    46.         exit();
    47.         
    48. }
    49.  
    50.  
    51.  
    52.  
    53.  
    54.  
    55.  
    56.  
    57. if(!$_POST['pass'])
    58. {
    59.     echo "Вы не заполнили форму Пароль";
    60.     exit();
    61. }
    62. else
    63. {
    64.         $pass = filter_input(INPUT_POST, 'pass',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW);
    65.  
    66.  echo "<br>";
    67.  }
    68.  
    69.  
    70.  
    71.  
    72.  
    73.  if(!$_POST['age'])
    74. {
    75.     echo "Вы не заполнили форму возраст";
    76.     exit();
    77. }
    78. else
    79. {
    80.         $age =filter_input(INPUT_POST, 'age',FILTER_VALIDATE_INT, 
    81. array('options'=>array('min_range'=>10,'max_range'=>80)));
    82.  
    83.  echo "<br>";
    84.  }
    85.  
    86.  
    87.  
    88.  
    89.  if(!$_POST['sex'])
    90. {
    91.     echo "Вы не заполнили форму пол";
    92.     exit();
    93. }
    94. else
    95. {
    96.         $sex = filter_input(INPUT_POST, 'sex',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW);
    97.  
    98.  echo "<br>";
    99.  }
    100.  
    101.  
    102.  
    103.  
    104.  
    105.  
    106.  if(!$_POST['vopros1'])
    107. {
    108.     echo "Вы не заполнили форму vopros1";
    109.     exit();
    110. }
    111. else
    112. {
    113.         $vopros1 =filter_input(INPUT_POST, 'vopros1',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW);
    114. }
    115.  echo "<br>";
    116.  
    117.  
    118.  
    119.  if(!$_POST['vopros2'])
    120. {
    121.     echo "Вы не заполнили форму vopros2";
    122. }
    123. else
    124. {
    125.         $vopros2 =filter_input(INPUT_POST, 'vopros2',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW);
    126. }
    127.  echo "<br>";
    128.  
    129.  
    130.  
    131.  
    132.  if(!$_POST['vopros3'])
    133. {
    134.     echo "Вы не заполнили форму vopros3";
    135. }
    136. else
    137. {
    138.         $vopros3 = filter_input(INPUT_POST, 'vopros3',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW);
    139. }
    140.  echo "<br>";
    141.  
    142.  
    143.  
    144.  
    145.  
    146.  if(!$_POST['vopros4'])
    147. {
    148.     echo "Вы не заполнили форму vopros4";
    149. }
    150. else
    151. {
    152.         $vopros4 =filter_input(INPUT_POST, 'vopros4',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW);
    153. }
    154.  echo "<br>";
    155.  
    156.  
    157.  
    158.  if(!$_POST['vopros5'])
    159. {
    160.     echo "Вы не заполнили форму vopros5";
    161. }
    162. else
    163. {
    164.         $vopros5 =filter_input(INPUT_POST, 'vopros5',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW);
    165. }
    166.  echo "<br>";
    167.  // Конец проверки данных
    168.  
    169.  
    170.  
    171.  
    172.  
    173.  
    174. // Подключаем конфиг
    175.  
    176. include ('config.php');
    177.  
    178. // Запрос на проверку уникального адреса почты
    179. $query = mysql_query("SELECT * FROM `USERS` WHERE `email`='{$email}' ");
    180. if(mysql_num_rows($query) >= 1){ 
    181. echo "Адрес $email уже зарегистрирован";
    182.      
    183. } 
    184. else{ 
    185.  
    186. //Устанавливаем кодировку utf-8 по умолчанию
    187. mysql_query("SET NAMES 'utf8'");
    188. mysql_query("SET CHARACTER SET 'utf8'");
    189.  
    190. //Если все вышеописанные проверки прошли успешно, добавляем пользователя в нашу БД
    191. $result = mysql_query("INSERT INTO USERS (name,email,pass,age,sex,vopros1,vopros2,vopros3,vopros4,vopros5)
    192.              VALUES ('$name','$email','$pass','$age','$sex','$vopros1','$vopros2','$vopros3','$vopros4','$vopros5')") ;
    193. //Проверяем заполнились ли введенные данные в БД
    194. if ($result == 'true')
    195. {
    196.  
    197.  
    198.  
    199.      //Выводим сообщение после регистрации
    200.  
    201.         echo "Спасибо регистрация прошла успешно!";
    202.         
    203.         require 'mail.php';       
    204.      
    205.        
    206.          }
    207.  
    208. else
    209. {
    210.        echo "<b><font color=red>Извините произошла ошибка при добавлении БД!</b><br>";
    211.        
    212. }
    213.  
    214. // Отправляем рандомный код на мыло.
    215.  
    216.  
    217. }
    218.  
    219.  
    220.  
    221.  
    222. // Закрываем соединение с mysql
    223.  
    224.  
    225.  
    226.  
    227.  
    228. ?>
     
  2. Doglexx

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

    С нами с:
    20 май 2008
    Сообщения:
    25
    Симпатии:
    0
    1. Удалить лишние пустые строки, перенесите { на строку выше, где начинается блок - читать тяжко такой код.
    Так лучше смотрится, не правда ли?
    Код (PHP):
    1. <?php
    2. if(!$_POST['vopros2']) {
    3.     echo "Вы не заполнили форму vopros2";
    4. } else {
    5.     $vopros2 =filter_input(INPUT_POST, 'vopros2',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW);
    6. }
    7.  echo "<br>";?>
    2. Блоки с проверкой 5-ти вопросов можно оформить в цикле for от 1 до 5.
    3. Проверку переменных на непустоту лучше делать хотя бы с помощью !empty либо isset. И зачем для почты $_POST['email'] Вы 2 раза проверяете непустоту переменной?
     
  3. VampiR_WAR

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

    С нами с:
    19 авг 2009
    Сообщения:
    409
    Симпатии:
    1
    Адрес:
    Нижний Новгород
    Спасибо. Приеду домой, почитаю и перепишу.
     
  4. mrdez

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

    С нами с:
    3 июн 2012
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Латвия
    isset() не поможет проверить на пустоту. Если используешь !empty() не забудь убрать пробелы
    Код (Text):
    1.  
    2. $str = ' ';
    3. var_dump(empty($str)); // false
     
  5. Doglexx

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

    С нами с:
    20 май 2008
    Сообщения:
    25
    Симпатии:
    0
    Верно, можно делать trim() для входных данных.
     
  6. jenya777777

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

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    1) наверное не нужно после каждой проверки обрывать работу скрипта exit();
    можешь например предупреждение об ошибке введенных данных вносить в какой нибудь массив и потом вывести его.
    2)
    Код (Text):
    1. //Устанавливаем кодировку utf-8 по умолчанию
    2. mysql_query("SET NAMES 'utf8'");
    3. mysql_query("SET CHARACTER SET 'utf8'");
    это достаточно прописать при подключении к базе данных, нет необходимости писать при каждом запросе к базе
    3) стоит отделить данные пользователя, от вопросов заданых ему, пусть они будут в разных таблицах, сейчас у тебя все в куче в одной таблице
     
  7. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    Код (PHP):
    1. if (!$_POST['name'])
    2. {
    3.     echo "Вы не заполнили форму имя!";
    4.     exit(); 
    гавно!

    Добавлено спустя 1 минуту 1 секунду:
    ладно, намекну: тут на трёх строках есть три говняшки. Какие - озвучь свои предположения.
     
  8. VampiR_WAR

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

    С нами с:
    19 авг 2009
    Сообщения:
    409
    Симпатии:
    1
    Адрес:
    Нижний Новгород
    Я уже в скрипте и сессиями уже "поднасрал" :-D
    Говняшки наверное в том что их вообще быть не должно, и как
    В этом? =)
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    в этих трёх строках три косяка. два важных, один этический. найди сам. наморщи лоб, чего стесняешься?
     
  10. VampiR_WAR

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

    С нами с:
    19 авг 2009
    Сообщения:
    409
    Симпатии:
    1
    Адрес:
    Нижний Новгород
    Код (PHP):
    1. if (!$_POST['name'])
    2. {    exit("Вы не заполнили форму имя!"); } 
    3.   
    ??? Да время уже много, я через 10 минут и по Русски писать не смогу))
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    пи3дa, всё стало ещё хуже.
     
  12. VampiR_WAR

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

    С нами с:
    19 авг 2009
    Сообщения:
    409
    Симпатии:
    1
    Адрес:
    Нижний Новгород
    Код (PHP):
    1. if (!$_POST["name"])
    2. {
    3.     echo 'Вы не заполнили форму имя!';
    4.     exit(); 
    5.  
    من خسته، بخواب!فردا صبح در مورد آن فکر می کنم، و پس از آن PPC جوش گلدان نیست.
     
  13. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    короче вот тебе домашнее задание на ночь для спящего мозга и подсознательного сознания:
    - разберись чо за херня! =)

    Код (PHP):
    1. if (!$_POST["name"]) //прямая ошибка
    2. { //не считается за строчку вобще
    3.     echo 'Вы не заполнили форму имя!'; //идеологическая ошибка, хотя направление правильное
    4.     exit();  // херня криворукая! пороть за такое надо. почему?
    5.   
     
  14. VampiR_WAR

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

    С нами с:
    19 авг 2009
    Сообщения:
    409
    Симпатии:
    1
    Адрес:
    Нижний Новгород
    Всю ночь уснуть не мог. =)
    У меня конечно есть мысли, но бредовые.
    Это смешно наверное, но в чем ошибка я пока еще не понимаю.

    Добавлено спустя 1 минуту 45 секунд:
    То что не считается за строку, я понял. Идеологическая ошибка, наверное стояло print_r вызвать?
    wxit(); херня, но не понимаю почему.
     
  15. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.068
    Симпатии:
    7
    Код (PHP):
    1. $connect=false;
    2. if(!$connect=mysql_connect('','','')) {
    3.     exit(mysql_error().' <> '.mysql_errno());
    4. } else if(!mysql_select_db('',$connect)) {
    5.     exit(mysql_error().' <> '.mysql_errno());
    6. } else {
    7.     mysql_set_charset('utf8',$connect);
    8. } 
    Код (PHP):
    1. function injects($value,$bool=false) {
    2. global $connect;
    3.     if($connect && !$bool && ''!=$value) {
    4.         if(isset($_POST[$value])) {
    5.             return mysql_real_escape_string($_POST[$value],$connect);
    6.         }
    7.     }
    8.     return false;
    9. } 
    Код (PHP):
    1. function query($query) {
    2.     global $connect;
    3.     if($connect && ''!=$query) {
    4.         return mysql_query($query,$connect);
    5.     }
    6.     return false;
    7. } 
    Код (PHP):
    1. if(intval($_POST['form'])) {
    2.     if(!isset($_POST['name'])) {
    3.         $error='Заполните поле имени!';
    4.     } else if(!isset($_POST['email'])) {
    5.         $error='Заполните поле e-mail!';
    6.     } else if(!preg_match('/^[a-z0-9\._-]+@(.{1,}\.)*[a-z0-9]+[a-z0-9-]*[a-z0-9]+\.[a-z]{2,6}$/i',$_POST['email'])) { 
    7.         $error='E-mail: ('.$_POST['email'].') введен не корректно!';
    8.     } else if(mysql_num_rows(query("SELECT `email` FROM `users` WHERE `email`='".injects('email')."' LIMIT 0,1"))) {
    9.         $error='E-mail: ('.$_POST['email'].') уже существует!';
    10.     } else if(!isset($_POST['pass'])) {
    11.         $error='Заполните поле пароля!';
    12.     } else if(3>strlen($_POST['pass']) || 16<strlen($_POST['pass'])) {
    13.         $error='Пароль не может быть меньше 3-х символов и больше 16.';
    14.     } else if(query("INSERT INTO `users` SET `name`='".injects('name')."',`email`='".injects('email')."',`pass`='".md5(injects('pass'))."'")) {
    15.         
    16.         $error='Регистрация прошла успешно!';
    17.         require_once('mail.php');  
    18.     } else {
    19.         exit('Ошибка: '.mysql_error().' <> '.mysql_errno());
    20.     }
    21. }
    22. mysql_close($connect); 
    Код (PHP):
    1. <div class="form">
    2.     <div class="error">
    3.         <?=$error?>
    4.     </div>
    5.     <form id="form" method="post">
    6.         <input type="hidden" name="form" value="1">
    7.         <input type="text" name="name" value="">
    8.         <input type="text" name="email" value="">
    9.         <input type="text" name="pass" value="">
    10.         <input type="submit" value="Отправить">
    11.     </form>
    12. </div>
    Тут вариантов можно сделать много...

    Можно вообще разделить, можно массивами, можно частями...

    Смотря вообще для каких целей и что требуется, ну и соответственно как желаете вы, так и делайте. =)
     
  16. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    потенциально тут обращение к несуществующей переменной. Нотис. На деле, не знание функций empty() или isset().

    Добавлено спустя 3 минуты 34 секунды:
    Эхо черти куда, никак не обращающее на себя внимание. Нужно выводить сообщение, подсвечивать красненьким поле, и лучше всего делать это на стороне клиента до. Тем не менее, сообщеньку выводить всё равно нужно, ибо мало ли у кого js откажет. При этом сообщенька должна быть стандартизованная, задизайненая и красивая.

    Добавлено спустя 1 минуту 17 секунд:
    выходить из скрипта нужно только в крайне редких случаях, а ты тупо завершил скрипт, не дав человеку заполнить недостающую инфу. Заставлять человека заполнять заново всю форму - садизм!
     
  17. VampiR_WAR

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

    С нами с:
    19 авг 2009
    Сообщения:
    409
    Симпатии:
    1
    Адрес:
    Нижний Новгород
    Код (PHP):
    1.  
    2. $name = $_POST['name'];
    3. if (isset($name) {
    4. echo "Понятно";
    5. exit(); // То есть лучше строить if через весь скрипт? или есть какие либо еще вариантов?
    6. }
    7.  
     
  18. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    ты ничего не изменил =)
    обращение к несуществующей переменной

    бессмысленная проверка, которая всегда true

    есть, копить ошибки в массив, т.е. ифы будут такими же короткими. Зато потом можешь отрисовать сообщеньки и пояснения в нужных местах.
     
  19. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.068
    Симпатии:
    7
    Код (PHP):
    1. if (isset($_POST['name']))  {
    2. $name = $_POST['name'];
    3. } 
     
  20. VampiR_WAR

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

    С нами с:
    19 авг 2009
    Сообщения:
    409
    Симпатии:
    1
    Адрес:
    Нижний Новгород
    Понятно.
    А что значит само понятие несуществующей переменной?
    Код (PHP):
    1. (!$_POST['name'];) 
    Условие то
    Код (PHP):
    1.  if(!$_POST['name'];) 
    То есть если пользователь не введет данные, то условие будет выполнено?! А если введет то не будет.
     
  21. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.068
    Симпатии:
    7
    " ! " это знак отрицания.
    Код (PHP):
    1. if(!isset($_POST['name'])) {
    2.     false
    3. } else {
    4.     true
    5. }  
     
  22. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    этого члена массива не существует. любое обращение к нему - косяк. чтобы узнать есть ли переменная, можно юзать функцию isset() или сразу empty() - она тоже отработает корректно.
     
  23. VampiR_WAR

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

    С нами с:
    19 авг 2009
    Сообщения:
    409
    Симпатии:
    1
    Адрес:
    Нижний Новгород
    Your, спасибо. знак знаком =)

    igordata, понял. спс .