Fouten melden
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
include('config.php'); // database connectie
if($_SERVER['REQUEST_METHOD']=="POST") {
header('location:http://www.site.nl/verstuurd.php');
$sql = "INSERT INTO balk SET id = '', naam ='".$_POST['naam']."', bericht='".$_POST['bericht']."'"; // invoegquery
mysql_query($sql); // query uitvoeren
}
else {
?>
include('config.php'); // database connectie
if($_SERVER['REQUEST_METHOD']=="POST") {
header('location:http://www.site.nl/verstuurd.php');
$sql = "INSERT INTO balk SET id = '', naam ='".$_POST['naam']."', bericht='".$_POST['bericht']."'"; // invoegquery
mysql_query($sql); // query uitvoeren
}
else {
?>
Hier komt de form. Maar die heb ik er niet bij gezet omdat dit denk ik niet nodig was.
Mijn vraag is of jullie enkele fouten kunnen opnoemen en ik zal dan dit script helemaal proberen op te lossen omdat ik veel klachten al gehoord heb over dit script.
Met vriendelijke groet
Dem
http://www.phphulp.nl/php/forum/topic/fout-maar-waarom/81637/
Gewijzigd op 28/12/2011 11:28:27 door - Ariën -
Toevoeging op 28/12/2011 11:35:54:
Zoals Aar reeds aangeeft: Waarom een nieuw topic openen?
Zodra je het formulier hebt verzonden, wordt de bezoeker meteen doorgestuurd naar de verstuurd.php, nog voordat de query is uitgevoerd. De query zal dus niet worden uitgevoerd, de rij komt niet in de tabel in je database. Bovendien vergeet je mysql_real_escape_string(); om je $_POST['bericht'], dit moet vanwege veiligheid.
dit script heb ik nu al:
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
include('config.php'); // database connectie
include('functions.php'); // smilies, filter en stukje css
if($_SERVER['REQUEST_METHOD']=="POST") {
$sql = "INSERT INTO balk SET id = '', naam = '".mysql_real_escape_string($_POST['naam'])."', bericht = '".mysql_real_escape_string($_POST['bericht'])."'"; // invoegquery
mysql_query($sql); // query uitvoeren
echo "U heeft het volgende bericht gepost: <br>".$post."."; //dan laten we ff zien wat diegene gepost heeft.
}
else { // Er is niet op de knop Verzenden geklikt dus laten we het formuliertje weer zien
?>
include('config.php'); // database connectie
include('functions.php'); // smilies, filter en stukje css
if($_SERVER['REQUEST_METHOD']=="POST") {
$sql = "INSERT INTO balk SET id = '', naam = '".mysql_real_escape_string($_POST['naam'])."', bericht = '".mysql_real_escape_string($_POST['bericht'])."'"; // invoegquery
mysql_query($sql); // query uitvoeren
echo "U heeft het volgende bericht gepost: <br>".$post."."; //dan laten we ff zien wat diegene gepost heeft.
}
else { // Er is niet op de knop Verzenden geklikt dus laten we het formuliertje weer zien
?>
Die mysql_real_escape_string(); zit denk ik nog een fout. Ik heb dit opgezocht op internet maar weet niet waar het probleem ligt.
@ Aar, is de inspringing nu wel goed?
De fouthandeling heb ik ook opgezocht maar via 000webhost denk ik dat dit moeilijk gaat.
Toevoeging op 28/12/2011 12:41:51:
Ik heb de header veranderd naar de echo:
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
include('../config.php'); // database connectie
if($_SERVER['REQUEST_METHOD']=="POST") {
$sql = "INSERT INTO balk SET id = '', naam = '".mysql_real_escape_string($_POST['naam'])."', bericht = '".mysql_real_escape_string($_POST['bericht'])."'"; // invoegquery
mysql_query($sql); // query uitvoeren
header('location:http://www.site.nl/verstuurd.php');
}
else { // Er is niet op de knop Verzenden geklikt dus laten we het formuliertje weer zien
?>
include('../config.php'); // database connectie
if($_SERVER['REQUEST_METHOD']=="POST") {
$sql = "INSERT INTO balk SET id = '', naam = '".mysql_real_escape_string($_POST['naam'])."', bericht = '".mysql_real_escape_string($_POST['bericht'])."'"; // invoegquery
mysql_query($sql); // query uitvoeren
header('location:http://www.site.nl/verstuurd.php');
}
else { // Er is niet op de knop Verzenden geklikt dus laten we het formuliertje weer zien
?>
Gewijzigd op 28/12/2011 12:38:07 door - Diov -
Waarom SET je een leeg id in de database?
En waarom zou foutafhandeling volgens jouw bij 000webhost een probleem moeten zijn? Foutafhandeling bestaat uit standaard PHP functies.
Inbouwen dus!!!
Gewijzigd op 28/12/2011 12:45:57 door - Ariën -
- SanThe - op 28/12/2011 11:34:33:Als er gePOST is kom je op regel 5. Daar stuur je de bezoeker door naar een andere pagina en dat houdt in dat de POSTdata weer weg is. Of regel 6 nog wordt uitgevoerd is een gok. De syntax van de query is niet correct en die regel is trouwens zo lek als een mandje omdat je de data van het formulier ongecontroleerd direct in de query zet (sql-injection). Ook ontbreekt de foutafhandeling van de query.
Het wordt al beter.
Ik laat de id leeg omdat die dan in mijn database elke keer 1tje omhoog gaat.
Ik heb de foutafhandeling: (http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-query-sql/735/)
Alleen als ik dat eerste erop zet, zie ik geen errors dus dan is het ook niet nodig?
Dem Ian op 28/12/2011 12:51:38:
Die else is nodig om mijn formulier te laten zien.
Logisch, maar dat blijkt niet uit de inspringing. Alle if-(elseif)-else uit één statement horen op een verticale lijn te liggen. In jouw voorbeeld van 10 regels is het nog makkelijk te overzien, maar met een script van 600 regels is het wat lastiger te zien als het als spaghetti ongeordend in je script verwerkt is.
Quote:
Ik laat de id leeg omdat die dan in mijn database elke keer 1tje omhoog gaat.
Dan kan je hem net zo goed niet meesturen via SET, want als hij omhooggaat dan gebeurt dat toch al via Auto Increment. Of zet je ook altijd een lege fles drinken in de koelkast voor de visite die niks wil drinken?
Quote:
Ik heb de foutafhandeling: (http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-query-sql/735/)
Alleen als ik dat eerste erop zet, zie ik geen errors dus dan is het ook niet nodig?
Alleen als ik dat eerste erop zet, zie ik geen errors dus dan is het ook niet nodig?
Als je query nu zonder foutafhandeling mis gaat, en display_error staat uit, dan zie je gewoon een melding dat het gelukt is, terwijl er niks is ge-INSERT is. Lekker onduidelijk voor de bezoeker, die zich vermoedelijk dan wezenloos op F5 zal drukken, en je site maar stom zal vinden.
Daarom foutafhandeling. Laat de bezoekers iets weten dat het niet goed ging aan jouw kant, en laat zelf de fout alleen voor jouw zichtbaar maken.
Gewijzigd op 28/12/2011 13:01:23 door - Ariën -
- SanThe - op 28/12/2011 12:50:39:
De syntax van de query is niet correct.
Zie http://phptuts.nl/view/41/5/
Heb je enkele tips, links waar ik dit kan vinden. Ik zal zelf ook wel zoeken op
google.
- Dus ik moet id = '' weglaten?
- Ik heb dus die foutafhandeling er neergezet maar ik krijg geen melding.
Dit is wat ik heb:
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
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
<?php
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',0); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',false); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
include('../config.php'); // database connectie
if($_SERVER['REQUEST_METHOD']=="POST") {
$sql = "INSERT INTO balk SET id = '', naam = '".mysql_real_escape_string($_POST['naam'])."', bericht = '".mysql_real_escape_string($_POST['bericht'])."'"; // invoegquery
mysql_query($sql); // query uitvoeren
header('location:http://www.site.nl/gepost.php');
}
else { // Er is niet op de knop Verzenden geklikt dus laten we het formuliertje weer zien
?>
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',0); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',false); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
include('../config.php'); // database connectie
if($_SERVER['REQUEST_METHOD']=="POST") {
$sql = "INSERT INTO balk SET id = '', naam = '".mysql_real_escape_string($_POST['naam'])."', bericht = '".mysql_real_escape_string($_POST['bericht'])."'"; // invoegquery
mysql_query($sql); // query uitvoeren
header('location:http://www.site.nl/gepost.php');
}
else { // Er is niet op de knop Verzenden geklikt dus laten we het formuliertje weer zien
?>
Gewijzigd op 28/12/2011 13:01:49 door - Diov -
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
Gewijzigd op 28/12/2011 13:04:02 door Erwin H
Ik raad je aan om het artikel nog eens goed te lezen, en niet klakkeloos alleen maar code te kopiëren.
Die is is dus overbodig, zoals ik al eerder zei, en kan dus weg.
De inspringing: Het is gewoon een kwestie van logisch kijken. Hier is geen tutorial voor nodig. Misschien zijn ze er, maar zoals ik zei, met logisch kijken het het gebruik van een enkele tab per if else, waarbij je genestte if'jes een steeds een tab extra meegeeft, moet het wel lukken.
Pseudecode:
Code (php)
Dit is al veel overzichtelijker.
Gewijzigd op 28/12/2011 13:09:33 door - Ariën -
Ik probeer eerst even de syntax goed te krijgen en dan ga ik aan de slag met de foutafhandeling.
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
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
<?php
include('../config.php'); // database connectie
if($_SERVER['REQUEST_METHOD']=="POST") {
$sql = "
INSERT INTO balk
(
naam,
bericht
)
VALUES
(
'".mysql_real_escape_string($_POST['naam'])."',
'".mysql_real_escape_string($_POST['bericht'])."'
)
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
header('location:http://site.nl/gepost.php');
}
else { // Er is niet op de knop Verzenden geklikt dus laten we het formuliertje weer zien
?>
include('../config.php'); // database connectie
if($_SERVER['REQUEST_METHOD']=="POST") {
$sql = "
INSERT INTO balk
(
naam,
bericht
)
VALUES
(
'".mysql_real_escape_string($_POST['naam'])."',
'".mysql_real_escape_string($_POST['bericht'])."'
)
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
header('location:http://site.nl/gepost.php');
}
else { // Er is niet op de knop Verzenden geklikt dus laten we het formuliertje weer zien
?>
Gewijzigd op 28/12/2011 13:09:30 door - Diov -
define('DEBUG_MODE',false); // true == aan, false == uit
Lees het commentaar wat er achter staat. Ze staan nu beiden UIT.
Ik heb even de foutafhandeling verwijderd. Daar kom ik straks op terug.
Dem Ian op 28/12/2011 13:09:52:
Ik heb even de foutafhandeling verwijderd. Daar kom ik straks op terug.
Stond wel goed.
Maar is de syntax nu beter? Of is er nog een fout?
Dem Ian op 28/12/2011 13:11:47:
Oké dan :P
Maar is de syntax nu beter? Of is er nog een fout?
Maar is de syntax nu beter? Of is er nog een fout?
Die is okee nu.
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
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
<?php
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
include('../config.php'); // database connectie
if($_SERVER['REQUEST_METHOD']=="POST") {
$sql = "
INSERT INTO balk
(
naam,
bericht
)
VALUES
(
'".mysql_real_escape_string($_POST['naam'])."',
'".mysql_real_escape_string($_POST['bericht'])."'
)
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
# Check of query is gelukt
if (($result_insert_user = mysql_query($sql_insert_user)) === false)
{
# als de query fout is -> foutafhandeling
echo showSQLError($sql_insert_user,mysql_error(),'Fout bij het invoegen');
}
else
{
# De query is geluk! :)
echo 'Gelukt';
}
header('location:http://site.nl/gepost.php');
}
else { // Er is niet op de knop Verzenden geklikt dus laten we het formuliertje weer zien
?>
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
include('../config.php'); // database connectie
if($_SERVER['REQUEST_METHOD']=="POST") {
$sql = "
INSERT INTO balk
(
naam,
bericht
)
VALUES
(
'".mysql_real_escape_string($_POST['naam'])."',
'".mysql_real_escape_string($_POST['bericht'])."'
)
";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
# Check of query is gelukt
if (($result_insert_user = mysql_query($sql_insert_user)) === false)
{
# als de query fout is -> foutafhandeling
echo showSQLError($sql_insert_user,mysql_error(),'Fout bij het invoegen');
}
else
{
# De query is geluk! :)
echo 'Gelukt';
}
header('location:http://site.nl/gepost.php');
}
else { // Er is niet op de knop Verzenden geklikt dus laten we het formuliertje weer zien
?>
Ik snap die foutafhandeling maar half want wat Aar zei:
Quote:
Ik zie nergens een foutafhandeling, het enige wat er nu erbij is geplaatst is een functie om fouten te verwerken, maar je roept die nergens aan.
Ik heb het nu aangezet maar ik zie nog altijd geen fouten. Zou dit komen door mijn header doordat hij direct doorstuurt?
Toevoeging op 28/12/2011 13:22:17:
Ok, het lag aan de header.
Ik kom op 1 error:
Error: Query was empty
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
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
<?php
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
include('../config.php'); // database connectie
if($_SERVER['REQUEST_METHOD']=="POST")
{
$sql = "
INSERT INTO balk
(
naam,
bericht
)
VALUES
(
'".mysql_real_escape_string($_POST['naam'])."',
'".mysql_real_escape_string($_POST['bericht'])."'
)
";
# Check of query is gelukt
if(!$res = mysql_query($sql))
{
echo showSQLError($sql,mysql_error(),'Fout bij het invoegen');
}
else
{
# De query is geluk! :)
echo 'Gelukt';
}
header('location:http://site.nl/gepost.php');
}
else
{
// Er is niet op de knop Verzenden geklikt dus laten we het formuliertje weer zien
}
?>
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
include('../config.php'); // database connectie
if($_SERVER['REQUEST_METHOD']=="POST")
{
$sql = "
INSERT INTO balk
(
naam,
bericht
)
VALUES
(
'".mysql_real_escape_string($_POST['naam'])."',
'".mysql_real_escape_string($_POST['bericht'])."'
)
";
# Check of query is gelukt
if(!$res = mysql_query($sql))
{
echo showSQLError($sql,mysql_error(),'Fout bij het invoegen');
}
else
{
# De query is geluk! :)
echo 'Gelukt';
}
header('location:http://site.nl/gepost.php');
}
else
{
// Er is niet op de knop Verzenden geklikt dus laten we het formuliertje weer zien
}
?>
Toevoeging op 28/12/2011 13:30:41:
Dem Ian op 28/12/2011 13:18:29:
Ik kom op 1 error:
Error: Query was empty
Error: Query was empty
Die komt omdat jij op regel 45 een onbekende (tweede) query wilt uitvoeren. In mijn bovenstaand script heb ik de overbodige regels verwijderd.
Gewijzigd op 28/12/2011 13:28:23 door - SanThe -