Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 15.06.2020
Сообщений: 12

Форма с отправкой картинки и текстового поля

15.06.2020, 12:31. Показов 530. Ответов 3

Студворк — интернет-сервис помощи студентам
Здравствуйте, мне нужно загрузить картинку на сервер, а в бд записать имя картинки и подпись к ней.
На данный код выдает ошибку в 57 строчке последнего файла: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING).

index.php
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
<?php
include ("db.php");
echo"<a href='add_images_form.php' class='add_images'>
<div class='add_images_text'>ДОБАВИТЬ КАРТИНКУ</div>
</a><br><br>";
include ("db.php"); //подключение к базе данных
 
if (isset($_POST['text'])) { $text = $_POST['text'];
 
$sql = mysqli_query($db,"SELECT id, img, text FROM 3_images");
// Выбор из базы данных полей id и img
 
      $dir = 'img_news/'; // Папка с изображениями
  $cols = 3; // Количество столбцов в будущей таблице с картинками
  $files = scandir($dir); // Берём всё содержимое директории
  echo "<table>"; // Начинаем таблицу
  $k = 0; // Вспомогательный счётчик для перехода на новые строки
  for ($i = 0; $i < count($files); $i++) { // Перебираем все файлы
    if (($files[$i] != ".") && ($files[$i] != "..")) { // Текущий каталог и родительский пропускаем
      if ($k % $cols == 0) echo "<tr>"; // Добавляем новую строку
      echo "<td>"; // Начинаем столбец
      $path = $dir.$files[$i]; // Получаем путь к картинке
      echo "<a href='$path'>"; // Делаем ссылку на картинку
      echo "<img src='$path' alt='' width='100' />"; // Вывод превью картинки
      echo "</a>"; // Закрываем ссылку
      echo $text;
      echo "</td>"; // Закрываем столбец
      /* Закрываем строку, если необходимое количество было выведено, либо данная итерация последняя */
      if ((($k + 1) % $cols == 0) || (($i + 1) == count($files))) echo "</tr>";
      $k++; // Увеличиваем вспомогательный счётчик
    }
  }
  echo "</table>"; // Закрываем таблицу
}
?>
add_images_form.php
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
<form name='form' enctype='multipart/form-data'
method='post' action='add_images.php'>
<p>
    <label>Введите текст:<br></label>
    <input name="text" type="text" size="50"><br>
<label class='label'>Выберите картинку</label>
<br>
<input type='file' name='myfile' id='myfile'
class='input'/>
</p>
<br>
<p>
<table>
<tr>
<td>
<input type='image'
src='images/add_images_save.png'
title='Сохранить'> /
</td>
<td>
<a href='index.php' class='add_images'>
<div class='add_images_text'>НАЗАД</div></a>
</td>
</tr>
</table>
</p>
</form>
add_images.php
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php
include ("db.php"); //подключение к базе данных
 
if (isset($_POST['img'])) 
if (isset($_POST['text'])) 
 
$text = $_POST['text'];
// Если поле выбора картинки не пустое - закачиваем её на сервер
$maxwidth = "600"; // максимальная ширина картинок на превью
$foto_dir = "img_news/"; // Директория для фотографий товаров
$foto_name = $foto_dir.basename($_FILES['myfile']['name']); // Полное имя файла вместе с путем
$foto_light_name = basename($_FILES['myfile']['name']);
// Имя файла исключая путь
$foto_tag = "<img src=\"$foto_name\" border=\"0\">"; // Готовый тэг для вставки картинки на страницу
//$foto_tag_preview = "<img src=\"$foto_name\" border=\"0\" width=\"$maxwidth\">";
// Тот же тэг, но для превью
 
// Текст ошибок
$error_by_mysqli = "<label class=\"label\">Ошибка при добавлении данных в базу</span>";
$error_by_file = "<label class=\"label\">Невозможно загрузить файл в директорию. Возможно её не существует</span>";
 
