Avatar billede starf Nybegynder
22. december 2005 - 00:14 Der er 15 kommentarer og
1 løsning

problem med php script

Hey

jeg har et php script der laver en fejl, men kan ikke rigtig finde ud af hvorfor den gør det, nogle her der kan hjælpe?

scriptet er:

<?php

//include these files
require('config.php');

//Check for id, set to X if not found.

$id = $_GET['id'];

if (!is_numeric($id))
{
    //Vi har ikke et nummer i $id ?!?!!?!?!? lad os sætte et standard
    //$id = 1;
    echo "Om Siden";
}

$q = mysql_query("SELECT * FROM indhold WHERE id = " . $id . "") or die(mysql_error());

$data = mysql_fetch_assoc($q);

//Check om der er noget i $data ?
if (!$data == "")
{
    echo $data['txt'] . "<br />";
}
else
{
    echo "Ingen data";
}


mysql_close($link);
?>

når jeg så køre det får jeg det her :

Om SidenYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

hvorfor får jeg en MySQL fejl?
hvis jeg fjerner

echo "Om Siden";

og skriver

$id = 1;

så virker det fint uden problemer...
Avatar billede jaw Nybegynder
22. december 2005 - 00:20 #1
Det gør du fordi, at din $id ikke er sat, eller ingen værdi har. Løsningen kan være, enten at flytte dit databaseudtræk ind i en if-else, så det kun bliver kørt hvis den har en værdi. Du har allerede grundideen, du gør den bare ikke færdig...
Avatar billede johan.o Nybegynder
22. december 2005 - 00:21 #2
Hvad er værdien af $id ?

Mvh. Johan
Avatar billede jaw Nybegynder
22. december 2005 - 00:23 #3
<?php

//include these files
require('config.php');

//Check for id, set to X if not found.

$id = $_GET['id'];

if (!is_numeric($id))
{
    //Vi har ikke et nummer i $id ?!?!!?!?!? lad os sætte et standard
    //$id = 1;
    echo "Om Siden";
} else {
  $q = mysql_query("SELECT * FROM indhold WHERE id = " . $id . "") or die(mysql_error());

  $data = mysql_fetch_assoc($q);

  //Check om der er noget i $data ?
  if (empty($data))
  {
    echo $data['txt'] . "<br />";
  }
  else
  {
    echo "Ingen data";
  }
}
mysql_close($link);
?>
Avatar billede starf Nybegynder
22. december 2005 - 00:27 #4
Jaw> Tak det virker perfekt og tak for forklaringen :)
smid et svar og få point :)
Avatar billede jaw Nybegynder
22. december 2005 - 00:28 #5
Godt, selv tak :)
Avatar billede starf Nybegynder
22. december 2005 - 00:28 #6
hov var måske for hurtig ude.. ser ud til at når man så trykker på et link der et id, så skriver den bare "ingen data" any way ?
Avatar billede jaw Nybegynder
22. december 2005 - 00:29 #7
Er du så sikker på, at det id har data i tabellen?
Avatar billede starf Nybegynder
22. december 2005 - 00:30 #8
jep det er jeg, den virkede fint før med den gamle kode jeg postede...
Avatar billede jaw Nybegynder
22. december 2005 - 00:31 #9
Og jeg ville nok personligt ændre din if-else løkke:

  //Check om der er noget i $data ?
  if (empty($data))
  {
    echo $data['txt'] . "<br />";
  }
  else
  {
    echo "Ingen data";
  }

til:

if(mysql_num_rows($q) == 0) {
  echo "Ingen data...";
} else {
  echo $data['txt'];
}
Avatar billede jaw Nybegynder
22. december 2005 - 00:31 #10
Hov, det også fordi i mit forslag overså jeg en ! :

Dette:
if (empty($data))

skal være:
if (!empty($data))
Avatar billede starf Nybegynder
22. december 2005 - 00:41 #11
tak så virker det :)
Avatar billede jaw Nybegynder
22. december 2005 - 00:48 #12
Godt, takker for points...
Avatar billede johan.o Nybegynder
22. december 2005 - 00:54 #13
Jeg er klar over at det virker :), men tillad lidt ekstra input. :)

Du kunne strengt taget blot have ændret din query til dette :

$q = mysql_query("SELECT * FROM indhold WHERE id = '" . $id . "'") or die(mysql_error());

Derved er din query stadig valid selv om $id er 'tom', og derudover er det altid en god ide at bruge ' til at omslutte værdier i query's, da det er med til at værne imod sql injektion. Nu er der ikke stor sandsynlighed for sql injektion i jaw's script, da query'en jo kun køres hvis $id er et numeric, og det er jo svært at lave injektionkun med tal :)

Mvh. Johan
Avatar billede starf Nybegynder
22. december 2005 - 01:07 #14
tak for det ekstra tip :)
Avatar billede johan.o Nybegynder
22. december 2005 - 01:12 #15
Velbekomme :)
Avatar billede jaw Nybegynder
22. december 2005 - 01:13 #16
Både og, vil jeg så lige sige :)

Hvis du smider '..' rundt om, så vil du angive det som en streng og ikke som en integer. Den rigtigste syntax er faktisk uden - selvom begge vil virke...
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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