Avatar billede kthiesen Novice
18. oktober 2010 - 13:13 Der er 10 kommentarer og
1 løsning

select query vil ikke acceptere variabel

Hej

Jeg er ved at lave en formular, hvor data hentes fra en MySQL database ud fra bruger input.

Her er koden:

/* Henter data fra databasen om crew ud fra bruger input*/
    $crew_soefartsbog    = "";
    $crew_soefartsbog    = explode(" ", $_POST[crewmember]);
    $crew_soefartsbog    = mysql_real_escape_string("SMB ".$crew_soefartsbog[8]);

// print "crew_soefartsbog $crew_soefartsbog<p>";

    $result = mysql_query('SELECT crew_fornavn, crew_efternavn FROM crew WHERE crew_soefartsbog = "$crew_soefartsbog"') or die(mysql_error());

    while ($row = mysql_fetch_array($result))
        {
        $captain = " $row[0] $row[1]";
        }

Jeg ved, at min variabel $crew_soefartsbog indeholder de korrekte data, fordi jeg har lavet en print linje, der viser korrekt output. Når jeg indsætter data manuelt i min sql query:

    $result = mysql_query('SELECT crew_fornavn, crew_efternavn FROM crew WHERE crew_soefartsbog = "SMB 123456"') or die(mysql_error());

så virker det som det skal og jeg får forventet output..

Hvad pokker er der galt?
Avatar billede kthiesen Novice
18. oktober 2010 - 13:59 #1
Jeg kan tilføje, at jeg nu ved, at det er formateringen af strengen det er galt med, idet jeg har sat følgende linjer ind for test:

  $crew_soefartsbog    = "SMB 123456";

// print "crew_soefartsbog $crew_soefartsbog<p>";

  $query = "SELECT * FROM crew WHERE crew_soefartsbog = '$crew_soefartsbog'";

$result = mysql_query($query) or die(mysql_error());

Med ovenstående får jeg korrekt output...
Avatar billede arne_v Ekspert
18. oktober 2010 - 16:09 #2
$ variable expandes ikke inden i '' kun inden i ""
Avatar billede kthiesen Novice
18. oktober 2010 - 20:30 #3
Hej Arne

Skal det forstås sådan at du mener jeg skal bruge dobbelt brackets?

Det sjove er, som du kan se herover, at det virker når variablen er defineret: $crew_soefartsbog = "SMB 123456"; og $query er i dobbelt brackets, og variablen er i single brackets, så kommer output som det skal.

Hvis jeg derimod har defineret variablen som et resultat af bruger input virker det ikke.

Jeg har kodet det sådan, at jeg kan se begge variabler med print, og begge har det korrekte output.

Men, jeg kan ikke lige greje hvorfor output der er ens ikke virker.

Har du en reference, hvor jeg kan læse mere, for jeg har søgt i både php og mysql manualerne...
Avatar billede arne_v Ekspert
18. oktober 2010 - 20:38 #4
$query = "SELECT * FROM crew WHERE crew_soefartsbog = '$crew_soefartsbog'";

virker fordi strengen er i ""

$result = mysql_query('SELECT crew_fornavn, crew_efternavn FROM crew WHERE crew_soefartsbog = "$crew_soefartsbog"') or die(mysql_error());

virker ikke fordi strengen er i ''
Avatar billede arne_v Ekspert
18. oktober 2010 - 20:38 #5
strengen = hele SQL saetningen ikke den streng vaerdi du tester paa
Avatar billede kthiesen Novice
18. oktober 2010 - 20:40 #6
Her er de konstellationer der ikke virker med variablen som dannes af bruger input:

$query = 'SELECT * FROM crew WHERE crew_soefartsbog = "$crew_soefartsbog"';

$query = "SELECT * FROM crew WHERE crew_soefartsbog = '$crew_soefartsbog'";

Denne virker ikke når jeg sætter variablen manualt:

$query = 'SELECT * FROM crew WHERE crew_soefartsbog = "$crew_soefartsbog"';

Denne virker når jeg sætter variablen manualt:

$query = "SELECT * FROM crew WHERE crew_soefartsbog = '$crew_soefartsbog'";
Avatar billede kthiesen Novice
18. oktober 2010 - 20:41 #7
Hej Arne

Så er vi enige.

Som jeg ser det er mit problem at formatet af variablen er forkert...
Avatar billede arne_v Ekspert
18. oktober 2010 - 20:58 #8
Altsaa din kode i spoergsmaalet virker ikke fordi du bruger '' omkring din SQL streng, saa er ikke sker nogen variabel substitution.

Det kommer ikke til at virke forend du fixer det.

I spoergsmaalet haevder du ogsaa at variablen indeholder de korrekte data.

Hvis det passer saa er formatet rigtigt.
Avatar billede kthiesen Novice
18. oktober 2010 - 21:39 #9
Det er rettet, nu har jeg så lige lavet denne test:

if ($crew_soefartsbog1 == $crew_soefartsbog2)
    { print "de to er ens";}
else
    { print "de to er IKKE ens";}

Der resulterer i at de to ikke er ens....
Sjovt når jeg laver en print efter de to sættes, så har de nøjagtigt samme udseende på skærmen.
Er der en måde jeg kan se formatet af en streng?
Avatar billede kthiesen Novice
18. oktober 2010 - 23:21 #10
Løst, det var den del af variablen, der blev hentet fra $_POST[crewmember] der havde forkert format.
Det blev rettet med denne linje:

$crew_soefartsbog    =    intval($crew_soefartsbog[8]);

Der laver en streng om til en integer.
se mere http://dk2.php.net/manual/en/function.intval.php i manualen.

Arne, send et svar, dine input var medvirkende til løsningen, så tak!
Avatar billede arne_v Ekspert
19. oktober 2010 - 00:09 #11
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester