Hoe zet ik hier een goede foutafhandeling onder?
Ik heb dit scriptje getypt wat natuurlijk nog niet werkt. Het is een script die nieuws naar de database stuurt. Ik wil graag weten hoe ik hier een goede foutafhandeling aan moet toevoegen.
Script:
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
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
<?php
error_reporting(0);
session_start();
include 'config.php';
$adminchecksql = mysql_query('SELECT admin FROM users');
$admincheckfetch = mysql_fetch_assoc($adminchecksql);
$admin = $admincheckfetch;
//if ($_SESSION['loggedin'] != true) {
//Header ('Location: index.php');
//}
//if ($admin != 1) {
//Header ('Location: index.php');
//}
?>
<html>
<head>
<title>PortalCMS | Nieuw nieuwsbericht</title>
</head>
<body>
<form method='post'>
<em>Titel</em><br>
<input type='text' name='naam' value='Titel'><br><br>
<em>Inleiding</em><br>
<textarea name='kort'rows='15' cols='50'>Een inleiding...</textarea><br><br>
<em>Bericht</em><br>
<textarea name='lang' rows='25' cols='50'>het echte bericht...</textarea><br><br>
<input type='submit' name='submit' value='Publiceer'>
</form>
</body>
</html>
<?php
$name = mysql_real_escape_string($_POST['naam']);
$short = mysql_real_escape_string($_POST['kort']);
$long = mysql_real_escape_string($_POST['lang']);
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$submitsql = mysql_query('INSERT INTO news (naam, kort, lang, visible) VALUES ($name, $short, $long, 1') or die('ERROR!');
echo $submit_sql;
}
?>
error_reporting(0);
session_start();
include 'config.php';
$adminchecksql = mysql_query('SELECT admin FROM users');
$admincheckfetch = mysql_fetch_assoc($adminchecksql);
$admin = $admincheckfetch;
//if ($_SESSION['loggedin'] != true) {
//Header ('Location: index.php');
//}
//if ($admin != 1) {
//Header ('Location: index.php');
//}
?>
<html>
<head>
<title>PortalCMS | Nieuw nieuwsbericht</title>
</head>
<body>
<form method='post'>
<em>Titel</em><br>
<input type='text' name='naam' value='Titel'><br><br>
<em>Inleiding</em><br>
<textarea name='kort'rows='15' cols='50'>Een inleiding...</textarea><br><br>
<em>Bericht</em><br>
<textarea name='lang' rows='25' cols='50'>het echte bericht...</textarea><br><br>
<input type='submit' name='submit' value='Publiceer'>
</form>
</body>
</html>
<?php
$name = mysql_real_escape_string($_POST['naam']);
$short = mysql_real_escape_string($_POST['kort']);
$long = mysql_real_escape_string($_POST['lang']);
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$submitsql = mysql_query('INSERT INTO news (naam, kort, lang, visible) VALUES ($name, $short, $long, 1') or die('ERROR!');
echo $submit_sql;
}
?>
Koen Hollander
dus:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$submitsql = mysql_query('INSERT INTO news (naam, kort, lang, visible) VALUES ($name, $short, $long, 1'));
if(!$submit_sql)
// handel de fout af
?>
$submitsql = mysql_query('INSERT INTO news (naam, kort, lang, visible) VALUES ($name, $short, $long, 1'));
if(!$submit_sql)
// handel de fout af
?>
Code (php)
Of heb ik het nu mis? Want ik zie dit: Er is een fout opgetreden! Probeer het later nog eens!
terwijl er niks is verzonden.
't Lijkt mij dat je EERST je input wilt controleren voordat je wat submit/insert?
Dat weet ik. Ik wil eerst weten of dit werkt en dan doe ik dat pas.
ini_set('display_errors', 1);
error_reporting(E_ALL);
dan zie je al dat je iets fout doet namelijk POST waarden in variablen zetten die nog niet verstuurd zijn.
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
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
<?php
ini_set('display_errors', 1); //het script is nog niet af, we willen weten of er fouten zijn.
error_reporting(E_ALL);
session_start();
include 'config.php';
$adminchecksql = mysql_query('SELECT admin FROM users');
$admincheckfetch = mysql_fetch_assoc($adminchecksql);
$admin = $admincheckfetch;
//if ($_SESSION['loggedin'] != true) {
//Header ('Location: index.php');
//}
//if ($admin != 1) {
//Header ('Location: index.php');
//}
?>
<html>
<head>
<title>PortalCMS | Nieuw nieuwsbericht</title>
</head>
<body>
<form method='post'>
<em>Titel</em><br>
<input type='text' name='naam' value='Titel'><br><br>
<em>Inleiding</em><br>
<textarea name='kort'rows='15' cols='50'>Een inleiding...</textarea><br><br>
<em>Bericht</em><br>
<textarea name='lang' rows='25' cols='50'>het echte bericht...</textarea><br><br>
<input type='submit' name='submit' value='Publiceer'>
</form>
</body>
</html>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') { //het formulier is verzonden
$name = mysql_real_escape_string($_POST['naam']);
$short = mysql_real_escape_string($_POST['kort']);
$long = mysql_real_escape_string($_POST['lang']);
$submitsql = mysql_query('INSERT INTO news (naam, kort, lang, visible) VALUES ($name, $short, $long, 1'));
if($submitsql) { //kijken of het is gelukt.
echo 'Nieuws toegevoegt!';
}
else {
echo 'Er is een fout opgetreden! Probeer het later nog eens!';
}
}
?>
ini_set('display_errors', 1); //het script is nog niet af, we willen weten of er fouten zijn.
error_reporting(E_ALL);
session_start();
include 'config.php';
$adminchecksql = mysql_query('SELECT admin FROM users');
$admincheckfetch = mysql_fetch_assoc($adminchecksql);
$admin = $admincheckfetch;
//if ($_SESSION['loggedin'] != true) {
//Header ('Location: index.php');
//}
//if ($admin != 1) {
//Header ('Location: index.php');
//}
?>
<html>
<head>
<title>PortalCMS | Nieuw nieuwsbericht</title>
</head>
<body>
<form method='post'>
<em>Titel</em><br>
<input type='text' name='naam' value='Titel'><br><br>
<em>Inleiding</em><br>
<textarea name='kort'rows='15' cols='50'>Een inleiding...</textarea><br><br>
<em>Bericht</em><br>
<textarea name='lang' rows='25' cols='50'>het echte bericht...</textarea><br><br>
<input type='submit' name='submit' value='Publiceer'>
</form>
</body>
</html>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') { //het formulier is verzonden
$name = mysql_real_escape_string($_POST['naam']);
$short = mysql_real_escape_string($_POST['kort']);
$long = mysql_real_escape_string($_POST['lang']);
$submitsql = mysql_query('INSERT INTO news (naam, kort, lang, visible) VALUES ($name, $short, $long, 1'));
if($submitsql) { //kijken of het is gelukt.
echo 'Nieuws toegevoegt!';
}
else {
echo 'Er is een fout opgetreden! Probeer het later nog eens!';
}
}
?>
Gewijzigd op 02/11/2012 20:23:18 door Bo Ter Ham
Dat werkt dus niet.
Alleen als er wat gepost wordt, ga je wat submitten. Dat kan dus niet in 1 controle, chronologisch gezien.
Nu kan je met namespaces en allerlei gare constructies wel wat maken, maar dat moet je gewoon niet doen.
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
// error reporting aan. Anders commentaar je deze weg?
error_reporting(E_ALL);
//error_reporting(0);
// start sessie
session_start();
// include de configuratie
include 'config.php';
// controleer een admin... niets van de gebruiker nodig?
// wat wil je hier nou? De enige admin selecteren? En dan?
$sql = "SELECT admin FROM users";
$res = mysql_query($sql);
$geenideewatikhiermeegadoen = mysql_fetch_assoc($res);
// formulier maken, met soort van __VARS__ in het formulier.
$formulier = '
<form method="post" action="">
<em>Titel</em>
<input type="text" name="naam" value="__NAAM__">
<em>Inleiding</em>
<textarea name="kort"rows="15" cols="50">__KORT__</textarea>
<em>Bericht</em>
<textarea name="lang" rows="25" cols="50">__LANG__</textarea>
<input type="submit" value="Publiceer">
</form>';
// controle van formulier
// kijk of er NOG NIET gepost is
if($_SERVER['REQUEST_METHOD'] != 'POST')
{
// standaard-waarden dan maar...
$_POST['naam'] = 'Titel van het stuk';
$_POST['kort'] = 'Samenvatting, niet meer dan 200 tekens.';
$_POST['lang'] = 'Het lange bericht';
// gaat formulier tonen
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
else
{
// kijk of de benodigde gegevens er zijn
if(isset($_POST['naam'], $_POST['kort'], $_POST['lang']))
{
// schrijf de SQL netjes uit. Deze kan je makkelijk echoén als nodig
$sql = "INSERT INTO news
(
naam,
kort,
lang,
visible
)
VALUES
(
'" . mysql_real_escape_string($_POST['naam']) . "',
'" . mysql_real_escape_string($_POST['kort']) . "',
'" . mysql_real_escape_string($_POST['lang']) . "',
1
);
";
// echo $sql;
// voer de query uit, sla resultaat (true/false) op in $res
$res = mysql_query($sql);
// kijk of de query gelukt is
if($res === true)
{
// geef melding dat het opslaan gelukt is
$melding[] = '<p class="alert_ok">Opgeslagen</p>';
}
// query is niet gelukt
else
{
// geef melding van failure
$melding[] = '<p class="alert_fault">Niet opgeslagen</p>';
// geef formulier weer
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
}
// niet alle waarden zijn binnen gekomen
else
{
// melding geven dat we wat missen
$melding[] = '<p class="alert_fault">Een van de gevraagde gegevens missen. Vul die alsnog in!</p>';
// geef formulier weer
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
}
?>
<!DOCTYPE html>
<head>
<title>PortalCMS | Nieuw nieuwsbericht</title>
</head>
<body>
<?php
echo implode(PHP_EOL, $melding);
?>
</body>
</html>
// error reporting aan. Anders commentaar je deze weg?
error_reporting(E_ALL);
//error_reporting(0);
// start sessie
session_start();
// include de configuratie
include 'config.php';
// controleer een admin... niets van de gebruiker nodig?
// wat wil je hier nou? De enige admin selecteren? En dan?
$sql = "SELECT admin FROM users";
$res = mysql_query($sql);
$geenideewatikhiermeegadoen = mysql_fetch_assoc($res);
// formulier maken, met soort van __VARS__ in het formulier.
$formulier = '
<form method="post" action="">
<em>Titel</em>
<input type="text" name="naam" value="__NAAM__">
<em>Inleiding</em>
<textarea name="kort"rows="15" cols="50">__KORT__</textarea>
<em>Bericht</em>
<textarea name="lang" rows="25" cols="50">__LANG__</textarea>
<input type="submit" value="Publiceer">
</form>';
// controle van formulier
// kijk of er NOG NIET gepost is
if($_SERVER['REQUEST_METHOD'] != 'POST')
{
// standaard-waarden dan maar...
$_POST['naam'] = 'Titel van het stuk';
$_POST['kort'] = 'Samenvatting, niet meer dan 200 tekens.';
$_POST['lang'] = 'Het lange bericht';
// gaat formulier tonen
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
else
{
// kijk of de benodigde gegevens er zijn
if(isset($_POST['naam'], $_POST['kort'], $_POST['lang']))
{
// schrijf de SQL netjes uit. Deze kan je makkelijk echoén als nodig
$sql = "INSERT INTO news
(
naam,
kort,
lang,
visible
)
VALUES
(
'" . mysql_real_escape_string($_POST['naam']) . "',
'" . mysql_real_escape_string($_POST['kort']) . "',
'" . mysql_real_escape_string($_POST['lang']) . "',
1
);
";
// echo $sql;
// voer de query uit, sla resultaat (true/false) op in $res
$res = mysql_query($sql);
// kijk of de query gelukt is
if($res === true)
{
// geef melding dat het opslaan gelukt is
$melding[] = '<p class="alert_ok">Opgeslagen</p>';
}
// query is niet gelukt
else
{
// geef melding van failure
$melding[] = '<p class="alert_fault">Niet opgeslagen</p>';
// geef formulier weer
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
}
// niet alle waarden zijn binnen gekomen
else
{
// melding geven dat we wat missen
$melding[] = '<p class="alert_fault">Een van de gevraagde gegevens missen. Vul die alsnog in!</p>';
// geef formulier weer
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
}
?>
<!DOCTYPE html>
<head>
<title>PortalCMS | Nieuw nieuwsbericht</title>
</head>
<body>
<?php
echo implode(PHP_EOL, $melding);
?>
</body>
</html>
Gewijzigd op 02/11/2012 20:55:13 door Eddy E
Eddy Erkelens op 02/11/2012 20:21:40:
Dus je wilt eerst gaan fietsen, en dan pas de wielen monteren?
Dat werkt dus niet.
Alleen als er wat gepost wordt, ga je wat submitten. Dat kan dus niet in 1 controle, chronologisch gezien.
Nu kan je met namespaces en allerlei gare constructies wel wat maken, maar dat moet je gewoon niet doen.
Dat werkt dus niet.
Alleen als er wat gepost wordt, ga je wat submitten. Dat kan dus niet in 1 controle, chronologisch gezien.
Nu kan je met namespaces en allerlei gare constructies wel wat maken, maar dat moet je gewoon niet doen.
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
// error reporting aan. Anders commentaar je deze weg?
error_reporting(E_ALL);
//error_reporting(0);
// start sessie
session_start();
// include de configuratie
include 'config.php';
// controleer een admin... niets van de gebruiker nodig?
// wat wil je hier nou? De enige admin selecteren? En dan?
$sql = "SELECT admin FROM users";
$res = mysql_query($sql);
$geenideewatikhiermeegadoen = mysql_fetch_assoc($res);
// formulier maken, met soort van __VARS__ in het formulier.
$formulier = '
<form method="post" action="">
<em>Titel</em>
<input type="text" name="naam" value="__NAAM__">
<em>Inleiding</em>
<textarea name="kort"rows="15" cols="50">__KORT__</textarea>
<em>Bericht</em>
<textarea name="lang" rows="25" cols="50">__LANG__</textarea>
<input type="submit" value="Publiceer">
</form>';
// controle van formulier
// kijk of er NOG NIET gepost is
if($_SERVER['REQUEST_METHOD'] != 'POST')
{
// standaard-waarden dan maar...
$_POST['naam'] = 'Titel van het stuk';
$_POST['kort'] = 'Samenvatting, niet meer dan 200 tekens.';
$_POST['lang'] = 'Het lange bericht';
// gaat formulier tonen
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
else
{
// kijk of de benodigde gegevens er zijn
if(isset($_POST['naam'], $_POST['kort'], $_POST['lang']))
{
// schrijf de SQL netjes uit. Deze kan je makkelijk echoén als nodig
$sql = "INSERT INTO news
(
naam,
kort,
lang,
visible
)
VALUES
(
'" . mysql_real_escape_string($_POST['naam']) . "',
'" . mysql_real_escape_string($_POST['kort']) . "',
'" . mysql_real_escape_string($_POST['lang']) . "',
1
);
";
// echo $sql;
// voer de query uit, sla resultaat (true/false) op in $res
$res = mysql_query($sql);
// kijk of de query gelukt is
if($res === true)
{
// geef melding dat het opslaan gelukt is
$melding[] = '<p class="alert_ok">Opgeslagen</p>';
}
// query is niet gelukt
else
{
// geef melding van failure
$melding[] = '<p class="alert_fault">Niet opgeslagen</p>';
// geef formulier weer
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
}
// niet alle waarden zijn binnen gekomen
else
{
// melding geven dat we wat missen
$melding[] = '<p class="alert_fault">Een van de gevraagde gegevens missen. Vul die alsnog in!</p>';
// geef formulier weer
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
}
?>
<!DOCTYPE html>
<head>
<title>PortalCMS | Nieuw nieuwsbericht</title>
</head>
<body>
<?php
echo implode(PHP_EOL, $melding);
?>
</body>
</html>
// error reporting aan. Anders commentaar je deze weg?
error_reporting(E_ALL);
//error_reporting(0);
// start sessie
session_start();
// include de configuratie
include 'config.php';
// controleer een admin... niets van de gebruiker nodig?
// wat wil je hier nou? De enige admin selecteren? En dan?
$sql = "SELECT admin FROM users";
$res = mysql_query($sql);
$geenideewatikhiermeegadoen = mysql_fetch_assoc($res);
// formulier maken, met soort van __VARS__ in het formulier.
$formulier = '
<form method="post" action="">
<em>Titel</em>
<input type="text" name="naam" value="__NAAM__">
<em>Inleiding</em>
<textarea name="kort"rows="15" cols="50">__KORT__</textarea>
<em>Bericht</em>
<textarea name="lang" rows="25" cols="50">__LANG__</textarea>
<input type="submit" value="Publiceer">
</form>';
// controle van formulier
// kijk of er NOG NIET gepost is
if($_SERVER['REQUEST_METHOD'] != 'POST')
{
// standaard-waarden dan maar...
$_POST['naam'] = 'Titel van het stuk';
$_POST['kort'] = 'Samenvatting, niet meer dan 200 tekens.';
$_POST['lang'] = 'Het lange bericht';
// gaat formulier tonen
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
else
{
// kijk of de benodigde gegevens er zijn
if(isset($_POST['naam'], $_POST['kort'], $_POST['lang']))
{
// schrijf de SQL netjes uit. Deze kan je makkelijk echoén als nodig
$sql = "INSERT INTO news
(
naam,
kort,
lang,
visible
)
VALUES
(
'" . mysql_real_escape_string($_POST['naam']) . "',
'" . mysql_real_escape_string($_POST['kort']) . "',
'" . mysql_real_escape_string($_POST['lang']) . "',
1
);
";
// echo $sql;
// voer de query uit, sla resultaat (true/false) op in $res
$res = mysql_query($sql);
// kijk of de query gelukt is
if($res === true)
{
// geef melding dat het opslaan gelukt is
$melding[] = '<p class="alert_ok">Opgeslagen</p>';
}
// query is niet gelukt
else
{
// geef melding van failure
$melding[] = '<p class="alert_fault">Niet opgeslagen</p>';
// geef formulier weer
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
}
// niet alle waarden zijn binnen gekomen
else
{
// melding geven dat we wat missen
$melding[] = '<p class="alert_fault">Een van de gevraagde gegevens missen. Vul die alsnog in!</p>';
// geef formulier weer
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
}
?>
<!DOCTYPE html>
<head>
<title>PortalCMS | Nieuw nieuwsbericht</title>
</head>
<body>
<?php
echo implode(PHP_EOL, $melding);
?>
</body>
</html>
Heel erg bedankt! Nu werkt de code wel. Ik ben je vreselijk dankbaar, dankzij die commentaar regels snap ik alles! Dus: Dankjewel!
EN
PHP Jasper op 02/11/2012 21:36:27:
Lees mijn tutorial een keertje: http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-query-sql/735/
Die ga ik eens uitgebreid doorlezen.
Gewijzigd op 03/11/2012 09:59:08 door Koen Hollander