19. maj 2013 - 10:58Der er
4 kommentarer og 1 løsning
fejl i while (gentager sekvens)
Hej eksperten. jeg har lavet en slags doodle på min hjemmeside hvor folk kan tilmelde sig. Det er yderligere lavet sådan at man ikke kan tilmelde det samme navn 2 gange og både tilmelder og opretter får en mail hver gang nogle tilmelder sig. Desværre kan jeg ikke finde en løsning ud af min while sætning så første tilmeldte får 1 mail (som han bør) men 2 tilmeldte får 2 osv osv osv. det er helt klart fordi jeg looper min while, men jeg ved ikke hvordan jeg ellers gør det?
koden er: if (($_GET["mode"] == "insert") && (!empty($navn))) { $checkuser = mysql_query("SELECT * FROM doodle_tilmeldinger WHERE doodle_id = ".$doodle_id ." && navn = '".$navn."'") or die(mysql_error()); if (mysql_num_rows($checkuser) > 0) { echo "<div style='background-color:#FF0000' width='60%'> (".$navn.") er allerede tilmeldt!</div>"; } else { $result = mysql_query("INSERT INTO doodle_tilmeldinger (navn, doodle_id, deltager, note) VALUES ('$navn', '$doodle_id', '$deltager', '$note')"); $result2 = mysql_query("SELECT *, doodles.doodlenavn, doodles.valgstart, doodles.valgslut FROM doodle_tilmeldinger LEFT JOIN doodles on doodle_tilmeldinger.doodle_id = doodles.id WHERE id = '".$doodle_id."'") or DIE(mysql_error()); while ($row = mysql_fetch_array($result2)) { $doodlenavn = $row['doodlenavn']; $valgstart = $row['valgstart']; $valgslut = $row['valgslut']; echo "<div style='background-color:#00CC00'> Du har nu tilmeldt (".$navn.") med status: ".$deltager."</div>"; $email = $oprettermail; $header = "From: min mail"; $emne = "[Doodletilmelding] ".$doodlenavn; if ($note != "") {$beskeden2 = "\n bemærkning: ". $note;} else {$beskeden2 = "";}; $beskeden = $navn ." har tilkendegivet at han/hun ".$deltager. " i ". $doodlenavn . "\n". $beskeden2; mail($email, $emne, $beskeden, $header); }; }; };
Der kræves flere ressourcer for at imødegå cybertruslerne. Det fremgår af en undersøgelse blandt 225 IT-chefer i Sverige, Norge og Danmark.
3. december 2024
Slettet bruger
22. maj 2013 - 06:57#1
du skal jo tælle $row op, en counter, ellers kan du ikke checke på noget som skal stoppe while.
se hvad der står: while ($row = mysql_fetch_array($result2))
som jeg ser er $row det samme hele tiden, og så henter den $result2, baseret på $doodleid
så hvem tæller doodleid op ? gør den selv eller skal du det ?
--- var det ikke bedre at VIDE hvor mange tilmeldte der er ? så først tæl antal tilmeldte, og så gør istedet:
while tilmeldte > 0 { gør det hele.. tilmeldte=tilmeldte-1 }
og hvis du ved hvor mange der er, så kan du jo lave et FOR loop
jeg kan ikke helt sætte mig ind i det, da jeg ikke ved hvad databasetingene her gør af sig selv og hvad ikke. jeg ser bare at den while rør sig jo ikke ud af stedet, fordi en eller begge af betingelserne er den samme hele tiden. (uendeligt loop)
Hej Sidwave Du har delvist ret. jeg er dog ligeglad med at vide hvor mange tilmeldte der er. Sekvensen ovenfor er min indsættelse Jf: if (($_GET["mode"] == "insert") && (!empty($navn)))
Koden skal indsætte de data jeg har bedt om OG sende en mail samt echo´e: Du har nu tilmeldt (".$navn.") med status: ".$deltager."</div>";
Den indsætter korrekt men mailer og echo´er WHILE der er tilmeldte. Altså så mange gange som der er tilmeldte til doodlen. 4. tilmeldte får 4 mails, 5. får 5 osv osv...
problemet er at jeg laver en LEFT JOIN hvilket jeg ikke tror kan laves uden WHILE. Result2 skal køre 1 gang og gøre det der står nedenunder WHILE 1 gang. Thats it!
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.