Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Правильно ли код?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Форма загрузки
Данил Банаев
Отправлено: 26 Августа, 2011 - 22:41:50
Post Id


Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Неообходимо чтобы юзер давал имя фотке, описание к ней и саму фотку.
Фотка уходила бы потом в папочку, а с данными дальше бы шла работа.
Почему то не смог найти готовый велосипед, чтобы посмотреть как эта задача реализована.
Встречал варианты либо просто с загрузкой файла, либо с отправкой данных(строк, чисел).
Написал обработчик и хотел чтобы взглянули опытные люди.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //ф-я фильтрует строковые данные
  4. function clearData($data){
  5.         $data=trim(strip_tags($data));
  6.         return $data;
  7. }
  8. //если юзер ввел название фото, описание фото, при отправке файла не возникло ошибок, и тип файла верный, то...
  9.         if(!empty($_POST["photo_name"]) and !empty($_POST["mess"]) and $_FILES["photo"]["error"]==0 and $_FILES["photo"]["type"]=="image/jpeg"){
  10.                 $photo_name=clearData($_POST["photo_name"]);//получили имя фото для дальнейшей работы  
  11.                 $mess=clearData($_POST["mess"]);//получили описание фото
  12.                 $tmp_name=$_FILES["photo"]["tmp_name"];//получили физический путь к файлу с фото
  13.                 $name=$_FILES["photo"]["name"];//получили реальное имя файла с фото
  14.                 move_uploaded_file($tmp_name,"photos/".$name);//переместили файл с фото в нужную директорию
  15.                 header("Location: index.php");//редирект
  16. }
  17. ?>
  18.  


Далее:

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <meta charset="utf-8">
  6. <title>Send form</title>
  7. </head>
  8. <body>
  9. <form action="index.php" method="post" enctype="multipart/form-data">
  10.         Введите имя фото:<br>
  11.         <input type="text" name="photo_name"><br><br>
  12.     Введите описание фото:<br>
  13.     <textarea cols="50" rows="5" name="mess"></textarea><br><br>
  14.     Загрузите фото(Макс 2Мб):<br>
  15.     <input type="file" name="photo"><br><br>
  16.     <input type="submit" value="Отправить">
  17. </form>
  18. </body>
  19. </html>
  20.  

И еще вопрос.
Как сделать проверку чтобы если юзер что то не ввел, под формой выводилось бы сообщение о том что именно он не ввел?
Извините за детские вопросы, очень хочу все для себя понять.
ЗЫ спасибо заранее.
 
 Top
illy
Отправлено: 26 Августа, 2011 - 23:54:46
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




CODE (html):
скопировать код в буфер обмена
  1. <script>
  2. function sub(){
  3. document.getElementById('error').innerHTML='';
  4. if(document.getElementById('photo_name').value==''){
  5. document.getElementById('error').innerHTML='Введите название фото';
  6. return;
  7. }
  8. if(document.getElementById('mess').value==''){
  9. document.getElementById('error').innerHTML='Введите описание фото';
  10. return;
  11. }
  12. if(document.getElementById('file').value==''){
  13. document.getElementById('error').innerHTML='Выберите фото';
  14. return;
  15. }
  16. with(document.getElementById('forma')){submit();}
  17. }
  18. </script>
  19. <form id=forma action="index.php" method="post" enctype="multipart/form-data">
  20. Введите имя фото:<br>
  21. <input id=photo_name type="text" name="photo_name" onkeyup="this.value=this.value.replace(/[^a-zA-Z0-9\s_-]/i,'');this.value=this.value.replace(/ /i,'_');"><br><br>
  22. Введите описание фото:<br>
  23. <textarea id=mess cols="50" rows="5" name="mess"></textarea><br><br>
  24. Загрузите фото(Макс 2Мб):<br>
  25. <input id=file type="file" name="photo"><br><br>
  26. <a href=javascript:sub()>Отправить</a>
  27. </form>
  28. <font id=error color=red></font>


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Данил Банаев
Отправлено: 27 Августа, 2011 - 08:09:59
Post Id


Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




А если пока не задействовать javascript?
(Добавление)
А сам обработчик на php правильный?
 
 Top
illy
Отправлено: 27 Августа, 2011 - 09:02:14
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




типа того Однако


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Данил Банаев
Отправлено: 27 Августа, 2011 - 09:03:07
Post Id


Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




javascript можно и отключить.
интересует больше проверка в php
 
 Top
illy
Отправлено: 27 Августа, 2011 - 09:16:34
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




$photo_name=$_POST["photo_name"]);
if(preg_match('/[^a-z0-9\s_-]/i',$photo_name)){
echo 'Название может состоять только из английских букв, цифр, пробела, _ и -';
exit;
}
else{
$photo_name=str_replace(' ','_',$photo_name);
}


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Kreks
Отправлено: 27 Августа, 2011 - 17:48:39
Post Id



Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Авг. 2011  
Откуда: Ульяновск


Помог: 0 раз(а)




illy пишет:
$photo_name=$_POST["photo_name"]);
if(preg_match('/[^a-z0-9\s_-]/i',$photo_name)){
echo 'Название может состоять только из английских букв, цифр, пробела, _ и -';
exit;
}
else{
$photo_name=str_replace(' ','_',$photo_name);
}


Автор, подумайте о безопасности все примеры что вы приводили не очень безопасны безопасны и можно загрузить шелл.
Для безопасности надо проверять Content-Type,содержимое файла,поверять расширения и блокировать ненужное.
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $blacklist = array(".php", ".phtml", ".php3", ".php4"); //Блокируем ненужное
  3. foreach ($blacklist as $item) {
  4.   if(preg_match("/$item\$/i", $_FILES['userfile']['name'])) { //Хорошая проверка,всегда нужно проверять тип!!!! Content-Type передаваемый загрузчиком!
  5.    echo "Сюда нельзя загружать такие файлы \n";
  6.    exit;
  7.    }
  8.   }
  9.  

(Отредактировано автором: 27 Августа, 2011 - 17:57:43)

 
 Top
Данил_123
Отправлено: 27 Августа, 2011 - 20:38:14
Post Id


Участник


Покинул форум
Сообщений всего: 1026
Дата рег-ции: Июнь 2011  
Откуда: rostov


Помог: 9 раз(а)




Строка
CODE (html):
скопировать код в буфер обмена
  1. <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>

не помешает.. Так как строка-

Из html5.. а во всем привычном html4.01
CODE (html):
скопировать код в буфер обмена
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


-----
http://mysitecost.ru
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB