Сохранить несколько изображений в MySql

251
26 ноября 2016, 19:41

Есть обычная форма добавления фотографий на сервер:

<form method="post" multipart="" enctype="multipart/form-data">
    <input type="file" name="img[]" multiple>
    <input type="submit">
</form>

PHP обработка формы:

$img = $_FILES['img'];
if(!empty($img))
{
    $img_desc = reArrayFiles($img);
    print_r($img_desc);
    foreach($img_desc as $val)
    {
        $newname = date('YmdHis',time()).mt_rand().'.jpg';
        move_uploaded_file($val['tmp_name'],'./filedat/'.$newname);
    }
}
function reArrayFiles($file)
{
    $file_ary = array();
    $file_count = count($file['name']);
    $file_key = array_keys($file);
    for($i=0;$i<$file_count;$i++)
    {
        foreach($file_key as $val)
        {
            $file_ary[$i][$val] = $file[$val][$i];
        }
    }
    return $file_ary;
}

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

img1, img2, img3 и т.д.

Answer 1

Чтобы занести все ссылки в одну ячейку, Вам необходимо вот в этой части Вашего кода ввести переменную (например, $links), которая все эти ссылки будет содержать через запятую:

foreach($img_desc as $val)
{
    $newname = date('YmdHis',time()).mt_rand().'.jpg';
    move_uploaded_file($val['tmp_name'],'./filedat/'.$newname);
    $links .= './filedat/'.$newname.', ';
}

Ссылки, понятное дело, можно указать без папки filedat или, наоборот, полные - на Ваше усмотрение. Ну и потом создаёте таблицу в базе, куда данные будут заноситься, подключаетесь к базе и инсертом заносите данные. Как-нибудь так, например:

$connect = mysqli_connect('localhost', 'root', '');
mysqli_select_db($connect, 'mydb');
$query = "INSERT INTO pics (links) VALUES ('$links')";
if($links) {
  mysqli_query($connect, $query);
}
Answer 2

Обычно, если вам необходимо привязать к какой либо записи в БД произвольное количество каких либо объектов, будь то ссылки на файлы, список параметров, набор ролей пользователя или еще что-то, то для этих сущностей используют отдельную таблицу с привязкой по ключу к основной.

CREATE TABLE main (
    id VARCHAR(20) NOT NULL PRIMARY KEY,
    .....,
    PRIMARY KEY (id)
)
CREATE TABLE pictures(
    id INT,
    parent_id VARCHAR(20),
    path VARCHAR(500),
    INDEX parent (parent_id),
    FOREIGN KEY (parent_id)
        REFERENCES main(id)
        ON DELETE CASCADE
)
READ ALSO
Данные из полей неотправленной формы

Данные из полей неотправленной формы

Пользователь зашёл на сайт, ввел данные (напримя, телефон и т

241
Ветвление событий [закрыто]

Ветвление событий [закрыто]

Есть задача, которая требует ветвления кода, я использовал машинное состояние switch case и enum

230
В чем ошибка при перегрузке оператора+?

В чем ошибка при перегрузке оператора+?

Перегружаю бинарный + в своем классе:

347
Умножение двух двоичных чисел с++

Умножение двух двоичных чисел с++

Не могли бы вы мне подсказать как написать код для умножения двух двоичных чисел? Нужно именно их умножить, поэтому через перевод в 10 сс не получится

322