login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Syntaxerror

Offline Frederic - 29/04/2005 20:58
Avatar van FredericPHP ver gevorderde Hoe komt het dat dit script:
  1. <?php
  2. if (IsSet($_GET['origineel']) && is_numeric($_GET['origineel']))
  3. {
  4. $id = $_GET['origineel'];
  5. $sql = mysql_query("SELECT (id, van) FROM `leden_berichten` WHERE id = '".$id."'") or die(mysql_error());
  6. $rij = mysql_fetch_assoc($sql);
  7. $van = ($rij['van']);
  8. $sql_naam = mysql_query("SELECT (id, gebruikersnaam) FROM `leden` WHERE id = $van") or die(mysql_error());
  9. $rij_naam = mysql_fetch_assoc($sql_naam);
  10. $van_naam = ($rij['gebruikersnaam']);
  11. echo $van_naam;
  12. echo $van;
  13. }
  14. else
  15. {
  16. include "gebruikers/berichten/ontvanger.php";
  17. } ?>

deze error geeft:
Citaat:
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 ' van) FROM `leden_berichten` WHERE id = '5'' at line 1

Ik heb tutorials gevolgd van hier op SiMa, en geprobeerd met en zonder accenten...

13 antwoorden

Gesponsorde links
Offline ranco - 29/04/2005 21:03
Avatar van ranco PHP gevorderde $sql = mysql_query("SELECT id, van FROM `leden_berichten` WHERE id = '".$id."'") or die(mysql_error());

Dit bovenstaande is veranderd, de veldnamen hoeven niet tussen haken
Offline CelestialCelebi - 29/04/2005 21:04
Avatar van CelestialCelebi PHP gevorderde 3 fouten in 1 regel.

- Namen van kolommen mogen niet tussen backticks, dat is geen geldig SQL.
- Integers mogen (OOK in SQL) NIET tussen quotes.
- Geen or die gebruiken.
Offline ranco - 29/04/2005 21:06
Avatar van ranco PHP gevorderde En waarom zou je geen 'or die' mogen gebruiken?
'k zie niet in wat daar fout aan is?
Offline webstab - 29/04/2005 21:08
Avatar van webstab PHP ver gevorderde Wanneer er dan een fout is,valt meestal heel de layout in het water.
Offline CelestialCelebi - 29/04/2005 21:09 (laatste wijziging 29/04/2005 21:10)
Avatar van CelestialCelebi PHP gevorderde "En waarom zou je geen 'or die' mogen gebruiken?
'k zie niet in wat daar fout aan is?"
Zoek eens in de forums, ik heb al meerdere malen (tevergeefs, lijkt het) uitgelegd dat het niet goed is om or die te gebruiken.


@Webstab: Ook daarom ja (Sitemasters is hier helaas zelf een voorbeeld van ), maar niet alleen daarom. Zoekt en gij zult vinden! 
Offline Fenrir - 29/04/2005 21:14
Avatar van Fenrir PHP expert Je kunt ipv. or die(), or error() gebruiken, deze functie maak je dan zelf, met mooie errorhandling.
Offline ranco - 29/04/2005 21:15
Avatar van ranco PHP gevorderde Dat kan dan misschien zo wel zijn, maar als de foutieve query van groot belang is in een script, en je laat deze gewoon doorlopen naar de foutieve query kan dat grote gevolgen hebben.

Je krijgt dan een instelling van:
Ow maakt niet uit als er iets mis gaat.

Stel, je maakt een UPDATE-gebruikersprofielscript aan, maar de INSERT-query werkt niet goed. Dan heb je wel een boze gebruiker omdat zijn gegevens niet zijn gewijzigd terwijl hij helemaal niet doorhad dat er iets fout was gegaan, en dat alleen maar omdat je layout anders niet correct is.

Als dat je probleem is voer je je query pas uit naar de layout tags en het probleem is opgelost.

De 'or die' kan zeer belangrijk zijn:!:

En in meerdere post over meerdere topics hoor ik CelestialCelebi alleen maar horen zeggen "haal de 'or die' weg en het werkt". (Zie 1 van de voorgaande topics).

Sorry hoor, maar daar ligt het nooit aan als een script niet werkt.

Maargoed, misschien dat CelestialCelebi zelf een andere reden heeft om 'or die' niet te gebruiken...
Offline CelestialCelebi - 29/04/2005 21:18
Avatar van CelestialCelebi PHP gevorderde Dat zou inderdaad gaan, maar dan zal nog de code erna worden uitgevoerd (waaronder het fetchen van die query, mysql_num_rows(), etc.), dus dat zou eigenlijk nog niet goed zijn. Of je zou een or die in error() moeten doen, maar dat is eigenlijk net zo fout. 

Dit zou eventueel wel kunnen:
  1. <?php
  2. $sQuery = ".......";
  3. $rQuery = mysql_query($sQuery, $rDatabase) or error($sQuery, mysql_error(), mysql_errno(), __LINE__, __FILE__);
  4. if($rQuery !== false)
  5. {
  6. // ga verder met het script
  7. }
  8. ?>
Offline CelestialCelebi - 29/04/2005 21:23
Avatar van CelestialCelebi PHP gevorderde
Citaat:
Dat kan dan misschien zo wel zijn, maar als de foutieve query van groot belang is in een script, en je laat deze gewoon doorlopen naar de foutieve query kan dat grote gevolgen hebben.
> Dat is inderdaad ook zo. En hij loopt niet door naar de foutieve query.

Je krijgt dan een instelling van:
Ow maakt niet uit als er iets mis gaat.:!:
> Dat zeg ik niet en dat is ook helemaal niet mijn instelling.

Stel, je maakt een UPDATE-gebruikersprofielscript aan, maar de INSERT-query werkt niet goed. Dan heb je wel een boze gebruiker omdat zijn gegevens niet zijn gewijzigd terwijl hij helemaal niet doorhad dat er iets fout was gegaan, en dat alleen maar omdat je layout anders niet correct is.
> Een UPDATE, maar de INSERT werkt niet goed? Dan is je datamodel niet goed vrees ik....

Als dat je probleem is voer je je query pas uit naar de layout tags en het probleem is opgelost.
> Er is geen probleem als je het op mijn manier doet, want op mijn manier wordt de andere query pas uitgevoerd als de vorige is gelukt, anders niet. En ja, dat is anders dan or die.

De 'or die' kan zeer belangrijk zijn
> Ja, maar niet voor query's.

En in meerdere post over meerdere topics hoor ik CelestialCelebi alleen maar horen zeggen "haal de 'or die' weg en het werkt". (Zie 1 van de voorgaande topics).
> Dat klopt.

Sorry hoor, maar daar ligt het nooit aan als een script niet werkt.
> Ik heb niet gezegd dat het dan werkt (dat maak jij er van), ik zeg alleen dat het beter is om het niet te gebruiken (AKA: Je geeft Windows de opdracht een bestand te verwijderen, krijgt zo'n venstertje met "OK", verwijdert het bestand ondertussen via een andere weg en ziet een half uur later dat venstertje nog en denkt "Oja, die moest ik verwijderen", je klikt op OK en Windows kan het bestand niet meer vinden... OR DIE, BZZZZZZZ, PC gaat uit).

Maargoed, misschien dat CelestialCelebi zelf een andere reden heeft om 'or die' niet te gebruiken...
> Ik heb daar een reden voor ja.
Offline Frederic - 29/04/2005 21:25
Avatar van Frederic PHP ver gevorderde Ja ok, dat werkt nu, deze code:

  1. <?php
  2. if (IsSet($_GET['origineel']) && is_numeric($_GET['origineel']))
  3. {
  4. $id = $_GET['origineel'];
  5. $sql = mysql_query("SELECT id, van FROM leden_berichten WHERE id = ".$id."");
  6. $rij = mysql_fetch_assoc($sql);
  7. $van = ($rij['van']);
  8. $sql_naam = mysql_query("SELECT id, gebruikersnaam FROM leden WHERE id = ".$van."");
  9. $rij_naam = mysql_fetch_assoc($sql_naam);
  10. $van_naam = ($rij_naam['gebruikersnaam']);
  11. echo $van_naam;
  12. }
  13. else
  14. {
  15. include "gebruikers/berichten/ontvanger.php";
  16. } ?>

Maar hoe kan ik controleren ofdat het bericht wel degelijk van de gebruiker is?
Ik dacht aan zoiets maar dat blijkt niet te werken:
  1. $test = mysql_query("SELECT * FROM leden_berichten WHERE naar = ".$_SESSION['gid']."");
  2. if(mysql_num_rows($test) != 0) {

Moet het dan normaal niet zijn dat enkel als de waarde in 'naar' hetzelfde is als de id van de gebruiker?
Offline CelestialCelebi - 29/04/2005 21:30
Avatar van CelestialCelebi PHP gevorderde Wat werkt er dan niet?

[sarcasme]Er staat geen or die in, dus het moet werken. [/sarcasme]
Offline Frederic - 29/04/2005 21:31 (laatste wijziging 29/04/2005 21:57)
Avatar van Frederic PHP ver gevorderde Jah ik had zoiets gemaakt:
  1. <?php
  2. if (IsSet($_GET['origineel']) && is_numeric($_GET['origineel']))
  3. {
  4. $id = $_GET['origineel'];
  5. $sql = mysql_query("SELECT id, van FROM leden_berichten WHERE id = ".$id." && naar = ".$_SESSION['gid']."");
  6. $rij = mysql_fetch_assoc($sql);
  7. $van = ($rij['van']);
  8. $sql_naam = mysql_query("SELECT id, gebruikersnaam FROM leden WHERE id = ".$van."");
  9. $rij_naam = mysql_fetch_assoc($sql_naam);
  10. $van_naam = ($rij_naam['gebruikersnaam']);
  11. echo $van_naam;
  12. }
  13. else
  14. {
  15. include "gebruikers/berichten/ontvanger.php";
  16. } ?>

maar iedere keer als je een bericht probeert op te roepen dat niet van jou is krijg je een vieze error.. Hoe kan ik die wegwerken?
//Edit: kan iemand me zeggen hoe dat met or echo werkt (ipv or die)
Offline CelestialCelebi - 29/04/2005 22:01 (laatste wijziging 29/04/2005 22:06)
Avatar van CelestialCelebi PHP gevorderde Misschien dat meneer Ranco hier wat van kan leren. Ik heb nu dus een voorbeeld gevonden waarbij de ene query afhankelijk is van de andere.
Eigenlijk zou dit beter met een subquery of JOIN werken, maar goed:

  1. <?php
  2. // stap 1, het ID valideren
  3. if(!isset($_GET['origineel']))
  4. {
  5. // ga huilen, origineel bestaat niet (da's onorigineel)
  6. }
  7. else
  8. {
  9. $_GET['origineel'] = intval($_GET['origineel']);
  10. $sSQLGetMessage = "SELECT id, van, bericht FROM leden_berichten WHERE id = " . $_GET['origineel'] . " AND naar = " . $_SESSION['gid'];
  11. // stap 2, de query draaien om het bericht op te halen
  12. if(!$rSQLGetMessage = mysql_query($sSQLGetMessage, $rDatabase)) // in $rDatabase zit het resultaat van mysql_connect()
  13. {
  14. // mislukt, foutmelding
  15. echo 'Helaas.. De query om het bericht op te halen kon niet worden uitgevoerd.... MySQL gaf de volgende melding: ' . htmlspecialchars(mysql_error()); // hier zou je ook een functie van kunnen maken
  16. }
  17. else
  18. {
  19. // het is gelukt, HOERA
  20. // stap 3, kijken of we iets terug kregen (of het bericht bestaat)
  21. if(mysql_num_rows($rSQLGetMessage) == 0)
  22. {
  23. // bericht bestaat niet
  24. echo 'Dit bericht bestaat niet, helaas..';
  25. }
  26. else
  27. {
  28. $aSQLGetMessage = mysql_fetch_assoc($rSQLGetMessage);
  29. $sSQLGetMember = "SELECT id, gebruikersnaam FROM leden WHERE id = " . $aSQLGetMessage['id'];
  30. // stap 4, het lid dat het bericht stuurde ophalen
  31. if(!$rSQLGetMember = mysql_query($sSQLGetMember, $rDatabase)) // in $rDatabase zit het resultaat van mysql_connect()
  32. {
  33. // foutmelding, zie hierboven
  34. }
  35. else
  36. {
  37. // stap 5, kijken of het lid bestond
  38. if(mysql_num_rows($rSQLGetMember) == 0)
  39. {
  40. // lid bestaat niet
  41. }
  42. else
  43. {
  44. // stap 6, het privebericht laten zien ofzo?
  45. $aSQLGetMember = mysql_fetch_assoc($rSQLGetMember);
  46. // zet hier het prive bericht neer
  47. echo htmlspecialchars($aSQLGetMember['gebruikersnaam']) . ' stuurde je een bericht: ' . htmlspecialchars($aSQLGetMessage['bericht']);
  48. }
  49. }
  50. }
  51. }
  52. }
  53. ?>


Pff, voor de uitlijning mag je zelf zorgen, die klopt nl. niet meer... Lang leve een goede editor ipv dit tekstveld! 


EDIT: Iets gefixt. :/ En toch maar uitgelijnd, lang leve Crimson Editor met SHIFT+TAB 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.226s