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]   

> Без описания
Vhornets
Отправлено: 04 Января, 2013 - 21:27:30
Post Id


Новичок


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


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




В образовательных целях решил написать небольшой класс для регистрации пользователей, но возникли проблемы с реализацией загрузки изображений.
PHP:
скопировать код в буфер обмена
  1. require_once 'Database.php';
  2.  
  3. class Registration extends Database {
  4.     protected $email;
  5.     protected $login;
  6.     protected $password;
  7.     protected $image;
  8.                                        
  9.     public function __construct($email, $login, $password, $image) {
  10.         parent::__construct();
  11.         $this->email = $email;
  12.         $this->login = $login;
  13.         $this->password = $password;
  14.         $this->image = $image;
  15.        
  16.         $this->insert_user();
  17.     }
  18.        
  19.     private function insert_user() {
  20. //Тут обработка запросов к БД и все такое
  21. //В случае успешной вставки записи в БД:
  22.         else {
  23.             chdir("../users");
  24.             mkdir($this->login);//создать персональную папку юзера
  25.             if(!$this->insert_user_image("../users/" . $this->login . "/")) {
  26.                  $this->error_handler("Ошибка при загрузке изображения.");
  27.             }
  28. //И так далее...
  29.         }
  30.     }
  31. //Непосредственно функция загрузки изображения:  
  32.     private function insert_user_image($dirname) {
  33.         $uploadfile = $dirname . time() . "__" . basename($this->image['name']);
  34.  
  35.         if (move_uploaded_file($this->image['tmp_name'], $uploadfile)) {
  36.             return true;
  37.         }
  38.         else {
  39.             return false;
  40.         }
  41.     }
  42. }

Загрузка тут чисто символическая (без проверки типа, размера и т.д.). Использование класса:
PHP:
скопировать код в буфер обмена
  1. $email = $_POST['email'];
  2. $login = $_POST['login'];
  3. $password = $_POST['password'];
  4. $image = $_FILES['image'];
  5. $user = new Registration($email, $login, $password, $image);
  6.  

Помогите разобраться, пожалуйста - изображение не загружается (подозреваю проблему в передаче массива в качестве пар-ра в конструкторе)
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Января, 2013 - 21:38:15
Post Id



Активный участник


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


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




