Недавно я спрашивал тут, о том, как сделать так чтобы, если пришло POSTом изображение, и ширина больше допустимого, отредактировать, пропорционально уменьшив до рекомендуемой ширины.
Вот прошло время, я почитал документацию, разобрался во многом, и написал функцию которая добавляет публикацию на сайт, если была нажата кнопка inpyt->submit->addpub.
И так есть поля Заголовок, Ключевые слова, Текст, Добавить файл и Отправить.
При нажатии на отправить срабатывает код:
// Добавление статьи
if(isset($_POST['addpub'])){
addPub();
}
// Добавление статьи
function addPub(){
global $db, $date;
$error = ''; // Инициализируем переменную для ошибок
$title = strip_tags(trim($_POST['title'])); // Удаляем PHP и HTML строки из постов
$desc = strip_tags(trim($_POST['description']));
$keywords = strip_tags(trim($_POST['keywords']));
list($name, $type, $tmp_name, , $size) = array_values($_FILES['img']); // Заносим в переменные, значения массива $_FILES
$typelist = array('image/jpeg', 'image/png'); // Валидация типов
// Проверяем ошибки
if(strlen($title) < 3 || strlen($title) > 100) $error .= '<li>Заголовок должен быть мин 3 и макс 100 символов</li>';
if(strlen($keywords) < 10 || strlen($keywords) > 100) $error .= '<li>Ключевые слова должны состоять мин 10 и макс 100 симв</li>';
if(strlen($desc) < 20 || strlen($desc) > 10000) $error .= '<li>Текст не должен превышать 10000 символов</li>';
if(!in_array($type, $typelist)) $error .= '<li>Недопустимый формат изображения</li>';
if($size > 5555555) $error .= '<li>Превышен допустимый размер изображения 5мб</li>';
// Если ошибок нет, добавляем запись
if(empty($error)){
// Создаем ссответсвующий файл, и переименовываем ешо в time().'расширение';
switch($type){
case 'image/jpeg':
$newimg = imagecreatefromjpeg($tmp_name);
$name = time().'.jpg';
break;
case 'image/png':
$newimg = imagecreatefrompng($tmp_name);
$name = time().'.png';
break;
}
// Путь куда созранить
$path = 'view/images/publications/';
$fullpath = $path.$name;
// Вычесляем Длину и Высоту изображения
$width = imagesx($newimg);
$height = imagesy($newimg);
// Если ширина более 830px, исправляем
if($width > 830){
$newwidth = 830;
$newheight = round($height * 830 / $width);
}else{
$newwidth = $width;
$newheight = $height;
}
// Перетаскиваем изображение, качество 80
$image = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($image, $newimg, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagejpeg($image, $fullpath, 80);
// Заносим в базу
$sql = "INSERT INTO publication (`title`, `description`, `keywords`, `img`, `date`) VALUES (?, ?, ?, ?, ?)";
$stmt = mysqli_prepare($db, $sql);
mysqli_stmt_bind_param($stmt, 'sssss', $title, $desc, $keywords, $fullpath, $date);
mysqli_stmt_execute($stmt);
if(mysqli_affected_rows($db) > 0) $_SESSION['access'] = 'Новость опубликовано успешно';
}else{
$_SESSION['error'] = $error;
}
}
Пишем все поля как надо, и добавляем картинку 1280x1024
Пробуем ничего не писать и добавить
Все работает как надо, ошибки выводит, картинку редактируем и переименовывает. А вопрос в том, правильно-ли я написал код? Стиль кода плохой (гавнокод) или наоборот? Что можно сократить? Что лучше сделать по другому? Ошибки безопасности есть?