een twee delig formulier.
In het wel bekende lesboek van de LOI, PHP6 & MySQL staat de volgende code voor het maken van een formulier. Het is tweedelig, Formulier en formulierhandler.
Deze code moet ik letterlijk overnemen. Als ik het aanroep krijg ik de volgende error code.
( ! ) Parse error: syntax error, unexpected $end in C:\wamp\www\listing17-3A.php on line 70
Ra, ra, hoe kan dat? Wellicht weten jullie wat er fout gaat. Let wel, line 70 is de laatste line waarop zich de slot tag /html> zich bevind.
Hierkomt de code uit het boek:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<STYLE TYPE="text/css">
<!--
Body, P { color: black; font-family: verdana; font-size: 10 pt}
H1 color: black; font-family: arial; font-size: 12 pt}
-->
</STYLE>
<title>Listing 17-3</title>
</head>
</head>
<body bgcolor="#FFFFFF">
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
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
<?php
if (isset($_POST['submit']) && $_POST['submit'] == 'Submit') {
if (!isset($_POST['email']) || $_POST['email'] == "" ||
strlen($_OPOST['email'] > 30)) {
$message = '<P>Er doet zich een probleem voor. Heeft u een
bestaand emailadres in gegeven?</P<>';
} else {
//maak verbinding met de database
mysql_connect ("localhost", "root", "")
or die("Kan geen verbinding maken met de database");
mysql_select_db("test");
//Emailadres invoeren
$as_email = mysql_real_escape_string($POST['email']);
$tr_email = trim($as_email);
$query = "INSERT INTO mailinglist (id, email, sourse)
VALUES(NULL, '$tr_email',
'www.example.com/newsletter_signup.html')
";
$result = mysql_query($query);
if (mysql_affected_rows() == 1) {
$message = '<P>Uw informatie is opgeslagen.</P>';
$noform_var = 1;
} else {
error_log(mysql_error());
$message = '<p>Er is iets mis gegaan met het invoeren van uw gegevens.</P>';
}
}
//Het formulier tonen als alles succesvol is ingevoerd
if (!isset($noform_var)) {
$thisfile = "newsletter_signup.php";
$message .= <<< EOMSG
<P>Typ hier uw emailadres en wij zenden u onze wekelijkse nieusbrief.</P>
<FORM METHOD="post" ACTION="$thisfile">
<INPUT TYPE="text" SIZE=25 NAME="email">
<BR><BR>
<INPUT TYPE="submit" NAME="submit" VALUE="Submit">
</FORM>
EOMSG;
}
}
?>
if (isset($_POST['submit']) && $_POST['submit'] == 'Submit') {
if (!isset($_POST['email']) || $_POST['email'] == "" ||
strlen($_OPOST['email'] > 30)) {
$message = '<P>Er doet zich een probleem voor. Heeft u een
bestaand emailadres in gegeven?</P<>';
} else {
//maak verbinding met de database
mysql_connect ("localhost", "root", "")
or die("Kan geen verbinding maken met de database");
mysql_select_db("test");
//Emailadres invoeren
$as_email = mysql_real_escape_string($POST['email']);
$tr_email = trim($as_email);
$query = "INSERT INTO mailinglist (id, email, sourse)
VALUES(NULL, '$tr_email',
'www.example.com/newsletter_signup.html')
";
$result = mysql_query($query);
if (mysql_affected_rows() == 1) {
$message = '<P>Uw informatie is opgeslagen.</P>';
$noform_var = 1;
} else {
error_log(mysql_error());
$message = '<p>Er is iets mis gegaan met het invoeren van uw gegevens.</P>';
}
}
//Het formulier tonen als alles succesvol is ingevoerd
if (!isset($noform_var)) {
$thisfile = "newsletter_signup.php";
$message .= <<< EOMSG
<P>Typ hier uw emailadres en wij zenden u onze wekelijkse nieusbrief.</P>
<FORM METHOD="post" ACTION="$thisfile">
<INPUT TYPE="text" SIZE=25 NAME="email">
<BR><BR>
<INPUT TYPE="submit" NAME="submit" VALUE="Submit">
</FORM>
EOMSG;
}
}
?>
<TABLE BORDER=0 CELLPADDING=10 WIDTH=100%>
<TR>
<TD BGCOLOR="#F0F8FF" ALIGN=CENTER VALIGN=TOP WIDTH=17%>
</TD>
<TD BGCOLOR="#FFFFFF"ALIGN=CENTER VALIGN=TOP width=83%>
<H1>Formulier op je op te geven voor de nieuwsbrief.</H1>
</TD>
</TR>
</TABLE>
</body>
</html>
Toevoeging op 24/09/2014 20:04:13:
Henk Woeltjes op 24/09/2014 20:01:52:
Lieve mensen ik heb weer dringend jullie hulp nodig.
In het wel bekende lesboek van de LOI, PHP6 & MySQL staat de volgende code voor het maken van een formulier. Het is tweedelig, Formulier en formulierhandler.
Deze code moet ik letterlijk overnemen. Als ik het aanroep krijg ik de volgende error code.
( ! ) Parse error: syntax error, unexpected $end in C:\wamp\www\listing17-3A.php on line 70
Ra, ra, hoe kan dat? Wellicht weten jullie wat er fout gaat. Let wel, line 70 is de laatste line waarop zich de slot tag /html zich bevind.
Hierkomt de code uit het boek:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<STYLE TYPE="text/css">
<!--
Body, P { color: black; font-family: verdana; font-size: 10 pt}
H1 color: black; font-family: arial; font-size: 12 pt}
-->
</STYLE>
<title>Listing 17-3</title>
</head>
</head>
<body bgcolor="#FFFFFF">
<TABLE BORDER=0 CELLPADDING=10 WIDTH=100%>
<TR>
<TD BGCOLOR="#F0F8FF" ALIGN=CENTER VALIGN=TOP WIDTH=17%>
</TD>
<TD BGCOLOR="#FFFFFF"ALIGN=CENTER VALIGN=TOP width=83%>
<H1>Formulier op je op te geven voor de nieuwsbrief.</H1>
</TD>
</TR>
</TABLE>
</body>
</html>
In het wel bekende lesboek van de LOI, PHP6 & MySQL staat de volgende code voor het maken van een formulier. Het is tweedelig, Formulier en formulierhandler.
Deze code moet ik letterlijk overnemen. Als ik het aanroep krijg ik de volgende error code.
( ! ) Parse error: syntax error, unexpected $end in C:\wamp\www\listing17-3A.php on line 70
Ra, ra, hoe kan dat? Wellicht weten jullie wat er fout gaat. Let wel, line 70 is de laatste line waarop zich de slot tag /html zich bevind.
Hierkomt de code uit het boek:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<STYLE TYPE="text/css">
<!--
Body, P { color: black; font-family: verdana; font-size: 10 pt}
H1 color: black; font-family: arial; font-size: 12 pt}
-->
</STYLE>
<title>Listing 17-3</title>
</head>
</head>
<body bgcolor="#FFFFFF">
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
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
<?php
if (isset($_POST['submit']) && $_POST['submit'] == 'Submit') {
if (!isset($_POST['email']) || $_POST['email'] == "" ||
strlen($_OPOST['email'] > 30)) {
$message = '<P>Er doet zich een probleem voor. Heeft u een
bestaand emailadres in gegeven?</P<>';
} else {
//maak verbinding met de database
mysql_connect ("localhost", "root", "")
or die("Kan geen verbinding maken met de database");
mysql_select_db("test");
//Emailadres invoeren
$as_email = mysql_real_escape_string($POST['email']);
$tr_email = trim($as_email);
$query = "INSERT INTO mailinglist (id, email, sourse)
VALUES(NULL, '$tr_email',
'www.example.com/newsletter_signup.html')
";
$result = mysql_query($query);
if (mysql_affected_rows() == 1) {
$message = '<P>Uw informatie is opgeslagen.</P>';
$noform_var = 1;
} else {
error_log(mysql_error());
$message = '<p>Er is iets mis gegaan met het invoeren van uw gegevens.</P>';
}
}
//Het formulier tonen als alles succesvol is ingevoerd
if (!isset($noform_var)) {
$thisfile = "newsletter_signup.php";
$message .= <<< EOMSG
<P>Typ hier uw emailadres en wij zenden u onze wekelijkse nieusbrief.</P>
<FORM METHOD="post" ACTION="$thisfile">
<INPUT TYPE="text" SIZE=25 NAME="email">
<BR><BR>
<INPUT TYPE="submit" NAME="submit" VALUE="Submit">
</FORM>
EOMSG;
}
}
?>
if (isset($_POST['submit']) && $_POST['submit'] == 'Submit') {
if (!isset($_POST['email']) || $_POST['email'] == "" ||
strlen($_OPOST['email'] > 30)) {
$message = '<P>Er doet zich een probleem voor. Heeft u een
bestaand emailadres in gegeven?</P<>';
} else {
//maak verbinding met de database
mysql_connect ("localhost", "root", "")
or die("Kan geen verbinding maken met de database");
mysql_select_db("test");
//Emailadres invoeren
$as_email = mysql_real_escape_string($POST['email']);
$tr_email = trim($as_email);
$query = "INSERT INTO mailinglist (id, email, sourse)
VALUES(NULL, '$tr_email',
'www.example.com/newsletter_signup.html')
";
$result = mysql_query($query);
if (mysql_affected_rows() == 1) {
$message = '<P>Uw informatie is opgeslagen.</P>';
$noform_var = 1;
} else {
error_log(mysql_error());
$message = '<p>Er is iets mis gegaan met het invoeren van uw gegevens.</P>';
}
}
//Het formulier tonen als alles succesvol is ingevoerd
if (!isset($noform_var)) {
$thisfile = "newsletter_signup.php";
$message .= <<< EOMSG
<P>Typ hier uw emailadres en wij zenden u onze wekelijkse nieusbrief.</P>
<FORM METHOD="post" ACTION="$thisfile">
<INPUT TYPE="text" SIZE=25 NAME="email">
<BR><BR>
<INPUT TYPE="submit" NAME="submit" VALUE="Submit">
</FORM>
EOMSG;
}
}
?>
<TABLE BORDER=0 CELLPADDING=10 WIDTH=100%>
<TR>
<TD BGCOLOR="#F0F8FF" ALIGN=CENTER VALIGN=TOP WIDTH=17%>
</TD>
<TD BGCOLOR="#FFFFFF"ALIGN=CENTER VALIGN=TOP width=83%>
<H1>Formulier op je op te geven voor de nieuwsbrief.</H1>
</TD>
</TR>
</TABLE>
</body>
</html>
Gewijzigd op 24/09/2014 20:04:33 door Henk Woeltjes
Of een puntkomma ergens oid.
Wat ik heel raar vind is dat PHP6 nog niet uit is.
Er wordt HTML4 gebruikt (waarom niet 5, die wel al uit is)?
Waarom tabellen gebruiken voor opmaak?
Waarom alle HTML-tags in hoofdletters?
Waarom inline-code als ALIGN=CENTER? Waarom geen CSS gebruiken?
Persoonlijk zou ik het boek gewoon op Marktplaats zetten onder de noemer 'Oud papier'.
Er zijn veel betere tutorials/boeken te krijg!
Toevoeging op 24/09/2014 20:46:52:
O, en H1 color: black; font-family: arial; font-size: 12 pt} is geen geldige CSS.
Daar mist trouwens een {... ;)
Toevoeging op 24/09/2014 21:02:18:
Dit is jouw code, werkend gemaakt:
Met commentaar (lees het even goed door: het gaat je veel gezoek besparen!)
En dan bedoel ik echt: lees ELK commentaar en kijk er goed naar!
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
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
<?php
// als er op de knop 'submit' gedrukt is. Bij ENTER dus niet!
if (isset($_POST['submit']) && $_POST['submit'] == 'Submit')
{
// als het veld email niet ingevuld is, niet ingevuld is of $_0POST[email > 30) is... er wordt dus NIET naar de lengte gekeken. Je ) staat verkeerd!
// let op: $_OPOST zal wel $_POST moeten zijn???
if (!isset($_POST['email']) || $_POST['email'] == "" || strlen($_OPOST['email'] > 30))
{
// maak een melding die je later waarschijnlijk gaat echoën
$message = '<P>Er doet zich een probleem voor. Heeft u een
bestaand emailadres in gegeven?</P<>';
// let even op je </p<> .... dat is dus al incorrect. Je HTML is naar de klote.
}
else
{
//maak verbinding met de database. Lukt dat niet: val dan dood neer
mysql_connect("localhost", "root", "") or die("Kan geen verbinding maken met de database");
mysql_select_db("test"); // dit mag wel mislukken zonder dood te gaan?
//Emailadres invoeren
$as_email = mysql_real_escape_string($POST['email']); // ook hier: $_POST ?
$tr_email = trim($as_email); // waarom niet in 1 keer?
$query = "INSERT INTO mailinglist (id, email, sourse)
VALUES(NULL, '$tr_email',
'www.example.com/newsletter_signup.html')
";
// is het niet sourCe, met een C?
// daarnaast: escape je $tr_email: dat is beter!
// voer je query uit
$result = mysql_query($query);
if (mysql_affected_rows() == 1) {
$message = '<P>Uw informatie is opgeslagen.</P>';
$noform_var = 1;
} else {
error_log(mysql_error());
$message = '<p>Er is iets mis gegaan met het invoeren van uw gegevens.</P>';
}
}
//Het formulier tonen als alles succesvol is ingevoerd
if (!isset($noform_var))
{
$thisfile = "newsletter_signup.php";
$message = '
<p>Typ hier uw emailadres en wij zenden u onze wekelijkse nieusbrief.</p>
<form method="post" action="'.$thisfile.'">
<input type="text" size="25" name="email"><br>
<br>
<input type="submit" name="submit" value="Submit">
</form>
';
// waarom $message .= ? Bestaat $message al? Zo te zien niet. Dus gebruik gewoon $message =
// $thisfile is echt niet nodig. Gewoon niets invullen. Dan verstuurt hij het naar zichzelf...
// aangezien het geen xHTML is, is de /> niet nodig. Gewoon > volstaat!
// sluit !isset
}
// sluit isset($_POST)
}
?>
// als er op de knop 'submit' gedrukt is. Bij ENTER dus niet!
if (isset($_POST['submit']) && $_POST['submit'] == 'Submit')
{
// als het veld email niet ingevuld is, niet ingevuld is of $_0POST[email > 30) is... er wordt dus NIET naar de lengte gekeken. Je ) staat verkeerd!
// let op: $_OPOST zal wel $_POST moeten zijn???
if (!isset($_POST['email']) || $_POST['email'] == "" || strlen($_OPOST['email'] > 30))
{
// maak een melding die je later waarschijnlijk gaat echoën
$message = '<P>Er doet zich een probleem voor. Heeft u een
bestaand emailadres in gegeven?</P<>';
// let even op je </p<> .... dat is dus al incorrect. Je HTML is naar de klote.
}
else
{
//maak verbinding met de database. Lukt dat niet: val dan dood neer
mysql_connect("localhost", "root", "") or die("Kan geen verbinding maken met de database");
mysql_select_db("test"); // dit mag wel mislukken zonder dood te gaan?
//Emailadres invoeren
$as_email = mysql_real_escape_string($POST['email']); // ook hier: $_POST ?
$tr_email = trim($as_email); // waarom niet in 1 keer?
$query = "INSERT INTO mailinglist (id, email, sourse)
VALUES(NULL, '$tr_email',
'www.example.com/newsletter_signup.html')
";
// is het niet sourCe, met een C?
// daarnaast: escape je $tr_email: dat is beter!
// voer je query uit
$result = mysql_query($query);
if (mysql_affected_rows() == 1) {
$message = '<P>Uw informatie is opgeslagen.</P>';
$noform_var = 1;
} else {
error_log(mysql_error());
$message = '<p>Er is iets mis gegaan met het invoeren van uw gegevens.</P>';
}
}
//Het formulier tonen als alles succesvol is ingevoerd
if (!isset($noform_var))
{
$thisfile = "newsletter_signup.php";
$message = '
<p>Typ hier uw emailadres en wij zenden u onze wekelijkse nieusbrief.</p>
<form method="post" action="'.$thisfile.'">
<input type="text" size="25" name="email"><br>
<br>
<input type="submit" name="submit" value="Submit">
</form>
';
// waarom $message .= ? Bestaat $message al? Zo te zien niet. Dus gebruik gewoon $message =
// $thisfile is echt niet nodig. Gewoon niets invullen. Dan verstuurt hij het naar zichzelf...
// aangezien het geen xHTML is, is de /> niet nodig. Gewoon > volstaat!
// sluit !isset
}
// sluit isset($_POST)
}
?>
En hieronder de betere versie.
Gewoon zo implementeren:
[komt er aan]
Toevoeging op 24/09/2014 21:11:47:
Hier is waarschijnlijk ook wel wat op aan te merken, maar is echt heel wat beter dan jouw rommelige code met veel fouten:
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
67
68
69
70
71
72
73
74
75
76
77
78
79
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
<?php
// als er op de knop 'submit' gedrukt is. Bij ENTER dus niet!
if ($_SERVER['REQUEST_METHOD'] == 'post')
{
// controleer het veld $_POST['email']
if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) == false)
{
// maak een melding
$message[] = 'Er is een probleem: u gaf geen bestaand emailadres mee.';
}
else
{
// maak verbinding met de database
$con = mysqli_connect("localhost", "root", "", "test");
if($con === false)
{
error_log(mysqli_error($con));
$message[] = ' De schrijver van dit script weet niet hoe een database benadert kan worden.<br>
Helaas er dus niets opgeslagen worden.<br>
Gooi maar een aardappel naar me. Ik verdien het.';
}
// emailadres opslaan in de database
$email = mysqli_real_escape_string($con, trim($_POST['email']));
$query = "
INSERT INTO mailinglist
(
email,
source
)
VALUES
(
'".$tr_email."',
'newsletter_signup.php'
);
";
// voer je query uit
$result = mysqli_query($con, $query);
// kijk of het gelukt is
if($result === false)
{
error_log(mysqli_error());
$message[] = 'Er is iets mis gegaan met het invoeren van uw gegevens.';
}
elseif (mysqli_affected_rows() == 1) {
$message[] = 'Uw informatie is opgeslagen.</P>';
}
else
{
error_log(mysqli_error());
$message[] = '<p>Er is iets mis gegaan met het invoeren van uw gegevens.';
}
// einde verwerking formulier succesvol ingevuld
}
// einde verwerking formulier
}
else
{
// er is geen informatie verzonden: toon het formulier
$message[] = '
<p>Typ hier uw emailadres en wij zenden u onze wekelijkse nieusbrief.</p>
<form method="post" action="'.$thisfile.'">
<input type="text" size="25" name="email"><br>
<br>
<input type="submit" name="submit" value="Submit">
</form>
';
}
?>
<!-- en dan veel HTML en ergens later: -->
<?php
// laat alle $messages zien
echo '<p>'. implode("<br>".PHP_EOL, $message).'</p>';
?>
// als er op de knop 'submit' gedrukt is. Bij ENTER dus niet!
if ($_SERVER['REQUEST_METHOD'] == 'post')
{
// controleer het veld $_POST['email']
if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) == false)
{
// maak een melding
$message[] = 'Er is een probleem: u gaf geen bestaand emailadres mee.';
}
else
{
// maak verbinding met de database
$con = mysqli_connect("localhost", "root", "", "test");
if($con === false)
{
error_log(mysqli_error($con));
$message[] = ' De schrijver van dit script weet niet hoe een database benadert kan worden.<br>
Helaas er dus niets opgeslagen worden.<br>
Gooi maar een aardappel naar me. Ik verdien het.';
}
// emailadres opslaan in de database
$email = mysqli_real_escape_string($con, trim($_POST['email']));
$query = "
INSERT INTO mailinglist
(
email,
source
)
VALUES
(
'".$tr_email."',
'newsletter_signup.php'
);
";
// voer je query uit
$result = mysqli_query($con, $query);
// kijk of het gelukt is
if($result === false)
{
error_log(mysqli_error());
$message[] = 'Er is iets mis gegaan met het invoeren van uw gegevens.';
}
elseif (mysqli_affected_rows() == 1) {
$message[] = 'Uw informatie is opgeslagen.</P>';
}
else
{
error_log(mysqli_error());
$message[] = '<p>Er is iets mis gegaan met het invoeren van uw gegevens.';
}
// einde verwerking formulier succesvol ingevuld
}
// einde verwerking formulier
}
else
{
// er is geen informatie verzonden: toon het formulier
$message[] = '
<p>Typ hier uw emailadres en wij zenden u onze wekelijkse nieusbrief.</p>
<form method="post" action="'.$thisfile.'">
<input type="text" size="25" name="email"><br>
<br>
<input type="submit" name="submit" value="Submit">
</form>
';
}
?>
<!-- en dan veel HTML en ergens later: -->
<?php
// laat alle $messages zien
echo '<p>'. implode("<br>".PHP_EOL, $message).'</p>';
?>
Gewijzigd op 24/09/2014 21:03:01 door Eddy E
Ik laat weer van me horen.
Groetjes, Henk