Avatar billede impulze Nybegynder
06. februar 2009 - 09:06 Der er 8 kommentarer og
1 løsning

nedtælling på flere events

Davs alle..

Grunden til jeg opretter spørgsmålet herinde er, at i denne nedtællings script, som får data fra php (sql database) udefra hvor mange events der er sat i gang udefra start og slut dato timestamp.

Det hele virker perfekt bortset fra den kun kan tag et event af gangen. Så spørgsmålet om det er måske "getElementById" der skal ændres til den skal se efter en class og ikke en id?
Eller hvordan kan jeg ellers få den til at vise nedtællingen for alle events der er i gang sat?



        <?php if($_GET['mode'] == "events"){ ?>
       
            <table border="0" width="494" cellspacing="0" cellpadding="0">
                <tr>
                <td class="topbar-middle-images">
                    <div class="topbar-middle" style="float: right">Events</div>
                </td>
                </tr>

                <tr>
                <td class="px494-text-middle" style="width:494px">

               
                <?php
                    $now = time();
                    $query = mysql_query("SELECT * FROM events WHERE dato_slut > $now AND dato_start < $now AND status = 1 ORDER BY dato_slut ASC") or die(mysql_error());
                    if (mysql_num_rows($query) == 0) {
                        echo "<i>Der er ingen events i gang lige nu...</i>";
                    } else {                       
                        echo "<h1>Følgende er i gang nu</h1>";
                        echo "<table width=\"494\" class=\"brugerinfo\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
                        echo "<tr>";
                        echo "<td style=\"width:150px\"><b>Sluttidspunkt</b></td>";
                        echo "<td style=\"width:245px\"><b>Hvad</b></td>";
                        echo "<td style=\"width:99px\"><b>Tid tilbage</b></td>";
                        echo "</tr>";

                        while($row = mysql_fetch_array($query)) {
                       
                        $slut = $row[dato_slut];
                        $nu = time();
                        $diff = ($slut - $nu);
                        $diff     = mysql_real_escape_string($diff);
                    ?>
                        <script type="text/javascript">
                            var d=document;
                            function gE(id){return d.getElementById(id)}

                            var s = <?php echo $diff ?>;
                            function setMyTime() {
                                var dage, fDage, timer, fTimer, minuter, fMinutter, restS=s;
                                if (restS == 0) {
                                        location.href = 'http://home.boller.nu/index.php?mode=events';
                                } else if (restS > 0) {
                                    dage = restS/(60*60*24);
                                    fDage = Math.floor(dage);
                                    if (fDage>0) {
                                        restS = restS - (fDage*60*60*24);
                                            gE("dg").innerHTML = fDage;
                                        }
                                    else fDage = 0;
                                    gE("dg").innerHTML = fDage;

                                    timer = restS/(60*60);
                                    fTimer = Math.floor(timer);
                                    if (fTimer>0) {
                                        fTimer = Math.floor(timer);
                                        restS = restS - (fTimer*60*60);
                                    }
                                    else fTimer = 0;
                                    gE("tim").innerHTML = fTimer;
                                    minutter = restS/60;
                                    fMinutter =  Math.floor(minutter);
                                    if (fMinutter>0) {
                                        fMinutter = Math.floor(minutter)
                                        restS = restS - (fMinutter*60);
                                    }
                                    else fMinutter = 0;
                                    gE("min").innerHTML = fMinutter;
                                    sekunder = Math.floor( restS );
                                    if (sekunder<0) sekunder = 0;
                                    gE("sek").innerHTML = sekunder;
                                    s--;
                                    setTimeout("setMyTime()", 1000);
                                }
                                }
                            window.onload = setMyTime;
                        </script>
                    <?php
               
                            $ts = $row[dato_slut];
                            $day = date("d", $ts);
                            $year = date("Y", $ts);
                            $month = date("n", $ts);
                            $time = date("H:i", $ts);
                            $arraymonth = array ( 1 => "januar", "februar", "marts", "april", "maj", "juni", "juli", "august", "september", "oktober", "november", "december" );
                            $dato = "$day $arraymonth[$month] $year - $time";
                            $dato     = mysql_real_escape_string($dato);

                            echo "<tr>";
                            echo "<td style=\"width:150px\">$dato</td>";
                            echo "<td style=\"width:245px\">$row[titel]</td>";
                            echo "<td style=\"width:99px\">
                                <span id=\"dg\"></span>D
                                <span id=\"tim\"></span>T
                                <span id=\"min\"></span>M
                                <span id=\"sek\"></span>S           
                            </td>";
                            echo "</tr>";
                        }
                        echo "</table>";
                    }
                ?>
Avatar billede impulze Nybegynder
06. februar 2009 - 19:28 #1
Skal I have flere point for at finde ud af det?
Avatar billede nicklasb Nybegynder
07. februar 2009 - 16:56 #2
Nu har jeg ikke lige kigget din kode nærmere igennem eller forsøgt at køre koden på min egen maskine, da jeg hverken har databasen du benytter eller andet.

Men for at svare dig på dit spørgsmål, du har postet lige over din kode, så kan du godt søge efter elementer ud fra class.

Hvis du giver en række elementer samme class, kan du løbe igennem dem med noget lignende:

var elements = document.getElementsByName('class-name');
for (var i = 0; i < elements.length; i++)
    ... gør et eller andet med elements[i] ...

Er det det du mener?
Avatar billede olebole Juniormester
07. februar 2009 - 22:31 #3
<ole>

nicklasb >> den konstruktion holder ikke. Der findes ikke nogen DOM-metode til at finde elementer udfra deres className  =)

/mvh
</bole>
Avatar billede olebole Juniormester
07. februar 2009 - 22:31 #4
- udfra id, name eller tagName - men ikke className  ;o)
Avatar billede impulze Nybegynder
08. februar 2009 - 03:38 #5
Ikke ret meget jeg ved om javascript, udover de basis ting.
Men sagen er, at hvis der er flere events så kan nedtællingen kun tag en event af gangen, hvor de andre bare står "D T M S" ved..
Avatar billede nicklasb Nybegynder
08. februar 2009 - 09:51 #6
#3, Arh ja, det er korrekt. Der var jeg lidt for hurtig :( Sorry!
Men man kan eventuelt selv skrive metoden ligesom de har gjort det her http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/

Eller hvis man ved hvor elementerne findes (for eksempel hvis de kun kan findes under én blok) kan man nøjes med kun at lede denne bloks elements igennem, for at spare lidt køretid.

#5, Kan du ikke smide et link til et eksempel?
Avatar billede impulze Nybegynder
08. februar 2009 - 11:26 #7
Som der også står ved location.href i scriptet: http://home.boller.nu/index.php?mode=events ;)
Avatar billede olebole Juniormester
08. februar 2009 - 16:38 #8
nicklasb >> og man kunne faktisk spare lidt yderligere tid i IE og Opera (og gøre det 'ultimative' script endnu 'mere ultimativt' :) ved at bruge
    a[i] = "...";

- fremfor:
    a.push("...");

- selvom vi absolut er i detajlafdelingen  ;o)
Avatar billede impulze Nybegynder
08. februar 2009 - 16:44 #9
Så, hvad skal jeg gør før den virker med flere events og ikke kun den ene?..
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