Variabele toevoegen aan een array() [opgelost]

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan te Pas

Jan te Pas

29/08/2022 19:06:19
Quote Anchor link
Ik haal uit een formulier via input type=“file”

Na de submit lees ik de ingevulde velden in:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
    $attachments = $_FILES['file'];


Nu wil ik een extra naam toevoegen aan de array(). Hoe doe ik dat?
Gewijzigd op 21/11/2022 10:40:58 door - Ariën -
 
PHP hulp

PHP hulp

28/03/2024 12:19:37
 
- Ariën  -
Beheerder

- Ariën -

29/08/2022 19:08:45
 
Jan te Pas

Jan te Pas

29/08/2022 19:15:55
Quote Anchor link
@Ariën, dat dacht ik ook,had ik al geprobeerd, net nog eens, maar toch wordt variabele niet toegevoegd.
 
- Ariën  -
Beheerder

- Ariën -

29/08/2022 19:19:34
Quote Anchor link
Laat eens een voorbeeld zien, én hoe je $FILES eruit ziet.
Waarom wil je daar iets aan toevoegen, als ik vragen mag?

Het is een global variabele die in dit geval wordt gevuld via het upload-element.
 
Jan te Pas

Jan te Pas

29/08/2022 19:26:43
Quote Anchor link
Ik heb een formulier, ik stuur nu gemakkelijk de gekozen bestanden per mail toe.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
    1:<input type="file" name="file[]" accept=".jpg,.png,.jpeg,.pdf"/><br>
    2:<input type="file" name="file[]" accept=".jpg,.png,.jpeg,.pdf"/><br>
    3:<input type="file" name="file[]" accept=".jpg,.png,.jpeg,.pdf"/><br>
    4:<input type="file" name="file[]" accept=".jpg,.png,.jpeg,.pdf"/>


Vervolgens, na submit, lees ik de ingevoerde/gekozen bestanden in met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
    $attachments = $_FILES['file'];


Dat werkt prima. Echte nu wil ik een basislogo toevoegen, zodat de gebruiker, wat hij ook kiest, altijd ook het logo toegevoegd krijgt als beeld 0.
 
- Ariën  -
Beheerder

- Ariën -

29/08/2022 19:39:58
Quote Anchor link
Wat heeft een logo te maken met een upload uit FILES?
 
Jan te Pas

Jan te Pas

29/08/2022 19:49:56
Quote Anchor link
Iemand van de organisatie kiest foto’s, Max 4 stuks. Afmetingen check ik. En die medewerker stuurt die selectie naar een organisatie. En daar wil ik dus altijd als eerste ons eigen logo toevoegen. Ik kan het ook anders doen. Door in de body het logo in een HTML vorm toe te voegen. Maar ik wilde eens proberen of ik dit kiezen met een array kon afwerken. De basis keuzes werken goed. Maar invoegen niet dus. Zou mooi zijn als het zou lukken.
 
- Ariën  -
Beheerder

- Ariën -

