een twee delig formulier.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Henk Woeltjes

Henk Woeltjes

24/09/2014 20:01:52
Quote Anchor link
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">
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
      }
   }

?>

<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>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $message; ?>

</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">
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
      }
   }

?>

<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>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $message; ?>

</TD>
</TR>
</TABLE>
</body>
</html>
Gewijzigd op 24/09/2014 20:04:33 door Henk Woeltjes
 
PHP hulp

PHP hulp

22/12/2024 23:25:11
 
Eddy E

Eddy E

24/09/2014 20:46:11
Quote Anchor link
unexpected $end betekent meestal: ergens een haakje ( als in: } ) vergeten.
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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)
    }
?>




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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
?>
Gewijzigd op 24/09/2014 21:03:01 door Eddy E
 
Henk Woeltjes

Henk Woeltjes

25/09/2014 20:02:45
Quote Anchor link
Dankjewel Eddy E, ik ga er mee aan het werk.
Ik laat weer van me horen.

Groetjes, Henk
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.