[PHP] ob_start in while loop

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Storm90
  • Registratie: September 2008
  • Laatst online: 09-09 15:23
Goedendag,

Ik ben op dit moment bezig met een nieuwsbrief voor een website, dit is mijn code:

Zoals jullie in de onderstaande code zien, maak ik gebruik van ob_start om mijn code van de nieuwsbrief te includen, dit zodat er niet letterlijk php code wordt verzonden, maar dat de code eerst wordt gegenereerd.

nieuwsbriefmail.php
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
38
39
40
41
42
43
44
45
46
47
<?php   
error_reporting(E_ALL);  
ini_set("display_errors", 1);
$db=mysql_connect("localhost", "**", "**");
mysql_select_db("amapvtest");

$query = ("SELECT * FROM lid WHERE soort='L'");
$resultaat = mysql_query($query) or die ("FOUT: " .mysql_error());
while ($record = mysql_fetch_object($resultaat)){ 
          //bevestigingsemail 



            //vaste gegevens
            $gebruikersnaam = $record->gebruikersnaam;
            $Naar = $record->email;
            include_once('class.phpmailer.php');            
            $mail    = new PHPMailer();
            
ob_start(); 
include_once 'nieuwsbrief.php'; 
$body = ob_get_contents(); 
ob_end_clean(); 

            $subject = 'testmail';//_AANM_ACTIVATIEMAIL;
            
            $body    = eregi_replace("[\]",'',$body);
            $subject = eregi_replace("[\]",'',$subject);
            
            $mail->From     = "info@betterlook.net";//_ALG_SUPADRES;
            $mail->FromName = 'test';//_ALG_MAILNAAM;
            
            $mail->Subject = $subject;
            
            $mail->AltBody = html_entity_decode(strip_tags($body)); // optional, comment out and test
            
            $mail->MsgHTML($body);
            
            $mail->AddAddress($Naar);
            
            if(!$mail->Send()) {
              echo 'mislukt';//_AANM_AANGEMELD1;
            } else {
              echo 'gelukt';//_AANM_AANGEMELD2;
            }       
}       
?>


nieuwsbrief.php
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
<?php
$db=mysql_connect("localhost", "**", "**");
mysql_select_db("amapvtest");

$lid = 2;

