скрипт с проверками для загрузки фото

12
С8
На сайте с 23.08.2012
Offline
108
1709

Нужно загрузить фото на сервер с проверками, написала такой код, но ничего не выходит, укажите, пожалуйста на ошибки:

if (isset($_FILES['foto'])) {

$foto = $_FILES['foto'];

function isSecurity($foto){

$name = $foto['name'];

$type = $foto['type'];

$size = $foto['size'];

$blacklist = array(".php", ".phtml", ".php3", ".php4");

foreach ($blacklist as $item) {if(preg_match("/$item\$/i", $name))return false;}

if (($type != "image/gif") && ($type != "image/png") && ($type != "image/jpg") && ($type != "image/jpeg"))return false;

if ($size > 800 * 1024) return false;

}

function LoadFoto($foto){

$type = $foto['type'];

$uploaddir = "avatars/";

$name = md5(microtime()).".".substr($type, strlen("image/"));

if(move_uploaded_file($foto['tmp_name'], $uploaddir.$name))

{

setFoto($foto); return true;

}

else return false;

}

function setFoto($name)

{

$result1 = mysql_query ("INSERT INTO obyavleniya (foto) VALUES ('$name')");

}

if (isSecurity($foto)) LoadFoto($foto);

else $message = "Ошибка при загрузке фото";

}

jondeer
На сайте с 17.08.2011
Offline
73
#1

Текст ошибки приведите.

Система управления сайтом DataCMS с большим функционалом (/ru/forum/1006835) Продается отличный скрипт-движок для киносайта MovieTime (/ru/forum/993056)
С8
На сайте с 23.08.2012
Offline
108
#2

Ничего не пишет, пишется, что все успешно загружено, а на самом деле в базе вместо имени фото - 0, и в нужную директорию фото тоже не загружается. Без проверок все отлично выходит, но мне нужно с проверками и с заменой имени рисунка на латинское с сохранением расширения.

LEOnidUKG
На сайте с 25.11.2006
Offline
1725
#3

Код конечно уныл как не знаю кто :)

но:

if ($size > 800 * 1024) return false;

return true;

}

так сделайте и всё заработает.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
siv1987
На сайте с 02.04.2009
Offline
427
#4
Сабрина87:
if (isset($_FILES['foto'])) {

$foto = $_FILES['foto'];

function isSecurity($foto){

Функции нужно создавать вне всяких блоков и условии. Это хорошо что ваша функция вызывается в том же блоке, иначе бы скрипт отвалился с ерором. И вы другом месте вы не сможете ее использовать.

Сабрина87:
foreach ($blacklist as $item) {if(preg_match("/$item\$/i", $name))return false;}

Зачем спец символ конца строки $ заэкранировали? Он у вас будет считаться как обычный символ.

С8
На сайте с 23.08.2012
Offline
108
#5

LEOnidUKG, спасибо, исправила, файл в директорию теперь загружается, но без сохранения расширения и в базе опять 0. Вот здесь, чтоли, ошибка:

$name = md5(microtime()).".".substr($type, strlen("image/")); ?

siv1987
На сайте с 02.04.2009
Offline
427
#6
Сабрина87:
и в базе опять 0

setFoto($foto)

setFoto($name)

С8
На сайте с 23.08.2012
Offline
108
#7
setFoto($foto)

setFoto($name)

Это я давно уже исправила, не получается, функция срабатывает до $name = md5(microtime()) (в директории под таким именем сохраняется) дальше - ничего.

LEOnidUKG
На сайте с 25.11.2006
Offline
1725
#8

А скрипт к БД то хоть подключается?

Так же:

mysql_query ("INSERT INTO obyavleniya (foto) VALUES ('$name')");

вы в phpmyadmin попробовали сами с этим запросом, хоть что-то добавить?

С8
На сайте с 23.08.2012
Offline
108
#9

Я так добавляла тексты - все добавляется, училась по урокам Попова - он так добавляет, подскажите другой синтаксис, пожалуйста.

---------- Добавлено 12.09.2012 в 10:58 ----------

Скрипт работает до $name = md5(microtime()) - под таким названием сохраняется в директории, дальше - нет.

LEOnidUKG
На сайте с 25.11.2006
Offline
1725
#10
Скрипт работает до $name = md5(microtime()) - под таким названием сохраняется в директории, дальше - нет.

В этом сообщении логики вообще нету.

Ещё раз, у вас к БД скрипт подключён, чтобы туда что-то добавлять? Вы реально не знаете что такое phpmyadmin?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий