За последние 24 часа нас посетили 24138 программистов и 1643 робота. Сейчас ищет 831 программист ...

Функция

Тема в разделе "PHP для новичков", создана пользователем Рихард, 16 фев 2018.

  1. Рихард

    Рихард Новичок

    С нами с:
    13 янв 2018
    Сообщения:
    89
    Симпатии:
    6
    В общем есть такой
    Код (Text):
    1.  $dbc = mysqli_connect(DB_HOST,DB_USER,'',DB_NAME)
    2.   or die ('Ошибка соединения с MYSQL сервером');
    3.   //Функция экранирования срабатывает при подключенной базе
    4. $firstname=mysqli_real_escape_string($dbc,$firstname);
    5.   // Создаем SQL  строку запроса для внесения информации в таблицу
    6.   $query = "INSERT INTO acquaintances (firstname,lastname,sex,old,growth,weight,profession,hobby,family,children,information,email,images) " .
    7.   "VALUES ('$firstname','$lastname','$sex','$old','$growth','$weight','$profession','$hobby','$family','$children','$information','$email','$images')";
    8.  
    9.   // Непосредственно запускаем функцию запроса к базе
    10.   $result = mysqli_query($dbc,$query)//аргументы функции соединение с сервером и срока запроса
    11.   or die ('Ошибка при выполнении запроса к баззе данных');
    12.  
    13.   // Закрытие канала связи с сервером базы данных
    14.   mysqli_close($dbc);
    Намеренно в переменную $firstname ввожу html код ссылки вместо имени.
    Захожу в свою админ панель и в phpmy admin а там спокойно эти теги незаэкранированы.

    Где может ошибка. Заходил в манул php.net и как там вроде вызываю функцию в процедурном стиле
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.813
    Симпатии:
    1.332
    Адрес:
    Лень
    в бд заливается не форматированный текст. Сырой, так и положено.
    Достаточно забиндить или эксейпить данные, и sql-injection прощай.
    При выводе текста юзаем filter_var ( $item, FILTER_SANITIZE_FULL_SPECIAL_CHARS )
    --- Добавлено ---
    https://github.com/MouseZver/Lerma

    PHP:
    1. <?php
    2.  
    3. use Aero\Supports\Lerma;
    4.  
    5. /*
    6.    - Autoloader
    7. */
    8. spl_autoload_register ( function ( $name )
    9. {
    10.    include strtr ( $name, [ '\\' => DIRECTORY_SEPARATOR ] ) . '.php';
    11. } );
    12.  
    13. # -----------------
    14.  
    15. Lerma::prepare( 'INSERT INTO acquaintances (
    16.   firstname,
    17.   lastname,
    18.   sex,
    19.   old,
    20.   growth,
    21.   weight,
    22.   profession,
    23.   hobby,
    24.   family,
    25.   children,
    26.   information,
    27.   email,
    28.   images
    29. ) VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,? )', [
    30.    $firstname,
    31.    $lastname,
    32.    $sex,
    33.    $old,
    34.    $growth,
    35.    $weight,
    36.    $profession,
    37.    $hobby,
    38.    $family,
    39.    $children,
    40.    $information,
    41.    $email,
    42.    $images
    43. ] );
    все