Avatar billede stig69 Nybegynder
11. juli 2004 - 18:40 Der er 17 kommentarer

Problemer med if-sætning

Jeg har følgendefunktion:

function tilmeldtKursus($KursusID, $MedlemID) {
  $select = "SELECT TilmeldingID FROM tilmelding_til_kurser WHERE KursusID = '$KursusID' AND MedlemID = '$MedlemID';";
  $result = mysql_query($select)
    or die("Could not: SELECT TilmeldingID FROM tilmelding_til_kurser WHERE KursusID = '$KursusID' AND MedlemID = '$MedlemID';");
  $numRow = mysql_num_rows($result);
  if ($numRow == 1) {
    return false; //Kunden har allerede tilmeldt sig
  }
  else {
  return true;    //Kunden har ikke tilmeldt sig
  }
}

Funktionen kalder jeg med følgende if-sætning:
  if (tilmeldtKursus($KursusID, $MedlemID) == false)  {
    print "Allerede tilmeldt";
  }
  else  {  //Hvis medlemmet ikke har tilmeldt sig før
    print "Du er blevet tilmeldt!";
  }

Problemet...
Det drejer sig om tilmelding til en kursus database, hvor man ikke kan tilmelde sig samme kursus mere end en gang. Dette virker bare ikke og jeg kan ikke se fejlen. Første gang får man rigtig nok at vide at man er blevet tilmeldt, anden gang man prøver at tilmelde sig samme kursus får man at vide "Allerede tilmeldt", problemet er bare at man bliver tilmeldt engang igen alligevel!

Stig
Avatar billede erikjacobsen Ekspert
11. juli 2004 - 18:43 #1
Så må du jo lade være med at indsætte i tabellen, hvis han allerede er tilmeldt.
Men du har ikke vist os hvor du indsætter.
Avatar billede jaw Nybegynder
11. juli 2004 - 18:57 #2
Som Erik siger, tror jeg også nærmere det skyldes en fejl det sted hvor du indsætter og ikke det sted hvor du tjekker.
Avatar billede stig69 Nybegynder
11. juli 2004 - 18:59 #3
Det mener jeg fungerer godt nok. Det er muligt at tilmelde sig flere kurser, dog kan man kun tilmelde sig hvert kursus engang
Avatar billede jaw Nybegynder
11. juli 2004 - 19:01 #4
Jow, jow... Men det du har pastet ovenfor, vil aldrig kunne indsætte brugeren en ekstra gang i din database...
Avatar billede stig69 Nybegynder
11. juli 2004 - 19:04 #5
Men han skal hellere ikke indsættes. Det er en misforståelse; jeg har nok ikke udtrykt mig klart nok. Det er et check der foregår, så vedkommende ikke har mulighed for at tilmelde sig samme kursus flere gange.
Avatar billede stig69 Nybegynder
11. juli 2004 - 19:05 #6
Mit problem er at scriptet går rigtigt ind i første if-sætning, men går også ind i else-sætningen
Avatar billede jaw Nybegynder
11. juli 2004 - 19:05 #7
Så forstår jeg ikke dit problem. Jeg kan godt se at den tjekker, men hvis problemet er, at han bliver indsatten i databasen på trods af at han allerede er der, må dette jo ske i forbindelse med en INSERT.
Avatar billede stig69 Nybegynder
11. juli 2004 - 19:09 #8
ja rigtig, men den insert ligger i else-sætningen, jeg har bare forenklet scriptet. Men den burde slet ikke smutte derind..

else  {  //Hvis medlemmet ikke har tilmeldt sig før
    print "Du er blevet tilmeldt!";
  ... INSERT...
  }
Avatar billede jaw Nybegynder
11. juli 2004 - 19:15 #9
hmm ja oki doki... Men så er det eneste jeg lige umiddelbart kan se et ; her:

  $select = "SELECT TilmeldingID FROM tilmelding_til_kurser WHERE KursusID = '$KursusID' AND MedlemID = '$MedlemID';"; <-- Det næst-sidste.

Hvor stor forskel det gør, ved jeg dog ikke lige...
Avatar billede stig69 Nybegynder
11. juli 2004 - 19:15 #10
Skal man nulstille variablerne? Tænker på $numRow = mysql_num_rows($result);
Avatar billede stig69 Nybegynder
11. juli 2004 - 19:17 #11
Skal der ikke være ; efter en sql sætning?
Avatar billede jaw Nybegynder
11. juli 2004 - 19:18 #12
Det her er nok:

$select = "SELECT TilmeldingID FROM tilmelding_til_kurser WHERE KursusID = '$KursusID' AND MedlemID = '$MedlemID'"; <- det er PHP der vil afslutte med ; som sådan ikke MySQL.

Og nej, din variabel burde overskrive sig selv...
Avatar billede stig69 Nybegynder
11. juli 2004 - 19:21 #13
ok, selvom det ikke var fejlen. Min funktion skulle gerne undersøge om der er nogle rækker hvor brugeren(MedlemID) har tilmeldt sig kurset (KursusID) allerede. Hvis der ikke eksisterer nogle rækker burde $numRow være null ikke?
Avatar billede jaw Nybegynder
11. juli 2004 - 19:37 #14
Tjoh... Jeg har lige prøvet en reduceret version af din, og den synes jeg nu fungerer fint...
Avatar billede erikjacobsen Ekspert
11. juli 2004 - 19:53 #15
$numrow kan jo være 2, eller 3, osv. Det er nok bedre at teste på 0
Avatar billede stig69 Nybegynder
11. juli 2004 - 20:34 #16
Det tror jeg vil prøve
Avatar billede stig69 Nybegynder
11. juli 2004 - 21:46 #17
Så fik jeg det til at virke. Men løsningen synes jeg bare ikke giver mening. Det væreste er at jeg ikke ved hvorledes jeg skal forklare jer det

I starten af min if-sætning har jeg alt afvikling af php-kode og database interaktion kørende, efter det kommer min html. Således var det også i min else sætning. Da jeg byttede om på det og afviklede min html kode før min php og sql, så virkede det...

Jeg undskylder meget, men jeg kan ikke forklare det bedre.
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