Avatar billede Slettet bruger
21. januar 2009 - 11:42 Der er 13 kommentarer og
2 løsninger

Tom query giver problem

Hej,

Jeg sætter følgende ind i min php:

$kursus_id=$_GET['kursus'];

og kalder jeg min side med eks. "domæne.dk/side.php?kursus=112"
virker det fint... "domæne.dk/side.php?kursus=" virker også fint.

Problemet er, hvis jeg bare kalder (altså loader) siden UDEN variabel - altså: "domæne.dk/side.php" så melder den fejl:

Notice: Undefined index: kursus

Hvordan kommer man omkring det? Det hjælper ikke noget, hvis jeg indsætter eks.:

$kursus_id=$_GET['kursus'];
if ($kursus_id == "")
{
$kursus_id = "2009-01";
}


SÅ - hvordan kalder man siden med en tom/uden variabel - uden den melder fejl?
Avatar billede majbom Novice
21. januar 2009 - 11:47 #1
if(isset($_GET['kursus'])){
  $kursus_id=$_GET['kursus'];
  if ($kursus_id == "")
  {
      $kursus_id = "2009-01";
  }
}
Avatar billede showsource Seniormester
21. januar 2009 - 11:47 #2
Bruger isset()

$kursus_id = (isset($_GET['kursus']) ? intval($_GET['kursus']) : "2009-01);
Avatar billede majbom Novice
21. januar 2009 - 11:48 #3
hov, jeg tror jeg misforstod...

if(!empty($_GET['kursus'])){
  $kursus_id = $_GET['kursus'];
}else{
  $kursus_id = "2009-01";
}
Avatar billede majbom Novice
21. januar 2009 - 11:49 #4
det kunne man jo osse, men der mangler lige en "

$kursus_id = (isset($_GET['kursus']) ? intval($_GET['kursus']) : "2009-01");

:)
Avatar billede showsource Seniormester
21. januar 2009 - 11:50 #5
Og hov, det er vist ikke brugbart med intval() :O)
Avatar billede showsource Seniormester
21. januar 2009 - 11:51 #6
eller, hvis kursus altid skal være et tal, så er det bedst at bruge intval()
Avatar billede Slettet bruger
21. januar 2009 - 13:55 #7
Jeg synes ikke rigtigt, det virker... der blev smidt lidt rigeligt ind i bunken synes jeg; isset, empty, intval :-D
Avatar billede Slettet bruger
21. januar 2009 - 14:01 #8
Jeg har nu sat flg. ind:

if(isset($_GET['kursus'])){
  $kursus_id=$_GET['kursus'];
  if ($kursus_id == "")
  {
      $kursus_id = "2009-01";
  }
}

Kalder jeg siden UDEN variabel melder den:
Notice: Undefined variable: kursus_id [...] on line 39

I linie 39 bruger jeg flg: (39 er første linie af nedenstående)

if ($kursus_id != "")
{
echo "<b>Deltagere i kursus ".$kursus_id."</b><br><br>";
... og en masse mere kode...
Avatar billede showsource Seniormester
21. januar 2009 - 14:11 #9
isset() tjekker om en var er sat.
intval() bruges til at "sikre" det er et tal man har med at gøre.
empty() betyder "tom", men bruger den nu aldrig selv til at tjekke om en var er sat.

Du kan evt. bruge:

$kursus_id = "2009-01";

if(isset($_GET['kursus']) && trim($_GET['kursus']) != ""){
  $kursus_id=$_GET['kursus'];
}

Men igen, så skal du aldrig stole på brugerinput, d.v.s. du skal sikre at vars ikke kan lave rod i din sql.

trim() fjerner space og linieskift før og efter en var
Avatar billede Slettet bruger
21. januar 2009 - 14:13 #10
Ah...

if(!empty($_GET['kursus'])){
  $kursus_id = $_GET['kursus'];
}else{
  $kursus_id = "2009-01";
}

Det virker fint!
Avatar billede Slettet bruger
21. januar 2009 - 14:34 #11
I er velkomne til at svare begge to - så kan I dele pointene.

Tak for hjælpen!
Avatar billede majbom Novice
21. januar 2009 - 15:02 #12
selv tak :)
Avatar billede olebole Juniormester
21. januar 2009 - 19:12 #13
<ole>

- men du begår stadig offentligt selvmord, hvis du ikke tjekker, at $_GET['kursus'] _kun_ indeholder præcist, hvad du forventer, før den bliver brugt mod databasen  ;o)

/mvh
</bole>
Avatar billede showsource Seniormester
21. januar 2009 - 20:17 #14
Et svar, og læs lige olebole's indlæg en gang til ..... )
Avatar billede majbom Novice
25. januar 2009 - 19:47 #15
tak for point :)
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