// Начало
if(isset($_FILES["myfile"]))
{
$myfile = $_FILES["myfile"]["tmp_name"];
$myfile_name = $_FILES["myfile"]["name"];
$myfile_size = $_FILES["myfile"]["size"];
$myfile_type = $_FILES["myfile"]["type"];
$error_flag = $_FILES["myfile"]["error"];
 
// Если ошибок не было
if($error_flag == 0)
{
//$DOCUMENT_ROOT = $_SERVER['DOCMENT_ROOT'];
$upfile = getcwd()."/img_news/" .basename
($_FILES["myfile"]["name"]);
if ($_FILES['myfile']['tmp_name'])
{
 
//Если не удалось загрузить файл
 
if (!move_uploaded_file($_FILES['myfile']
['tmp_name'], $upfile))
{
echo "$error_by_file";
exit;
}
 
}
else
{
echo 'Проблема: возможна атака через загрузку файла. ';
echo $_FILES['myfile']['name'];
exit;
}
 
$query = mysqli_query($db, "INSERT INTO 3_images (img,text) VALUES('$foto_name','$_POST['text']')");  //ругается на эту строчку
 
// Данные успешно внесены в базу данных, выводим сообщение
if ($query == 'true') {
echo "
<div>
<p>Картинка успешно добавлена на сервер!</p><br>
<table>
<tr>
<td>
<a href='add_images_form.php'
class='add_images'><div class='add_images_text'>
ДОБАВИТЬ ЕЩЕ КАРТИНКУ</div></a>
</td>
<td>
<a href='index.php' class='add_images'>
<div class='add_images_text'>НА ГЛАВНУЮ</div></a>
</td>
</tr>
</table>
</div>
";
}
 
// В противном случае, выводим ошибку при добавлении в базу данных
else {
echo "$error_by_mysqli";
}
}
elseif ($myfile_size == 0) {
echo "<br><label class='label'>Картинка не выбрана!<br><br>
Вернитесь и выберите картинку!</label><br><br>
<a href='add_images_form.php' class='add_images'>
<div class='add_images_text'>ВЫБРАТЬ КАРТИНКУ</div>
</a>";
}
}
?>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.06.2020, 12:31
Ответы с готовыми решениями:

Выравнивание текстового поля и кнопки-картинки
Есть кнопочка-картинка и текстовое поле: .search { position: absolute; top: 22px; right: 70px; } input {...

Изменение фона текстового поля в зависимости от его значения (ленточная форма)
Добрый день. Есть таблица, которая представляет собой график выполнения работ за месяц. Т.е. кроме пары текстовых полей имеет 31...

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

3
 Аватар для SpartakusMd
22 / 22 / 9
Регистрация: 29.03.2010
Сообщений: 173
15.06.2020, 13:19
Привет,

Тут у тебя есть ряд проблем но давай по порядку.

В двойных кавычках можно поставить переменную и оно сработает. В твоём примере для $foto_name не будет проблем, однако $_POST['text'] PHP не правильно распознаёт переменную так что нужно обернуть её в фигурных скобках ${_POST['text']}. Есть и другие варианты:

PHP
1
$query = mysqli_query($db, "INSERT INTO 3_images (img,text) VALUES('" . $foto_name . "','" . $_POST['text'] . "')");
или

PHP
1
2
$queryStr = sprintf("INSERT INTO 3_images (img,text) VALUES('%s','%s')", $foto_name, $_POST['text']);
$query = mysqli_query($db, $queryStr);
Другая проблема это то что можно выполнить SQL инъекцию в поле $_POST['text'], рекомендую читать об этом и как защитится. Но это отдельная тема

Удачи!
1
0 / 0 / 0
Регистрация: 15.06.2020
Сообщений: 12
15.06.2020, 13:47  [ТС]
Спасибо за ответ, все сработало. Но теперь есть ошибка в файле index.php на 27 строчке, видимо, так же неправильно указана переменная
0
0 / 0 / 0
Регистрация: 15.06.2020
Сообщений: 12
16.06.2020, 05:48  [ТС]
SpartakusMd, Спасибо за ответ, все сработало. Но теперь есть ошибка в файле index.php на 27 строчке, видимо, так же неправильно указана переменная. Подскажите, пожалуйста, как правильно указать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.06.2020, 05:48
Помогаю со студенческими работами здесь

Форма с отправкой на E-Mail - PHP
Здравствуйте, кому не сложно помогите сделать форму. Мне нужно простая форма в которой нужно указать &quot;Имя&quot; &quot;E-mail&quot; и...

Форма перед отправкой проверяется не вся
Здравствуйте, написал скрипт для проверки формы перед отправкой function Formdata(data){ /* если не заполнено поле Ваше имя, длина...

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

Уменьшение картинки перед ее отправкой через форму
Доброго времени суток! Поскожите кто знает, как уменьшить средствами javascript фотографию до приемлимого размера. Нужно для того что на...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru