За последние 24 часа нас посетили 17590 программистов и 1315 роботов. Сейчас ищут 1726 программистов ...

Исключение с фото не срабатывает

Тема в разделе "PHP для новичков", создана пользователем Рихард, 14 фев 2018.

  1. Рихард

    Рихард Новичок

    С нами с:
    13 янв 2018
    Сообщения:
    89
    Симпатии:
    6
    В общем есть такой код для регистрации пользователя для базы данных и тп манипуляций.
    Код (Text):
    1. <!DOCTYPE html>
    2. <html>
    3. <meta charset="utf8">
    4. <title>Страница регистрации пользователя</title>
    5. <body>
    6. <?php
    7. //Инициализация константы содержащий имя каталога
    8. //для загружаемых фоток
    9. //то есть создаем константу для папки images
    10. //которая находится в корневой папки сайта
    11. define('GW_UPLOADPATH','images/');
    12.  
    13. //Создаем константу для подключения к баззе данных,имя хостинга меняем на константу
    14. define('DB_HOST','localhost');
    15.  
    16. //Создаем константу логин для подклюмения к базе
    17. define('DB_USER','root');
    18.  
    19. //Создаем константу чтобы постоянно не воодить имя базы даных
    20. define('DB_NAME','questionnaire');
    21.  
    22.  
    23.  
    24. // Проверяем сценарий нажали ли кнопку отправить,чтобы ошибка постоянно не выводилась
    25. if(isset($_POST['submit']))// Проверяем кнопку сабмит чтобы вернуть если что форму
    26.     {
    27. //Передаем данные введеные с формы из глобального массива $_POST[]
    28. //в отдельные переменные
    29. $firstname=$_POST['firstname'];
    30. $lastname=$_POST['lastname'];
    31. $sex=$_POST['sex'];
    32. $old=$_POST['old'];
    33. $growth=$_POST['growth'];
    34. $weight=$_POST['weight'];
    35. $profession=$_POST['profession'];
    36. $hobby=$_POST['hobby'];
    37. $family=$_POST['family'];
    38. $children=$_POST['children'];
    39. $information=$_POST['information'];
    40. $email=$_POST['email'];
    41.  
    42. $images=$_FILES['images']['name'];//Вытаскиваем из массива название файла фото
    43. //Массив $_FILES['имя в форме']['имя загружаемого файла']
    44.  
    45. //Сохраняем значение типа файла фото в переменную
    46. //Сохраняем значение размера файла фото в переменную
    47. $images_type=$_FILES['images']['type'];//тип файла
    48. $images_size=$_FILES['images']['size'];//размер файла
    49.  
    50. if((!$images_type=='image/gif') || (!$images_type=='image/jpeg')
    51.     || (!$images_type=='image/png'))
    52.     {
    53.         echo 'Фото необходимо только указанных форматов';
    54.     }
    55.   else
    56.   {
    57. $target=GW_UPLOADPATH.$images;
    58. //Прописываем новый путь где GW_UPLOADPATH это папка images
    59. //а переменная images показывает что в папке images находится
    60.  
    61. move_uploaded_file($_FILES['images']['tmp_name'],$target);
    62. //Перемещаем загружаемый файл(фото) из временного хранилища
    63. //Для этого используем функцию указанную выше
    64.  
    65.   }
    66.  
    67. $output_form=false;// Флажок переменная для запуска формы HTML
    68.  
    69. //Устанавливаем проверку на подлинность введеных данных что они не пустые
    70. //И если данные введены правильно подключаемся к базе если нет то выводим сообщение об ошибке
    71. //Вводи данных в базу если все заполнил кроме фотки
    72. if((!empty($firstname)) && (!empty($lastname)) && (!empty($sex)) && (!empty($old))
    73. && (!empty($growth)) && (!empty($weight)) && (!empty($profession)) && (!empty($hobby))
    74. && (!empty($family)) && (!empty($children)) && (!empty($information)) && (!empty($email)))
    75. {
    76.  
    77.      
    78. //Устанавливаем соединение с сервером базы данных
    79.   $dbc = mysqli_connect(DB_HOST,DB_USER,'',DB_NAME)
    80.   or die ('Ошибка соединения с MYSQL сервером');
    81.  
    82.   // Создаем SQL  строку запроса для внесения информации в таблицу
    83.   $query = "INSERT INTO acquaintances (firstname,lastname,sex,old,growth,weight,profession,hobby,family,children,information,email,images) " .
    84.   "VALUES ('$firstname','$lastname','$sex','$old','$growth','$weight','$profession','$hobby','$family','$children','$information','$email','$images')";
    85.  
    86.   // Непосредственно запускаем функцию запроса к базе
    87.   $result = mysqli_query($dbc,$query)//аргументы функции соединение с сервером и срока запроса
    88.   or die ('Ошибка при выполнении запроса к баззе данных');
    89.  
    90.   // Закрытие канала связи с сервером базы данных
    91.   mysqli_close($dbc);
    92.  
    93.  
    94.   echo "<h2>Вы зарегистрированы </h2>";
    95.   $output_form=true;
    96. }
    97.  
    98. // Если хотя бы одно значение не заполненно в форме
    99. if((empty($firstname)) || (empty($lastname)) || (empty($sex)) || (empty($old))
    100. || (empty($growth)) || (empty($weight)) || (empty($profession)) || (empty($hobby))
    101. || (empty($family)) || (empty($children)) || (empty($information)) || (empty($email)))
    102. {
    103.    
    104.     echo 'Вы не полностью заполнили форму'."<br>";//Соббщение о том что какой пунт формы не заполнил
    105.     $output_form=true;
    106. }
    107.     }// Конец работы тела функции если форма переданна
    108.    
    109.     else {
    110.     $output_form=true;////Запускаешь флажок на показ HTML формы для заполнения
    111.           }
    112.          
    113.          
    114. if($output_form)//Это флажок запускающий форму
    115. {//вместе эчо убираем тупо знаки скрипта
    116. ?>
    117. <!-- Энктипе устанавливает специальное кодирование при загрузке изображений  -->
    118. <form enctype="multipart/form-data" action = "<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    119. <input type="hidden" name="MAX_FILE_SIZE" value="524288"/><!--Устанавливает максимальный размер файла для загрузки -->
    120.             <ul>
    121.             <h5>Введите пожалуйста свои данные для регистрации</h5>
    122.             <ul>
    123.             <li>Фото профиля:до 0,5 мб,форматы jpeg,png,gif<input type = "file" id="images" name = "images"/></br></li>
    124.             <li>Имя:<input type = "text" name = "firstname" value = "<?php echo $firstname; ?>"/></li>
    125.             <li>Фамилия:<input type = "text" name = "lastname" value = "<?php echo $lastname; ?>"/></li>
    126.             <li>Пол:муж<input type="radio" name="sex" value="man"/>
    127.             жен<input type = "radio" name = "sex" value = "woman"/></br></li>
    128.             <li>Ваш возраст:<input type="number" name="old" min="0" max="120"></li>
    129.             <li>Рост: см<input type = "number" name = "growth" min="0" max="250"/></li>
    130.             <li>Вес: кг<input type = "number" name = "weight" min="0" max="5000"/></li>
    131.             <li>Профессия:<input type = "text" name = "profession" value = "<?php echo $profession; ?>"/></li>
    132.             <li>Хобби:<input type = "text" name = "hobby" value = "<?php echo $hobby; ?>"/></li>
    133.             <li>Брак:Женат\Замужем<input type="radio" name="family" value="married" />
    134.             Одинок\ОдинокаЖенат\Замужем<input type="radio" name="family" value="lonely" /></li>
    135.             Все сложно<input type="radio" name="family" value="hard" /></br>
    136.             <li>Дети:есть:<input type="radio" name="children" value="yeas"/>
    137.             нету:<input type="radio" name="children" value="no"/></li>
    138.             <li>Дополнительная Информация:</li><textarea name = "information" rows="10" cols="48" value="<?php echo $information; ?>"/></textarea>
    139.             <li>Адрес электронной почты:<input type = "email" name = "email" value = "<?php echo $email; ?>"/></li>
    140.             <li><input type = "submit" name='submit'/></li>
    141.             </ul>
    142.             </form>
    143. <?php
    144. ;}
    145. ?>
    146.  
    147. </body>
    148.  
    149. </html>



    Вот именно в этой части кода условие иф не срабатывает где может быть ошибка логики или что то еще?
    Код (Text):
    1. $images=$_FILES['images']['name'];//Вытаскиваем из массива название файла фото
    2. //Массив $_FILES['имя в форме']['имя загружаемого файла']
    3.  
    4. //Сохраняем значение типа файла фото в переменную
    5. //Сохраняем значение размера файла фото в переменную
    6. $images_type=$_FILES['images']['type'];//тип файла
    7. $images_size=$_FILES['images']['size'];//размер файла
    8.  
    9. if((!$images_type=='image/gif') || (!$images_type=='image/jpeg')
    10.     || (!$images_type=='image/png'))
    11.     {
    12.         echo 'Фото необходимо только указанных форматов';
    13.     }
    14.   else
    15.   {
    16. $target=GW_UPLOADPATH.$images;
    17. //Прописываем новый путь где GW_UPLOADPATH это папка images
    18. //а переменная images показывает что в папке images находится
    19.  
    20. move_uploaded_file($_FILES['images']['tmp_name'],$target);
    21. //Перемещаем загружаемый файл(фото) из временного хранилища
    22. //Для этого используем функцию указанную выше
    23.  
    24.   }
    И последний самый важный вопрос
    Этот код будет расти при создании к примеру небольшого сайта знакомств или тп . сайта

    Можно ли этот код превратить в ООП если да, то просто в каком направлении нужно двигаться статья или что то в этом роде подскажите опытные разработчики
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Рихард, перечитайте статью "Приоритет выполнения операторов"
    Обратите внимание на оператор отрицания (!) и сравнения (==, !=, ===, !===)
    --- Добавлено ---
    Ещё определитесь с использованием логическоих операторов && (и) и || (или).
    Хотите, чтобы код в ветке if отрабатвал при выполнении одного из условий, или всех сразу?
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.787
    Симпатии:
    1.328
    Адрес:
    Лень
    пришел сюда написать название кода

    Г О В Н О К О Д.


    по сути:
    у тебя валидации всего всех про все - унылое.

    извне принимаем данные от кого/чего - либо и тут же без экранирований, пихаем все в бд. Это как девушка говорит парню - становить раком, сейчас покажу где раки зимуют.

    а что с валидацией фоток и прочее скину ссыль, там дальше думай юзать/нет. Так как с валидацией на уровне типа файла у тебя пусто.
    https://github.com/MouseZver/My-garbage-code/blob/master/upload_class/Upload.php
     
  4. Рихард

    Рихард Новичок

    С нами с:
    13 янв 2018
    Сообщения:
    89
    Симпатии:
    6
    п
    про валидацию и все проверки я в курсу ,тут 1% не написан
    вопрос не в функциях про валидацию и обработку перед отправлением в базу.все это в курсе.
    тут суть .
    --- Добавлено ---
    это сырой вариант
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.787
    Симпатии:
    1.328
    Адрес:
    Лень
    окай, теперь давай разъясним над этой строкой
    PHP:
    1. (!$images_type=='image/gif')
    1. Не факт. Скобки тут никакую пользу и вреда не приносят. У нас же не математическое выражение.
    2. символ ! означает что приводим в булевой тип данных (истину/ложь) + антипод. Т.е. значение есть, не пуст во всех типах ( с null не уверен ) Истина ( true ), переводим противоположному значению false.
    3. Дальше ты употребляешь не строгое сравнение == с другими данными, без проверки типа, а значит сверяющийся будет так же преобразован в булевой тип. Тип наследуется от первого сверяемого объекта.
    4. А значит:
    $type = $_FILES['images']['type']; // пусто ничего не прислалось

    if (
    !$type // пустое значение конвертируется в тип bool значение FALSE ... не забываем про символ антипод ! получаем TRUE
    == // сверяем без типа
    'image/gif' // строка со значением? да! строка какого типа ? да насрать!

    истина == истина

    Опробуй тест:
    PHP:
    1. <?php
    2.  
    3. $a = 'текст';
    4.  
    5. if ( $a == true ) echo 1;
    6. if ( $a === true ) echo 666;
    --- Добавлено ---
    1
    --- Добавлено ---
    В итоге не только виновник в строгой сверке данных, но и антипод !
     
    Рихард нравится это.