Привет мастера. Я написал функцию создания превью изображения маленького размера, и сравнительно низкого качества. Внедрил и использовал данную функцию в 2 скриптах. В первом скрипте добавляется файл, и к нему скриншот. Так вот я создаю превью к скриншоту, и тут всё проходит нормально. А второй скрипт, делаю создание заметок, и к ним добавляется неограниченное количество файлов, при загрузке - 4. И тут возникли сложности с массивом загружаемых файлов. Не проходит создание превью изображения PHP: function image_upload($image, $dir, $name, $quality=NULL, $max_width) { if ($image['type'] == 'image/jpeg') { $img = imagecreatefromjpeg($image['tmp_name']); } elseif ($image['type'] == 'image/png') { $img = imagecreatefrompng($image['tmp_name']); } elseif ($image['type'] == 'image/bmp') { $img = imagecreatefromwbmp($image['tmp_name']); } elseif ($image['type'] == 'image/gif') { $img = imagecreatefromgif($image['tmp_name']); } else return false; //качество изображения if ($quality == NULL) { $quality = '75'; } //ширина и высота загружаемого изображения $w_img = imagesx($img); $h_img = imagesy($img); //максимальные значения высоты и ширины $max_width = '300'; //$max_height = '300'; if ($w_img >= $max_width){ //преобразовывываем картинку //вычисляем пропорцию $ratio = $w_img / $max_width; $w_dest = round($w_img / $ratio); $h_dest = round($h_img / $ratio); //создаем новое изображение заданного размера $dest = imagecreatetruecolor($w_dest, $h_dest); imagecopyresampled($dest, $img, 0, 0, 0, 0, $w_dest, $h_dest, $w_img, $h_img); imagejpeg($dest, $dir . $name, $quality); imagedestroy($dest); imagedestroy($img); } else { imagejpeg($img, $dir . $image['name'], $quality); imagedesroy($img); return $image['name']; } } код внутри первого скрипта: PHP: image_upload($_FILES['img'], $dir = '../works/prev/', $filename, 30, 300); второй скрипт, в котором возникла ошибка: PHP: if (empty($error)) { $name = $db -> real_escape_string($_POST['name']); $note = $db -> real_escape_string($_POST['note']); $add = $db -> real_escape_string($_POST['add']); $res = $db -> query("INSERT INTO `notes`(`name`, `note`, `add`, `date`) VALUES('$name', '$note', '$add', '". time() ."')"); echo 'Заметка добавлена<br>'; $last_id = $db -> insert_id; if ($res && !empty($_FILES['file']) && $_FILES['file']['size'][0] > '0') { $uploaddir = 'files/'; foreach ($_FILES['file']['name'] as $key => $value) { if ($value == '') continue; $extension = pathinfo($_FILES['file']['name'][$key], PATHINFO_EXTENSION); $filename = $last_id . '_' . my_random(20) . '.' . $extension; //если это картинка то создаем превью $img_types = array('gif', 'jpg', 'bmp', 'png'); if (in_array($extension, $img_types)) { $lo = image_upload($_FILES['file'][$key], $dir = 'prev/', $filename, 30, 300); } } //exit; //сюда выполнение скрипта не доходит( $uploadfile = move_uploaded_file($_FILES['file']['tmp_name'][$key], $uploaddir . $filename);; $insertdb = $db -> query("INSERT INTO `notes_files`(note_id, name) VALUES('$last_id', '$filename')"); } if ($uploadfile && $insertdb) { header('Location: note.php?id=' . $last_id); exit; } } header('Location: note.php?id=' . $last_id); } Подскажите пожалуйста
Какие ошибки показывает debug php? --- Добавлено --- PHP: if ($res && !empty($_FILES['file']) && $_FILES['file']['size'][0] > '0') Проходит ли это условие
debug http://phpfaq.ru/debug https://netbeans.org/kb/docs/php/debugging_ru.html https://php.ru/forum/threads/howto-...i-po-shagam-i-s-kartinkami.58974/#post-474550
а вообще что такое PHP: if($res) Объясни что в твоём понимании оно должно делать... и что ещё за PHP: if ($value == '') continue; А где иначе, что оно должно делать?
определит как true, значит там всё хорошо, потому что обычно надо смотреть в документацию, так как если что-то пошло не так, то вернулся бы false и if не прошёл.
@denis01 ну и да и нет... хз... не помню , а это был ответ на твой пост, вопросом. Ну понятное дело, что не тебе ты то не знаешь, надо было, чёрт, поставить там ник автора тупанул.
У есть форма на странице create_work.php форма имеет поля: -имя -описание -4 поля загрузки файлов Даже если файлы не выбраны, то все равно данные в массиве создаются, и он при проверке выдает true, и тогда в таблицу works_dcreen добавляется 4 значения, и если файлы не выбраны, то просто создаются пустые поля. А так, если значение равно пустой строке (если файл не выбран) то пропускается добавление в бд этой строки. PHP: if ($value == '') continue; вот сама форма: HTML: <div class="maint"> <form method="POST" action="add.php" enctype="multipart/form-data"> <pre> Название (2-30)*: <input type="text" name="name"> Заметка (2-1024)**: <textarea name="note" cols="20" rows="5"></textarea> Дополнительная информация(ссылки и т.п.): <input type="text" name="add"> Файлы: <input type="file" name="file[]"><br> <input type="file" name="file[]"><br> <input type="file" name="file[]"><br> <input type="file" name="file[]"><br> <input type="submit" value="Добавить запись"> </pre> </form> * - поля обязатиельные для заполнениея </div> --- Добавлено --- или лучше создавать форму не как массив с неопределенным количеством файлов: file[] а сделать примерно вот так: file['one'] file['two'] и тд. и потом просто проверять каждый файл отдельно?
Смотри структуру массива $_FILES, там есть ключ error вот и проверяй когда он соответствует нормально загруженному файлу https://secure.php.net/manual/ru/features.file-upload.errors.php
в том то и проблема, что файл загружается нормально. Это похоже проблема при сохранении файла миниатюры моей функцией. Вот только не могу понять в чём то собственно и проблема(
так нужно всё перепроверить используя отладку, каждую строчку кода, так найдёшь проблемное место, это довольно много работы, по этому мало кто за тебя её будет делать, а если что-то не получается, то тут подскажут