#php #mysql #file-upload
#php #mysql #загрузка файла
Вопрос:
Это простой код HTML-файла
<form action="upme.php" method="post" enctype="multipart/form-data">
<input type="file" name="files[]" multiple>
<button type="submit">Upload</button>
</form>
Это простой код файла PHP
<?php
$IMG = isset($_POST['files']) ? $_POST['files'] : array();
if (!empty($IMG))
{
$uploads_dir = 'images/';
foreach ($IMG["error"] as $key => $error)
{
if ($error == UPLOAD_ERR_OK)
{
$tmp_name = $IMG["tmp_name"][$key];
$name = $IMG["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/".$name);
$name_array=mysql_real_escape_string($name);
$value_insert[] = "('" . $name_array . "')";
}
}
$values_insert = implode(',', $value_insert);
$query = "INSERT INTO upload (FILE_NAME) VALUES" . $values_insert;
$result = mysql_query($query);
}else{
echo 'empty array';
}
?>
когда я использую этот код, он выдает ошибку «пустой массив», но файл не загружается.
Комментарии:
1. $IMG = isset($_POST[‘files’]) ? $_POST[‘files’] : array(); изменить на $IMG = isset($ _FILES[‘files’]) ? $_FILES[‘files’] : array();
2. Уважаемый, просто под html-кодом.
3. @NIRANJANS хранит свои данные в БД, но каждый файл хранится в отдельном столбце БД, но я хочу сохранить в одном столбце.
4. просто сделайте перед foreach
$i=1;
в условииif ($i==1) {your sql query} $i ;
foreach это произойдет один раз.5. @SamirNabil можете ли вы предоставить демонстрационный код,
Ответ №1:
<?php
$IMG = isset($_FILES['files']) ? $_FILES['files'] : array();
if (!empty($IMG))
{
$uploads_dir = 'images/';
$value_insert = '';
foreach ($IMG["error"] as $key => $error)
{
if ($error == UPLOAD_ERR_OK)
{
$tmp_name = $IMG["tmp_name"][$key];
$name = $IMG["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/".$name);
$name_array=mysql_real_escape_string($name);
$value_insert .= $name_array . ",";
}
}
$values_insert = rtrim($value_insert, ',');
$query = "INSERT INTO upload (FILE_NAME) VALUES" . $values_insert;
$result = mysql_query($query);
}else{
echo 'empty array';
}
?>
Комментарии:
1. каждый файл хранится в отдельном столбце db, но я хочу сохранить в одном столбце
2. если я изменю $IMG = isset($_POST[‘files’]) ? $ _POST[‘files’] : array(); изменить на $IMG = isset($ _FILES[‘files’]) ? $_FILES[‘files’] : array();
3. Обратите внимание: неопределенная переменная: value_insert в F:XAMPPhtdocsuptimeupme.php в строке 43
4. Дорогой, он просто загружает файл в папку, но не сохраняет путь в БД
5. $query = «ВСТАВИТЬ В ЗНАЧЕНИЯ загрузки (ИМЯ_ФАЙЛА)» . $values_insert; изменить на $query = «ВСТАВИТЬ В ЗНАЧЕНИЯ загрузки (ИМЯ_ФАЙЛА) (» . $values_insert . «)»;
Ответ №2:
вот демонстрационный код
<?php
$IMG = isset($_FILES['files']) ? $_FILES['files'] : array();
if (!empty($IMG))
{
$uploads_dir = 'images/';
$i = 1;
foreach ($IMG["error"] as $key => $error)
{
if ($error == UPLOAD_ERR_OK)
{
$tmp_name = $IMG["tmp_name"][$key];
$name = $IMG["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/".$name);
$name_array=mysql_real_escape_string($name);
if ($i == 1) {
$query = "INSERT INTO upload (FILE_NAME) VALUES" . $name_array;
$result = mysql_query($query);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
}
$i ;
}
}
}else{
echo 'empty array';
}
?>
Комментарии:
1. он просто загружает файл в папку, но не сохраняет путь к базе данных
2. я просто меняю свой запрос $query = «ВСТАВИТЬ В ЗНАЧЕНИЯ загрузки (ИМЯ_ФАЙЛА) (‘$name_array’);»;
3. он работает, но хранит только одну информацию о файле в bd, но я выбираю три файла.