Gå til innhold

Finne spesifikk variabel (WHERE)


Anbefalte innlegg

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 av Jofred
Lenke til kommentar
Videoannonse
Annonse

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

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 av Jofred
Lenke til kommentar

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 av Ekko
Lenke til kommentar

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 :p

Lenke til kommentar

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 av Crowly
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...