mijn eerste script met foutcontrole

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rein Broekman

rein Broekman

04/01/2007 00:42:00
Quote Anchor link
ik hoop dat ik het een beetje begin te snappen.
let niet op de benamingen van het script zijn niet logisch.
maar wil graag weten of ik het met de error handling een beetje begin te snappen.
weet dat er veel meer zijn maar het gaat even over de database.
de foutmeldingen die erin staan heb ik getest zover ik kon werken volgens mij allemaal.
FORM
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<html>
<head><title></title></head>
<body>
<form method="post" action="insert.php">
Titel<br><input type="text" name="titel"><br>
Bericht<br><input type="text" name="bericht"><br>
<input type="submit">
</body>
</html>


insert.php

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
<?php
////////////INSERT.php zet het in de database.
$datum = date("D M j G:i:s  Y");                        
$con = mysql_connect("","","");
if (!$con)
  {

  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("gastenboek", $con);
  $sql="INSERT INTO nieuws (titel, bericht,datum)
VALUES
('$_POST[titel]','$_POST[bericht]' , '$datum')"
;
if (!mysql_query($sql,$con))
  {

  die('Error: ' . mysql_error());
  }

echo "1 record added" . "<br>";mysql_close($con)
?>

<html>
<body>
<a href="oproepen.php">klik hier om alle berichten te tonen


oproepen.php overzicht tonen
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
<?
$con
= mysql_connect("" , "" , "");
if (!$con)
{

    die ("kan geen verbinding maken" . mysql_error());
}

else echo"er is een verbinding.<br>";

$db = mysql_select_db('gastenboek' , $con)
or exit("ongeldige database" . mysql_error());
  echo "er is een database gekozen<br>";

  $sql = mysql_query("SELECT titel,bericht,datum FROM nieuws")
or exit("ongeldige query" . mysql_error());


        while ($row = mysql_fetch_array($sql)) {
               //welke $ er voor  = mysql_ stat moet je weer oproepen bij echo
 echo "<table bgcolor=\"red\" border=\"1\"><tr><td>" . $row['titel'] . "<br>" . $row['bericht'] . "<br>" . $row['datum'] . "</td></tr></table>" ;
          
        }

  
  
?>

<html>
<body>
<a href="nieuws.html">bericht toevoegen
Gewijzigd op 01/01/1970 01:00:00 door Rein Broekman
 
PHP hulp

PHP hulp

18/11/2024 14:24:20
 
PHP Newbie

PHP Newbie

04/01/2007 00:47:00
Quote Anchor link
ik zou even beginnen met wat netter te coden, Leest gemakkelijker en debugd gemakkelijker.
 
Rein Broekman

rein Broekman

04/01/2007 00:51:00
Quote Anchor link
eigenlijk is dat missie 2 maar ik krijg graag een hintje hoe je dat doet.
 
PHP Newbie

PHP Newbie

04/01/2007 01:02:00
Quote Anchor link
Ik heb even heel insert.php voor je aangepast, kijk daar is naar, en ga zo de andere pagina's aanpassen

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
<?php
////////////INSERT.php zet het in de database.
$con = mysql_connect("","","");

if (!$con)
{

    $melding[] = 'Database connectiefout'; //geen die() gebruiken, te grof, en ook de MySQL error niet tonen
}
else //een else beginnen, want we hebben geen die() meer
{
    /* ook even een controle om te checken of we wel verbinding kunnen maken met de databse zelf */
    
    $seldb = mysql_select_db("gastenboek", $con);
    
    if(!$seldb)
    {

        $melding[] = 'Database selectie fout'; //wederom geen MySQL error en geen die()
    }
    else
    {
        $sql = "INSERT INTO nieuws (titel,
                                    bericht,
                                    datum)
                        VALUES ('"
.mysql_real_escape_string($_POST['titel'])."',
                                '"
.mysql_real_escape_string($_POST['bericht'])."',
                                NOW())"
;
        
        /* Hierboven:
                - variabelen buiten de quotes
                - niet $_POST[titel], maar $_POST['titel']
                - controle op invoer toepassen
        */

        
        if (!mysql_query($sql)) //connectie hoeven we niet mee te geven
        {
            $melding[] = 'Data niet ingevoerd';
        }

        else
        {
            $melding[] = "1 record added <br/>"; //hier hoeft geen punt tussen
        }
        
        mysql_close($con);
?>

<html>
<head>
<title></title>
</head>
<body>
<?php
    if(isset($melding))
    {

        foreach($melding as $fmelding) //foreach over de meldingen, zodat alle meldingen netjes in de body weergeven worden
        {
            echo $fmelding.'<br />'; //melding echoën
        }
        
        echo '<br />'; //nog een extra entertje zodat het er wat gelikt uit ziet
    }
?>

<a href="oproepen.php">klik hier om alle berichten te tonen</a> <!-- link sluiten -->
</body>
</html>
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
 
Rein Broekman

rein Broekman

04/01/2007 01:05:00
Quote Anchor link
doe je lekker snel ik zal me er eens in verdiepen thanx
 
PHP Newbie

PHP Newbie

04/01/2007 01:06:00
Quote Anchor link
ervaring :-)

Edit:

Actuele datum zet je niet met PHP in de database, maar dat doe je gewoon met MySQL, d.m.v. de functie NOW()

Ik heb het script hierboven aangepast, check het ;-)