function age2($date){
    $year = substr($date,0,4);
    $month = substr($date,5,2);
    $day = substr($date,8,2);
    $year_diff  = date("Y") - $year;
    $month_diff = date("m") - $month;
    $day_diff   = date("d") - $day;
    if ($month_diff < 0 | ($month_diff == 0 && $day_diff < 0)) {
        $year_diff--;}
    return $year_diff;
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body style="background:#FFFFFF; margin:0; padding:0;">
<!-- Begin nieuwsbrief -->
<div style="text-align:center">
  <!-- header -->
  <div style="width:600px; height:118px; margin-top:20px;">
  <img src="amateursprive.png" />
  </div>
  <!-- center -->
  <table width="600px" align="center" cellspacing="0" cellpadding="0">
    <tr>
      <td background="center.png" style="background-repeat:repeat-y;">
  <!--<div style="background-image:url(center.png); background-repeat:repeat-y; border:solid #FFFFFF; border-right:0px; border-top:0px; border-left:0px; border-bottom:0px; width:600px;">-->
    <!-- inleiding -->

    <div style="font-size:12px; font-family:Verdana, Arial, Helvetica, sans-serif; font-style:italic; color:#666666; text-align:left; margin-left:8px;"><br />
      <table width="584px">
        <tr>
          <td colspan="2" style="text-align:left;">
            <h1 style='font-family: Georgia, "Times New Roman", Times, serif; font-size:18px; font-weight: normal; color: #000000; border-left:3px solid; border-color:#666666;'>&nbsp;&nbsp;Nieuwe Amateurs</h1>
          </td>
        </tr>
        <tr>
        <?php
        $i = 0;
        $query = ("SELECT * FROM lid WHERE soort = 'A' AND TO_DAYS(NOW()) - TO_DAYS(amateurdatum)<=31 AND eersteitemdatum IS NOT NULL");
        $resultaat = mysql_query($query) or die ("FOUT: " .mysql_error());
        while ($record = mysql_fetch_object($resultaat)){
        $Leeftijd = age2($record->amateurdatum);
        echo '<td style="text-align:center; background:#FFCCCC; border:#FF9933 solid 1px; height:150px; width:100px; font-size:12px; vertical-align:top;">';
        echo '<img src="images/profielfotos/';
        echo $record->id;
        echo '.jpg" style="margin:5px; border:solid 3px #FFFFFF; text-align:center;" height="100px" /><br />';
        echo '<b>';
        echo $record->gebruikersnaam;
        echo '</b><br>';
        echo 'Leeftijd:';
        echo $Leeftijd;
        echo '</td>';
        $i++;
          if ($i<5){
            echo '<td width="100%"> </td>';
          }
          if ($i == 5){
            echo '</tr><tr>';
            $i = 0;
          }
        }
        ?>
      </tr>
    </table>
    <br /><br />
    <!-- favorites -->
    <div style="text-align:left; margin-top:20px;">
      <h1 style='font-family: Georgia, "Times New Roman", Times, serif; font-size:18px; font-weight: normal; color: #000000; border-left:3px solid; border-color:#666666;'>&nbsp;&nbsp;Favorieten</h1>
      <div  style="background-color:#feebda; border-top:solid #FF9933 1px; border-bottom:solid #FF9933 1px; width:584px">
        <table style="margin-left:8px; width:550px; vertical-align:top;">
         <?php
         $query = ("SELECT * FROM favorieten INNER JOIN lid ON favorieten.amateurid = lid.id WHERE lidid ='".$lid."'");
         $resultaat = mysql_query($query) or die ("FOUT: " .mysql_error());
         while ($record = mysql_fetch_object($resultaat)){
         $amateur = $record->amateurid;
         echo '<tr><td>'; 
         echo '<img src="images/profielfotos/';
         echo $amateur;
         echo '.jpg" height="100px" style="border:solid 3px #FFFFFF;" /></td>';
         echo '<td style="padding-left:35px; font-size:12px; text-align:left; vertical-align:top;" height="10px">';
         echo '<h5>';
         echo $record->gebruikersnaam;
         echo '</h5>Geslacht:';
           if ($record->geslacht = 'V'){
             echo 'Vrouw';
           }else{
             echo 'Man';
           }
         echo '<br />Leeftijd:';
         echo $Leeftijd;
         echo '<br /></td>';
         echo '<td style="padding-left:35px; font-size:12px; text-align:left; vertical-align:top;">';
         echo '<h5 style="color:#FF66CC;">';
         echo "Nieuwe Video's</h5>";
            $query = ("SELECT * FROM item WHERE amateurid = '".$amateur."' AND TO_DAYS(NOW()) - TO_DAYS(datumtijd)<=31");
            $resultaat = mysql_query($query) or die ("FOUT: " .mysql_error());
            while ($record = mysql_fetch_object($resultaat)){
            echo '<a style="text-decoration:none;" href="#">';
            echo $record->naam;
            echo '(';
            echo $record->speelduur;
            echo 'sec.)</a><br />';
            echo '<a style="text-decoration:none;" href="#">';
            echo 'Sex op het Werk (25 min)</a>';
            }
            
          echo '</td><td style="padding-left:35px; font-size:12px; text-align:left; vertical-align:top;">';
          echo '<h5 style="color:#FF66CC;">Nieuwe Foto';
          echo "'s</h5>";
          echo '<a style="text-decoration:none;" href="#">Brutal Quickie (12)</a><br />';
          echo '<a style="text-decoration:none;" href="#">Het bed Opmaken (20)</a><br />';
          echo '<a style="text-decoration:none;" href="#">Wiedervereinigug (10)</a><br />';
          echo '<a style="text-decoration:none;" href="#">Opwindende Kwelling (15)</a><br />';
          echo '</td></tr>';
          }
          ?>
        </table>
      </div>
    </div>
    <br /><br />
    <table width="583px">
      <tr>
        <td colspan="2" style="text-align:left;">
          <h1 style='font-family: Georgia, "Times New Roman", Times, serif; font-size:18px; font-weight: normal; color: #000000; border-left:3px solid; border-color:#666666;'>&nbsp;&nbsp;Nieuwste Video's</h1>
        </td>
      </tr>
      <tr>
        <td width="10%" style="background:#FFCCCC; border:#FF9933 solid 1px; height:150px; font-size:12px; vertical-align:top; text-align:center;">
          <img src="3357.jpg" style="margin:5px; border:solid 3px #FFFFFF; text-align:center;" height="100px" /><br />          <b>SMcouple (koppel)</b><br>
          Naam video: <a style="text-decoration:none;" href="#">Sexlessen bij Lerares Linda</a><br />
          Speelduur: 25 minuten
        </td>
        <td width="10%" style="background:#FFCCCC; border:#FF9933 solid 1px; height:150px; font-size:12px; vertical-align:top; text-align:center;">
          <img src="3357.jpg" style="margin:5px; border:solid 3px #FFFFFF; text-align:center;" height="100px" /><br />          <b>SMcouple (koppel)</b><br>
          Naam video: <a style="text-decoration:none;" href="#">Sexlessen bij Lerares Linda</a><br />
          Speelduur: 25 minuten
        </td>
        <td width="10%" style="background:#FFCCCC; border:#FF9933 solid 1px; height:150px; font-size:12px; vertical-align:top; text-align:center;">
          <img src="3357.jpg" style="margin:5px; border:solid 3px #FFFFFF; text-align:center;" height="100px" /><br />          <b>SMcouple (koppel)</b><br>
          Naam video: <a style="text-decoration:none;" href="#">Sexlessen bij Lerares Linda</a><br />
          Speelduur: 25 minuten
        </td>
        <td width="10%" style="background:#FFCCCC; border:#FF9933 solid 1px; height:150px; font-size:12px; vertical-align:top; text-align:center;">
          <img src="3357.jpg" style="margin:5px; border:solid 3px #FFFFFF; text-align:center;" height="100px" /><br />          <b>SMcouple (koppel)</b><br>
          Naam video: <a style="text-decoration:none;" href="#">Sexlessen bij Lerares Linda</a><br />
          Speelduur: 25 minuten
        </td>
      </tr>
    </table>
  </div>
  </td>
  </tr>
</table>
<table background="bottom.png" width="600px" height="70px" style="text-align:center; font-family:Georgia, 'Times New Roman', Times, serif; font-style:italic; font-size:12px; color:#FFFFFF;" cellpadding="0" cellspacing="0">
    <tr>
    <td style="text-align:center" colspan="4">
        De populairste amateurs op amateursprive.nl:<br />
    </td>
    </tr>
      <tr>
        <td>
          Annelie Bankers<br />
          Peter van Oss<br />
        </td>
        <td>
          Rik Slegers<br />
          Johan de Vries<br />
        </td>
        <td>
          Monique van Bakel<br />
          Vera Venhuizen<br />
        </td>
        <td>
          Eva Buis<br />
          Esther Naaktgeboren<br />
        </td>
      </tr>
    </table>
</body>
</html>


Zoals sommige misschien is opgevallen is deze nieuwsbrief voor een erotische site. In de nieuwsbrief moeten nieuwste amateurs, nieuwste video's EN favorieten mee worden gestuurd. De favorieten is voor iedere gebruiker, waarnaar de mail wordt gezonden, uniek. Tenslotte heeft niet iedereen dezelfde favorieten.

Zoals jullie vast was opgevallen wil ik dit oplossen door in de nieuwsbriefmail.php een while loop te zetten die alle gebruikers doorloopt, en IN deze while loop steeds opnieuw de nieuwsbrief.php includen, zodat ik in nieuwsbrief.php code kan plaatsen die favorieten selecteerd aan de hand van de gebruiker die op dat moment geselecteerd is. En hier gaat het fout!

Als ik de ob_start buiten de while loop plaats, dan gaat het goed, maar dan krijgt iedereen natuurlijk dezelfde favorieten, omdat ik niet per gebruiker de favorieten kan selecteren. Stop ik hem IN de while loop (zoals bovenstaande code) dan wordt de mail ALLEEN naar de eerste die voorkomt in de database verzonden, en niet naar iedereen.

Weet iemand hoe ik dit kan oplossen?

Alvast vriendelijk bedankt,

Mvg,

Erik

Acties:
  • 0 Henk 'm!

  • vorlox
  • Registratie: Juni 2001
  • Laatst online: 02-02-2022

vorlox

I cna ytpe 300 wrods pre miute

Gebruik een template.. ipv een include

dus nieuwsbrief.php
code:
1
2
3
4
5
<html>
Beste {user},

Nieuwsbrief bla bla
</html>


Haal daarna 1 keer de template op dmv file_get_contents en stop contents in een variabele
Loop daarna door al je gebruikers en parse de template met str_replace ofzo

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Volgens mij kun je hetzelfde bestand niet meerdere keren includen in een loop. Kun je niet gewoon de nieuwsbrief in een variabele zetten en in nieuwsbriefmail.php deze variabele combineren met de juiste tekst/content voor de betreffende gebruiker (met sprintf o.i.d.)?

Acties:
  • 0 Henk 'm!

  • link0007
  • Registratie: Augustus 2006
  • Niet online
inderdaad, een template is ook stukken eenvoudiger te wijzigen. Zo kan je bijvoorbeeld ook meerdere talen hebben, verschil maken tussen man/vrouw, etc!

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;


Acties:
  • 0 Henk 'm!

  • Storm90
  • Registratie: September 2008
  • Laatst online: 09-09 15:23
Deze nieuwsbrief is nieuw voor mij,
bedoelen jullie dat ik gewoon variables plaats in de nieuwsbrief.php en in de nieuwsbriefmail.php alle variabelen defineer, vervolgens de nieuwsbrief.php in de while loop includen zodat alle variabelen waardes krijgen?

Of bedoelen jullie het anders? Jullie weten wel, neem ik aan, dat de code eerst gegenereerd moet worden, anders krijg ik letterlijk php code binnen.

Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Zoals vorlox zegt, je maakt bijv. een nieuwsbrief.tpl bestand met zoiets:
code:
1
2
3
4
5
6
<html>
...
<p>Beste {name}</p>
{favorites}
...
</html>

Vervolgens open je dat bestand in php (file_get_contents) en vervang je de variabelen:
PHP:
1
2
$template = file_get_contents('nieuwsbrief.tpl');
$message = str_replace('{name}', 'Piet', $template);

Acties:
  • 0 Henk 'm!

  • Storm90
  • Registratie: September 2008
  • Laatst online: 09-09 15:23
oke, dat is misschien wel een goede oplossing!

Bedankt voor jullie reacties
en JanDM, bedankt voor de goede uitleg!:)

