Sinds een paar dagen ben ik bezig om Smarty onder de knie te krijgen. Ik had al een site in html/css gemaakt en deze omgezet naar een .tpl bestand (bv. index.tpl) en via index.php laten zien. Dit werkt allemaal goed.
Daarna begonnen met het "assignen" van variablen in de code d.m.v
en deze dan aan te roepen in index.tpl d.m.v
Dit lukt allemaal aardig. Maar nu ben ik bezig met een login/registreer systeempje en loop ik tegen een probleem aan met het scheiden van content en code.
Ik kijk eerst of er gesubmit wordt in hier formulier, hierna voer ik een aantal checks uit of er velden zijn ingevuld en of deze wel geldig zijn. Als dit is wordt de user ge-insert in de database d.m.v een query. Als die query lukt wordt er een e-mail gestuur naar de gebruiker d.m.v de PHPMailer class. Daarvoor gebruik ik het volgende stukje code.
Dit lukt goed, maar het probleem is dat de tekst "Je bent succesvol......" op een blanke pagina komt te staan. Begrijpelijk omdat dit niet in de .tpl staat lijkt mij. Als ik nu de if-statement in smarty variabelen assign d.m.v de volgende code
En in de .tpl het volgende neerzet:
Nadat ik dit heb gedaan geeft hij helemaal niets meer terug naar het browser en krijg ik een "mooie" blanco pagina
De e-mails worden wel verstuurd en de user wordt ook gewoon aangemaakt. Maar het is niet netjes om de gebruiker niets te laten weten of het wel danwel niet is gelukt om een account aan te maken. Ik heb de hele documentatie doorgezocht van smarty maar ben niets tegengekomen wat het zou kunnen zijn (vind de voorbeelden niet echt lekker gemaakt voor een noobie met smarty).
Kortom: wat doe ik fout? Moet ik ipv de assign functie een andere functie gebruiken voor het assignen van:
Daarna begonnen met het "assignen" van variablen in de code d.m.v
PHP:
1
| $smarty->assign("naam", "Foo") |
en deze dan aan te roepen in index.tpl d.m.v
HTML:
1
| {$naam} |
Dit lukt allemaal aardig. Maar nu ben ik bezig met een login/registreer systeempje en loop ik tegen een probleem aan met het scheiden van content en code.
Ik kijk eerst of er gesubmit wordt in hier formulier, hierna voer ik een aantal checks uit of er velden zijn ingevuld en of deze wel geldig zijn. Als dit is wordt de user ge-insert in de database d.m.v een query. Als die query lukt wordt er een e-mail gestuur naar de gebruiker d.m.v de PHPMailer class. Daarvoor gebruik ik het volgende stukje 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
| // PHPMailer class require("include/class.phpmailer.php"); $mail = new PHPMailer(); $mail->IsSMTP(); // telling the class to use SMTP $mail->Host = "mailserver.test.nl"; // SMTP server $mail->From = "noreply@test.nl"; $mail->FromName = "Test.nl"; $mail->AddAddress($_POST['email']); $mail->Subject = "Registratie ".$sitename.""; $message = "Beste ".$_POST['username'].",\n\n"; $message .= "Je hebt je geregistreerd op de site ".$sitename.", dit is de activatie e-mail van je registratie.\n"; $message .= "Om je account te activeren, druk je op de link onderaan deze mail.\n\n "; $message .= "Registratie bevestigen: ".$siteurl."activate.php?userid=".$userid."&code=".$actcode."®istrate=true \n\n"; $message .= "Zodra je op deze link geklikt hebt, kun je inloggen met:\n"; $message .= "Username: ".$_POST['username']."\n"; $message .= "Password: ".$_POST['pass1']."\n\n"; $message .= "** Dit is een automatisch verzonden bericht **"; $mail->Body = $message; if(!$mail->Send()) { echo "Fout opgetreden tijdens verzenden van e-mail. Neem contact op met <a href=\"mailto:".$sitemail."\">".$sitemail."</a>."; }else{ echo "Je bent succesvol geregistreerd! Zodra je de link in de mail hebt bezzocht kun je inloggen.<br/>\n<a href=\"login.php\">» Naar de inlogpagina</a>"; } |
Dit lukt goed, maar het probleem is dat de tekst "Je bent succesvol......" op een blanke pagina komt te staan. Begrijpelijk omdat dit niet in de .tpl staat lijkt mij. Als ik nu de if-statement in smarty variabelen assign d.m.v de volgende code
PHP:
1
2
3
4
| // Variables for error handling $tpl->assign("mail", $mail->Send()); $tpl->assign("mailerror", "Fout opgetreden tijdens verzenden van e-mail. Neem contact op met <a href=\"mailto:$sitemail\">".$sitemail."</a>."); $tpl->assign("mailsuccess", "Je bent succesvol geregistreerd! Zodra je de link in de mail hebt bezocht kun je inloggen.<br/>\n<a href=\"login.php\">» Naar de inlogpagina</a>"); |
En in de .tpl het volgende neerzet:
HTML:
1
2
3
4
5
| {if !$mail} {$mailerror} {else} {$mailsuccess} {/if} |
Nadat ik dit heb gedaan geeft hij helemaal niets meer terug naar het browser en krijg ik een "mooie" blanco pagina
Kortom: wat doe ik fout? Moet ik ipv de assign functie een andere functie gebruiken voor het assignen van:
PHP:
1
| $mail->Send() |
]|[ Apple Macbook Pro Retina 13" ]|[