Formulier wil niet versturen
Ik zit hier met een klein probleem. Ben mezelf een beetje PHP aan het leren, en nu heb ik een scriptje gemaakt dat berichten uit de database haalt. Dat werkt na heel veel Googelen :P En nu wil ik via de pagina ook dingen versturen naar de database, maar daar heeft ie nog weinig zin in!!
Het vreemde is ook dat ik post gebruikt voor het versturen voor de gegevens, maar dat ie het toch in de URL zet!
Hier is de code ..
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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
<?php
include('config.php');
if($_SERVER['REQUEST_METHOD'] == 'POST' ){
$naam = $_POST['naam'];
$email = $_POST['email'];
$website = $_POST['website'];
$bericht = $_POST['bericht'];
$tijdstip = time();
$website="INSERT INTO berichten(naam, email, website, bericht, tijdstip)VALUES('".$naam."', '".$email."', '".$webiste."','".$bericht."','".$tijdstip."')";
if(!$res = mysql_query($website))
{
trigger_error(mysql_error().'<br />In query: '.$website);
}
else
{
$id = mysql_insert_id();
}
}
else {
$rijen_ophalen = "SELECT *
FROM berichten
ORDER BY tijdstip
";
$res = mysql_query($rijen_ophalen);
if(mysql_num_rows($res) >= 0){
while ($rij = mysql_fetch_array($res))
{
echo 'ID nummer: '.$rij[id].'<br />';
echo 'Naam: '.$rij[naam].'<br />';
echo 'E-mail: '.$rij[email].'<br />';
echo 'Website: '.$rij[website].'<br />';
echo 'Bericht: '.$rij[bericht].'<br />';
echo 'Tijdstip: '.$rij[tijdstip].'<br />';
echo '<br />';
echo '<br />';
}
}
else {
echo 'Whoops, er staan (nog) geen berichten in het gastenboek';
}
$content .= <<<EOF
<form>
<form action="{$_SERVER['REQUEST_URI']}" method="post">
Naam: <br /><input type="text" name="naam" value="{$naam}"></input><br />
E-mailadres:<br /><input type="text" name="email" value="{$email}"></input><br />
Website: <br /><input type="text" name="website" value="{$website}"></input><br />
Bericht: <br /><textarea name="bericht" rows="8" cols="30">{$bericht}</textarea><br />
<input type="submit" name="submit" value="Verstuur reactie">
</form>
EOF;
echo $content;
}
?>
include('config.php');
if($_SERVER['REQUEST_METHOD'] == 'POST' ){
$naam = $_POST['naam'];
$email = $_POST['email'];
$website = $_POST['website'];
$bericht = $_POST['bericht'];
$tijdstip = time();
$website="INSERT INTO berichten(naam, email, website, bericht, tijdstip)VALUES('".$naam."', '".$email."', '".$webiste."','".$bericht."','".$tijdstip."')";
if(!$res = mysql_query($website))
{
trigger_error(mysql_error().'<br />In query: '.$website);
}
else
{
$id = mysql_insert_id();
}
}
else {
$rijen_ophalen = "SELECT *
FROM berichten
ORDER BY tijdstip
";
$res = mysql_query($rijen_ophalen);
if(mysql_num_rows($res) >= 0){
while ($rij = mysql_fetch_array($res))
{
echo 'ID nummer: '.$rij[id].'<br />';
echo 'Naam: '.$rij[naam].'<br />';
echo 'E-mail: '.$rij[email].'<br />';
echo 'Website: '.$rij[website].'<br />';
echo 'Bericht: '.$rij[bericht].'<br />';
echo 'Tijdstip: '.$rij[tijdstip].'<br />';
echo '<br />';
echo '<br />';
}
}
else {
echo 'Whoops, er staan (nog) geen berichten in het gastenboek';
}
$content .= <<<EOF
<form>
<form action="{$_SERVER['REQUEST_URI']}" method="post">
Naam: <br /><input type="text" name="naam" value="{$naam}"></input><br />
E-mailadres:<br /><input type="text" name="email" value="{$email}"></input><br />
Website: <br /><input type="text" name="website" value="{$website}"></input><br />
Bericht: <br /><textarea name="bericht" rows="8" cols="30">{$bericht}</textarea><br />
<input type="submit" name="submit" value="Verstuur reactie">
</form>
EOF;
echo $content;
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Jurgen B
Je controleert nergens of je query wel gelukt is.
Je hebt als form action PHP_SELF, dus kunnen er ook dingen in de url komen te staan en krijg je ze terug als GET variabelen. Verder is je script heel onveilig omdat je rechtstreeks gebruikersinput in je query zet.
@Jan Koehoorn: Wat zou ik dan moeten doen? De URL als action opgeven? Over die beveiliging bedoel je waarschijnlijk dingen als stripslashes e.d. ??
Die moet ik nog toevoegen.
Jurgen B schreef op 25.10.2008 23:48:
Daarmee controleer je alleen of er gepost is. Jij moet even zoeken naar de tutorial foutafhandeling van Blanche in het zoekvak hiernaast.@PHP Newbie: Dat doe ik doe toch door: if($_SERVER['REQUEST_METHOD'] == 'POST' ){ ???
@Jan Koehoorn: Wat zou ik dan moeten doen? De URL als action opgeven? Over die beveiliging bedoel je waarschijnlijk dingen als stripslashes e.d. ??
Die moet ik nog toevoegen.
@Jan Koehoorn: Wat zou ik dan moeten doen? De URL als action opgeven? Over die beveiliging bedoel je waarschijnlijk dingen als stripslashes e.d. ??
Die moet ik nog toevoegen.
Je kunt als actie ook gewoon "" opgeven, dan zullen de gegevens naar dezelfde pagina worden gestuurd.
Evert schreef op 25.10.2008 23:54:
Je kunt als actie ook gewoon "" opgeven, dan zullen de gegevens naar dezelfde pagina worden gestuurd.
Je kunt als actie ook gewoon "" opgeven, dan zullen de gegevens naar dezelfde pagina worden gestuurd.
Dat is niet valid. Gebruik dan action="#"
PHP Newbie schreef op 26.10.2008 00:01:
Dat is niet valid. Gebruik dan action="#"
Dat heb ik je vandaag eerder horen zeggen. :-)Evert schreef op 25.10.2008 23:54:
Je kunt als actie ook gewoon "" opgeven, dan zullen de gegevens naar dezelfde pagina worden gestuurd.
Je kunt als actie ook gewoon "" opgeven, dan zullen de gegevens naar dezelfde pagina worden gestuurd.
Dat is niet valid. Gebruik dan action="#"
Nu zal ik het ook onthouden.
Heb beide punten aangepast. Er veranderd alleen nog niets. De code heb ik aangepast in mijn openingspost.
Quote:
Dat is niet valid. Gebruik dan action="#"
En dat is weer niet veilig. Gebruik:
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
Oke gedaan! ;)
Mooi, maar is het probleem nu opgelost?
Heb beide punten aangepast. Er veranderd alleen nog niets. De code heb ik aangepast in mijn openingspost.
Overigens doet ie nog steeds dit wat ik echt totaal niet snap!
http://localhost/gastenboek/index2.php?naam=dfhgfhgffhh&email=&website=&bericht=&submit=Verstuur+reactie
Gewijzigd op 01/01/1970 01:00:00 door Jurgen B
PHP Newbie schreef op 26.10.2008 00:01:
Dat is niet valid. Gebruik dan action="#"
Het is dus wel valid: zie hier. Lekker puh! :-)Evert schreef op 25.10.2008 23:54:
Je kunt als actie ook gewoon "" opgeven, dan zullen de gegevens naar dezelfde pagina worden gestuurd.
Je kunt als actie ook gewoon "" opgeven, dan zullen de gegevens naar dezelfde pagina worden gestuurd.
Dat is niet valid. Gebruik dan action="#"
Met dank aan Karl voor het testen. :-)
Jan Koehoorn schreef op 26.10.2008 00:03:
En dat is weer niet veilig. Gebruik:
Quote:
Dat is niet valid. Gebruik dan action="#"
En dat is weer niet veilig. Gebruik:
Juist dat is niet veilig. Had daar vanmiddag nog een voorbeeldje over gezien. Ik kan nu een link maken die er ongeveer zo uitziet:
www.site.nl/formulier.php?p=" action="www.eenanderewebsite.nl"
Wanneer ik die link naar mensen stuur denken ze dat ze bijvoorbeeld hun gegevens invoeren op de site van ideal maar stiekum sluis ik ze door naar mijn site.
Graag hoor ik van je waarom de "#" niet veilig is.
Evert schreef op 26.10.2008 00:18:
Met dank aan Karl voor het testen. :-)
PHP Newbie schreef op 26.10.2008 00:01:
Dat is niet valid. Gebruik dan action="#"
Het is dus wel valid: zie hier. Lekker puh! :-)Evert schreef op 25.10.2008 23:54:
Je kunt als actie ook gewoon "" opgeven, dan zullen de gegevens naar dezelfde pagina worden gestuurd.
Je kunt als actie ook gewoon "" opgeven, dan zullen de gegevens naar dezelfde pagina worden gestuurd.
Dat is niet valid. Gebruik dan action="#"
Met dank aan Karl voor het testen. :-)
Dan is dat afhankelijk van het doctype, want ik heb er wel eens errors op gekregen.
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
Ja dat doe ik normaal ook, maar de URL die ik poste is de URL die ik krijg na het versturen van het formulier
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$sql = "
INSERT INTO berichten
(
naam,
email,
website,
bericht,
tijdstip
)
VALUES
(
'" . mysql_real_escape_string ($_POST['naam']) . "',
'" . mysql_real_escape_string ($_POST['email']) . "',
'" . mysql_real_escape_string ($_POST['website']) . "',
'" . mysql_real_escape_string ($_POST['bericht']) . "',
'" . mysql_real_escape_string ($_POST['tijdstip']) . "'
)
";
?>
$sql = "
INSERT INTO berichten
(
naam,
email,
website,
bericht,
tijdstip
)
VALUES
(
'" . mysql_real_escape_string ($_POST['naam']) . "',
'" . mysql_real_escape_string ($_POST['email']) . "',
'" . mysql_real_escape_string ($_POST['website']) . "',
'" . mysql_real_escape_string ($_POST['bericht']) . "',
'" . mysql_real_escape_string ($_POST['tijdstip']) . "'
)
";
?>
Dan voert hij op de een of andere manier toch een method="get" uit i.p.v. een post. Kijk eens in je broncode hoe het formulier daar staat.
Als ik in de bron kijk krijg ik dit te zien:
<form>
<form action="/gastenboek/index2.php" method="post">
Naam: <br /><input type="text" name="naam" value=""></input><br />
E-mailadres:<br /><input type="text" name="email" value=""></input><br />
Website: <br /><input type="text" name="website" value=""></input><br />
Bericht: <br /><textarea name="bericht" rows="8" cols="30"></textarea><br />
<input type="submit" name="submit" value="Verstuur reactie">
</form>
Edit: bovendien open je twee keer de form tag!
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn