Variabele toevoegen aan een array() [opgelost]
Na de submit lees ik de ingevulde velden in:
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 -
@Ariën, dat dacht ik ook,had ik al geprobeerd, net nog eens, maar toch wordt variabele niet toegevoegd.
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.
Code (php)
1
2
3
4
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"/>
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
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.
Wat heeft een logo te maken met een upload uit FILES?
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.
Je hebt immers al een locatie naar je eigen logo.
Klopt helemaal, alles draait prima, maar ik wilde dit probleem eens tackelen. Kijken of daar ook een simpele aanpak voor was…dank!
Code (php)
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
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>
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>
@Adaptive Solution: dit ziet er erruggoed uit. Ik ga het proberen. Zal morgen worden. Dank! Leren is leuk. Omdat het kan.
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.
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
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.
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)
1
2
3
4
5
6
7
8
9
10
11
12
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);
?>
$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/>
@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!