Er zit alleen nog 1 maar hier aan dit verhaal,
de favorieten... Niet iedereen heeft een evenveel aantal favorieten. Dus hoe kan ik dit oplossen?
In de template {favorieten} plaatsen en dan deze string op een of andere manier vervangen met de uitslagen van een while loop, is dit mogelijk?

[ Voor 54% gewijzigd door Storm90 op 19-12-2008 16:43 ]


Acties:
  • 0 Henk 'm!

  • winkbrace
  • Registratie: Augustus 2008
  • Laatst online: 24-08 15:17
Klinkt als een goed idee :)

Zelf zou ik een for-loop gebruiken, maar dat is een voorkeurskwestie denk ik.

bijvoorbeeld
code:
1
2
3
for ($i=0; $i<$count; $i++) {
    $favorieten .= '<a href="">'.mysql_result($result, $i).'</a>';
}

Acties:
  • 0 Henk 'm!

  • Storm90
  • Registratie: September 2008
  • Laatst online: 09-09 15:23
Juist, en dan de {favorieten} herplaatsen doormiddel van
PHP:
1
str_replace('{favorieten}', $favorieten, $template);

Zoals JanDM al zei.

Goed idee, ik ga het zo uitproberen en dan laat ik nog iets weten.
Nogmaals bedankt!

