Jonas Skrevet 27. februar 2008 Del Skrevet 27. februar 2008 Hei, Har et lite problem med en mysql-editor jeg lager. Jeg sender queries til php med javascript. Dette ser ut til å fungere fint, men mysql_query() gir allikevel problemer. Har samtidig satt skriptet til å printe ut hvert query som blir sendt og det rare er at hvis jeg kopierer det og limer inn i PHPMyAdmin, så funker det fint. =/ DELETE FROM `Payments` WHERE `Username` = "Fatboy" AND `Time` = "1201098889" AND `Comment` = "Ingen kommentar." AND `Amount` = "150" mysql_error() gir meg følgende feilmelding. 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 '\"Fatboy\" AND `Time` = \"1201098889\" AND `Comment` = \"Ingen kommentar.\" AND ' at line 1 Noen som ser noen åpenbare feil? - Jonas Lenke til kommentar
Ekko Skrevet 27. februar 2008 Del Skrevet 27. februar 2008 (endret) Er det nødvendig å skrive databasenavnet Payments med fnutter? Samme med Usernam, Time, Comment og ammount. I tillegg trodde jeg ikke det var nødvndig med "" rundt tall. Prøv å droppe "" rundt tallene. Er ikke sikker på at det er "feil", men tror ihvertfall ikke det er nødvendig. En annen ting som kan være greit er at det siste du gjør før du kjører sql-setningen er å printe den. Da få man se akkurat hvordan det som blir kjørt ser ut. Endret 27. februar 2008 av Ekko Lenke til kommentar
Jonas Skrevet 27. februar 2008 Forfatter Del Skrevet 27. februar 2008 En annen ting som kan være greit er at det siste du gjør før du kjører sql-setningen er å printe den. Da få man se akkurat hvordan det som blir kjørt ser ut. Akkurat det jeg gjør. Skal prøve litt diverse syntakser. Lenke til kommentar
Manfred Skrevet 27. februar 2008 Del Skrevet 27. februar 2008 ikke fnutter rundt tall, og enkle fnutter ('), ikke doble (") rundt strenger. Lenke til kommentar
Jonas Skrevet 28. februar 2008 Forfatter Del Skrevet 28. februar 2008 (endret) Har byttet til enkle fnutter og fjernet dem rundt tall, men allikevel funker det ikke. DELETE FROM `Payments` WHERE `Username` = 'Serenity' AND `Time` = 1201350611 AND `Comment` = 'Ingen kommentar.' AND `Amount` = 150 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 '\'Serenity\' AND `Time` = 1201350611 AND `Comment` = \'Ingen kommentar. Syntax-messig kan jeg ikke tenke noe mer jeg kan endre på, og det funker jo som sagt om jeg limer spørringen inn i PHPMyAdmin. Gjør jeg noe feil i kjøring av spørringen? Klarer å kjøre enklere spørringer, slik som select * from `Payments`. <?php require_once ( 'config.php' ); mysql_connect ( $mysqladresse, $mysqlusername, $mysqlpassword ); mysql_select_db ( $_GET['database'] ); if ( get_magic_quotes_gpc () ) $query = stripslashes ( $_GET['query'] ); else $query = $_GET['query']; if ( mysql_query ( $_GET['query'] ) ) { echo '<p>Following query was successfully executed!</p>'; echo '<p class="mysqlquery bold">' . $query . '</p>'; } else { echo '<p>Following query was <span class="bold">NOT</span> successfully executed. An error occurred!</p>'; echo '<p>The editor is <span class="bold">NOT</span> synchronized with the actuall database, you should stop editing immediately and reload the page.</p>'; echo '<p class="mysqlquery bold">' . $query . '</p>'; echo '<p class="mysqlquery bold">' . mysql_error () . '</p>'; } mysql_close (); ?> Endret 28. februar 2008 av Jonas Lenke til kommentar
G2Petter Skrevet 28. februar 2008 Del Skrevet 28. februar 2008 (endret) Fjern fnuttene rundt tabell- og kolonnenavnene dine også, og prøv da. Edit: er det lurt å ta i mot databasespørringer med GET? Hva hvis jeg skriver ?query=DELETE FROM users (gitt at du har en tabell som heter users. Det er bare å prøve seg frem med tabellnavn til alt er tomt.) Endret 28. februar 2008 av G2Petter Lenke til kommentar
Jonas Skrevet 28. februar 2008 Forfatter Del Skrevet 28. februar 2008 Takk, skal prøve det! Og nei, kjøre spørringer direkte fra GET er naturligvis ikke spesielt fint, men for øyeblikket har kun jeg tilgang og har derfor bare ikke tatt meg bryet til å legge til mysql_escape_string(). Kommer vel etterhvert. Lenke til kommentar
G2Petter Skrevet 28. februar 2008 Del Skrevet 28. februar 2008 mysql_real_escape_string() vil vel ikke hjelpe deg når GET-parameteret er ment å inneholde en spørring? Den er vel beregnet for at folk ikke skal kunne putte SQL-injections inn i variabler som bare skal inneholde f.eks. tekst. Stopp meg hvis jeg er på feil jorde nå, men så vidt jeg kan se vil mysql_real_escape_string() enten ikke gjøre noe, eller gjøre at du ikke får kjørt noen av databasespørringene som kommer gjennom GET i det hele tatt. Lenke til kommentar
Jonas Skrevet 28. februar 2008 Forfatter Del Skrevet 28. februar 2008 (endret) Helt korrekt, er nødt til å lage en enkel parser, som tar alt etter er-lik-tegn o.l. Endret 28. februar 2008 av Jonas Lenke til kommentar
blackbrrd Skrevet 28. februar 2008 Del Skrevet 28. februar 2008 Evt så bruker man prepared statements, så slipper man hele problemet med SQL-injection. Lenke til kommentar
Jonas Skrevet 29. februar 2008 Forfatter Del Skrevet 29. februar 2008 Uff, spørringen er nå som følger, men allikevel funker det ikke. Og som vanlig funker det i PHPMyAdmin. Alt skulle kanskje indikere at noe er galt med scriptet som kjører spørringen, men jeg har prøvd andre, enklere spørringer, som ikke inneholder variabler og det funker perfekt! DELETE FROM Payments WHERE Username = "Serenity" AND Time = 1201350611 AND Comment = "Ingen kommentar." AND Amount = 150 Lenke til kommentar
G2Petter Skrevet 29. februar 2008 Del Skrevet 29. februar 2008 (endret) Får du fremdels den samme feilmeldingen? Hva skjer hvis du skriver spørringen rett inn i PHP-scriptet? mysql_query(' DELETE FROM Payments WHERE Username = "Serenity" AND Time = 1201350611 AND Comment = "Ingen kommentar." AND Amount = 150 '); Endret 29. februar 2008 av G2Petter Lenke til kommentar
Jonas Skrevet 29. februar 2008 Forfatter Del Skrevet 29. februar 2008 (endret) Å huff, for en flau feil. Det funket, G2Petter, og jeg fant nettopp ut hvorfor. Feilen lå i koden. Jeg stripslashet innholdet i $_GET, men jeg brukte ikke den faktiske variabelen jeg satt. Endret følgende kode og vips - så funket alt. if ( get_magic_quotes_gpc () ) $query = stripslashes ( $_GET['query'] ); else $query = $_GET['query']; if ( mysql_query ( $_GET['query'] ) ) { if ( get_magic_quotes_gpc () ) $query = stripslashes ( $_GET['query'] ); else $query = $_GET['query']; if ( mysql_query ( $query ) ) { Takker for all hjelp! Endret 29. februar 2008 av Jonas Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå