Как прикрепить фото к определенному пользователю php
Перейти к содержимому

Как прикрепить фото к определенному пользователю php

  • автор:

Смена фото в профиле пользователя

Я начинающий в разроботке сайтов, сечас я делаю личный кабинет пользователя. У меня возникла проблема с реализацией смены фото у пользователя. Мне нужно чтобы по нажатию на кнопку открывалось окно проводника, человек выбирал фото и оно загружалось в бд, а потом при заходе в профиль фото выгружалось на страницу Мне нужно понять как сделать загрузку фото в бд и как его выгружать из бд на php.

Отслеживать
задан 7 фев 2020 в 12:46
375 2 2 серебряных знака 16 16 бронзовых знаков
обычно картинки сохраняют в файловой системе, а в БД хранят путь к ним.
7 фев 2020 в 12:58
как тогда сохранять картинки в определенную дерикторию загруженные пользователем?
7 фев 2020 в 13:03
Меня интерисует функция загрузки
7 фев 2020 в 13:09

на тему загрузки файлов на сервер вы можете найти сотни статей и документации. Когда прочитаете и не будет получаться, тогда и придете тут вопрос задавать. Тут помогает проблему решать, а не теоретические основы рассказывают.

7 фев 2020 в 13:11
Спасибо за подсказку на счет загрузки файлов на хостинг и записи в бд пути к ней, очень помогло
7 фев 2020 в 13:58

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

   

Прием файла в accept.php:

$uploadfile = basename($_FILES['file']['name']); if (move_uploaded_file($_FILES['file']['tmp_name'], './' . $uploadfile))

Для сохранения файла рекомендую создать какое-то хранилище на сервере и кидать данные в по генерированному пути, чтобы избежать дублирования файлов. Пример кода как это можно реализовать:

/** * Расчитать новый путь в хранилище * * @param string $storagePath * @param string $originalPath * @param boolean $saveOriginalFileName */ protected function calculatePath($storagePath, $originalPath, $saveOriginalFileName = false) < $path = $this->calculateMiddlePath($storagePath, $originalPath); if (!file_exists($path)) < mkdir($path, 0777, true); >return $path . '/' . $this->calculateFileName($originalPath, $saveOriginalFileName); > /** * Сгенерировать путь до файла * * @param string $storagePath * @param string $originalPath */ private function calculateMiddlePath($storagePath, $originalPath) < $pathMid = str_split(md5($originalPath . strtotime('now')), 4); $pathMid = implode('/', $pathMid); return $storagePath . $pathMid; >/** * Сгенерировать новое имя файла * * @param string $originalPath * @param bool $saveOriginalFileName */ private function calculateFileName($originalPath, $saveOriginalFileName) < if ($saveOriginalFileName) < return basename($originalPath); >return md5($originalPath) . '.' . pathinfo($originalPath, PATHINFO_EXTENSION); > 

Как вам уже подсказали в комментариях, хранить файлы в базе данных — не лучшая идея. Достаточно сохранить сгененированный путь.

P.S Не стоит увлекаться с генерацией длинного пути)

Как прикрепить фото к определенному пользователю php

Когда происходит отправка данных формы PHP-скрипту, информация из этой формы автоматически становится доступной ему. Существует несколько способов получения этой информации, например:

Пример #1 Простая HTML-форма

 
Имя:
Email:

Есть только два способа получить доступ к данным из форм HTML. Доступные сейчас способы приведены ниже:

Пример #2 Доступ к данным из простой HTML-формы, отправленной через POST

echo $_POST [ ‘username’ ];
echo $_REQUEST [ ‘username’ ];
?>

GET-форма используется аналогично, за исключением того, что вместо POST, вам нужно будет использовать соответствующую предопределённую переменную GET. GET относится также к QUERY_STRING (информация в URL после ‘?’). Так, например, http://www.example.com/test.php?id=3 содержит GET-данные, доступные как $_GET[‘id’] . Смотрите также $_REQUEST .

Замечание:

Точки и пробелы в именах переменных преобразовывается в знаки подчёркивания. Например, станет $_REQUEST[«a_b»] .

PHP также понимает массивы в контексте переменных формы (смотрите соответствующие ЧАВО). К примеру, вы можете сгруппировать связанные переменные вместе или использовать эту возможность для получения значений списка множественного выбора select. Например, давайте отправим форму самой себе, а после отправки отобразим данные:

