Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 1
Регистрация: 18.03.2017
Сообщений: 56

Пример добавление статьи с загрузкой картинки

14.02.2020, 21:18. Показов 2006. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть у кого пример, на чистом php как это написать. Заранее благодарю
У меня есть уже код добавление заголовка,краткого содержания статьи и полное содержание статьи,а вот как реализовать такое добавление картинки не знаю. Изначально решил сделать через отдельную кнопку upload, и потом вставить путь в текстовое поле, но преподавателю такой метод не понравился,и настаивает на таком типе.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.02.2020, 21:18
Ответы с готовыми решениями:

Форма обратной связи с загрузкой картинки
Помогите пожалуйста. У меня на сайте стоит форма обратной связи. Хочу добавить туда и загрузку картинки, и, чтобы она пришла на почту...

Можно ли узнать размер картинки перед ее загрузкой?
Мне нужно знать ее высоту и ширину в пикселях.

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

11
Невнимательный
 Аватар для ft4l
2840 / 1266 / 358
Регистрация: 08.02.2013
Сообщений: 7,367
Записей в блоге: 2
14.02.2020, 21:46
Что мешает в пример простой зарузки файла,
типа https://www.w3schools.com/php/php_file_upload.asp
добавить несколько select к форме, и принятие обработку нескольких значений из $_POST
в обработчике ?
Подумайте так-же о безопасном использовании принимаемых данных...
0
0 / 0 / 1
Регистрация: 18.03.2017
Сообщений: 56
14.02.2020, 21:49  [ТС]
не смогу так сделать скорее всего. Но попробую
0
Невнимательный
 Аватар для ft4l
2840 / 1266 / 358
Регистрация: 08.02.2013
Сообщений: 7,367
Записей в блоге: 2
14.02.2020, 22:04
Цитата Сообщение от x_lab Посмотреть сообщение
несколько select
имел ввиду <input type="text">
// upd хотя select тоже присутствует судя по картинке

Добавлено через 3 минуты
Получаете список категорий из БД ?
0
0 / 0 / 1
Регистрация: 18.03.2017
Сообщений: 56
14.02.2020, 22:07  [ТС]
upload у меня так реализован
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
$uploaddir = 'images/';
// это папка, в которую будет загружаться картинка
$apend=date('YmdHis').rand(100,1000).'.jpg'; 
// это имя, которое будет присвоено изображению 
$uploadfile = "$uploaddir$apend"; 
//в переменную $uploadfile будет входить папка и имя изображения
 
// В данной строке самое важное - проверяем загружается ли изображение (а может вредоносный код?)
// И проходит ли изображение по весу. В нашем случае до 512 Кб
if(($_FILES['userfile']['type'] == 'image/gif' || $_FILES['userfile']['type'] == 'image/jpeg' || $_FILES['userfile']['type'] == 'image/png') && ($_FILES['userfile']['size'] != 0 and $_FILES['userfile']['size']<=200000000)) 
{ 
// Указываем максимальный вес загружаемого файла. Сейчас до 512 Кб 
   if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) 
   { 
   //Здесь идет процесс загрузки изображения 
   $size = getimagesize($uploadfile); 
   // с помощью этой функции мы можем получить размер пикселей изображения 
     if ($size[0] > 1 && $size[1]>1) 
     { 
     // если размер изображения не более 800 пикселей по ширине и не более 300 по  высоте 
     echo "Файл загружен. Путь к файлу: <b>".$uploadfile."</b>"; 
     } else {
      echo "Загружаемое изображение превышает допустимые нормы (ширина не более - 800; высота не более 300)"; 
      unlink($uploadfile); 
     // удаление файла 
     } 
   } else {
   echo "Файл не загружен, вернитеcь и попробуйте еще раз";
   } 
} else { 
echo "Размер файла не должен превышать 512Кб";
} 
?>
Форма с добавление новости вот так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<body bgcolor=grey>
<form action="loadnews.php" method="post">
 
    <div style="text-align: center;"><p><font color="black"><font size="+2">Заголовок новости:</font></p><textarea type="text" name="nazv"/></textarea></div>
    <div style="text-align: center;"><p><font color="black"><font size="+2">Содержание новости:</font></p><textarea type="text" name="novo"/></textarea></div>
    <div style="text-align: center;"><p><font color="black"><font size="+2">Превью новости:</font></p><textarea type="text" name="prev"/></textarea></div>
    <div style="text-align: center;"><p><font color="black"><font size="+2">Путь картинки:</font></p><textarea type="text" name="pikt"/></textarea></div>
   <div style="text-align: center;"> <p><input type="submit" name="da" value="Добавить новость"></p></div>
   
   
