Bestandsnamen van uploads in 1 variable
Ik heb een uploadscript, hierin zijn meerdere foto's (tot een max van 6 bestanden) te uploaden. De inputfields hebben de naam foto[]. Alles werkt, maar ik wil graag alle bestandsnamen, gescheiden met een komma, in 1 field in mijn database plaatsen. Deze wil ik er later weer uithalen om de foto's te tonen in een overzichtje.
Hoe kan ik alle bestandsnamen vanuit $_FILES in variable krijgen.
Ik had het volgende:
Code (php)
Maar wanneer ik $arr echo, dan geeft hij "Array,Array", ongeacht het aantal foto's wat ik upload.
Het uploaden gaat overigens wel goed.
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Alvast bedankt![/modedit]
Gewijzigd op 27/01/2014 19:54:03 door Colin Rietdijk
Wat ik altijd doe in zo'n situatie is even:
En dan kijken wat voor resultaat dit geeft.
Geeft dit:
Code (php)
1
array(2) { [0]=> array(6) { [0]=> string(8) "over.jpg" [1]=> string(12) "facebook.png" [2]=> string(0) "" [3]=> string(0) "" [4]=> string(0) "" [5]=> string(0) "" } [1]=> array(6) { [0]=> string(8) "over.jpg" [1]=> string(12) "facebook.png" [2]=> string(0) "" [3]=> string(0) "" [4]=> string(0) "" [5]=> string(0) "" } }
En voor de volledigheid:
Geeft:
Dat alle bestandsnamen, gescheiden met een komma: niet doen. Maak voor elke foto een record aan. Meerdere gegevens gescheiden met een komma is qua datamodellering niet er handig en het kan dat je later, wanneer je er eentje uit wil zoeken in de problemen komt.
Colin Rietdijk op 27/01/2014 19:52:24:
De inputfields hebben de naam foto[]. Alles werkt, maar ik wil graag alle bestandsnamen, gescheiden met een komma, in 1 field in mijn database plaatsen.
Neeeeee....... Dat wil je helemaal niet. Dat wil je gewoon in een genormaliseerde database hebben, dus per foto een record in een tabel welke je linkt aan de pagina (of profiel, of wat dan ook) via het id. Niet meerdere gegevens in 1 veld proppen. Vroeg of laat zal je merken dat dat echt een heel erg slecht idee is.
En als je wil weten hoe je files array eruit ziet als je meerdere bestanden onder dezelfde input naam upload: http://www.php.net/manual/en/features.file-upload.multiple.php
Wat ik alleen niet snap is, waarom hij een array twee x aanmaakt, binnen een andere array.
Je zou kunnen proberen om deze lijn:
te veranderen naar:
en dan ipv een for() loop een while() of foreach() loop.
MvG,
Kenneth
Maar dan komtie weer...hoe doe ik dat :) Hoe ga ik de $_FILES array zo uitsplitten dat ik alle bestandsnamen apart krijg en die apart in een record kan plaatsen in mijn query?
Ik heb een tabel nu met 16 records. 1 voor de id, 14 voor tekstgegevens en dus 1 veld voor de foto (wat er dus 6 moeten worden). Om de INSERT query dan in de foreach loop mee te nemen tijdens het uploaden is geen optie...denk ik?
Toevoeging op 27/01/2014 20:39:28:
Voor de vorm even geprobeerd wat jij hebt aangegeven Kenneth.
Dat werkt!
Heb nu het volgende:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$attachment = array();
foreach($_FILES['foto']['name'] as $value) {
if ($_FILES['foto']['name'] != ""){
array_push($attachment, $value);
}
}
foreach($_FILES['foto']['name'] as $value) {
if ($_FILES['foto']['name'] != ""){
array_push($attachment, $value);
}
}
Echter krijg ik dan...
Hoe zorg ik ervoor dat hij de laatste 2 komma's er niet achter zet.
Dit is even puur voor mijn eigen php kennis. Ik ben alsnog van plan om de foto's afzonderlijk in een record te plaatsen.
Toevoeging op 27/01/2014 20:57:22:
Denk dat ik hem heb!
Geeft de eerste bestandsnaam.
Dan kan ik dat gebruiken als value in mijn insert query! :)
Dat het zo simpel kon zijn!
Colin:
Ik heb een tabel nu met 16 records. 1 voor de id, 14 voor tekstgegevens en dus 1 veld voor de foto (wat er dus 6 moeten worden). Om de INSERT query dan in de foreach loop mee te nemen tijdens het uploaden is geen optie...denk ik?
Het beste is om voor de foto's een aparte tabel te maken, als je straks besluit om het aantal up te loaden foto's te verhogen zou je kolommen in je tabel moeten bijmaken.
Dan ga je eerst de algemene gegevens in de 'hoofdtabel' zetten, daarna ga je de upgeloade foto's behandelen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$values = array();
foreach($_FILES['foto']['tmp_name'] as $key => $value)
if ($value !== '') {
if (move_uploaded_file($value, ROOT_PATH . 'images/upload/' . $_FILES['foto']['name'][$key]) {
$values[] = "(LAST_INSERT_ID(), '" . mysqli_real_escape_string($con, $_FILES['foto']['name'][$key]) . "')";
}
}
}
$query = "INSERT INTO product_images (product_id, image_name) VALUES " . implode(',',$values);
//dan de query uitvoeren etc.
?>
$values = array();
foreach($_FILES['foto']['tmp_name'] as $key => $value)
if ($value !== '') {
if (move_uploaded_file($value, ROOT_PATH . 'images/upload/' . $_FILES['foto']['name'][$key]) {
$values[] = "(LAST_INSERT_ID(), '" . mysqli_real_escape_string($con, $_FILES['foto']['name'][$key]) . "')";
}
}
}
$query = "INSERT INTO product_images (product_id, image_name) VALUES " . implode(',',$values);
//dan de query uitvoeren etc.
?>
PS. ROOT_PATH is een zelf door mij gedefinieerde constante, je moet dit even vervangen door $_SERVER['DOCUMENT_ROOT']
Gewijzigd op 27/01/2014 21:20:08 door Ger van Steenderen