[ Voor 5% gewijzigd door Storm90 op 19-12-2008 17:05 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 12:37

MueR

Admin Tweakers Discord

is niet lief

offtopic:
Het is tegen de policy, maar met dingen als "Sex op het werk" ben ik stiekem toch erg benieuwd :P Zien ik niet vaak langs komen dit soort topics, meestal wordt dat helemaal gecensureerd :p

[ Voor 29% gewijzigd door MueR op 19-12-2008 17:30 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Storm90
  • Registratie: September 2008
  • Laatst online: 09-09 15:23
Haha,
sorry maar om heel mijn code aan te gaan passen voordat ik het hier plaats vind ik zo nutteloos, en ik had toch hulp nodig.

Mijn excuses,

Ik laat het nu zo staan, als de moderators vinden dat dit niet door de beugel kan, dan sluiten ze dit topic maar ;)

[ Voor 32% gewijzigd door Storm90 op 19-12-2008 17:34 ]


Acties:
  • 0 Henk 'm!

  • Alain
  • Registratie: Oktober 2002
  • Niet online
Om even op het initiële probleem terug te komen: Je gebruikt het resultaat van een query als voorwaarde voor de while loop en in nieuwsbrief.php overschrijf je de verbinding en het resultaat van je eerste query. Dan wordt het maar 1 keer uitgevoerd. ;)

