Blijft Error returnen
Ik ben nu een 2 weken bezig met php elke dag oefenen, heb het boek Basiscursus PHP 5. Nu heb ik zelf iets geschreven maar het wil maar niet werken, het is een scriptje waarmee ik dvd's aan een collectie kan toevoegen, alleen het werkt dus nog niet het blijft de fout "Query error " weergeven. hier onder het script.
$host = "localhost";
$user = "kroon";
$userpw = "*****";
$dbnaam ="dvd";
$fout2 = "Connecten is goed gegaan";
$fout = "Query error";
$db = mysql_connect("$host","$user","$userpw") or die ($fout2);
mysql_select_db($dbnaam, $db) or die ($fout);
echo ("Verbinding maken is gelukt<br>");
if(empty($_POST))
{
echo ("Vul eerst uw formulier helemaal in");
exit();
}
else
{
$query ="INSERT INTO `dvd` ( `id` , `titel` , `type` , `spelers` , `omschrijving` , `door` , `email` )";
$query .= "VALUES ('";
$query .= $_POST["titel"] ."', '" ;
$query .= $_POST["type"] ."', '" ;
$query .= $_POST["spelers"] ."', '" ;
$query .= $_POST["omschrijving"] ."', '" ;
$query .= $_POST["door"] ."', '" ;
$query .= $_POST["email"] ."', '";
$data = mysql_query($query) or die ($fout);
echo $query;
}
?>
doe die echo $query eens VOORDAT je hem uitvoert? En plak het resultaat eens hierheen?
probeer anders ook eens:
$data = mysql_query($query) or die mysql_error();
De mysql_error() geeft een string terug die der laatste MySQL error bevat. Die geeft vaak een stuk meer duidelijkheid waar het mis ging in je query.
Tip: Vergeet ook niet om quotes af te vangen met bijvoorbeeld addslashes().. anders kan je input de SQL-statement corrupt maken.
INSERT INTO `dvd` ( `id` , `titel` , `type` , `spelers` , `omschrijving` , `door` , `email` )VALUES ('test', 'aap', 'boe', 'bah', 'ej', 'adsf', 'Query error
ik zie hier ook dat ik voor ID geen "" in de values heb staan maar dat zou toch niet uit mogen maken?
bedankt!
sorry, het veld ID is een auto inc, en primary key
Pholeron:
Je geeft in de INSERT wel een ID kolom op, maar kent bij de VALUES geen waarde toe aan deze kolom. Daar ga je i.i.g. de mist in. Als het een autonumereing veld is, kun je de kolom ID weglaten.
probeer anders ook eens:
$data = mysql_query($query) or die mysql_error();
De mysql_error() geeft een string terug die der laatste MySQL error bevat. Die geeft vaak een stuk meer duidelijkheid waar het mis ging in je query.
Tip: Vergeet ook niet om quotes af te vangen met bijvoorbeeld addslashes().. anders kan je input de SQL-statement corrupt maken.
probeer anders ook eens:
$data = mysql_query($query) or die mysql_error();
De mysql_error() geeft een string terug die der laatste MySQL error bevat. Die geeft vaak een stuk meer duidelijkheid waar het mis ging in je query.
Tip: Vergeet ook niet om quotes af te vangen met bijvoorbeeld addslashes().. anders kan je input de SQL-statement corrupt maken.
Die id levert geen probleem op. Als je geen waarde toekent gaat het goed.
Dit:
$data = mysql_query($query) or die mysql_error();
gaat fout. Het moet zijn:
$data = mysql_query($query) or die (mysql_error());
ik zou eerst mijn query versimpelen. Hij is ook niet veilig zoals hij nu is. Het is een goede gewoonte om je $_POST variabelen een minimale check te geven, bijvoorbeeld zo:
Doe dat met al je post variabelen. Daarna kun je dit doen:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$query = "
INSERT INTO dvd
(titel, type, spelers, omschrijving, door, email)
VALUES
('$titel', '$type', '$spelers', '$omschrijving', '$door', '$email')
";
mysql_query($query) or die (mysql_error ());
?>
$query = "
INSERT INTO dvd
(titel, type, spelers, omschrijving, door, email)
VALUES
('$titel', '$type', '$spelers', '$omschrijving', '$door', '$email')
";
mysql_query($query) or die (mysql_error ());
?>
dat krijg ik nu
ja het werkt nu wel met uw script, hartelijk dank en ik ga verder en nu kijken of ik wel alles zelf kan. Het is een uitdaging maar soms als het blijft mislukken dan moet je maar even hulp zoeken. Bedankt voor de moeite!
Jan:
Dit:
$data = mysql_query($query) or die mysql_error();
gaat fout. Het moet zijn:
$data = mysql_query($query) or die (mysql_error());
$data = mysql_query($query) or die mysql_error();
gaat fout. Het moet zijn:
$data = mysql_query($query) or die (mysql_error());
Bedankt voor de correctie (:
Maar bij de ID moet je lijkt me toch wel een (null) waarde o.i.d. opgeven .. omdat anders het aantal opgegeven kolomen en het aantal waarden niet kloppen.. iets waar MySQL alergioes voor is d:
klopt, maar dat deed Nick ook, in deze regel:
$query .= "VALUES ('";
Daar zit volgens mij trouwens de fout. Er staat één enkele quote, en het moeten er twee zijn.
INSERT INTO `dvd` ( `id` , `titel` , `type` , `spelers` , `omschrijving` , `door` , `email` )VALUES (...
Wordt dan
INSERT INTO dvd (id, titel, type, spelers, omschrijving, door, email) VALUES (...
Wie weet heeft dat ook nog wat effect
In het algemeen: problemen met queries komen het meest voor op dit forum. Vooral insert queries zijn lastig. Ik heb voor mezelf de beslissing genomen om bij queries variabelen niet buiten quotes te halen. De puristen zullen het niet met me eens zijn, maar ze worden gewoon veel eenvoudiger te debuggen.
Ik doe het altijd zo:
1) de query zelf zet ik tussen dubbele quotes
2) ik gebruik enkele quotes waar het nodig is
het is leuk dat je een link geeft naar de werkende pagina, maar het zou beter zijn als je de werkende PHP code hier zou posten. Misschien hebben andere forumleden er dan iets aan.
$query .= $_POST["email"] ."', '";
Aan het eind staat een komma en nog een enkele quot terwijl hier dus niets meer achter komt.
de dvd add pagina, met dank aan Jan Koehoorn en Pholeron:
[ do_add.php ]
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
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
<?php
$host = "localhost";
$user = "kroon";
$userpw = "******";
$dbnaam ="dvd";
$fout2 = "Connecten is goed gegaan";
$fout = "Query error";
$db = mysql_connect("$host","$user","$userpw") or die ($fout2);
mysql_select_db($dbnaam, $db) or die ($fout);
if(empty($_POST))
{
echo ("Vul eerst uw formulier helemaal in");
exit();
}
else
{
$query = "
INSERT INTO dvd
(titel, type, spelers, omschrijving, door, email)
VALUES
('$titel', '$type', '$spelers', '$omschrijving', '$door', '$email')
";
mysql_query($query) or die (mysql_error ());
echo ("DVD $titel Toegevoegd aan $dbnaam door <a href=\"mailto:$email\">$door</a>");
}
?>
$host = "localhost";
$user = "kroon";
$userpw = "******";
$dbnaam ="dvd";
$fout2 = "Connecten is goed gegaan";
$fout = "Query error";
$db = mysql_connect("$host","$user","$userpw") or die ($fout2);
mysql_select_db($dbnaam, $db) or die ($fout);
if(empty($_POST))
{
echo ("Vul eerst uw formulier helemaal in");
exit();
}
else
{
$query = "
INSERT INTO dvd
(titel, type, spelers, omschrijving, door, email)
VALUES
('$titel', '$type', '$spelers', '$omschrijving', '$door', '$email')
";
mysql_query($query) or die (mysql_error ());
echo ("DVD $titel Toegevoegd aan $dbnaam door <a href=\"mailto:$email\">$door</a>");
}
?>