login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Hulp met Foreach

Offline roelh - 26/02/2014 16:16
Avatar van roelhPHP gevorderde Hallo allemaal,

Via een foreach lees ik mijn $_POST, om het weer te geven op het scherm.
Echter ik wil graag 2 waardes uit de foreach halen en een waarde toevoegen op een bepaalde plek. Is dit mogelijk?

De waardes haal ik eruit, omdat ik met die waardes $bouwjaar maak, die pas getoond moeten worden op het scherm.

Who can help me?

Groet,
Roel

9 antwoorden

Gesponsorde links
Offline vinTage - 26/02/2014 17:47
Avatar van vinTage Nieuw lid
  1. <?php
  2. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  3. {
  4. foreach($_POST as $key => $val)
  5. {
  6. if($key == 'bouwjaar')
  7. {
  8. echo 'doe hier iets mee -> '.$val."<br>";
  9. }
  10. else
  11. {
  12. echo $val."<br>";
  13. }
  14. }
  15. }
  16. ?>
  17.  
  18. <form action="" method="post">
  19. <input name="een" type="text" />
  20. <input name="twee" type="text" />
  21. <input name="bouwjaar" type="text" />
  22. <input name="drie" type="text" />
  23. <input type="submit" />
  24. </form>
Offline roelh - 26/02/2014 18:54
Avatar van roelh PHP gevorderde Ik denk dat ik de vraag iets anders stellen moet. Er moeten 2 waardes verwijderd worden, ik wil ze niet tonen op het scherm. Daarbij moet er een waarde erbij in komen, die getoond moet worden.
Ik heb namelijk bouwjaarvan en bouwjaartot. Daarmee speel ik en maar ik een $bouwjaar. $bouwjaar moet getoond worden in de foreach lijst, bouwjaarvan en bouwjaartot moeten niet getoond worden.
Hoe doe ik dit?
Offline vinTage - 26/02/2014 19:40 (laatste wijziging 26/02/2014 19:40)
Avatar van vinTage Nieuw lid Niet dat ik het nu snap, maar zo iets:
  1. foreach($_POST as $key => $val)
  2. {
  3. if($key != 'bouwjaarvan' || $key != 'bouwjaartot')
  4. {
  5. //afhandelen van val
  6. }
  7. }

evt kun je dan in de else iets doen met die bouwjaarvan en bouwjaartot
Offline Thomas - 26/02/2014 19:42
Avatar van Thomas Moderator Je bedoelt een soort van formulier over meerdere pagina's?

Is dit een formulier wat je gebruikt om formulier-instellingen op te slaan, dus een soort van beheerpagina voor een (door een admin) instelbaar formulier? Of is dit onderdeel van een zoekformulier voor een gebruiker die een bouwjaar-interval kan opgeven? Of is dit een soort van (tussen)resultaat-pagina van zoekgegevens die een gebruiker heeft ingevuld en opnieuw worden gepresenteerd ter bevestiging? Iets meer context zou helpen.

Zou je eens kunnen omschrijven wat je op je pagina's wilt zien? Je omschrijving is nogal vaag. Bijvoorbeeld:

PAGINA 1:
formulier (submit naar: PAGINA 2)
- dropdown met jaartallen X t/m Y (bouwjaar_van)
- dropdown met jaartallen X t/m Y (bouwjaar_tot)
- ...
- submitknop

PAGINA 2:
???

Zodat we de "flow" door je formulier(en) / pagina's wat beter snappen.

Als je tussen pagina's allerlei informatie moet onthouden, kunnen sessies ($_SESSION) mogelijk een uitkomst bieden.
Offline roelh - 27/02/2014 06:20
Avatar van roelh PHP gevorderde Ik heb een formulier wat ingevuld kan worden en dan verzonden wordt via php mail.
Ik heb een X aantal velden, welke ik makkelijk kan versturen.
Echter veld bouwjaarvan en bouwjaartot mogen niet verzonden worden in de mail, want met die 2 velden maak ik namelijk $bouwjaar, welke WEL verzonden moet worden.

Dus wanneer ik op verzenden klik, moet nadat $bouwjaar gemaakt is, velden bouwjaarvan en bouwjaartot verwijderd worden uit $_POST en $bouwjaar worden toegevoegd.

Is dit mogelijk of moet ik een andere manier verzinnen?
Offline Thomas - 27/02/2014 13:07
Avatar van Thomas Moderator Ik begrijp hier weinig van? Je stelt toch zelf de mail op? Met andere woorden, jij hebt, met de code die je schrijft, volledige controle over wat er in de mail komt? Tenzij je $_POST simpelweg dumpt in je mailbericht?

Het volgende is niet echt bestemd voor wat je wilt doen, maar $_POST is in zekere zin niets meer dan een array. Als zodanig kun je hier array-operaties op uitvoeren, zoals het verwijderen van een element en het aanmaken van een nieuw element met een unieke key.

Met unset() kun je array elementen verwijderen, en met een simpele toekenning aan een array kun je waarden toevoegen:

  1. <?php
  2. // verwijdere element 'blaat' uit $_POST
  3. unset($_POST['blaat']);
  4.  
  5. // voeg element X met waarde Y toe aan $_POST
  6. $_POST['X'] = 'Y';
  7. ?>


Maar nogmaals, $_POST is hier niet echt voor bestemd... En om simpelweg $_POST te dumpen in een e-mailbericht is ook een beetje meh.

Tot nu toe heb ik trouwens meer moeite gehad met het vertalen van je vraagstuk dan het oplossen ervan. Probeer hier de volgende keer wat meer aandacht aan te besteden alsjeblieft.
Offline vinTage - 27/02/2014 15:35
Avatar van vinTage Nieuw lid Je kunt toch gewoon doen wat ik al aangaf...gewoon die bouwjaarvan en bouwjaartot niet afhandelen en dan $bouwjaar na je foreach toevoegen.
Offline roelh - 27/02/2014 18:21 (laatste wijziging 27/02/2014 18:26)
Avatar van roelh PHP gevorderde Oke, ik zal proberen het te verduidelijken:
Ik gebruik nu dit, om de mail op te stellen.
  1. $nettevelden = array(
  2. 'merk' => 'Merk',
  3. 'model' => 'Type',
  4. 'kleur' => 'Kleur',
  5. 'transmissie' => 'Transmissie',
  6. 'carrosserie' => 'Carrosserie',
  7. 'brandstof' => 'Brandstof',
  8. 'bouwjaarvan' => 'Bouwjaar van',
  9. 'bouwjaartot' => 'Bouwjaar tot',
  10.  
  11. );
  12.  
  13. $content[] = '<p><b>Het resultaat, de input:</b></p>';
  14. $content[] = '<ul>';
  15. foreach($_POST as $key => $value)
  16. {
  17. if(!empty($value))
  18. {
  19. $content[] = '<li><strong>'.$nettevelden[$key].'</strong>: '.$value.'</li>';
  20. }
  21. }
  22. $content[] = '</ul>';
  23.  
  24. foreach($content as $text){
  25. echo $text;
  26. }

Waarom? Wanneer een veld niet ingevuld is, wordt het niet weergegeven.
Als ik los met $_POST ga werken in de mail, wat uiteraard ook kan, zou ik dit doen:
Merk: $_POST['merk'];
Model: $_POST['model'];
Kleur: $_POST['kleur'];

Echter, wanneer model niet ingevuld is, wordt dat een lege regel, met met alleen model er voor, zonder inhoud erachter.
Met die foreach heb ik dat dus niet, want die toont alleen waardes.
Nu kun je zeggen, voor die enkele waardes kun je deze manier doen:
Merk: $_POST['merk'];
Model: $_POST['model'];
Kleur: $_POST['kleur'];
Maar ik heb er nog veel meer welke ik tonen wil en dan wordt het script zo über lang en dat dacht ik op te lossen op deze manier.
Bouwjaarvan en bouwjaartot gebruik ik om $bouwjaar te maken. $bouwjaar moet getoond worden en die andere 2 niet op het scherm.

Ik hoop dat dit het duidelijker maakt.. 
Offline Thomas - 27/02/2014 19:10
Avatar van Thomas Moderator Mja wat vinTage zei: voor / in die loop kun je nog steeds gevalsonderscheid maken. Zolang het niet in $content zit kun je er alles mee doen. Ik snap wel dat je voor een generieke aanpak gaat (loop), maar uitzonderingen zoals bouwjaar lossen zichzelf dan niet ineens vanzelf op.

Je zou $nettevelden kunnen gebruiken om $_POST te doorlopen, of desnoods een apart array wat aangeeft welke elementen een "standaard behandeling" krijgen, dit is niet verplicht $_POST hoor.

In die foreach controleer je op $value, je zou daar ook prima dingen op grond van $key kunnen doen.

Of je schrijft alles gewoon uit, een oplossing die je zelf al aandroeg.

Ik begrijp het probleem niet goed - er moet iets extra's geprogrammeerd worden (gevalsonderscheid voor / in loop) of je moet van aanpak veranderen (geen loop). Heb je moeite met het vertalen van deze oplossingen naar PHP of wat heb je nodig om verder te kunnen?
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.202s