Gastenboek gemaakt, maar na POST geen bericht?
Ik ben nog maar een beginner op php gebied, maar ben wel zover gekomen dat ik nu een gastenboek heb gemaakt voor op de website van mn moeder (die ik ook zelf heb gemaakt). Mijn gastenboek werkt prima alleen, maar nu ik heb eenmaal in de website zelf heb gezet doet hij het niet meer. Ik zit er al een paar dagen aan, en heb verschillende dingen geprobeerd, maar ik kom er niet uit.
Op het moment dat ik op de knop verstuur druk, wordt wel weer de nieuwe pagina geladen (zoals ik heb geprogrammeerd) maar ik zie nergens het bericht. Het is de bedoeling dat het bericht onder het invul scherm komt te staan.
Hieronder zal ik de stukken codes neerzetten, ik hoop dat iemand mij kan helpen?
groetjes Romy
Dit is mn html document met het php formulier genaamd beblog.html
<div id="content">
<div id="blog">
<div class="post">
<h1 class="title">gastenboek </h1>
<div class="entry">
<form action="plaats.php" method="post" accept-charset="iso-8859-1">
<p>
De gegevens die u via het volgende formulier invult, worden op het gastenboek geplaatst en zullen voor iedereen zichtbaar zijn.
</p>
<p>
Naam: <br>
<input name="naam" type="text" size="40" tabindex="1000">
</p>
<p>
E-mail: (optioneel)<br>
<input name="email" type="text" size="40" tabindex="1001">
</p>
<p>
Woonplaats: (optioneel)<br>
<input name="woonplaats" type="text" size="40" tabindex="1003">
</p>
<p>
Uw bericht: <br>
<textarea name="bericht" rows="8" cols="40" tabindex="1004"></textarea>
</p>
<p>
<input type="submit" name="submit" value="Verstuur" title="Verstuur dit formulier" tabindex="1005">
</p>
</form>
</div>
<div class="hr">
<hr />
</div>
</div>
<!-- end #post -->
</div>
<!-- end #blog -->
<div style="clear: both; height: 1px;"></div>
</div>
<!-- end #content -->
Om de berichten op te slaan maak ik gebruik van een leeg php bestand genaamd gastenboek.php chmod 777
Het php document achter de verstuur knop heet plaats.php:
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
38
39
40
41
42
43
44
45
46
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
<?php
$naam = $_POST['naam'];
$email = $_POST['email'];
$woonplaats = $_POST['woonplaats'];
$bericht = $_POST['bericht'];
$datum = date("d.m.y H:i");
$bericht = htmlentities($bericht);
$bericht = nl2br($bericht);
$bericht = stripslashes($bericht);
// defineer het bestand met berichten
$file = "gastenboek.php";
// open het bestand
$fopenr = fopen ($file, "r");
// sla de inhoud op om de eerder toegevoegde berichten
// te onthouden en te herschrijven onder het nieuwe bericht
$msgs = fread ($fopenr, filesize ($file));
// open de file nogmaals maar dan nu om er in te schrijven
$fopenw = fopen($file, "w+");
// schrijf nieuwe bericht + alle oude in $file
fwrite($fopenw, "
\n\n<!-- bericht -->\n
<b>$naam</b> <$email><br>\n
<blockquote><p>$bericht</p></blockquote>\n
<p>$datum</p>$msgs
");
// sluit het bestand
fclose($fopenw);
// sluis bezoeker door naar beblog.html
echo "<SCRIPT LANGUAGE=\"javascript\" TYPE=\"text/javascript\">window.location='beblog.html'</SCRIPT>\n";
mail ("[email protected]", "Nieuw bericht in gastenboek", "
Hallo,\n\n
Er is zojuist een bericht achter gelaten door $naam ($email).\n\n
Dit was een automatisch bericht.
", "From: $naam <$email>");
?>
$naam = $_POST['naam'];
$email = $_POST['email'];
$woonplaats = $_POST['woonplaats'];
$bericht = $_POST['bericht'];
$datum = date("d.m.y H:i");
$bericht = htmlentities($bericht);
$bericht = nl2br($bericht);
$bericht = stripslashes($bericht);
// defineer het bestand met berichten
$file = "gastenboek.php";
// open het bestand
$fopenr = fopen ($file, "r");
// sla de inhoud op om de eerder toegevoegde berichten
// te onthouden en te herschrijven onder het nieuwe bericht
$msgs = fread ($fopenr, filesize ($file));
// open de file nogmaals maar dan nu om er in te schrijven
$fopenw = fopen($file, "w+");
// schrijf nieuwe bericht + alle oude in $file
fwrite($fopenw, "
\n\n<!-- bericht -->\n
<b>$naam</b> <$email><br>\n
<blockquote><p>$bericht</p></blockquote>\n
<p>$datum</p>$msgs
");
// sluit het bestand
fclose($fopenw);
// sluis bezoeker door naar beblog.html
echo "<SCRIPT LANGUAGE=\"javascript\" TYPE=\"text/javascript\">window.location='beblog.html'</SCRIPT>\n";
mail ("[email protected]", "Nieuw bericht in gastenboek", "
Hallo,\n\n
Er is zojuist een bericht achter gelaten door $naam ($email).\n\n
Dit was een automatisch bericht.
", "From: $naam <$email>");
?>
p.s. de automatische mail doet het ook niet, al vind ik dat niet heel erg, maar als iemand die fout daar misschien ook ziet?
Alvast super bedankt!
2. regel 36 kan je beter oplossen met php header() location
3. Je springt misschien te vroeg naar location='beblog.html de mail wordt nooit verstuurd (ik ken deze oplossing niet)
4. Zorg voor de juiste quotes in de mail() functie
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
mail ('[email protected]', 'Nieuw bericht in gastenboek','
Hallo,\n\n
Er is zojuist een bericht achter gelaten door $naam ($email).\n\n
Dit was een automatisch bericht.
From: '.$naam.' '.<$email>);
header('Location: beblog.html');
?>
mail ('[email protected]', 'Nieuw bericht in gastenboek','
Hallo,\n\n
Er is zojuist een bericht achter gelaten door $naam ($email).\n\n
Dit was een automatisch bericht.
From: '.$naam.' '.<$email>);
header('Location: beblog.html');
?>
Zet foutmeldingen aan om te kunnen debuggen
Gewijzigd op 31/08/2012 20:34:40 door John D
Ten eerste bedankt voor deze snelle reactie, helemaal super.
Ik ga er gelijk mee aan de slag, hoe het verder loopt zal ik weer mee delen.
Groetjes Romy
Toevoeging op 31/08/2012 20:46:48:
Hallo John D,
Ik heb je vier opmerkingen erin verwerkt (hoop op de goede manier), maar nog steeds zonder enig verschil in het resultaat..
Dit is het nu:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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
<?php
$naam = $_POST['naam'];
$email = $_POST['email'];
$woonplaats = $_POST['woonplaats'];
$bericht = $_POST['bericht'];
$datum = date("d.m.y H:i");
$bericht = htmlentities($bericht);
$bericht = nl2br($bericht);
$bericht = stripslashes($bericht);
// defineer het bestand met berichten
$file = "gastenboek.php";
// open het bestand
$fopenr = fopen ($file, "r");
// sla de inhoud op om de eerder toegevoegde berichten
// te onthouden en te herschrijven onder het nieuwe bericht
$msgs = fread ($fopenr, filesize ($file));
// sluit het bestand
fclose($fopenw);
// open de file nogmaals maar dan nu om er in te schrijven
$fopenw = fopen($file, "w+");
// schrijf nieuwe bericht + alle oude in $file
fwrite($fopenw, "
\n\n<!-- bericht -->\n
<b>$naam</b> <$email><br>\n
<blockquote><p>$bericht</p></blockquote>\n
<p>$datum</p>$msgs
");
// sluit het bestand
fclose($fopenw);
mail ('[email protected]', 'Nieuw bericht in gastenboek','
Hallo,\n\n
Er is zojuist een bericht achter gelaten door $naam ($email).\n\n
Dit was een automatisch bericht.
From: '.$naam.' '.$email);
header('Location: beblog.html');
// sluis bezoeker door naar beblog.html
echo "<SCRIPT LANGUAGE=\"javascript\" TYPE=\"text/javascript\">window.location='beblog.html'</SCRIPT>\n";
?>
$naam = $_POST['naam'];
$email = $_POST['email'];
$woonplaats = $_POST['woonplaats'];
$bericht = $_POST['bericht'];
$datum = date("d.m.y H:i");
$bericht = htmlentities($bericht);
$bericht = nl2br($bericht);
$bericht = stripslashes($bericht);
// defineer het bestand met berichten
$file = "gastenboek.php";
// open het bestand
$fopenr = fopen ($file, "r");
// sla de inhoud op om de eerder toegevoegde berichten
// te onthouden en te herschrijven onder het nieuwe bericht
$msgs = fread ($fopenr, filesize ($file));
// sluit het bestand
fclose($fopenw);
// open de file nogmaals maar dan nu om er in te schrijven
$fopenw = fopen($file, "w+");
// schrijf nieuwe bericht + alle oude in $file
fwrite($fopenw, "
\n\n<!-- bericht -->\n
<b>$naam</b> <$email><br>\n
<blockquote><p>$bericht</p></blockquote>\n
<p>$datum</p>$msgs
");
// sluit het bestand
fclose($fopenw);
mail ('[email protected]', 'Nieuw bericht in gastenboek','
Hallo,\n\n
Er is zojuist een bericht achter gelaten door $naam ($email).\n\n
Dit was een automatisch bericht.
From: '.$naam.' '.$email);
header('Location: beblog.html');
// sluis bezoeker door naar beblog.html
echo "<SCRIPT LANGUAGE=\"javascript\" TYPE=\"text/javascript\">window.location='beblog.html'</SCRIPT>\n";
?>
ini_set('display_errors',1);
error_reporting(E_ALL);
Edit:
regel 22 moet zijn fclose($fopenr);
regel 47 en 48 kunnen weg
regel 47 en 48 kunnen weg
Gewijzigd op 31/08/2012 21:10:11 door John D
Ik krijg de foutmeldingen niet aan, ik werk in Dreamweaver en ik controleer mn PHP
met Xampp.
Toevoeging op 31/08/2012 21:08:38:
Kan het zijn dat de berichten en de foutmeldingen wel worden weergeven maar dat de pagina daar overheen laad?
Gewijzigd op 31/08/2012 21:12:38 door John D
Zal ik maar stoppen of overnieuw gaan beginnen? :p
Toevoeging op 31/08/2012 21:45:39:
Ehh...ik heb net via wat anders per ongeluk gastenboek.php geopend (het bestandje waarin mn berichten opgeslagen meoten worden) maar daar staan wel al mn berichten in, dus het wordt wel goed opgeslagen..
je krijgt nu een foutmelding, prima. Die moet je op gaan lossen. Het probleem ligt voor de hand, de mail() functie kan nooit werken op jouw Xampp omdat Xammp geen mailserver is/heeft. Je moet dit dus uitproberen op de echte site of je moet overstappen op de freeware phpmailer scripts waarmee je bijvoorbeeld google mail als mailserver kan configureren.
Notice: Use of undefined constant Naam - assumed 'Naam' in F:\xampp\htdocs\Gbook3\verwerk.php on line 2
Notice: Use of undefined constant Email - assumed 'Email' in F:\xampp\htdocs\Gbook3\verwerk.php on line 3
Notice: Use of undefined constant url - assumed 'url' in F:\xampp\htdocs\Gbook3\verwerk.php on line 4
Notice: Use of undefined constant bericht - assumed 'bericht' in F:\xampp\htdocs\Gbook3\verwerk.php on line 5
die regels zien er zo uit:
$Naam = $_POST[Naam];
$Email = $_POST;
$url = $_POST[url];
$Bericht = $_POST[bericht];
[size=xsmall][i]Toevoeging op 31/08/2012 22:38:38:[/i][/size]
Oja, en ik krijg nu wel een bericht! :D
$Email = $_POST;
$url = $_POST;
$Bericht = $_POST[bericht];
je vergeet de ' over naam url en bericht, verder is die 2 de niet compleet
Romy Blankendaal op 31/08/2012 19:52:34:
Om de berichten op te slaan maak ik gebruik van een leeg php bestand genaamd gastenboek.php chmod 777
Waarom een bestand de extensie php geven, als er geen enkele php in voorkomt? Werken met een txt file lijkt mij logischer.
chmod 777 wordt doorgaans afgeraden; iedereen kan/mag alles met het bestand doen (lezen, schrijven, uitvoeren). Dat is doorgaans niet nodig/wat je wilt. 644 is volgens mij wat (meer dan) genoeg zou moeten zijn.
Romy Blankendaal op 31/08/2012 19:52:34:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$naam = $_POST['naam'];
$email = $_POST['email'];
$woonplaats = $_POST['woonplaats'];
$bericht = $_POST['bericht'];
$datum = date("d.m.y H:i");
?>
$naam = $_POST['naam'];
$email = $_POST['email'];
$woonplaats = $_POST['woonplaats'];
$bericht = $_POST['bericht'];
$datum = date("d.m.y H:i");
?>
Waar controleer je of het formulier is verzonden?
Waar controleer je of de velden zijn ingevuld?
Waarom kopieer je de input? Je kunt toch net zo goed de $_POST waarden gebruiken in de rest van je script? Is gelijk duidelijk waar ze vandaan komen (extern).
Code (php)
1
echo "<SCRIPT LANGUAGE=\"javascript\" TYPE=\"text/javascript\">window.location='beblog.html'</SCRIPT>\n";
In PHP gebruik je ' (mysql wel ") en in HTML gebruik je ".
Zie http://www.phphulp.nl/php/tutorial/php-algemeen/correct-quoten/772/
Bijkomende voordelen: overzichtelijker, minder kans op fouten met al die \
Obelix en Idefix, bedankt voor je reactie, ik heb er al een txt van gemaakt inderdaad :p De php code doet het ondertussen ook want ik ben druk bezig geweest maar evengoed bedankt voor je reactie en vooral de uitleg, erg duidelijk!