Avatar billede mikkelsommer Nybegynder
23. april 2013 - 07:34 Der er 10 kommentarer og
1 løsning

Udtræk fra database fra en querystring

Hej

Jeg sidder lidt fast i mit udtræk af database fra en querystring.
Er nybegynder i PHP, håber at I kan se hvor jeg har lavet en fejl.

------------------------------------------------
<html>
<head>
</head>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8" />

<body>
<?php

$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dberror1 = "Kunne ikke forbinde til databasen";

$conn = mysql_connect($dbhost,$dbuser,$dbpass) or die ($dberror1);

$select_db = mysql_select_db('mfcd') or die ("Kunne ikke hente data");

$querystring = $_SERVER['QUERY_STRING'];

$sql = "SELECT * FROM mfcd_spillere WHERE Player_Name='$querystring'";

$fetch = mysql_query($sql);

while($row = mysql_fetch_assoc($fetch)){
    echo $row ['Player_Name']."<br>";
    echo $row ['Player_Birthday'];
}

?>


<?php
mysql_close($conn);
?>

<input style="width: 100%" type="button" onclick="location.href='holdet.php'" value="Tilbage"/>
</body>
</html>
23. april 2013 - 08:05 #1
Du fortæller ikke hvor du sidder fast, hvad det sker (såsom fejlmeldinger) eller hvad du forventer skal ske hvor der så sker noget andet eller ingenting.

Hvis problemet ligger i at du ikke får noget trukket ud af databasen, så kunne du få mysql til at fortælle hvad der går galt ved midlertidigt at forandre

$sql = "SELECT * FROM mfcd_spillere WHERE Player_Name='$querystring'";

til

$sql = "SELECT * FROM mfcd_spillere WHERE Player_Name='$querystring'" or die(mysql_error());

Det kan være at queryen fejler fordi der af en eller anden grund ikke står noget i $_SERVER['QUERY_STRING'] eller ikke står det du forventer.  Det kan du teste ved midlertidigt at udvide koden således:

$querystring = $_SERVER['QUERY_STRING'];
echo $querystring;

Prøv dig frem, og kom så tilbage med flere oplysninger om hvor det går galt, hvad meldinger du får, hvad resultatet er af din echo, o.s.v.
Avatar billede mikkelsommer Nybegynder
23. april 2013 - 08:34 #2
Jeg havde i forvejen sikret mig at der var noget i $querystring og der er resultat.

Når jeg tilføjer die i sql sætningen får jeg dette :
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in "fil sti og navn" on line 25

Jeg får resultater ud, helt ned til $fetch. Så får jeg bare et helt blankt billede.
23. april 2013 - 10:04 #3
Den fejlmelding er helt typisk for situations hvor du ikke får noget resultat fra dit dataudtræk.  Hvis dit dataudtræk giver resultat, så returnerer mysql_query() dette resultat som en 'resource'.  Hvis derimod dataudtrækket resulterer i en 'error' returnerer mysql_query FEJL, hvilket er en boolean.  Så der er for mig ingen tvivl om, at det at du får et blankt billed skyldes, at din mysql query ikke giver noget resultat.

Du vælger, tror jeg, ikke at prøve at echoe $_SERVER['QUERY_STRING'], og det er jo din sag.  Men så kommer vi nok ikke videre.  Alternativt kunne du prøve at echoe $_SERVER['QUERY_STRING'], og så gå ind i mysql og prøve at køre din query og se hvilket resultat mysql giver.  Altså hvis for eksempel $_SERVER['QUERY_STRING'] echoer 'hansemand' så gå ind i mysql og kør queryen
SELECT * FROM mfcd_spillere WHERE Player_Name='hansemand'
Avatar billede mikkelsommer Nybegynder
23. april 2013 - 10:44 #4
Jeg har prøvet ,allerede inden jeg skrev første indlæg, at trække querystring ud med echo $_SERVER['QUERY_STRING'] og resultatet kom fint ud. = den skrev alt der var efter ?

Mit første forsøg med sql så sådan ud:
$sql = "SELECT * FROM mfcd_spillere WHERE Player_Name='$_SERVER['CUERY_STRING']')";

Har tjekket min phpmyadmin igennem og kan ikke se der skulle være nogen fejl der...
Avatar billede michael_stim Ekspert
23. april 2013 - 10:55 #5
Er du ikke sikker på det er $_GET du skal have fat i?
Avatar billede michael_stim Ekspert
23. april 2013 - 10:59 #6
dinUrl.dk?navn=hansemand

echo $_SERVER['QUERY_STRING']; //Udskriver: navn=hansemand
echo $_GET['navn']; //Udskriver: hansemand
Avatar billede mikkelsommer Nybegynder
23. april 2013 - 11:23 #7
hmm når jeg skriver echo $_SERVER['QUERY_STRING'] står der kun det jeg har sendt. hansemand

Minadresseline ser således ud:
http://localhost/mobile/spiller.php?hansemand
Avatar billede erikjacobsen Ekspert
23. april 2013 - 11:25 #8
3 ting.

Det skal være på mysql_query man skriver

  $fetch = mysql_query($sql) or die(mysql_error());

og ikke som angivet i #1.

Der er forskel på at få et tomt resultat, og få en fejl, så " typisk for situations hvor du ikke får noget resultat fra dit dataudtræk" er principielt noget vrøvl.

Og endelig som 3. og vigtigste punkt må spørgeren ALDRIG lægge denne kode ud på nettet, for den indeholder den basale SQL-injection fejl. Spørgeren skal nødvendigvis forstå og anvende parameters men mysqli-funktionerne først.
Avatar billede mikkelsommer Nybegynder
23. april 2013 - 11:37 #9
Tak erikjacobsen ... Det hjalp mig i mål.
Avatar billede michael_stim Ekspert
23. april 2013 - 11:42 #10
#9
Hvad fik du for fejlmeddelelse?

Og forstod du punkt 3?

http://www.eksperten.dk/guide/1480
24. april 2013 - 07:43 #11
mikkelsommer, godt du fik det løst.  Ja, jeg fik i skyndingen placeret 'or die... ' forkert, og så blev jeg kaldt afsted og er nu tilbage.  (michael_stim, jeg skulle have sagt: "Når jeg selv møder den fejlmelding at 'a resource is expected, bolean given' så er det typisk fordi min sql query ikke giver et resultat, og så er det der jeg skal lede."

mikkelsommer, jeg er også, som michael_stim, nysgerrig efter at vide hvilken fejlmeddelelse du fik da du fik '..or die...' placeret rigtigt, og hvordan du løste det.
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