Avatar billede MSR Juniormester
19. maj 2013 - 10:58 Der 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);
                    };
            };
        };
Avatar billede 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)
Avatar billede MSR Juniormester
22. maj 2013 - 08:42 #2
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!

Magnus
Avatar billede MSR Juniormester
19. juni 2013 - 10:47 #3
Er der ingen der kan hjælpe her? jeg smider gerne nogle flere points hvis det hjælper.
Avatar billede MSR Juniormester
01. september 2013 - 14:01 #4
Jeg smider gerne flere points her. jeg har stadig ikke luret mit problem...
Avatar billede MSR Juniormester
23. oktober 2013 - 20:45 #5
lukker efter som ingen kunne hjælpe
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

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