Пример #3 Более сложные переменные формы

if ( $_POST ) echo ‘

' ; 
echo htmlspecialchars ( print_r ( $_POST , true ));
echo '

‘ ;
>
?>

Имя:

Email:

Пиво:

Замечание: Если внешнее имя переменной начинается с корректного синтаксиса массива, завершающие символы молча игнорируются. Например, станет $_REQUEST[‘foo’][‘bar’] .

Имена переменных кнопки-изображения

При отправке формы вместо стандартной кнопки можно использовать изображение с помощью тега такого вида:

Когда пользователь щёлкнет где-нибудь на изображении, соответствующая форма будет передана на сервер с двумя дополнительными переменными — sub_x и sub_y . Они содержат координаты нажатия пользователя на изображение. Опытные программисты могут заметить, что на самом деле имена переменных, отправленных браузером, содержат точку, а не подчёркивание, но PHP автоматически преобразовывает точку в подчёркивание.

HTTP Cookies

PHP прозрачно поддерживает HTTP cookies как определено в » RFC 6265. Cookies — это механизм для хранения данных в удалённом браузере и, таким образом, отслеживания и идентификации вернувшихся пользователей. Вы можете установить cookies, используя функцию setcookie() . Cookies являются частью HTTP-заголовка, поэтому функция SetCookie должна вызываться до того, как браузеру будет отправлен какой бы то ни было вывод. Это то же ограничение, что и для функции header() . Данные, хранящиеся в cookie, доступны в соответствующих массивах данных cookie, таких как $_COOKIE и $_REQUEST . Подробности и примеры смотрите в справочной странице setcookie() .

Замечание: Начиная с PHP 7.2.34, 7.3.23 и 7.4.11, соответственно, имена входящих cookie больше не декодируются из URL-закодированной строки из соображений безопасности.

Если вы хотите присвоить множество значений одной переменной cookie, вы можете присвоить их как массив. Например:

setcookie ( «MyCookie[foo]» , ‘Testing 1’ , time ()+ 3600 );
setcookie ( «MyCookie[bar]» , ‘Testing 2’ , time ()+ 3600 );
?>

Это создаст две разные cookie, хотя в вашем скрипте MyCookie будет теперь одним массивом. Если вы хотите установить именно одну cookie со множеством значений, сначала рассмотрите возможность использования к значениям такие функции, как serialize() или explode() .

Обратите внимание, что cookie заменит предыдущую cookie с тем же именем в вашем браузере, если только путь или домен не отличаются. Так, для приложения корзины покупок вы, возможно, захотите сохранить счётчик. То есть:

Пример #4 Пример использования setcookie()

if (isset( $_COOKIE [ ‘count’ ])) $count = $_COOKIE [ ‘count’ ] + 1 ;
> else $count = 1 ;
>
setcookie ( ‘count’ , $count , time ()+ 3600 );
setcookie ( «Cart[ $count ]» , $item , time ()+ 3600 );
?>

Точки в именах приходящих переменных

Как правило, PHP не меняет передаваемых скрипту имён переменных. Однако следует отметить, что точка не является корректным символом в имени переменной PHP. Поэтому рассмотрим такую запись:

$varname . ext ; /* неверное имя переменной */
?>

В данном случае интерпретатор видит переменную $varname , после которой идёт оператор конкатенации, а затем голая строка (то есть, не заключённая в кавычки строка, не соответствующая ни одному из ключевых или зарезервированных слов) ‘ext’. Очевидно, что это не даст ожидаемого результата.

По этой причине важно отметить, что PHP будет автоматически заменять любые точки в именах, приходящих переменных на символы подчёркивания.

Определение типов переменных

Поскольку PHP определяет типы переменных и преобразовывает их (как правило) по мере необходимости, не всегда очевидно, какой тип имеет данная переменная в любой момент времени. PHP содержит несколько функций, позволяющих определить тип переменной, таких как: gettype() , is_array() , is_float() , is_int() , is_object() и is_string() . Смотрите также раздел Типы.

HTTP является текстовым протоколом, и большинство, если не всё, содержимое, которое приходит в суперглобальные массивы, например, $_POST и $_GET , останется в виде строк. PHP не будет преобразовывать значения в определённый тип. В приведённом ниже примере $_GET[«var1»] будет содержать строку «null», а $_GET[«var2»] — строку «123».

/index.php?var1=null&var2=123

