0
我有一個帶有文件選擇的表單。我希望所選文件的路徑在小數點後保存到數據庫中的單個字段中。我遇到的問題是隻保存了第一個選定的文件,並且我想將所有小數位保存在一個字段中。例如uploads/1.png,uploads/2.png,uploads/3.png等。(IN PHP)PHP - 幾個文件到數據庫中的一個字段的路徑
我該如何做到這一點?
代碼:
if(!empty($_FILES['files']['name'][0])) {
//Zmienne formularza
$files = $_FILES['files'];
$thumb = $_FILES['thumbnail'];
$text = $_POST['add-project_text'];
$h2text = $_POST['add-project_name'];
//Dozwolone pliki
$allowed = array('txt', 'jpg', 'jpeg', 'png', 'gif', 'svg', 'psd');
foreach ($files['name'] as $position => $file_name) {
//Wyciągnięcie parametrów z plików
$file_tmp = $files['tmp_name'][$position];
$file_size = $files['size'][$position];
$file_error = $files['error'][$position];
//Dla zdjęć (wyciągniecie rozszerzenia pliku)
$file_ext = explode('.', $file_name);
$file_ext = strtolower(end($file_ext));
$datenow = date('Y-m-d H:i:s');
//Dla miniaturki
$file_extThumb = explode('.', $thumb['name']);
$file_extThumb = strtolower(end($file_extThumb));
//Jeżeli rozszerzenie jest prawidłowe
if (in_array($file_ext, $allowed)) {
//Jeżeli plik nie ma żadnych błędów
if($file_error === 0) {
//Jeżeli plik nie jest większy niż 15MB
if($file_size <= 15728640) {
//Jeżeli folder uzytkownika istnieje
if(file_exists('uploads/' . $_SESSION['login'])) {
} else {
//Jeżeli nie, stwórz go.
mkdir('uploads/' . $_SESSION['login']);
}
//Dla zdjęć
$file_new_name = uniqid('', true) . '.' . $file_ext;
//Dla miniaturki
$file_new_nameThumb = 'Thumbnail.' . uniqid('', true) . '.' . $file_extThumb;
//Dla zdjęć
$file_destination = 'uploads/' . $_SESSION['login'] . '/' . $file_new_name;
//Dla miniaturki
$file_destinationThumb = 'uploads/' . $_SESSION['login'] . '/' . $file_new_nameThumb;
//Jeżeli wszystko jest ok, przenieś go do odpowiedniego folderu
if(move_uploaded_file($file_tmp, $file_destination)) {
//Jeżeli wszystko jest ok, przenieś go do odpowiedniego folderu
if(move_uploaded_file($thumb['tmp_name'], $file_destinationThumb)) {
$sqlSTM = $dbh->prepare(" INSERT INTO projects (post_content, post_images, post_image, post_date) VALUES (:post_content, :post_images, :post_image, :post_date) ");
$sqlSTM->bindParam(":post_content", $text, PDO::PARAM_STR);
$sqlSTM->bindParam(":post_images", $file_destination, PDO::PARAM_STR);
$sqlSTM->bindParam(":post_image", $file_destinationThumb, PDO::PARAM_STR);
$sqlSTM->bindParam(":post_date", $datenow, PDO::PARAM_STR);
$_SESSION['UploadedSuc'] = 'Udało się! Dodano nowy projekt!';
}
}
} else {
$file_size_r = $file_size/1000000;
echo 'Wystąpił błąd przy dodawaniu pliku, prawdopodobnie plik jest za duży. Maksymalna wielkość pliku to 15MB. Twój plik: ' . number_format($file_size_r, 0) . 'MB';
}
} else {
echo 'Wystąpił błąd przy dodawaniu pliku: ' . $file_error;
}
} else {
echo 'To rozszerzenie: <b>' . $file_ext . '</b> jest niedozwolone.';
}
}
我希望這些文件的路徑變量下保存 「:post_images」。
很抱歉,但我不明白。在變量$ ** ** file_destination我有一個字符串即我所選擇的文件的路徑。這個變量去bindParam ** $ sqlSTM-> bindParam(「:post_images」,$ file_destination,PDO :: PARAM_STR); **我想這個字符串被完全寫入數據庫..並且那裏只有第一個路徑第一個文件只寫入。例如, – nielot
。在** $ file_destination **中有一個字符串「uploads/1.png」,「uploads/2.png」,「uploads/3.png」...並且只有第一個元素,即「uploads/1png」保存到數據庫... – nielot
@nielot你可以將你的$ file_destination變量轉換爲數組ex:[path/img1.jpg,path/img2.jpg]和json_encode數組。然後將編碼的數據保存到您的數據庫。 (現在你所有的url都整齊地保存爲數據庫中的json字符串),並且在檢索你的url時,你只需解碼它們(json_decode),現在你可以使用你的urls數組了。通過這樣做,您可以省去「爆炸」的麻煩,以獲得一系列網址。 – tbrennan