You don't have to be crazy to do this job, but it helps ....


Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
amateursprive.png
Sexlessen bij Lerares Linda
Brutal Quickie (12)
:X

Anyway. Kijk eens naar een template engine. En verder kan je je newsletter evt ook gewoon samenstellen als string (chars, geen slipje). Waarom het met ob_start en zo sou moeten begrijp ik niet!

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

  • Storm90
  • Registratie: September 2008
  • Laatst online: 09-09 15:23
Het werkt goed met de template en str_replace, perfect!

Ik gebruikte ob_start omdat deze de code eerst genereerd en dit had als voordeel dat het script niet meer letterlijk de php code verstuurde, maar eerst uitvoerde en als volgt de html code verstuurde.

Maar ik heb nog een vraag waar ik een tijdje mee zit, ik weet niet of jullie wat verstand hebben van SQL? Anders open ik gewoon even een nieuwe topic voor deze vraag;)

Ik wil dat de 5 nieuwste video's uit een database gehaald worden, maar de 5 video's MOETEN van verschillende gebruikers zijn, dus bv. video 3 en 4 zijn van dezelfde gebruiker, dan moet hij video 3 selecteren, 4 overslaan en verder gaan met 5. Dit totdat er 5 nieuwe video's geselecteerd zijn.

Iemand een idee?

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online

Acties:
  • 0 Henk 'm!

Verwijderd

Ik lees de code inplaats van de bedoelingen en ik zie:
Storm90 schreef op vrijdag 19 december 2008 @ 15:49:
PHP:
1
2
3
....
include_once 'nieuwsbrief.php'; 
...
Dat betekent dat ie nieuwsbrief maximaal 1 keer uitvoert.