Список изменений

Версия Описание
7.2.34, 7.3.23, 7.4.11 имена входящих cookie больше не декодируются из URL-закодированной строки из соображений безопасности.

User Contributed Notes 2 notes

16 years ago

The full list of field-name characters that PHP converts to _ (underscore) is the following (not just dot):
chr(32) ( ) (space)
chr(46) (.) (dot)
chr(91) ([) (open square bracket)
chr(128) — chr(159) (various)

PHP irreversibly modifies field names containing these characters in an attempt to maintain compatibility with the deprecated register_globals feature.

18 years ago

This post is with regards to handling forms that have more than one submit button.

Suppose we have an HTML form with a submit button specified like this:

Normally the ‘value’ attribute of the HTML ‘input’ tag (in this case «Delete») that creates the submit button can be accessed in PHP after post like this:

$_POST [ ‘action_button’ ];
?>

We of course use the ‘name’ of the button as an index into the $_POST array.

This works fine, except when we want to pass more information with the click of this particular button.

Imagine a scenario where you’re dealing with user management in some administrative interface. You are presented with a list of user names queried from a database and wish to add a «Delete» and «Modify» button next to each of the names in the list. Naturally the ‘value’ of our buttons in the HTML form that we want to display will be «Delete» and «Modify» since that’s what we want to appear on the buttons’ faceplates.

Both buttons (Modify and Delete) will be named «action_button» since that’s what we want to index the $_POST array with. In other words, the ‘name’ of the buttons along cannot carry any uniquely identifying information if we want to process them systematically after submit. Since these buttons will exist for every user in the list, we need some further way to distinguish them, so that we know for which user one of the buttons has been pressed.

Using arrays is the way to go. Assuming that we know the unique numerical identifier of each user, such as their primary key from the database, and we DON’T wish to protect that number from the public, we can make the ‘action_button’ into an array and use the user’s unique numerical identifier as a key in this array.

Our HTML code to display the buttons will become:

The 0000000002 is of course the unique numerical identifier for this particular user.

Then when we handle this form in PHP we need to do the following to extract both the ‘value’ of the button («Delete» or «Modify») and the unique numerical identifier of the user we wish to affect (0000000002 in this case). The following will print either «Modify» or «Delete», as well as the unique number of the user:

$submitted_array = array_keys ( $_POST [ ‘action_button’ ]);
echo ( $_POST [ ‘action_button’ ][ $submitted_array [ 0 ]] . » » . $submitted_array [ 0 ]);
?>

$submitted_array[0] carries the 0000000002.
When we index that into the $_POST[‘action_button’], like we did above, we will extract the string that was used as ‘value’ in the HTML code ‘input’ tag that created this button.

If we wish to protect the unique numerical identifier, we must use some other uniquely identifying attribute of each user. Possibly that attribute should be encrypted when output into the form for greater security.

  • Переменные
    • Основы
    • Предопределённые переменные
    • Область видимости переменной
    • Переменные переменных
    • Переменные извне PHP
    • Copyright © 2001-2024 The PHP Group
    • My PHP.net
    • Contact
    • Other PHP.net sites
    • Privacy policy

    Пишем фотоальбом на PHP

    В предыдущих уроках мы с вами писали систему авторизации на PHP и скрипт для загрузки файлов на сервер. В этом уроке мы с вами объединим эти умения в единую систему и создадим фотоальбом.

    Это будет веб-приложение, в котором после авторизации можно загружать новые фото, а все остальные пользователи смогут видеть список фоток, а также просматривать каждую фотографию отдельно.

    Мы будем расширять уже созданную нами ранее систему авторизации, её исходный код до начала изменений вы можете скачать тут.

    Создадим также файл upload.php из прошлого урока и папку upload. Должно получиться вот так.

    Загружать картинки может только авторизованный пользователь

    Теперь давайте сделаем так, чтобы upload.php мог использовать только авторизованный пользователь.
    Для этого в начале скрипта добавим проверку того, что пользователь авторизован:

    Этим мы просто не допустим загрузку файла на сервер. Помимо этого в upload.php нужно неавторизованному пользователю вообще не показывать форму для загрузки файлов. Проще простого, добавляем ещё одно условие:

    .  Загрузка файла   Авторизуйтесь Добро пожаловать, | Выйти 

    Отлично, теперь загружать файлы можно только после логина.

    • Курс HTML для начинающих
    • Курс PHP для начинающих
    • Курс MySQL для начинающих
    • Курс ООП в PHP

    Список фотографий

    Давайте теперь сделаем страничку с выводом списка фотографий. Для этого мы изменим файл index.php.

    Для начала давайте загрузим с помощью upload.php несколько фоток. Я взял картинки с котиками, назвал их 1.jpg, 2.jpg, 3.jpg и загрузил их через формочку. После этого они появились в папке uploads.

    Фотки после загрузки на сервер

    Так как наши фоточки сохраняются в папку uploads, то из неё и будем формировать наш список.
    В домашнем задании к одному из прошлых уроков вы должны были познакомиться с функцией scandir(). Она возвращает список файлов в директории в виде массива.

    Давайте запишем в файл index.php следующий код:

    Теперь запустим скрипт в браузере и увидим следующее:

    Файлы в папке uploads

    . и .. – это текущая директория и родительская директория соответственно. А вот всё остальное – это наши файлы.

    Давайте сформируем список ссылок на наши картинки. Пройдёмся по массиву с именами файлов и приклеим перед их именами текст http://myproject.loc/uploads/, а ещё нам нужно проигнорировать папки . и ...

     $files = scandir(__DIR__ . '/uploads'); $links = []; foreach ($files as $fileName) < if ($fileName === '.' || $fileName === '..') < continue; >$links[] = 'http://myproject.loc/uploads/' . $fileName; > var_dump($links);

    Теперь в $links лежат прямые ссылки на все наши загруженные картинки.

    Ссылки на загруженные картинки

    Остаётся только вывести превьюшки!

      Фотоальбом   $links[] = 'http://myproject.loc/uploads/' . $fileName; > foreach ($links as $link):?>  

    Полюбуемся на результат.

    Вывод фоток в альбоме

    Остаётся только добавить ссылки, чтобы при клике на картинки открывалась исходная фоточка.

    Вот и всё! Полный исходный код текущего состояния доступен здесь. А изменения, которые были произведены в данном уроке, можно наглядно рассмотреть вот здесь.

    Как сделать картинку ссылкой

    Обычно ссылка выглядит как подчёркнутый участок текста, окрашенный в стандартный синий цвет. Нажимая на заинтересовавшую ссылку, пользователь переходит на новую страницу или сайт.

    Ссылки в большой статье могут потеряться, а вот красочная картинка привлекает больше внимания.

    Чтобы вставить изображение на сайт, используют тег . У тега есть четыре обязательных атрибута:

    • src — для указания пути до файла с картинкой и его отображения на экране;
    • width и height — размеры изображения. Эти атрибуты позволяют резервировать место для изображения, чтобы убрать «прыжки» страницы пока изображение грузится;
    • alt — альтернативное описание.
     Котик

    Адрес ссылки задаётся в формате URL с помощью атрибута href .

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

    Как выделить изображение-ссылку?

    Если вы хотите выделить ссылку, сделайте картинку увеличивающейся или подсветите её цветом при наведении курсора.

    Чтобы картинка-ссылка меняла цвет, пропишите в стилях её состояние:

    a:hover img

    Состояние :hover срабатывает, когда пользователь наводит курсор мыши на элемент. Но, если картинка совсем пропадёт, а вместо неё появится яркий цвет, пользователь не успеет рассмотреть изображение.

    Чтобы цвет был полупрозрачным, а картинка просвечивала сквозь него, укажите свойство opacity .

    a:hover img

    Это свойство задает уровень прозрачности элемента. Значение 0 соответствует полной прозрачности, а значение 1 — полной непрозрачности. Укажите любое число от 0 до 1 , чтобы получить нужный уровень прозрачности.

    На втором изображении видим эффект свойства hover при наведенном курсоре. Источник

    Чтобы картинка увеличивалась при наведении курсора, примените свойство transform .

    a:hover img

    Теперь при наведении курсора картинка увеличится в полтора раза. Вместо числа 1.5 укажите подходящее значение, чтобы увеличить или уменьшить картинку. Больше единицы — увеличить, от 0 до 1 — уменьшить. Например, если нужно уменьшить картинку в два раза, укажите для свойства transform значение 0.5.

    Полезные материалы

    • Что такое ссылки и как их ставить. Тег а
    • 6 простых правил хорошего alt-текста
    • Как убрать подчёркивание ссылок
    • Полупрозрачный градиент над картинкой на чистом CSS
    • Нестандартное подчёркивание текста на чистом CSS. Свойство text-decoration

    «Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

    Читать дальше

    Что такое Lazy Loading и как её включить на сайте

    Что такое Lazy Loading и как её включить на сайте

    Ленивая загрузка (буквально, lazy loading) — это возможность отложить загрузку ненужного прямо сейчас медиаконтента.

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

    • 22 ноября 2023

    Знакомство с HTML

    Знакомство с HTML

    Привет, будущие фронтенд-разработчики! Добро пожаловать в увлекательный мир веб-разработки. Перед тем как двигаться дальше, давайте разберёмся с основами — языком разметки гипертекста или просто HTML.

    HTML (Hypertext Markup Language) — это стандартный язык, который используется для создания веб-страниц. Представьте, что ваша веб-страница — это книга. Тогда HTML — это скелет этой книги, костяк, который определяет структуру: где будет заголовок, абзацы, изображения и так далее.

    • 1 ноября 2023

    Специальные символы в HTML

    Специальные символы в HTML

    HTML использует особенные комбинации символов, чтобы корректно отображать определенные знаки на веб-страницах. Например, вместо простого знака «меньше» мы видим комбинацию <. В этой статье представлен список таких символов. Это небольшой справочник для тех, кто хочет быстро найти нужный код.

    • 23 октября 2023

    Простое диалоговое окно на HTML

    Простое диалоговое окно на HTML

    Вот короткое демо:

    • 18 октября 2023

    Зачем нужен метатег viewport

    Зачем нужен метатег viewport

    Каждый из нас хоть раз в жизни сталкивался с веб-страницами, которые кажутся «сломанными» или странно отображаются на мобильных устройствах. Одной из причин такого поведения может быть отсутствие маленького, но важного элемента в коде страницы — метатега viewport .

    Метатеги — это инструкции для браузера о том, как отображать содержимое страницы. Один из таких метатегов — viewport , который говорит браузеру, как масштабировать и отображать страницу на разных устройствах, особенно на смартфонах и планшетах.

    Важно, чтобы сайты классно выглядели не только на компьютерах, но и на маленьких экранах смартфона. Если не использовать viewport , то сайт может выглядеть как уменьшенная версия десктопного сайта на мобильном экране, что делает его трудночитаемым и неудобным для использования. Конечно, нужно ещё много всего сделать для адаптивности, но viewport тоже нужен.

    • 18 сентября 2023

    Атрибут class в HTML на примерах

    Атрибут class в HTML на примерах

    Атрибут class используется для добавления CSS-классов элементам HTML. Классы позволяют применять одни и те же стили CSS или поведение JavaScript к разным элементам на странице.

    Так, одному элементу можно присвоить один или несколько классов, разделяя их пробелами.

    • 14 сентября 2023

    В чём отличия цитат blockquote, cite и q

    В чём отличия цитат blockquote, cite и q

    В HTML есть разные теги для цитирования и указания источников. Основные из них: , и . Давайте разберёмся в их различиях.

    • 12 сентября 2023

    Осмысленный alt-текст: 6 правил

    Осмысленный alt-текст: 6 правил

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

    Мы уже обсудили основные правила написания alt-текста для фотографий и изображений. В этот раз поговорим о том, каким именно должно быть описание, чтобы в нём был смысл.

    • 31 июля 2023

    Растровая и векторная графика

    Растровая и векторная графика

    Давайте попробуем разобраться, в чём отличие растровой графики от векторной.

    • 13 июня 2023

    Как понять, что перед вами заголовок

    Как понять, что перед вами заголовок

    Заголовки используются для организации и структурирования содержимого на сайте. В HTML существует шесть уровней заголовков, обозначаемых тегами от до . Каждый уровень заголовка имеет свой семантический вес, где имеет наибольший вес, а — наименьший.

    Часто кажется, что заголовок — это простой и понятный тег. Но это впечатление обманчиво, потому что не всегда крупный и выделенный текст на макете является заголовком.

    При вёрстке сайта важно соблюдать семантику, чтобы все теги использовались корректно и ресурс работал без ошибок. Если напутать уровни заголовков, то структура страницы будет не семантичной, а скринридеры неправильно прочтут сайт.

    В статье разберёмся, как верно определять заголовки по макету, какие из них лучше делать скрытыми и почему.

    • 8 июня 2023

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *