login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Insert syntax error

Offline axelneve - 28/03/2010 16:14
Avatar van axelneveNieuw lid Voor mijn site gebruik ik verschillende input formulieren, welke allemaal qua opbouw exact hetzelfde zijn. Nu heb ik echter een exacte kopie gemaakt van een werkend formulier, en alleen de tabelnaam en de variabelen aangepast, alleen nu werkt het formulier niet.

Weet/Ziet iemand het probleem?

Bij het drukken op de knop verschijnt de volgende error:

Er is een fout opgetreden
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'schema (Datum, Groepa, Groepb, Groepc) VALUES ('01-06-2010', 'BAAN', 'ZAAL', 'VELD' at line 1

code: http://www.plaatscode.be/138994/

45 antwoorden

Gesponsorde links
Offline nick5556 - 28/03/2010 16:18 (laatste wijziging 28/03/2010 16:20)
Avatar van nick5556 PHP beginner Probeer dit eens:
  1. $sql = "
  2. INSERT INTO schema (
  3. Datum,
  4. Groepa,
  5. Groepb,
  6. Groepc
  7. ) VALUES (
  8. '".$_POST['Datum']."',
  9. '".$_POST['Groepa']."',
  10. '".$_POST['Groepb']."',
  11. '".$_POST['Groepc']."')
  12. ";


EDIT:

Nog een klein foutje:
PHP.net: ob_start() en PHP.net: session_start() moeten helemaal bovenaan je pagina, dus boven je doctype ect.
Offline Jelmerholland - 28/03/2010 16:21
Avatar van Jelmerholland PHP beginner En, als VALUEs, niet gewoon een $_POST erin gooien, mysql injection, wordt je niet vrolijk van 
Offline PHPmike - 28/03/2010 16:24 (laatste wijziging 28/03/2010 16:25)
Avatar van PHPmike Nieuw lid Voorbeeld

  1. $naam = mysql_real_escape_string($_POST['naam']);
Bedankt door: nick5556, Jelmerholland
Offline Jelmerholland - 28/03/2010 16:25
Avatar van Jelmerholland PHP beginner Whoopsy, vergeten een voorbeeldje te geven 
Offline PHPmike - 28/03/2010 16:31
Avatar van PHPmike Nieuw lid Het was geen slechte tip.
Offline axelneve - 28/03/2010 16:57 (laatste wijziging 28/03/2010 16:57)
Avatar van axelneve Nieuw lid ik heb het nu als volgt verandert, maar ik krijg nog steeds dezelfde error:

  1. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  2. $sql = "
  3. INSERT INTO schema (
  4. Datum,
  5. Groepa,
  6. Groepb,
  7. Groepc
  8. ) VALUES (
  9. '".$_POST['Datum']."',
  10. '".$_POST['Groepa']."',
  11. '".$_POST['Groepb']."',
  12. '".$_POST['Groepc']."')
  13. ";
Offline nick5556 - 28/03/2010 17:00 (laatste wijziging 28/03/2010 17:00)
Avatar van nick5556 PHP beginner Probeer eens zo:

  1. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  2. $sql = "
  3. INSERT INTO schema (
  4. Datum,
  5. Groepa,
  6. Groepb,
  7. Groepc
  8. ) VALUES (
  9. '".mysql_real_escape_string($_POST['Datum'])."',
  10. '".mysql_real_escape_string($_POST['Groepa'])."',
  11. '".mysql_real_escape_string($_POST['Groepb'])."',
  12. '".mysql_real_escape_string($_POST['Groepc'])."')
  13. ";
  14. }


Nu is het natuurlijk netter om die POST waarden naar een andere variabele te escapen.
Offline axelneve - 28/03/2010 17:07
Avatar van axelneve Nieuw lid ik heb dit ook weer toegepast, maar nu krijg ik echter alleen een witte blanco pagina te zien..

  1. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  2. $sql = "
  3. INSERT INTO schema (
  4. Datum,
  5. Groepa,
  6. Groepb,
  7. Groepc
  8. ) VALUES (
  9. '".mysql_real_escape_string($_POST['Datum'])."',
  10. '".mysql_real_escape_string($_POST['Groepa'])."',
  11. '".mysql_real_escape_string($_POST['Groepb'])."',
  12. '".mysql_real_escape_string($_POST['Groepc'])."')
  13. ";
  14. }
  15. if (!mysql_query($sql,$con))
  16. {
  17. die('<strong>Er is een fout opgetreden</strong><br />Error: ' . mysql_error());
  18. }
  19. header ('url=admin_schema_new.php');
  20. }
Offline nick5556 - 28/03/2010 17:10 (laatste wijziging 28/03/2010 17:12)
Avatar van nick5556 PHP beginner Header word op de volgende manier gebruikt:

  1. header('Location: admin_schema_new.php');
  2. exit();