29/08/2022 20:44:50
Quote Anchor link
En waarom moet die foto speciaal in de FILES worden meegestuurd? Die hele trits aan uploads worden toch verwerkt. Dan kan je je eigen logo er zo aan toevoegen. Al hoewel ik dan denk aan DRY (Don't Repeat Yourself).
Je hebt immers al een locatie naar je eigen logo.
 
Jan te Pas

Jan te Pas

29/08/2022 20:51:19
Quote Anchor link
Klopt helemaal, alles draait prima, maar ik wilde dit probleem eens tackelen. Kijken of daar ook een simpele aanpak voor was…dank!
 
Adoptive Solution

Adoptive Solution

29/08/2022 20:51:32
Quote Anchor link
Komt dit in de buurt?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
if ( $_POST['submit']):
    $attachments = [];
    
    echo '<pre>files = ' . print_r($_FILES, TRUE ) . '</pre>';
    $attachments = $_FILES['file'];

    echo '<pre>a1 = ' . print_r( $attachments, TRUE ) . '</pre>';
    $imgsize = filesize( 'logo.jpg' );

    $attachments['name'] = $attachments['name'] + ['logo' => 'logo.jpg'];
    $attachments['size'] = $attachments['size'] + ['logo' => $imgsize];
    echo '<pre>a2 = ' . print_r( $attachments, TRUE ) . '</pre>';

    echo '<p>Toegevoegd logo : ' . $attachments['name']['logo'] . '</p>';
    
    foreach ($attachments['name'] as $key => $value):
        if ( $value ):
            echo $key . ' = ' . $value . ' (' . (int)($attachments['size'][$key]/1000) . 'kB)<br />';
        endif;

    endforeach;
endif;


?>


<hr />

<form method="post" action="" enctype="multipart/form-data">

    1:<input type="file" name="file[]" accept=".jpg,.png,.jpeg,.pdf"/><br />
    2:<input type="file" name="file[]" accept=".jpg,.png,.jpeg,.pdf"/><br />
    3:<input type="file" name="file[]" accept=".jpg,.png,.jpeg,.pdf"/><br />
    4:<input type="file" name="file[]" accept=".jpg,.png,.jpeg,.pdf"/><br />

    <input type="submit" name="submit" value="submit" />

</form>
 
Jan te Pas

Jan te Pas

29/08/2022 21:13:00
Quote Anchor link
@Adaptive Solution: dit ziet er erruggoed uit. Ik ga het proberen. Zal morgen worden. Dank! Leren is leuk. Omdat het kan.
 
Ozzie PHP

Ozzie PHP

29/08/2022 21:14:19
Quote Anchor link
@Adoptive

Lees ook eens wat Ariën schrijft. Het is heel leuk om een code te plaatsen, maar de hele insteek van de vraagsteller is onjuist. Iets wat altijd moet worden getoond ga je - zoals Ariën ook al aangaf - niet proberen te plaatsen in een $_FILES variabele.

Het is leuk dat je code kunt schrijven, maar kijk alsjeblieft ook naar de toepassing en de essentie van een vraag. Dat code wellicht doet wat de vraagsteller vraagt, wil niet zeggen dat daarmee de code goed is.

Als een vraagsteller vraagt om in de auto van zijn schoonmoeder het rempedaal te vervangen door een gaspedaal, dan is het heel tof dat jij dat misschien kunt bouwen ... maar een dergelijke 'oplossing' is onwenselijk. Probeer dus alsjeblieft wat verder te kijken dan alleen de code, maar kijk ook naar het nut en of de vraagsteller wel de juiste insteek heef gekozen.

Toevoeging op 29/08/2022 21:15:15:

@Jan te Pas

Wat jij wil is dus niet de juiste aanpak, en de 'oplossing' van Adaptive Solution ook niet.
 
Jan te Pas

Jan te Pas

29/08/2022 21:32:31
Quote Anchor link
Ik heb nu een HTML opmaak waar ik het logo in heb zitten. Dus geen enkel probleem heb ik. Ik wilde alleen eens iets anders proberen. Inschieten van een variabele in een array. Waarom? Om gewoon eens te proberen maar ik merk dat het niet zo’n normale opzet is. Doer een naam in te schieten kan ik de mail cleaner houden. Dus minder HTML etc. Ik gebruik nu : Content-Type: text/html; charset=UTF-8 en dat werkt prima
 
Ozzie PHP

Ozzie PHP

29/08/2022 23:43:08
Quote Anchor link
Jan te Pas op 29/08/2022 21:32:31:
Doer een naam in te schieten kan ik de mail cleaner houden. Dus minder HTML etc. Ik gebruik nu : Content-Type: text/html; charset=UTF-8 en dat werkt prima

Geen idee wat dit met je initiële vraagstelling te maken heeft, dus ik weet ook niet hoe ik hierop moet reageren.
 
Ad Fundum

Ad Fundum

30/08/2022 09:08:10
Quote Anchor link
Een paar dingetjes:

Een naam toevoegen aan een HTML-formulier kan met de HTML code <input type="text" name="naam"/> . Die zet je dan op hetzelfde niveau in het HTML formulier als dat je <input type="file" name="bestand"/> hebt.
PHP heeft naast $_FILES nog drie andere arrays, waarin de inhoud van een formulier kan komen te staan:
- $_GET, voor wanneer het formulier is opgestuurd met het attribuut action="get" (bevat ook variabelen uit de URL)
- $_POST, voor wanneer het formulier is opgestuurd met het attribuut action="post" (gebruikelijk)
- $_REQUEST, een samenraapsel van $_GET en $_POST (en $_COOKIE).

Wil je zo een array uitlezen, dan hoef je niet eerst een kopie te maken van het array. Dat is wat je doet met $attachments = $_FILES. Je kunt ook gewoon een verwijzing maken naar (een deel van) een array met $attachments = &$_FILES . Je kunt dan via PHP code als $attachments['sleutel'] = "waarde"; iets toevoegen aan $_FILES:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$logo
= "/home/ikzelf/logo.png";  // let op open_basedir restriction
$attachments = &$_FILES;
$attachments['logo.png'] = [
  'name' => 'logo.png',  // The original name of the file on the client machine.
  'type' => 'image/png',  // The mime type of the file, if the browser provided this information.
  'size' => filesize($logo),  // The size, in bytes, of the uploaded file.
  'tmp_name' => $logo,  // The temporary filename of the file in which the uploaded file was stored on the server.
  'error' => 0,  // The error code associated with this file upload.
];
var_dump($_FILES);
?>


Meer over arrays in de handleiding.

Wanneer je meerdere bestanden tegelijk wilt kunnen uploaden, hoef je niet voor elk mogelijk bestand een aparte <input type="file"/> te maken. De gebruiker moet dan telkens opnieuw een bestand uitzoeken. In plaats daarvan kan je ook het attribuut multiple meegeven en slechts 1 input tag gebruiken: <input type="file" name="bestanden" multiple/>
Gewijzigd op 30/08/2022 09:08:26 door Ad Fundum
 
Jan te Pas

Jan te Pas

30/08/2022 18:09:06
Quote Anchor link
@Ad Fundum @Ozi php: dank beiden. Ik wilde het snappen, en met jullie hulp werkt het. Ik gebruik het niet, omdat ik de attachments in Outlook bovenin krijg te zien. Daar zou de intro, logo ook komen. En dus ongewenst. Ik stel nu een HTML opmaak, en de attachments worden gekoppeld aan de HTML. Resultaat is voor al in Outlook beter. Zo kan een zoektocht eindigen in een bestaande structuur. En dat is gebeurd. Dank allen!
 



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.