22. december 2005 - 00:14Der 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
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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...
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); ?>
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 :)
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...
Synes godt om
Ny brugerNybegynder
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.