Je hebt ook:
PHP:
1
2
3
...
include 'jebestand.php';
...
. Die doet het wel meer als 1 keer. Als dit alle problemen zijn, zou dat je probleem moeten oplossen.

[ Voor 6% gewijzigd door Verwijderd op 19-12-2008 22:32 ]


Acties:
  • 0 Henk 'm!

  • Storm90
  • Registratie: September 2008
  • Laatst online: 09-09 15:23
Yes I know,

Ik had het al verandert in include, maar dit hielp toen niets. Ik zit nu met een nieuw probleem, volgens mij ben ik in de spamfilter geplaatst door mijn eigen host haha. Na verschillende tests verzend het script plotseling geen mails meer, en ik heb niets verandert aan het script. Maar hier wordt gelukkig op dit moment aan gewerkt:P

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Tipje nog: gebruik geen doctype/html/head/body in je mailings..grote kans dat het stuk gaat bij diverse mailapps. En probeer vooral te werken met tables ipv divs voor betere compabiliteit.

Acties:
  • 0 Henk 'm!

  • Storm90
  • Registratie: September 2008
  • Laatst online: 09-09 15:23
Oke, ik zal de doctypes weghalen. Qua divs heb je inderdaad gelijk, hij gaf veel problemen toen ik div's gebuikte, ik maak er nog steeds een beetje gebruik van, maar ook veel van tables, geeft inderdaad een beter resultaat.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13:45

.oisyn

Moderator Devschuur®

Demotivational Speaker

mocean schreef op vrijdag 19 december 2008 @ 18:30:
Anyway. Kijk eens naar een template engine.
Zoals PHP, een hele goede en snelle template engine. Gewoon je variabelen van tevoren goed instellen, en dan een PHP file includen die gebruik maakt van die variabelen. Klaar ben je.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
.oisyn schreef op zaterdag 20 december 2008 @ 13:41:
[...]

Zoals PHP, een hele goede en snelle template engine. Gewoon je variabelen van tevoren goed instellen, en dan een PHP file includen die gebruik maakt van die variabelen. Klaar ben je.
Ik vind een PHP file includen nu niet echt een handige oplossing voor een gepersonaliseerde nieuwsbrief. Dan blijf je zitten met die output buffering functies e.d. Het kan natuurlijk ook met str_replace op een html-file. Maar dat is feitelijk al een template-engine (die niet heel uitgebreid is).

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Het is allebei heel eenvoudig, en zaken als include() en str_replace() is gewoon onderdeel van de absolute basiskennis PHP. :z TS kan beter gewoon lekker het een en ander uitproberen en/of nalezen in de PHP docs of tutorial. :)

{signature}


Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Voutloos schreef op zondag 21 december 2008 @ 20:23:
Het is allebei heel eenvoudig, en zaken als include() en str_replace() is gewoon onderdeel van de absolute basiskennis PHP. :z TS kan beter gewoon lekker het een en ander uitproberen en/of nalezen in de PHP docs of tutorial. :)
Blijft enkel de vraag over voor welke website de nieuwsbrief nu is >:)

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13:45

.oisyn

Moderator Devschuur®

Demotivational Speaker

mocean schreef op zondag 21 december 2008 @ 17:33:
[...]

Ik vind een PHP file includen nu niet echt een handige oplossing voor een gepersonaliseerde nieuwsbrief. Dan blijf je zitten met die output buffering functies e.d. Het kan natuurlijk ook met str_replace op een html-file.
Ik weet niet of je het is opgevallen, maar hij doet in niewsbrief.php een database query, en format de output (meerdere regels) in een table. Hoe ga je dat aanpakken met een str_replace? Door de tabel in de business laag te formatten als html en dat in een keer te replacen? Als je echt data en presentatie wilt scheiden, dan zul je een systeem moeten maken dat meer kan dan alleen wat dingetjes replacen met str_replace(). Het gebruik van een "template engine" is dan handig, maar mensen denken bij een template engine niet snel aan PHP zelf, terwijl PHP juist een template engine is.