Er zijn nog meer mogelijkheden met de headers maar dan moet je even kijken op PHP.net: header(). Om door te sturen gebruik je alleen de bovenste code.

EDIT:

Kleine aanpassing in de code. Gebruik de funtie PHP.net: exit om te zorgen dat de rest van de code niet meer word uitgevoerd, dit scheelt tijd 
Offline PHPmike - 28/03/2010 17:11
Avatar van PHPmike Nieuw lid Of vooraf defineren zoals ik deed.
Offline nick5556 - 28/03/2010 17:18
Avatar van nick5556 PHP beginner @PHPmike

Met de PHP.net: mysql_real_escape_string kan dat wel ja. Met de headers zou ik het niet doen, of er moet héél vaak dezelfde header verzonden kunnen worden op een pagina.
Offline Jelmerholland - 28/03/2010 18:07 (laatste wijziging 28/03/2010 18:08)
Avatar van Jelmerholland PHP beginner Je moet sws een functie maken van mysql_real_escape_string

zo:
  1. //== een include waar al je functies staan ==
  2. function safe($var){
  3. return;
  4. }
  5.  
  6. //== bestandje waar je hem gebruikt ==
  7. safe($_POST['name']);


Scheelt een hele hoop typewerk, en het is overzichtelijker 
Offline axelneve - 28/03/2010 18:30 (laatste wijziging 28/03/2010 18:48)
Avatar van axelneve Nieuw lid Ik heb inmiddels de header-regel aangepast, maar nog steeds krijg ik alleen een lege pagina te zien.

  1. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  2. $sql = "
  3. INSERT INTO schema (
  4. Datum,
  5. Groepa,
  6. Groepb,
  7. Groepc
  8. ) VALUES (
  9. '".mysql_real_escape_string($_POST['Datum'])."',
  10. '".mysql_real_escape_string($_POST['Groepa'])."',
  11. '".mysql_real_escape_string($_POST['Groepb'])."',
  12. '".mysql_real_escape_string($_POST['Groepc'])."')
  13. ";
  14. }
  15. if (!mysql_query($sql,$con))
  16. {
  17. die('<strong>Er is een fout opgetreden</strong><br />Error: ' . mysql_error());
  18. }
  19. header('Location: admin_schema_new.php');
  20. exit();
  21. }
  22.  
  23. ?>


EDIT:
ik heb de hele aangespaste code (zoals hij nu is) geplaats op plaatscode.be: http://www.plaatscode.be/138995/

de toepassing van de sws functie snap ik niet helemaal.
Offline nick5556 - 28/03/2010 18:58 (laatste wijziging 28/03/2010 18:58)
Avatar van nick5556 PHP beginner Dit stukje kan ook beter bovenaan.

  1. ini_set('display_errors', 'On');
  2. error_reporting(E_ALL | E_STRICT);


en sws functie?
Offline axelneve - 28/03/2010 19:00
Avatar van axelneve Nieuw lid de error reporting heb ik er even snel boven gezet, dus die kan inderdaad beter,

de sws-functie waar Jelmerhollan het over heeft.
Offline nick5556 - 28/03/2010 19:03
Avatar van nick5556 PHP beginner De functie van jelmer is gewoon precies hetzelfde als wat PHP.net: mysql_real_escape_string doet. Dit is misschien minder typwerk, maar de server zal elke keer moeten kijken wat er in die functie gebeurd, dus zal langer duren.

Wat is nu precies de fout die je krijgt?
Offline axelneve - 28/03/2010 19:09
Avatar van axelneve Nieuw lid op dit moment krijg ik, met de code die ik zojuist ook postte op plaatscode.be, alleen een blanco lege pagina te zien.
Offline nick5556 - 28/03/2010 19:14
Avatar van nick5556 PHP beginner Ik heb even je code gedownload en tabs erin gezet(maakt je code leesbaarder, kijk hiervoor maar hier). En nu zie ik meteen dat je een foutje hebt gemaakt, ik denk dat je dit bedoelt:

  1. if (!mysql_query($sql,$con)) {
  2. die('<strong>Er is een fout opgetreden</strong><br />Error: ' . mysql_error());
  3. } else {
  4. header('Location: admin_schema_new.php');
  5. exit();
  6. }


ipv dit:

  1. if (!mysql_query($sql,$con)) {
  2. die('<strong>Er is een fout opgetreden</strong><br />Error: ' . mysql_error());
  3. }
  4. header('Location: admin_schema_new.php');
  5. exit();
  6. }
Offline axelneve - 28/03/2010 19:21
Avatar van axelneve Nieuw lid ja dat klopt. het probleem van de blanco pagina is hierdoor ook opgelost 

nu krijg ik echter dan alweer een aantal foutmeldingen.
zoals 'undefined variable' sql en,
Error: Query is empty.