edit_2:
Je ziet nu ook dat een onoverzichtelijk script van 20 regels, opeens meer dan 60 regels telt, als je het allemaal wat netter maakt.
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
 
Rein Broekman

rein Broekman

04/01/2007 01:11:00
Quote Anchor link
even ter verduidelijking die mysql errors kunnen misschien later weg maar om het te bergijpen in het begin is het toch prettig als die er staan of heb ik dat fout?
 
PHP Newbie

PHP Newbie

04/01/2007 01:13:00
Quote Anchor link
Klopt, tijdens het debuggen zijn ze gemakkelijk, daarna moet je ze verwijderen, want een eventuele hacker zo hier teveel informatie uit kunnen halen.
 
Rein Broekman

rein Broekman

04/01/2007 01:14:00
Quote Anchor link
ok duidelijk zal morgen eens verder kijken alvast bedankt voor de moeite.
 
- -

- -

04/01/2007 01:28:00
Quote Anchor link
Je kunt ook een functie maken voor het reporten van een error, dat doe ik meestal:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

function echo_mysql_error($sql)
    {

        echo '<br /><br />
MySQL retourneerde de volgende error:<br />
'
.mysql_error().'<br /><br />

<strong>Query:</strong><br />
<pre>'
.$sql.'</pre>';
    }


?>


Die kun je dan zo in werking laten treden:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$res
= mysql_query($sql) or echo_mysql_error($sql);

?>


Door die 'or' wordt de functie automatisch uitgevoerd als de query mislukt.

Zo krijg je een nette error met de query erbij. Als je dan klaar bent met debuggen, hoef je alleen die functie maar aan te passen, en je hebt een nette error-reporting.
 
Jeroen van de Ven

Jeroen van de Ven

04/01/2007 07:41:00
Quote Anchor link
Door bijvoorbeeld // voor de or te zetten schakel je dat al uit.
 
Rein Broekman

rein Broekman

04/01/2007 20:46:00
Quote Anchor link
wat ik nog even niet begrijp
$melding[]
 
PHP Newbie

PHP Newbie

04/01/2007 20:59:00
Quote Anchor link
$melding is een variabele

$melding[] maakt een array.
 
Rein Broekman

rein Broekman

04/01/2007 21:15:00
Quote Anchor link
Parse error: syntax error, unexpected $end in /insert.php on line 65
en hoe kan ik hier achter komen
 
Terence Hersbach

Terence Hersbach

04/01/2007 21:17:00
Quote Anchor link
je bent ergens een } vergeten af te sluiten..
 
Rein Broekman

rein Broekman

04/01/2007 23:07:00
Quote Anchor link
geeft hij dan altijd deze foutmelding?
Parse error: syntax error, unexpected $end
 
- SanThe -

- SanThe -

04/01/2007 23:10:00
Quote Anchor link
Als je voor alle error-afhandeling een functie hebt gemaakt zoals Herjan, dan kun je heel simpel na het debuggen die functie aanpassen zodat er een 'eigen' error wordt gegeven.

Edit: Dus dan hoef je niet je hele script te doorlopen om het aan te passen.
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
 
Rein Broekman

rein Broekman

04/01/2007 23:14:00
Quote Anchor link
ok snap ik maar daarvoor.
kom deze error wel eens vaker tegen.
en weet dan niet meteen waar ik moet gaan zoeken.
maar als dit betekend dat ik een } ben vergeten is het een stuk makkelijker zoeken.
 



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.