Door
Colin Rietdijk
op 27-01-2014 19:52
gewijzigd op 27-01-2014 19:54
1.532 views
Ik heb het hele internet al afgezocht. Het ligt of aan mijn zoekkwaliteiten of het staat er gewoon niet op, maar ik heb het volgende.
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:
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.
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.
Ok, bedankt voor de tip :D Dan ga ik voor alle foto's aparte velden aanmaken waar de bestandsnaam in komt.
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:
$attachment = array();
foreach($_FILES['foto']['name'] as $value) {
if ($_FILES['foto']['name'] != ""){
array_push($attachment, $value);
}
}
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:
<?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.
?>
PS. ROOT_PATH is een zelf door mij gedefinieerde constante, je moet dit even vervangen door $_SERVER['DOCUMENT_ROOT']