</form>
 
</form>
А добавление статьи вот
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<!DOCTYPE html>
<html>
 
<head>
 
</head>
 
<body>
 
<?php
$driver = 'mysql';
$host = 'localhost';
$db_name = 'server';
$db_user = 'root';
$db_pas = 'Qwerty123';
$charset = 'utf8';
$options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];
try {
$pdo = new PDO("$driver:host=$host;dbname=$db_name;charset=$charset", $db_user, $db_pas, $options);
 
} catch (PDOException $e) {
die("Не могу подключиться к бд");
}
$name=$_POST["nazv"];
$news=$_POST["novo"];
$prevu=$_POST["prev"];
$pik=$_POST["pikt"];
$sql='INSERT INTO new (name,news,prevu,pik) VALUES (:name,:news,:prevu,:pik)';
$parametrs = [ 'name' => $name, 'news' =>$news, 'prevu' => $prevu, 'pik' => $pik];
$st = $pdo ->prepare($sql);
$st ->execute($parametrs);
echo "Новость добавлена";
 
?>
<form action="novayastr.php">
    <input type="submit" name="pere" value="Вернуться"/>
    
</form>
 
</body>
 
</html>
<?php
 
 
?>
и как это сделать воедино как вы предлагали?
0
Невнимательный
 Аватар для ft4l
2840 / 1266 / 358
Регистрация: 08.02.2013
Сообщений: 7,367
Записей в блоге: 2
14.02.2020, 22:29
Цитата Сообщение от jenders Посмотреть сообщение
как реализовать такое
По картинке похоже что нужно использовать, как минимум, две таблицы в БД...
одна с категориями, другая с новостями.
Причём назначение "Дополнительные категории"
неизвестно.... возможно это для ввода нового имени для создаваемой категории.
Не видно так-же присутствует-ли там textarea, для ввода текста статьи.

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

И только потом обработчик
0
0 / 0 / 1
Регистрация: 18.03.2017
Сообщений: 56
14.02.2020, 23:02  [ТС]
да категории и не нужны,нужно просто чтоб на одной форме через кнопку добавить картинку и чтоб одновременно это все залилось как статья
0
 Аватар для wwowa
308 / 261 / 70
Регистрация: 01.12.2008
Сообщений: 1,031
15.02.2020, 17:26
Цитата Сообщение от jenders Посмотреть сообщение
просто чтоб на одной форме через кнопку
Можно и через кнопку. Но все равно у вас должен быть задействован
HTML5
1
<input id='fileid' type='file'/>
И без js не выйдет. имхо.
А как соединить?
Просто по порядку выполняйте код.
Вначале рисунок. В результате у вас есть имя картинки. Зачем для этого отдельное поле.
Потом то что вы берете из POST и там
PHP
1
$pik=$uploadfile;
И все. Наверное
Вы забыли указать форме
HTML5
1
enctype="multipart/form-data"
И вам будет доступно и POST и FILE.
А здесь почти готовый пример


Добавлено через 3 минуты
В базу я бы сохранял только имя картинки. Остальной путь дописывал бы в выводе. Так, наверное правильнее.
0
Невнимательный
 Аватар для ft4l
2840 / 1266 / 358
Регистрация: 08.02.2013
Сообщений: 7,367
Записей в блоге: 2
15.02.2020, 18:20
Фор
Цитата Сообщение от wwowa Посмотреть сообщение
Вы забыли указать форме
enctype="multipart/form-data"
Форма вообще странная Похоже на какой-то злобный высер визуального редактора html)
Не могу понять неужели бывает проще тыкать мышкой различные иконки/пунктики по редактору чем например
просто каких-нибудь пару снипетов один раз куда-то добавить, типа поменьше тегов, побольше css
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE htm>
<html>
<head>
  <meta charset="utf-8">
  <title>xxxxx</title>
  <style>
