mijn eerste script met foutcontrole
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)
1
2
3
4
5
6
7
8
9
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>
<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)
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
////////////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
////////////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)
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
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
$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
ik zou even beginnen met wat netter te coden, Leest gemakkelijker en debugd gemakkelijker.
eigenlijk is dat missie 2 maar ik krijg graag een hintje hoe je dat doet.
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
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>
////////////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
doe je lekker snel ik zal me er eens in verdiepen thanx
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 ;-)
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
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?
Klopt, tijdens het debuggen zijn ze gemakkelijk, daarna moet je ze verwijderen, want een eventuele hacker zo hier teveel informatie uit kunnen halen.
ok duidelijk zal morgen eens verder kijken alvast bedankt voor de moeite.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
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>';
}
?>
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:
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.
Door bijvoorbeeld // voor de or te zetten schakel je dat al uit.
$melding[]
$melding[] maakt een array.
en hoe kan ik hier achter komen
je bent ergens een } vergeten af te sluiten..
Parse error: syntax error, unexpected $end
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 -
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.