Offline nick5556 - 28/03/2010 19:33
Avatar van nick5556 PHP beginner Dat komt omdat de variabele sql niet bestaat, daarom is de query ook leeg.
Offline Jelmerholland - 28/03/2010 19:40 (laatste wijziging 28/03/2010 19:40)
Avatar van Jelmerholland PHP beginner Haha, lach me helemaal ziek hier 'sws-functie   '
sws = sowieso
maar 'sws' is minder typwerk, en zit 'ingeburgerd' in mijn vingers 
Offline nick5556 - 28/03/2010 19:43
Avatar van nick5556 PHP beginner
Jelmerhollan schreef:
Haha, lach me helemaal ziek hier 'sws-functie   '
sws = sowieso
maar 'sws' is minder typwerk, en zit 'ingeburgerd' in mijn vingers 


Forum regels:
1. Er wordt met Algemeen Beschaafd Nederlands gesproken.(typfoutje of hoofdlettertje vergeten mag wel eens gebeuren, we blijven mensen natuurlijk)
2. Geen 'spam' berichtjes
Offline axelneve - 28/03/2010 19:57
Avatar van axelneve Nieuw lid maar de sql variabele word hier toch gemaakt?:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$sql = "
INSERT INTO schema (
Datum,
Groepa,
Groepb,
Groepc
) VALUES (
'".mysql_real_escape_string($_POST['Datum'])."',
'".mysql_real_escape_string($_POST['Groepa'])."',
'".mysql_real_escape_string($_POST['Groepb'])."',
'".mysql_real_escape_string($_POST['Groepc'])."')
";
}
Offline nick5556 - 28/03/2010 20:00
Avatar van nick5556 PHP beginner Maar niet als jou form niet gepost is. Probeer dit eens:

  1. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  2. $sql = "
  3. INSERT INTO schema (
  4. Datum,
  5. Groepa,
  6. Groepb,
  7. Groepc
  8. ) VALUES (
  9. '".mysql_real_escape_string($_POST['Datum'])."',
  10. '".mysql_real_escape_string($_POST['Groepa'])."',
  11. '".mysql_real_escape_string($_POST['Groepb'])."',
  12. '".mysql_real_escape_string($_POST['Groepc'])."')
  13. ";
  14. if (!mysql_query($sql,$con)) {
  15. die('<strong>Er is een fout opgetreden</strong><br />Error: ' . mysql_error());
  16. }
  17. header('Location: admin_schema_new.php');
  18. exit();
  19. }
  20. }
Offline axelneve - 28/03/2010 20:03
Avatar van axelneve Nieuw lid dan krijg ik weer een totaal lege pagina..
Offline Jelmerholland - 28/03/2010 20:09
Avatar van Jelmerholland PHP beginner Dan is er iets mis met jouw host. Kan niet anders, want dit zout toch echt gewoon moeten werken.

En laat die header is verwijzen naar een andere pagina? google oid? Misschien dat ie jouw link niet eens kent.

En ik heb mij laten vertellen dat je NOOIT een mysql_error() moet laten zien, zo geef je hackers informatie over jouw db, en dat is wel het laatste wat je wilt 
Offline nick5556 - 28/03/2010 20:14
Avatar van nick5556 PHP beginner @JelmerHollan

FOUT: Als jou code niet werkt, want bij deze het geval is, kan je hiermee uitzoeken of je query wel klopt. In je query's zitten heel vaak kleine foutjes.

GOED: Je hebt gelijk, met een mysql_error() kunnen hackers makkelijker een injection doen.

Ik weet zo even niet wat er aan de hand is, ik ben momenteel bezig met mijn cms dus misschien dat ik er morgen nog even naar kijk.
Offline axelneve - 28/03/2010 20:14
Avatar van axelneve Nieuw lid Ik vind het ook zeer vreemd dat het niet werkt, wat het formulier was een excate kopie van een wel werkend formulier, waarin alleen de tabelnaam en de waarden waren veranderd. maar daarna werkte het niet meer.

Verder heb ik het ook nog de header geprobeerd met google, maar ook dit resulteert ook weer in een blanco pagina. ik denk dat het tijd wordt voor een nieuwe host.
Offline nick5556 - 28/03/2010 20:18
Avatar van nick5556 PHP beginner Heb je een geüpload voorbeeld van je pagina, en kan je uberhaupt je form zien, of gaat er daarvoor al wat mis?
Offline Jelmerholland - 28/03/2010 20:21 (laatste wijziging 28/03/2010 20:21)
Avatar van Jelmerholland PHP beginner Wat ik nog wel is doe in een script is na 'moeilijke' onderdelen een echo plaatsen

Bijv:
echo "pass 1";
echo "pass 2";

Zo kom je er heel gemakkelijk achter waar jou script vast loopt ;)

Ps. Dit is alleen voor het testen, niet vergeten dit weer weg te halen als je je script definitief upload!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.289s