Bestandsnamen van uploads in 1 variable

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Colin Rietdijk

Colin Rietdijk

27/01/2014 19:52:24
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
 $attachment
= array();
 for($i=0; $i<=count($_FILES); $i++) {
  $attachment[$i] = $_FILES['foto']['name'];
 }

 $arr = implode(',', $attachment);
?>


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
 
PHP hulp

PHP hulp

23/12/2024 16:49:42
 
Kenneth Rozendaal

Kenneth Rozendaal

27/01/2014 20:05:58
Quote Anchor link
Je $attachment lijkt gewoon twee array's te bevatten.

Wat ik altijd doe in zo'n situatie is even:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo var_dump($attachment); ?>


En dan kijken wat voor resultaat dit geeft.
 
Colin Rietdijk

Colin Rietdijk

27/01/2014 20:13:25
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo var_dump($attachment); ?>


Geeft dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo var_dump($arr); ?>


Geeft:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
string(11) "Array,Array"
 
Aad B

Aad B

27/01/2014 20:15:01
Quote Anchor link
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.
 
Erwin H

Erwin H

27/01/2014 20:15:27
Quote Anchor link
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
 
Kenneth Rozendaal

Kenneth Rozendaal

27/01/2014 20:21:28
Quote Anchor link
Die laatste snap ik wel, je gaat namelijk imploden op een array die 2 array's bevat (multidimensionale array als ik me niet vergis).

Wat ik alleen niet snap is, waarom hij een array twee x aanmaakt, binnen een andere array.

Je zou kunnen proberen om deze lijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$attachment[$i] = $_FILES['foto']['name'];

te veranderen naar:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
array_push($attachment, $_FILES['foto']['name']);


en dan ipv een for() loop een while() of foreach() loop.

MvG,
Kenneth
 
Colin Rietdijk

Colin Rietdijk

27/01/2014 20:23:42
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
$attachment = array();
 foreach($_FILES['foto']['name'] as $value) {
        if ($_FILES['foto']['name'] != ""){
             array_push($attachment, $value);
        }
 }


Echter krijg ik dan...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
string(69) "munjamirdza1.jpg,munjamirdza3.jpg,munjamirdza4.jpg,munjamirdza7.jpg,,"


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!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$_FILES['foto']['name']['0']


Geeft de eerste bestandsnaam.
Dan kan ik dat gebruiken als value in mijn insert query! :)
Dat het zo simpel kon zijn!
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

27/01/2014 21:12:17
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
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.
?>


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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.