Vhornets пишет:
В образовательных
Пойдет для образовательных.
Vhornets пишет:
Registration extends Database
Чччегоооо??? Не понял Где вы видели чтобы трусы-стринги наследовались от волос на голове?
Vhornets пишет:
mkdir($this->login);//создать персональную папку юзера
Где проверка на уникальность логина перед созданием такой папки? А если логин не латинскими символами или в нем есть такие штуки как / | \ или немецкие умляуты, что делать?
Vhornets пишет:
insert_user_image("../users/"
относительные пути? fffuuuuu...
Vhornets пишет:
if (move_uploaded_file($this->image['tmp_name'], $uploadfile)) {
return true;
}
else {
return false;
}

PHP:
скопировать код в буфер обмена
  1. return move_uploaded_file($this->image['tmp_name'], $uploadfile);

Но всеравно жостко.
Vhornets пишет:
$user = new Registration($email, $login, $password, $image);
Есть ощущение что вы не понимаете ООП и вам рановато туда лезть. Хотя реально похвально. Поэтому дерзайте. На то вам и мои комментарии чтобы впитывать и понимать а не тупить и злиться на меня Закатив глазки
Vhornets пишет:
подозреваю проблему в передаче массива в качестве пар-ра в конструкторе
Что мешает сделать var_dump ?
 
 Top
Vhornets
Отправлено: 04 Января, 2013 - 21:46:39
Post Id


Новичок


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


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




DeepVarvar пишет:
Где проверка на уникальность логина перед созданием такой папки? А если логин не латинскими символами или в нем есть такие штуки как / | \ или немецкие умляуты, что делать?

Я ж пишу - символика сплошная, плюс это ведь не реальный проект Улыбка

DeepVarvar пишет:
относительные пути? fffuuuuu...

Тьфу, забыл поменять - до этого стоял полный путь, но здесь не в этом дело

DeepVarvar пишет:
Чччегоооо??? Где вы видели чтобы трусы-стринги наследовались от волос на голове?

Ну, в классе Database всего лишь происходит подключение к БД через mysqli
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Января, 2013 - 21:54:53
Post Id



Активный участник


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


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




Vhornets пишет:
Ну, в классе Database всего лишь происходит подключение к БД через mysqli
Ага, и в каждом классе, который наследует БД будет новый коннект или... или нет смысла нет наследоваться.
 
 Top
Vhornets
Отправлено: 04 Января, 2013 - 22:05:40
Post Id


Новичок


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


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




DeepVarvar пишет:
Vhornets пишет:
Ну, в классе Database всего лишь происходит подключение к БД через mysqli
Ага, и в каждом классе, который наследует БД будет новый коннект или... или нет смысла нет наследоваться.

Эх, ладно, буду читать дальше. Просто от процедурного программирования уже тошнит - код превращается в непонятное месиво, а в учебниках, которые мне попадались, по ООП пробегались галопом, не затрагивая многие важные моменты
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Января, 2013 - 22:42:55
Post Id



Активный участник


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


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




Vhornets пишет:
по ООП пробегались галопом
А в учебниках об этом почему-то и не пишут. Странно, но правда. Есть некоторые узкопрофильные материалы, в которых такие (и только они) вещи описываются. Вот например Макконелл "Совершенный код", но туда еще возможно вам не скоро окунуться будет понятно, вот в чем беда...
(Добавление)
Чёрд, стал замечать за собой я, что говорю как Йода-изгнанник джедай великий... Я не специально все это ранее... Ха-ха
 
 Top
tyomniy
Отправлено: 18 Января, 2013 - 16:29:31
Post Id


Новичок


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


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




Выкладываю примеры моего кода (может и не совсем грамотного и правильного), но раз уж тема есть то прошу критиковать корректно, без унижений и оскорблений!

Файл регистрации принимающий параметры:

PHP:
скопировать код в буфер обмена
  1. <?
  2. if($reg_act==1){
  3.  
  4. // если уже авторизирован
  5. if($insert==1){
  6.         header("Location: /");
  7. }else{
  8.  
  9. // если не авторизирован регистрируем
  10. if($task=="reg"){
  11.         $errors = $users->reg_users();
  12. if($errors==""){
  13.  
  14. $sender = $users->last_obj('users', 'id');
  15.  
  16. // перенаправить внутрь
  17. echo "<script>
  18. setTimeout('reload()',100);
  19.                 function reload(){
  20.                         window.parent.document.location.href=(\"/users/id{$sender}\");
  21.                 }      
  22. </script>";
  23.  
  24. }else{
  25. // показать ошибку
  26. $kaptcha_img_url = '/caps/?' . str_replace(array(' ', '.'), '', microtime());
  27. echo "<script>
  28. window.parent.alert('$errors');
  29. window.parent.document.getElementById(\"captcha_img\").innerHTML = \"<img src='{$kaptcha_img_url}' alt='{$site_name}' />\";
  30. </script>";
  31. }
  32. }else{
  33.  
  34. // каптча для защиты от спама
  35. $kaptcha_img_url = '/caps/?' . str_replace(array(' ', '.'), '', microtime());
  36. $smarty->assign('kaptcha_img_url', $kaptcha_img_url);
  37.  
  38. } // end if task reg
  39. }
  40.  
  41. }
  42. $smarty->assign('reg_act', $reg_act);
  43. ?>



А это часть кода из класса с функциями регистрации:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4. // установить Cookie пользователю для чего угодно
  5. function set_cookie($name_cookie, $value_cookie){
  6. global $time_cookie;
  7.         @setcookie($name_cookie, $value_cookie, $time_cookie, "/");
  8. }
  9. // удалить Cookie пользователя для чего угодно
  10. function unset_cookie($name_cookie){
  11.         if(!$this->check_cookie($name_cookie)){
  12.                 return false;
  13.         }else{
  14.                 @setcookie($name_cookie);
  15.         }
  16. }
  17. // проверить cookie пользователя для чего угодно
  18. function check_cookie($name_cookie = false){
  19.         if(isset($_COOKIE[$name_cookie])){
  20.                 return true;
  21.         }else{
  22.                 return false;
  23.         }
  24. }
  25.  
  26.  
  27.  
  28. // установить Cookie пользователю для авторизации
  29. function set_user_cookie($login_domain){
  30. global $time_cookie;
  31.         @setcookie("user_login_domain", $login_domain, $time_cookie, "/");
  32. }
  33.  
  34. // проверить cookie пользователя
  35. function check_user_cookie(){
  36. global $query, $assoc;
  37.         if(isset($_COOKIE["user_login_domain"])){
  38.          // проверить наличие в базе данных
  39.                 $sql = "SELECT id FROM users WHERE login_domain = '".$_COOKIE["user_login_domain"]."'";
  40.                 $sender_query = $query($sql);
  41.                
  42.                 if($sender_query){
  43.                         while($row = $assoc($sender_query)){
  44.                                 $sender = $row['id'];
  45.                         }
  46.                 }
  47.                
  48.                 if($sender!=false){
  49.                         return $_COOKIE["user_login_domain"];
  50.                 }else{
  51.                         return false;
  52.                 }
  53.         }else{
  54.                 return false;
  55.         }
  56. }
  57.  
  58. // удалить Cookie пользователя
  59. function unset_user_cookie(){
  60.         if(!$this->check_user_cookie()){
  61.                 return false;
  62.         }else{
  63.                 @setcookie("user_login_domain");
  64.         }
  65. }
  66.  
  67.  
  68. // регистрация нового пользователя
  69. function reg_users(){
  70. global $query, $invite_rate, $senders, $uri_site, $site_name, $regsumm;
  71.  
  72. // ПРИНИМАЕМ ВВЕДЕННЫЕ ДАННЫЕ
  73. $email = $this->str_decode($_POST['email']);
  74.  
  75. $user_pass = $this->str_decode($_POST['you_pass']);
  76. $repass = $this->str_decode($_POST['you_repass']);
  77. $pass = md5 ($user_pass);
  78. $login_domain = md5 ($email.$pass);
  79.  
  80. $reg_name = $this->str_decode($_POST['reg_name']);
  81. $reg_family = $this->str_decode($_POST['reg_family']);
  82.  
  83. $age = $this->str_decode($_POST['age']);
  84. $floor = $this->str_decode($_POST['floor']);
  85.  
  86.  
  87. // ПРОВЕРКА ОШИБОК
  88. $is_name = $this->isNf($reg_name);
  89. $is_family = $this->isNf($reg_family);
  90. $is_Pass = $this->isText($user_pass);
  91. $is_email = $this->isEmail($email);
  92.  
  93. $howreg = $this->howreg($is_email, $user_pass, $repass,  $is_name, $is_family, $is_Pass);
  94.  
  95.  
  96. // ПОКАЗАТЬ СООБЩЕНИЕ ОБ ОШИБКАХ
  97. switch($howreg) {
  98.                         case "1":
  99.                         $ermess = "Имя содержит запрещенные символы!";
  100.                         break;
  101.                         case "2":
  102.                         $ermess = "Фамилия содержит запрещенные символы!";
  103.                         break;
  104.                         case "3":
  105.                         $ermess = "Неверный E-mail!";
  106.                         break;
  107.                         case "4":
  108.                         $ermess = "Введенный Email уже занят!";
  109.                         break;
  110.                         case "5":
  111.                         $ermess = "Не указан пароль!";
  112.                         break;
  113.                         case "6":
  114.                         $ermess = "Пароль содержит запрещенные символы!";
  115.                         break;
  116.                         case "7":
  117.                         $ermess = "Введенные пароли не совпадают!";
  118.                         break;
  119.                         case "8":
  120.                         $ermess = "Неверный код с картинки!";
  121.                         break;
  122. }
  123.  
  124. // ЕСЛИ НЕ ВОЗНИКЛО ОШИБОК РЕГИСТРИРУЕМ
  125. if(!$ermess){
  126.  
  127.  
  128. // ЕСЛИ ПРИШЕЛ ПО ИНВАЙТУ НАЧИСЛИТЬ БОНУС
  129. if($_COOKIE["user_invite"]){
  130.         $user_invite = $_COOKIE["user_invite"];
  131.        
  132.         // проверить есть ли фото на голосовании
  133.         $check_photo = $this->check_info('main_photo_id', 'users', 'id', $user_invite);
  134.         if($check_photo){
  135.         // начислить рейтинг фотографии и пользователю
  136.                 $query("UPDATE users_album_photos SET photo_rate = (photo_rate + '$invite_rate') WHERE photo_id = '$check_photo' LIMIT 1");
  137.                 $query("UPDATE users SET rate = (rate + '$invite_rate') WHERE id = '$user_invite' LIMIT 1");
  138.         }      
  139. }
  140.  
  141. // добавляем пользователя в базу
  142. $sql = "INSERT INTO users (id, email, pass, name, family, age, floor, login_domain, users_date, user_invite, users_update1, rate)
  143.                 VALUE ('', '$email', '$pass', '$reg_name', '$reg_family', '$age', '$floor', '$login_domain', NOW(), '$user_invite', NOW(), '$regsumm')";
  144. $query($sql);
  145.  
  146. // авторизируем
  147. $this->set_user_cookie($login_domain);
  148.  
  149. // Данные пользователя
  150. $sender = $this->last_obj('users', 'id');
  151.                                
  152. // отправляем уведомления
  153. include "addon_pages/reg_mess.php";
  154. }
  155.  
  156. return $ermess;
  157. }
  158.  
  159.  
  160. // ПЕРЕКЛЮЧАТЕЛЬ ДЛЯ ВЫВОДА ОШИБОК И ПРЕДУПРЕЖДЕНИЙ
  161. function howreg($is_email, $user_pass, $repass,  $is_name, $is_family, $is_Pass){
  162. global $query, $num_rows;
  163.  
  164. if(!$is_name){
  165. $error = 1; // в имени запрещенные символы!
  166. }
  167. if(!$is_family){
  168. $error = 2; // в фамилии запрещенные символы!
  169. }
  170. if(!$is_email){
  171. $error = 3; // неверный емайл адрес!
  172. }
  173. $email_query = $query("SELECT email FROM users WHERE email='$is_email'");
  174. if($num_rows($email_query)!=0){
  175. $error = 4; // email уже занят!
  176. }
  177. if($user_pass==""){
  178. $error = 5; // не указан пароль
  179. }
  180. if(!$is_Pass){
  181. $error = 6; // в пароле запрещенные символы!
  182. }
  183. if($user_pass != $repass){
  184. $error = 7; // пароли не совпадают
  185. }
  186. if($_SESSION['captcha_keystring'] != $_POST['captcha_string']){
  187. $error = 8; // неверный код с картинки!
  188. }
  189.  
  190. return $error;
  191. }// end howreg
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200. /////// START этот блок надо заменить на новую функцию preg_match() ///////////
  201.  
  202. // ПРОВЕРКА ДОПУСТИМЫХ СИМВОЛОВ
  203. function isText($text){
  204.         if (preg_match("/([_a-z0-9-])/i", $text)) {
  205.                 return true;
  206.         }
  207. }// end isText
  208.  
  209.  
  210. // ПРОВЕРКА ПРАВИЛЬНОСТИ ВВЕДЕННОГО ЕМАЙЛ АДРЕСА
  211. function isEmail($email){
  212. if (!preg_match('|([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})|is', $email)){
  213.         return false;
  214. }else{
  215.         return true;
  216. }
  217. }// end isEmail
  218.  
  219.  
  220. // ПРОВЕРКА ПРАВИЛЬНОСТИ ВВЕДЕННЫХ ИМЕНИ И ФАМИЛИИ
  221. function isNf($nf){
  222. //return eregi('[0-9_a-zA-Zа-яА-я]', $nf);
  223.         if (preg_match("/([_a-zа-я-])/i", $nf)) {
  224.                 return true;
  225.         }
  226. }// end isNf
  227.  
  228.  
  229. // ПРОВЕРКА ПРАВИЛЬНОСТИ ССЫЛКИ
  230. function isLink($link){
  231.         if (preg_match("/([a-z]+:\/\/+[_a-z0-9-]+\.+[a-z])/i", $link)) {
  232.                 return $link;
  233.         }
  234. }// end isLink
  235.  
  236.  
 
 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