За последние 24 часа нас посетили 55555 программистов и 1797 роботов. Сейчас ищут 893 программиста ...

Ошибка при переходе с php 5.2 на php 5.5

Тема в разделе "PHP для новичков", создана пользователем Intime, 6 ноя 2017.

  1. Intime

    Intime Новичок

    С нами с:
    5 ноя 2017
    Сообщения:
    10
    Симпатии:
    0
    Все было прекрасно на php 5.2, но на php 5.5 приведенная функция успешно извлекает данные из базы данных и выводит их на экране, но при попытке редактировать данные выдает ошибку о том, что якобы не заполнено поле 'name' т.е. выдает значение $error[] = $lang['e_gb_noname']

    Пожалуйста, подскажите из-за чего происходит ошибка при обновлении версии с php 5.2 на php 5.5

    Код (Text):
    1. function guestbook_edit($id=''){
    2.     global $db, $lang, $db_prefix, $site_path;
    3.     $id = intval($id);
    4.     $error = '';
    5.     $tout = "<div class=\"title_red\">{$lang['t_gb_edit']}</div>";
    6.  
    7.     $sql = "SELECT `id`, `name`, `text`, `image`, `approve` FROM `{$db_prefix}gb` WHERE `id`='{$id}' LIMIT 1";
    8.     $query = $db->mysql_safe($sql);
    9.     if ($db->num_rows($query)){
    10.         if (!empty($_POST)) {
    11.             $gb['name'] = xss_clean($_POST['name']);
    12.             $gb['text'] = xss_clean($_POST['text']);
    13.             $gb['approve'] = intval($_POST['approve']);
    14.             $gb['image'] = xss_clean($_POST['image']);
    15.             $gb['newimage'] = $_FILES['newimage'];
    16.             $uploadfile_name = $gb['image'];
    17.  
    18.             if (empty($gb['name']) OR empty($gb['name'])AND($error=='')) {
    19.                 $error[] = $lang['e_gb_noname'];
    20.             }
    21.  
    22.             if ((!empty($gb['newimage']))AND($gb['newimage']['size']>0)AND($error=='')) {
    23.                 if ($gb['newimage']['size']>2097152) {
    24.                     $error[] = $lang['e_inf_imgsize'];
    25.                  
    26.                 }else{
    27.                     $extension = explode(".", strtolower($gb['newimage']['name']));
    28.                     $extension = end($extension);
    29.                     $allowedExtensions = array("jpg","jpeg","gif","png");
    30.                     if ($gb['newimage']['tmp_name'] > ''){
    31.                         if (!in_array(($extension), $allowedExtensions)){
    32.                             $error[] = $lang['e_inf_imgext'];
    33.                         }else{
    34.                             if (empty($uploadfile_name)) {
    35.                                 $uploadfile_name = uniqid();
    36.                             }else{
    37.                                 foreach (glob("{$site_path}photo_flowers/clients/{$uploadfile_name}_*.*") as $filename) {
    38.                                     unlink($filename);
    39.                                 }
    40.                             }
    41.                             $uploadfile = $site_path.'photo_flowers/clients/'.$uploadfile_name;
    42.                             if(move_uploaded_file($gb['newimage']['tmp_name'], $uploadfile.'_original.'.$extension)){
    43.                                 createthumb($uploadfile.'_original.'.$extension, 150, $uploadfile.'.jpg');
    44.                                 $gb['image'] = $uploadfile_name;
    45.                             }else{
    46.                                 $error[] = $lang['e_inf_imgerror'];
    47.                             }
    48.                         }
    49.                     }
    50.                 }
    51.             }
    52.  
    53.             if ($error=='') {
    54.                 $db->mysql_safe("UPDATE `{$db_prefix}gb` SET `name`=?, `text`=?, `image`=?, `approve`=?
    55.                         WHERE `id`='{$id}'", array($gb['name'], $gb['text'], $uploadfile_name, $gb['approve']));
    56.                 $tout .= message($lang['m_gb_edit']);
    57.              
    58.             }else{
    59.                 $tout .= error($error);
    60.             }
    61.         }else{
    62.             $gb = $db->fetch($query);
    63.         }
    64.         $tout .= "<script type=\"text/javascript\" src=\"bbeditor/ed.js\"></script><form action=\"index.php?module=guestbook&amp;action=edit&amp;object={$id}\" enctype=\"multipart/form-data\" method=\"post\">";
    65.         $tout .= guestbook_show_form($gb);
    66.  
    67.     }else{
    68.         $tout .= $lang['e_gb_nogb'];
    69.     }
    70.     return $tout;
    71. }
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    $gb['name'] = xss_clean($_POST['name']);
    смотри что тут
    --- Добавлено ---
    и вруби отображение ошибок
    --- Добавлено ---
    у тебя нотис
     
  3. Intime

    Intime Новичок

    С нами с:
    5 ноя 2017
    Сообщения:
    10
    Симпатии:
    0
    Сейчас выяснил, что ошибка происходит только для кириллицы, при латинских именах все работает!..

    Здесь следующее:
    Код (Text):
    1. function xss_clean($var){return htmlspecialchars(trim($var), ENT_QUOTES);}
    --- Добавлено ---
    У меня код на стороннем сервере, не уверен, что там возможно посмотреть ошибки php
    --- Добавлено ---
    Не понял что вы имеете ввиду? уведомления об ошибках?
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    у функции htmlspecialchars есть третий аргумент, указывающий на кодировку. Зайюзайте документацию
    --- Добавлено ---
    это абстрактное высказывание было, так как:
    1. используете переменную $error как массив, но в начале задали ее тип как строку. Исправь на $error = array();
    2. все входящие данные с их же POST ключами, не обрабатываются должным образов. По русски - у вас валидация отстой.
    3. Переходите сразу на пхп 7
     
    Intime нравится это.
  5. Intime

    Intime Новичок

    С нами с:
    5 ноя 2017
    Сообщения:
    10
    Симпатии:
    0
    @MouseZver, большое спасибо за помощь! Добавил третий аргумент у htmlspecialchars и все заработало!