html {background:#777;}
body {margin:2pt auto; width:94%; background:#EEE;}
fieldset    {border-radius:1ex;}
.frm {width: 80%; margin:1ex 1ex 1ex auto;  background:#DDD;
    border-radius:1em; text-align:center; font:500 102% Sans;}
.frm *      {border-radius:3pt;}
.frm textarea {width:90%}
  </style>
</head>
<body>
 <div class="frm">
 <form action="loadnews.php" method="post" enctype="multipart/form-data">
    <fieldset>
        <legend>Заголовок новости</legend>
        <input type="text" name="nazv" style="width:100%;"/>
    </fieldset>
    <p>Содержание новости:</p>
    <textarea rows="7" name="novo"></textarea>
    <p>Превью новости:</p>
    <textarea rows="4" name="prev"></textarea>
    <p>картинкa:</p>
    <input type="file" name="pikt"/>
    <p><input type="submit" name="da" value="Добавить новость"/></p>
   
 </form>
 </div>
</body>
</html>
и потом юзать просто ctrl+C ctrl+X ctrl+V с двойными-тройными кликами по словам
0
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
16.02.2020, 19:37
Цитата Сообщение от jenders Посмотреть сообщение
upload у меня так реализован
по-порядку.
2 - пожалуй, единственная строчка, к которой не вопросов. оставляем так.
4, 6 - присвоили расширение jpg. а если загрузят png, gif. бывает bmp - почему их не хотите оставить. второй вопрос - вы присвоили имя и расширение файлу, даже не проверив - загружен ли он.
10 - вы пишите // И проходит ли изображение по весу. В нашем случае до 512 Кб
вот проверка $_FILES['userfile']['size'] != 0 and $_FILES['userfile']['size']<=200000000 - где здесь 512кб?
14, 17 - getimagesize можно использовать для темпового файла, до сохранения его на сервере
19 if ($size[0] > 1 && $size[1]>1) - с помощью этой функции можно получить размер пикселей изображения. уважаемый пиксели имеют всегда один и тот же размер. вы по ходу вдумывайтесь в то что пишите. наверное имели в виду размер изображения в пикселях? здесь вы проверяете только то, что ширина и высота изображения больше 1.
в остальных строчках смысла не больше
Цитата Сообщение от jenders Посмотреть сообщение
А добавление статьи вот
далее вам надо понять что вы загружаете не один файл картинки, но и другие данные формы. где их обработка, почему в каком-то файле с html кодом, а не в файле upload.
этот скрипт записи данных в базу данных в добавлении статьи должен быть в файле upload, только вместо непонятного $_POST['pikt'] там должно быть $append или $uploadfile.
перейдем к форме добавления новости
зачем там строчки 6 и 7?
для загрузки файла нужна форма примерно такая как у x_lab, только name там должно быть userfile, учитывая ваш обработчик загрузки файлов, то есть вместо <input type="file" name="pikt"/> надо примерно так
HTML5
1
2
<input type='file' accept='image/*' name='userfile'>
<input type="hidden" name="MAX_FILE_SIZE" value="512000">
поле MAX_FILE_SIZE ограничивает максимальный размер загружаемого файла
Цитата Сообщение от jenders Посмотреть сообщение
не смогу так сделать скорее всего
значит вы не сможете сделать правильно. там приведен осмысленный код, в отличие от вашего. когда вы пишите какой-то код постарайтесь понимать, что именно этот код делает.
вникайте, спрашивайте, разберемся
0
775 / 444 / 93
Регистрация: 24.10.2012
Сообщений: 3,240
Записей в блоге: 5
17.02.2020, 15:21
Ничего сложного.

Не по теме:

1. В HTML форме где задано enctype="multipart/form-data", добавляем элемент INPUT, из type="file".

2. После нажатия на кнопку INPUT, из type="submit", принимаем файл и все данные формы в приемнике.

3. При передаче управления в приемник, ранее заданный файл уже должен загрузится на сервер во временный каталог. Задача, перенести ранее загруженный файл, в постоянное место, через функцию move_uploaded_file.

PHP
1
move_uploaded_file(временный_файл, постоянный_файл);
Можно на php.net , посмотреть полную информацию о функции move_uploaded_file.

4. Важно получая название временный_файл , предварительно проверить разрешаете ли Вы его MIME-тип, не совпадает ли имя перемещаемого функцией move_uploaded_file из именем постоянный_файл , если совпадает, выбираете действие ПЕРЕЗАПИСИ либо копирования из НОВЫМ именем, генерируя префикс для этого файла. Префиксы удобно генерировать в цике while , цифровыми значениями которые постоянно увеличиваются: _2, _3, _4, _5, ... _n.

5. После отработки функции move_uploaded_file , выполняете, следующие, важные действия.

ПРОВЕРЯЙТЕ MIME-ТИП ЗАГРУЖАЕМОГО ФАЙЛА! ПОЧТИ ВСЕГДА НЕ РАЗРЕШАЮТСЯ ФАЙЛЫ ИЗ РАЗШИРЕНИЕМ *.php , *.php4
БУДЬТЕ ВНИМАТЕЛЬНЫ ИЗ ПЕРЕЗАПИСЬЮ ФАЙЛА, ПРИ СОВПАДЕНИИ ИМЕН!

Интересно, что загруженный файл можно поместить внутрь таблицы БД, где тип поля для таблицы задан типом BLOB , если не ошибаюсь, это для таблиц MySQL. Загруженный файл можно поместить файлом и|или поместить в таблицу.

По теме загрузки файлов из браузера, на PHP-приемник, что можно почитать? html форма, атрибут method, атрибут enctype, тег input, атрибут type для тега input, атрибут name для тега input, спецификация HTTP протокола (это должно содержатся, в RFC 2616) , глобальный массив $_FILES , функция move_uploaded_file, стандарт для URL , относительный и абсолютный путь для каталога либо имени файла, запрещенные символы в имени каталога либо файла, параметр upload_max_filesize в конфигурационном файле php.ini , функция ini_get .

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

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

0
775 / 444 / 93
Регистрация: 24.10.2012
Сообщений: 3,240
Записей в блоге: 5
18.02.2020, 14:55
Маленькое дополнение.

Не по теме:

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

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

Важно после выборки разширения файла, всегда переводить разширение в нижний регистр функцией strtolower . Затем сравнивать из списком разширений которые разрешены. Будьте в всем этом крайне внимательны!

Получение значения MIME-типа из глобального массива $_FILES, или PHP-функциями, здесь не помню точно, все это НЕ НАДЕЖНО, там браузер проверяет тип файла либо встроенная PHP-функция.

В этой функциональности проверяйте каждую строчку PHP-сценария. Для этой задачи придумать решений можно несколько, различная логика может идти в модуле загрузки файла, при том что функция выполняется 1, функция корректной загрузки браузерного файла.

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

PHP
1
2
выражение_а == выражение_б ; /* логически равно */
выражение_а === выражение_б ; /* эквивалентно равно */
Правила по которым расчитываются выражения в PHP, здесь важны и вообще ОБЯЗАТЕЛЬНЫ если выполняете ОТВЕТСТВЕННУЮ РАБОТУ!

В загрузке: *.bat, *.exe, *.com, *.cgi, *.php, *.php4, *.php5, *.js, *.html, *.sql , надо сразу отказывать!

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2020, 14:55
Помогаю со студенческими работами здесь

Проблемы с загрузкой картинки
Есть таблица в аксесе, одно из полей которой &quot;Фото&quot; с типом данных OLE. Загружаю туда картинки. Затем в дельфи перетаскиваю компонент...

Как установить задержку перед загрузкой картинки?
Здравствуйте, срочно нужна ваша помощь))) Код, который открывает программу и загружает картинку: ...

Как пустить текст статьи поверх картинки?
Задача простейшая на первый взгляд. Но возникли трудности. Все свойства в css указаны верно, но сам текст новости всё равно идёт под...

Как сделать добавление статьи?
Не получается добавить публикацию в БД через этот код, redbean подключен, такой же код стоит на регистрации. &lt;?php $data = $_POST; ...

В joomla 1.5 ошибка добавление статьи
Совсем недавно проявилась такая штука. Статья добавляется как надо, но при просмотре этой статьи - белая страница. Хотя при обзоре...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru