Jofred Skrevet 18. juni 2013 Del Skrevet 18. juni 2013 (endret) Har ikke fått lest nok om PHP, trenger hjelp med følgende problem til en app jeg lager. // Check if its your turn if ( $_GET["checkturn"] ) { $getday = $_GET["day"]; $getid = $_GET["username"]; $getenemy = $_GET["enemy"]; $user_md5 = md5($getid.$secret_key); // Check if the submitted MD5 is different from the server generated MD5 if ( $user_md5 != $_GET["code"] ) { die('Failed'); } //Problemet kommer her, da linjen die ($last_day); ikke gir meg noen tilbakemelding. Hva kommer det av? $sql="SELECT MAX(Day) FROM $tname WHERE (UserID = 'Jofred') AND (Enemy = 'Manfred') "; $result=mysql_query($sql) or die(mysql_error()); $last_day=mysql_result($result,0,last_day) or die(mysql_error()); die ($last_day); } Jeg lurer også på hvordan jeg kan erstatte $sql="SELECT MAX(Day) FROM $tname WHERE (UserID = 'Jofred') AND (Enemy = 'Manfred') "; til $sql="SELECT MAX(Day) FROM $tname WHERE (UserID = $getid ) AND (Enemy = $getenemy) "; Dersom jeg bruker den nederste linjen får jeg beskjed om at kolonne 'Jofred' ikke eksisterer ( Jofred er informasjonen jeg sender i "username" ) Endret 18. juni 2013 av Jofred Lenke til kommentar
Ekko Skrevet 18. juni 2013 Del Skrevet 18. juni 2013 Hva kommer ut om du gjør slik? // Check if its your turn if ( $_GET["checkturn"] ) { $getday = $_GET["day"]; $getid = $_GET["username"]; $getenemy = $_GET["enemy"]; $user_md5 = md5($getid.$secret_key); // Check if the submitted MD5 is different from the server generated MD5 if ( $user_md5 != $_GET["code"] ) { die('Failed'); } //Problemet kommer her, da linjen die ($last_day); ikke gir meg noen tilbakemelding. Hva kommer det av? $sql="SELECT MAX(Day) FROM $tname WHERE (UserID = 'Jofred') AND (Enemy = 'Manfred') "; print_r($sql); $result=mysql_query($sql) or die(mysql_error()); $last_day=mysql_result($result,0,last_day) or die(mysql_error()); die ($last_day); } Jeg antar at du må gjøre slik $sql="SELECT MAX(Day) FROM $tname WHERE (UserID = '$getid' ) AND (Enemy = '$getenemy') "; Lenke til kommentar
Jofred Skrevet 18. juni 2013 Forfatter Del Skrevet 18. juni 2013 (endret) Hei, takk for tilbakemelding. Jeg får selve select actionen: SELECT MAX(Day) FROM Roguelike_Table WHERE (UserID = 'Jofred') AND (Enemy = 'Manfred') Det jeg håper på er å få ut et tall edit: Takk, du antok rett anngående '$getid' Oppdatering: // Check if its your turn if ( $_GET["checkturn"] ) { $getday = $_GET["day"]; $getid = $_GET["username"]; $getenemy = $_GET["enemy"]; $user_md5 = md5($getid.$secret_key); // Check if the submitted MD5 is different from the server generated MD5 if ( $user_md5 != $_GET["code"] ) { die('Failed'); } $sql="SELECT MAX(Day) FROM $tname WHERE (UserID = '$getid' ) AND (Enemy = '$getenemy') "; $result=mysql_query($sql) or die(mysql_error()); print_r($sql); //Print gir utslag her $last_day=mysql_result($result,0,last_day) or die(mysql_error()); // Denne linjen er problemet print_r($sql); //Print gir ikke noe utslag her //die ($last_day); } Jeg skjønner ikke hva problemet med den linjen er. Jeg må ha den for å lese ut resultatet? Endret 18. juni 2013 av Jofred Lenke til kommentar
Ekko Skrevet 18. juni 2013 Del Skrevet 18. juni 2013 (endret) Jeg skjønner ikke helt hva den linjen gjør heller, men regner med at $last_day=mysql_result($result,0,last_day) skal være $last_day=mysql_result($result,0,$last_day) Uansett. Er du sikker på at $last_day er initiallisert før du bruker den? Grunnen til at siste printen ikke gir utslag er at det krasjer før du kommer dit (die). Gir ikke die noen feilmelding? EDIT: Legg inn "print $last_day" før $last_day=mysql_result($result,0,$last_day) Endret 18. juni 2013 av Ekko Lenke til kommentar
Jofred Skrevet 18. juni 2013 Forfatter Del Skrevet 18. juni 2013 Nei jeg fikk ingen feilmelding av die, som var meget pussig Men, du har selvsagt helt rett anngående initialiseringen. Jeg endret nå til dette, og fikk dermed output fra tabelet. $sql="SELECT MAX(Day) AS last_day FROM $tname WHERE (UserID = '$getid' ) AND (Enemy = '$getenemy') "; Takk for hjelpa. Jeg strevde mye lenger med dette enn jeg burde ha gjort Lenke til kommentar
Crowly Skrevet 18. juni 2013 Del Skrevet 18. juni 2013 (endret) Par små ting: Sql'en din er vid åpen for sql injections, ta en titt på f.eks. PDO prepared statements eller Mysqli prepared statements Det er ikke nødvendig å ha parenteser rundt det du sjekker i WHERE, WHERE UserID = '$getid' AND Enemy = '$getenemy' holder lenge i forhold til hva du skal gjøre oppslag på Mysql er utdatert, gå over til PDO eller Mysqli For å være helt sikker på at php vet hvor en variabel begynner og slutter når du skriver de rett i en streng, bruk krøll parentes rundt: $sql="SELECT MAX(Day) AS last_day FROM {$tname} WHERE UserID = '{$getid}' AND Enemy = '{$getenemy}'"; alternativt: $sql="SELECT MAX(Day) AS last_day FROM " . $tname . " WHERE UserID = '" . $getid . "' AND Enemy = '" . $getenemy . "'"; // eller $sql=sprintf("SELECT MAX(Day) AS last_day FROM %s WHERE UserID = '%s' AND Enemy = '%s'", $tname, $getid, $getenemy ); Endret 18. juni 2013 av Crowly Lenke til kommentar
Terrasque Skrevet 18. juni 2013 Del Skrevet 18. juni 2013 http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php - just mentioning 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å