Foreach statement en mail

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Roel H

Roel H

28/12/2013 13:26:32
Quote Anchor link
Hallo,

Ik kom steeds verder en verder met me script en met de sessies gaat me al steeds beter af.
Echter ik ben nu zover dat de mail opgemaakt kan worden, met de gegevens van de sessie erin.
Dit is hoe de code uitgelezen wordt:

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
<?php
foreach($_SESSION['kvth'] as $key => $value)
        {

            if(!empty($value)){
            $content[] = '<li>'.$key.': '.$value.'</li>';
            }
        }

        $content[] = '</ul>';
         if(isset($content))
                    {

            foreach($content as $line)
                        {

                echo $line;
                        }
                    }

?>


echo $line maakt mooi de code op het scherm. Echter wil ik deze tekst in de mail krijgen.
Nu dacht ik, ik zet $line in de mail, maar die zend niks uit. Het if statement heb ik ook in de mail gezet, maar ook daar krijg ik geen output. Nu weet ik het ff niet meer.
Wat kan ik het beste doen?

Groet,
Roel
 
PHP hulp

PHP hulp

22/12/2024 10:38:16
 
Obelix Idefix

Obelix Idefix

28/12/2013 13:37:42
Quote Anchor link
Als ik het goed begrijp werkt het mailen niet (goed).
Waarom plaats je daar dan niet de code van? ;-)
 
Roel H

Roel H

28/12/2013 13:57:03
Quote Anchor link
Nou de mail werkt wel goed, iig, als ik gewoon $_SESSION er in zet, dan stuurt die alles wel netjes door.
Maar ik zal de mail erin zetten :)
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
38
39
40
41
42
<?php
$content
[] = '<p><b>Het resultaat, de input:</b></p>';
        $content[] = '<ul>';
        foreach($_SESSION['kvth'] as $key => $value)
        {

            if(!empty($value)){
            $content[] = '<li>'.$key.': '.$value.'</li>';
            }
        }

        $content[] = '</ul>';
         if(isset($content))
                    {

            foreach($content as $line)
                        {

                $mail = $line;
                        }
                    }


                 $headers = "From: \"DAH Regio Oost\" <".$cfg['email'].">\r\n";
                 $headers .= "Reply-To: \"".$_SESSION['kvth']['naam']."\" <".$_SESSION['kvth']['email'].">\n";
                 $headers .= "Return-Path: Mail-Error <".$_SESSION['kvth']['email'].">\n";
                 $headers .= "MIME-Version: 1.0\n";
                 $headers .= "Content-Transfer-Encoding: 8bit\n";
                 $headers .= "Content-type: text/html; charset=iso-8859-1\n";
                
                 $bericht = '
                 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
                 <html>
                 <head>
                 </head>
            
                 <body>
                 '
. $mail.'
                 <br />
                 <br />
                 --------------------------------------------------------------------------<br />
                 <b>Datum:</b> '
.date("d-m-Y @ H:i:s").'<br />
                 <b>IP:</b> <a href=\"http://sunny.nic.com/cgi-bin/whois?domain='
.$_SERVER['REMOTE_ADDR'].'\">'.$_SERVER['REMOTE_ADDR'].'</a><br />
                 <b>Host:</b> '
.gethostbyaddr($_SERVER['REMOTE_ADDR']).'<br />
                 </body>
                 </html>'
;
[
/code]
 
- SanThe -

- SanThe -

28/12/2013 14:24:17
Quote Anchor link
$mail zal alleen de laatste $line bevatten omdat je $mail steeds overschrijft.

Ik zou het zo doen:
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
<?php
$bericht
= '
                 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
                 <html>
                 <head>
                 </head>
            
                 <body>
                   <ul>'
;
foreach($_SESSION['kvth'] as $key => $value)
{

    if(!empty($value)){
        $bericht .= '<li>'.$key.': '.$value.'</li>';
    }
}

$bericht .= '      </ul>
                 <br />
                 <br />
                 '
. $mail.'
                 <br />
                 <br />'
;
// enzovoort
?>
Gewijzigd op 28/12/2013 14:24:38 door - SanThe -
 
Roel H

Roel H

28/12/2013 14:49:26
Quote Anchor link
Thanks, super, dit moet hem zijn! :) Eindelijk werkt het, geweldig fijn! :)
Dan heb ik nog 1 vraagje, daar ga ik maar geen nieuwe topic voor aanmaken indien het hier opgelost kan worden.

