За последние 24 часа нас посетил 16901 программист и 1646 роботов. Сейчас ищут 994 программиста ...

Правильность фильтрации, перед добавлением в БД

Тема в разделе "PHP для новичков", создана пользователем Magnum, 28 ноя 2015.

  1. Magnum

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

    С нами с:
    19 июл 2015
    Сообщения:
    62
    Симпатии:
    0
    Подскажите пожалуйста, уважаемые мастера, правильно ли я отфильтровал данные? Новичок, и вот разбираюсь, как фильтровать данные перед добавление их в БД и выводом пользователям.

    Вот собственно мой код:
    Код (PHP):
    1. <meta charset="UTF-8">
    2.  
    3. <?php 
    4.  
    5. $login = 'root';
    6. $pass = '111111';
    7. $dbname = 'new';
    8. $hostname = 'localhost';
    9.  
    10. $db = new mysqli($hostname, $login, $pass, $dbname);
    11. if ($db -> connect_error) die ($db -> connect_error);
    12.  
    13. echo '
    14. <table><tr><th>Your Name:</th><th>Your text:</th></tr>
    15. <form method="POST" action="strip_tags.php">
    16. <tr><th><input type="text" name="name"></th>
    17. <th><textarea cols=30 rows=5 name="text"></textarea></th></tr>
    18. <th><input type="submit" name="submit" value="SEND"></th></table>
    19. </form>
    20. ';
    21.  
    22. if (isset($_POST['submit'])) {
    23.     $name = filter($_POST['name']);
    24.     $text = filter($_POST['text']);
    25.     if ($name == '') echo 'Вы оставили пустое полу name<br>';
    26.     if ($text == '') echo 'Вы оставили пустое поле text<br>';
    27.  
    28.     if (($name != '') AND ($text != '')) {
    29.         $name = $db -> real_escape_string($name);
    30.         $text = $db -> real_escape_string($text);
    31.         $query = "INSERT INTO `users` VALUES('-', '".$name."', '".$text."')";
    32.         $result = $db -> query($query);
    33.         echo $name.'<br>'. $text . '<br>';
    34.         if (!$result) echo $db -> error;
    35.         if ($result) echo 'Успешное добавление новых данных';
    36.     }
    37. }
    38.  
    39. echo '<br><br>';
    40. $result = $db -> query("SELECT * FROM `users`");
    41. $row = $result -> num_rows;
    42. for ($i = 0; $i < $row; $i++) {
    43.     $result -> data_seek($i);
    44.     $rows = $result -> fetch_array(MYSQLI_ASSOC);
    45.     echo 'User id - ' . $rows['id'] . '<br>';
    46.     echo 'User name - ' . $rows['name'] . '<br>';
    47.     echo 'User text - ' . $rows['text'] . '<br><hr>';
    48. }
    49. $result -> close();
    50. $db -> close();
    51.  
    52. function filter($var) {
    53.     if (get_magic_quotes_gpc()) $var = stripslashes($var);
    54.     $var = htmlspecialchars($var);
    55.     return $var;    
    56. }
    57.  
    58.  
    59. ?>
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    имхо не правильно. не надо ломать данные при добавлении. эскейпа достаточно. и отучись итерировать результат через фор до кол-ва строк - сама по себе операция вычисления кол-ва строк порой ресурсоемкая. делай while($row = mysqli_fetch_array()) или как тебе удобнее
     
  3. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    кодировку не установил в подключении к бд $db->set_charset(кодировка) - раз.
    два - не экранировал вывод в html, там тожно можно вставить ченить типа <script> или <img> в $rows['name'] или $rows['text'] и т.п.