[ Voor 20% gewijzigd door .oisyn op 21-12-2008 22:46 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
.oisyn schreef op zondag 21 december 2008 @ 22:44:
[...]

Ik weet niet of je het is opgevallen, maar hij doet in niewsbrief.php een database query, en format de output (meerdere regels) in een table. Hoe ga je dat aanpakken met een str_replace? Door de tabel in de business laag te formatten als html en dat in een keer te replacen? Als je echt data en presentatie wilt scheiden, dan zul je een systeem moeten maken dat meer kan dan alleen wat dingetjes replacen met str_replace(). Het gebruik van een "template engine" is dan handig, maar mensen denken bij een template engine niet snel aan PHP zelf, terwijl PHP juist een template engine is.
Juist als je zoiets nodig hebt vind ik juist een template engine (heb zelf goede ervaringen met Smarty) handig. Dan zet je in je business layer een array met data klaar, en in de template loop je daar doorheen en format je de boel. Met een simpele str_replace wordt dat lastig ja.

Ik vind de ob_dinges() functies gebruiken hiervoor een beetje vies, maar misschien is dat maar een mening :P.

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13:45

.oisyn

Moderator Devschuur®

Demotivational Speaker

mocean schreef op zondag 21 december 2008 @ 23:01:
[...]

Juist als je zoiets nodig hebt vind ik juist een template engine (heb zelf goede ervaringen met Smarty) handig. Dan zet je in je business layer een array met data klaar, en in de template loop je daar doorheen en format je de boel.
Exact. En die template kan dan prima in PHP zijn geschreven :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Storm90
  • Registratie: September 2008
  • Laatst online: 09-09 15:23
Ik heb nu gewoon gebruik gemaakt van een template en str_replace,
helaas had dit als gevolg dat hij alleen de eerste record uit de database haalde (eigenlijk best logisch), want nadat ik bv. {favorieten} verander mbv str_replace in een while loop, is deze na de eerste loop al verandert, natuurlijk. Dit heb ik uiteindelijk kunnen oplossen door elke keer aan het einde van de nieuwe regel weer {favorieten} te plaatsen en buiten de while loop {favorieten} vervangen door een lege regel.

Nu is hij gelukkig af, ik heb hem al naar mijn baas gemaild en we wachten af of hij zo goed is.

In ieder geval bedankt voor jullie hulp!

Mvg,

Erik

Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Storm90 schreef op maandag 05 januari 2009 @ 14:33:
Ik heb nu gewoon gebruik gemaakt van een template en str_replace,
helaas had dit als gevolg dat hij alleen de eerste record uit de database haalde (eigenlijk best logisch), want nadat ik bv. {favorieten} verander mbv str_replace in een while loop, is deze na de eerste loop al verandert, natuurlijk. Dit heb ik uiteindelijk kunnen oplossen door elke keer aan het einde van de nieuwe regel weer {favorieten} te plaatsen en buiten de while loop {favorieten} vervangen door een lege regel.

Nu is hij gelukkig af, ik heb hem al naar mijn baas gemaild en we wachten af of hij zo goed is.

In ieder geval bedankt voor jullie hulp!

Mvg,

Erik
Klinkt nog erg ingewikkeld, waarom, niet:
PHP:
1
2
3
4
5
6
7
8
9
10
$origineel=file_get_contents('template.tpl');
while ($record=mysql_fetch_object(iets uit de database))
{
  $newsletter=$origineel;
  $newsletter=str_replace('{variabele}',$record->iets,$newsletter);
  $newsletter=str_replace('{variabele2}',$record->iets2,$newsletter);
  //etc.

  mailDeNewsLetter($newsletter,$record->email);
}

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

Verwijderd

Wat een hoop dom gelul. Het enige wat de topicstarter had moeten gebruiken is include in plaats van include_once (zie Hel Gast) en vervolgens de post van AlainS lezen.

Niet luisteren naar mocean die om onduidelijke redenen iets tegen output buffering en includes heeft, terwijl dat in dit geval juist extreem handig is.

PHP:
1
2
3
ob_start ();
include 'melp.php';
$output = ob_get_clean ();


Makkelijk zat toch? De TS had iets dergelijk al, snapt het kennelijk prima, maar sloeg de plank mis met include_once en zijn database connectie. Kan gebeuren.

De TS al een werkende 'template' gemaakt, namelijk nieuwsbrief.php. Wie dan in volle overtuiging met template-engine propaganda gaat beginnen, moet nog even goed nadenken over wat het probleem eigenlijk was, en waarom hij potentieel een hele lading nieuwe problemen zou willen toevoegen. En wat gebeurt er? Ja hoor, er ontstaan nieuwe probleempjes.

Kortom, negeer vorlox, Noork, link0007, JanDM en BazzPsychoNut.
Besteed dan wat aandacht aan de post van AlainS en Hel Gast.
Negeer vervolgens mocean en neem de tips van .oisyn ter harte.

Bedankt voor de aandacht. Dit topic bevat ongeveer 6 keer meer posts dan nodig. Je zou inmiddels schijtziek worden van mensen die in hun vakantie op fora lopen blaten.

Gefeliciteerd PRG, hij gaat lekker zo. Dat wordt nog wat in 2009.

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Ja een paar duizend maal hetzelfde bestand includen, hendig sjiek. :')

Waar slaat jouw reactie uberhaupt op? Waar was jij op 19 december. Lekker makkelijk om nu even de posts van je medeusers af te kraken. Draagt niet echt bij aan een vriendelijker en opener Got.

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 15-09 23:31

TeeDee

CQB 241

Erik0, even buiten het gezwets over welke template (sorry Cheatah :P) er gebruikt moet worden; hou je ook rekening met de url's van je afbeeldingen? <img src="1234.jpg"> zal bij een hele hoop mensen never nooit niet getoond worden.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

Verwijderd

Noork schreef op maandag 05 januari 2009 @ 21:19:
Ja een paar duizend maal hetzelfde bestand includen, hendig sjiek. :')
Wat is er mis met een paarduizend maal hetzelfde bestand includen? 3 regels code om logica te scheiden van content vind ik erg sjiek. Zeker als de TS zijn "template" al had gemaakt, en het versturen van de mails veel eerder de bottleneck vormt dan het een paar keer includen van een PHP template.
Waar slaat jouw reactie uberhaupt op? Waar was jij op 19 december. Lekker makkelijk om nu even de posts van je medeusers af te kraken. Draagt niet echt bij aan een vriendelijker en opener Got.
Nou, mijn reactie slaat erop dat blaatapen dit forum verneuken. Daar doe je prima aan mee met je "volgens mij kun je hetzelfde bestand niet meerdere keren includen in een loop", waarmee je maar al te duidelijk maakt dat je volgens mij helemaal niets moet zeggen over een onderwerp waar je er niet zoveel van weet. Je zet de TS op een dwaalspoor waar hij niet meer vanaf komt.

Ik was op 19 december waarschijnlijk aan het werk als professioneel developer en niet op een forum onzin aan het verspreiden. Het is inderdaad erg eenvoudig om andere users af te kraken als ze achterlijke dingen zeggen, dat is geen sport. De openheid heb je bij deze. Ik heb er weinig moeite mee mijn mening te verkondigen. Dit forum mag best vriendelijk zijn als daar een reden voor is, maar die zie ik niet echt tussen alle onzin die er wordt gepost. Liever onvriendelijk en duidelijk, dan iemand de verkeerde kant op te sturen.
Pagina: 1