deelname_zadeltijdsrit Dit is een veldnaam. Echter door het script, zal het veldnaam er ook zo uitrollen. Voor in de mail is dit dan weer erg lelijk.
Is er een mogelijk om met spaties in formuliervelden te werken, of dit op een andere manier op te lossen?

Of moet dit zo kunnen:
$formuliervelden = array(
'naam' => 'text',
'geboortedatum' => 'text',
'adres' => 'text',
'postcode' => 'text',
'woonplaats' => 'Woonplaats',
'deelname_zadeltijdsrit' => Deelname aan zadeltijdsrit',

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
foreach($nettevelden as $key1)
        {
        foreach($_SESSION['kvth'] as $key => $value)
        {
            if(!empty($value)){
            $content[] = '<li><b>'.$key1.'</b>: '.$value.'</li>';
            }
        }
        }

Echter, dit geeft dubbele weergaven. Iemand een idee?
Gewijzigd op 28/12/2013 14:56:36 door Roel H
 
- SanThe -

- SanThe -

28/12/2013 15:20:49
Quote Anchor link
$content[] = '<li><b>'.str_replace('_',' ',$key1).'</b>: '.$value.'</li>';

Toevoeging op 28/12/2013 15:22:48:

In mijn code:
$bericht .= '<li>'.$key.': '.$value.'</li>';
wordt:
$bericht .= '<li>'.str_replace('_',' ',$key).': '.$value.'</li>';
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

28/12/2013 15:29:48
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$veldnaam
= 'deelname_aan_zadeltijdsrit';
echo ucfirst(str_replace('_', ' ', $veldnaam)); //Deelname aan zadelstijdrit
?>

Overigens, waarom gebruik je de manier van SanThe niet om het bericht samen te stellen?
Nu maak je alleen maar een omweg voor het zelfde resultaat
 
Roel H

Roel H

28/12/2013 15:34:06
Quote Anchor link
Bedankt voor het meedenken, maar ik heb een nog, voor mij, makkelijkere manier gevonden.
$nettevelden is een array, waarbij $key eruit wordt gehaald

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
foreach($_SESSION['kvth'] as $key => $value)
        {
            if(!empty($value)){
            $content[] = '<li><b>'.$nettevelden[$key].'</b>: '.$value.'</li>';
            }
        }
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

28/12/2013 15:53:07
Quote Anchor link
Dat kan ook goed, maar dan nog: waarom in de foreach een array samnestellen, en dan daarna die array nog eens met een foreach uitlezen?
Wat jij doet is:
Ik heb een doos A met dingen en die moeten in doos C, ik doe ze eerst allemaal in en doos B en vandaar uit weer in doos C.
Gewijzigd op 28/12/2013 15:53:33 door Ger van Steenderen
 
Roel H

Roel H

28/12/2013 17:35:10
Quote Anchor link
Nou ik ben dan benieuwd hoe jij het zou doen. De manier zoals jij het hebt, maakt het voor mij niet makkelijker namelijk. Dan moet ik de 'name' namen bij de velden te lang en ingewikkeld maken.
Ik ben erg benieuwd, wil altijd bij leren!
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

28/12/2013 18:31:38
Quote Anchor link
Het gaat niet om hoe je met die veldnamen omgaat(dat is prima) maar hoe dat je het bericht samen stelt:
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
<?php
$content
[] = '<p><b>Het resultaat, de input:</b></p>';
        $content[] = '<ul>';
        foreach($_SESSION['kvth'] as $key => $value)
        {

            if(!empty($value)){
            $content[] = '<li>'.$key.': '.$value.'</li>';
            }
        }

        $content[] = '</ul>';
         if(isset($content)) //overbodig bestaat al
                    {
            foreach($content as $line) {
        //......
    }
?>

Je gebruikt 2 foreach loops terwijl het 'net zo makkelijk met 1 kan.
 
Roel H

Roel H

28/12/2013 18:40:20
Quote Anchor link
Klopt daar heb je gelijk in, daarin kan ik nog verbeteren, helemaal waar!
Ben al blij dat ik zover ben gekomen als nu, verbeter mezelf steeds meer en leer bij.
Ik zit nu nog met het tellen, zoals je misschien in m'n andere topic ziet en dan ben ik zo goed als klaar.
Daarna mag ik proberen nummer 2 te maken, waarbij ik nu al een heleboel geleerd heb en daarmee kan werken.
 



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.