Все было прекрасно на php 5.2, но на php 5.5 приведенная функция успешно извлекает данные из базы данных и выводит их на экране, но при попытке редактировать данные выдает ошибку о том, что якобы не заполнено поле 'name' т.е. выдает значение $error[] = $lang['e_gb_noname'] Пожалуйста, подскажите из-за чего происходит ошибка при обновлении версии с php 5.2 на php 5.5 Код (Text): function guestbook_edit($id=''){ global $db, $lang, $db_prefix, $site_path; $id = intval($id); $error = ''; $tout = "<div class=\"title_red\">{$lang['t_gb_edit']}</div>"; $sql = "SELECT `id`, `name`, `text`, `image`, `approve` FROM `{$db_prefix}gb` WHERE `id`='{$id}' LIMIT 1"; $query = $db->mysql_safe($sql); if ($db->num_rows($query)){ if (!empty($_POST)) { $gb['name'] = xss_clean($_POST['name']); $gb['text'] = xss_clean($_POST['text']); $gb['approve'] = intval($_POST['approve']); $gb['image'] = xss_clean($_POST['image']); $gb['newimage'] = $_FILES['newimage']; $uploadfile_name = $gb['image']; if (empty($gb['name']) OR empty($gb['name'])AND($error=='')) { $error[] = $lang['e_gb_noname']; } if ((!empty($gb['newimage']))AND($gb['newimage']['size']>0)AND($error=='')) { if ($gb['newimage']['size']>2097152) { $error[] = $lang['e_inf_imgsize']; }else{ $extension = explode(".", strtolower($gb['newimage']['name'])); $extension = end($extension); $allowedExtensions = array("jpg","jpeg","gif","png"); if ($gb['newimage']['tmp_name'] > ''){ if (!in_array(($extension), $allowedExtensions)){ $error[] = $lang['e_inf_imgext']; }else{ if (empty($uploadfile_name)) { $uploadfile_name = uniqid(); }else{ foreach (glob("{$site_path}photo_flowers/clients/{$uploadfile_name}_*.*") as $filename) { unlink($filename); } } $uploadfile = $site_path.'photo_flowers/clients/'.$uploadfile_name; if(move_uploaded_file($gb['newimage']['tmp_name'], $uploadfile.'_original.'.$extension)){ createthumb($uploadfile.'_original.'.$extension, 150, $uploadfile.'.jpg'); $gb['image'] = $uploadfile_name; }else{ $error[] = $lang['e_inf_imgerror']; } } } } } if ($error=='') { $db->mysql_safe("UPDATE `{$db_prefix}gb` SET `name`=?, `text`=?, `image`=?, `approve`=? WHERE `id`='{$id}'", array($gb['name'], $gb['text'], $uploadfile_name, $gb['approve'])); $tout .= message($lang['m_gb_edit']); }else{ $tout .= error($error); } }else{ $gb = $db->fetch($query); } $tout .= "<script type=\"text/javascript\" src=\"bbeditor/ed.js\"></script><form action=\"index.php?module=guestbook&action=edit&object={$id}\" enctype=\"multipart/form-data\" method=\"post\">"; $tout .= guestbook_show_form($gb); }else{ $tout .= $lang['e_gb_nogb']; } return $tout; }
$gb['name'] = xss_clean($_POST['name']); смотри что тут --- Добавлено --- и вруби отображение ошибок --- Добавлено --- у тебя нотис
Сейчас выяснил, что ошибка происходит только для кириллицы, при латинских именах все работает!.. Здесь следующее: Код (Text): function xss_clean($var){return htmlspecialchars(trim($var), ENT_QUOTES);} --- Добавлено --- У меня код на стороннем сервере, не уверен, что там возможно посмотреть ошибки php --- Добавлено --- Не понял что вы имеете ввиду? уведомления об ошибках?
у функции htmlspecialchars есть третий аргумент, указывающий на кодировку. Зайюзайте документацию --- Добавлено --- это абстрактное высказывание было, так как: используете переменную $error как массив, но в начале задали ее тип как строку. Исправь на $error = array(); все входящие данные с их же POST ключами, не обрабатываются должным образов. По русски - у вас валидация отстой. Переходите сразу на пхп 7