Avatar billede cortx Nybegynder
18. november 2007 - 20:49 Der er 28 kommentarer og
1 løsning

Marker alle, ingen, læste, ulæste (funktion i internet mailsystem

Heeej eksperter!

Er ikke sikker på hvorvidt det hører hjemme i JavaScript, men kan forestille mig, at det er Javascript hehe :)

Sidder og laver et internt mailsystem på min side, men har sku et lille problem - jeg ved ikke hvordan jeg gør, så mine links: marker; Alle, Ingen, Læste, Ulæste, markere den "beskrevne" aktion.

Min query der udskriver, ser således ud:
                $query = mysql_query("SELECT * FROM mail WHERE recipient='$username' AND delrec='1' AND saverec='1'") or die(mysql_error());
                while($row = mysql_fetch_array($query)) {

                   
                    echo '
                    <tr>
                        <td class="tab2"><input name="ref[]" type="checkbox" value="'.$row[id].'"> ';
                        if($row[readrec] == "1"){ echo '<img src="gfx/red.gif" style="margin-bottom: 3px" />'; } else { echo '<img src="gfx/green.gif" style="margin-bottom: 3px" />'; }
                        echo '</td>
                        <td class="tab2"><a href="?show=inbox&mail='.$row[id].'">'.$row[subject].'</a></td>
                        <td class="tab2"><a href="user.php?id='.CheckUserId($row[sender]).'&show=medals">'.$row[sender].'</a></td>
                        <td align="center" class="tab2">'.$row[date].'</td>
                    </tr>
                    ';


Men som sagt, når man trykker på fx Læste, markerer den de læste.
V&aelig;lg: <a href="#">Alle</a>, <a href="#">Ingen</a>, <a href="#">L&aelig;ste</a>, <a href="#">Ul&aelig;ste</a>


Ulæst: readrec = 1
Læst: readrec = 2

På forhånd tak,
Rasmus Henriksen,
Cortx
Avatar billede w13 Novice
18. november 2007 - 21:32 #1
Hvordan skal de markeres? Giv lige et eksempel på HTML-koden for en markeret postmeddelelse.
Avatar billede w13 Novice
18. november 2007 - 21:33 #2
Dette:
                        if($row[readrec] == "1"){ echo '<img src="gfx/red.gif" style="margin-bottom: 3px" />'; } else { echo '<img src="gfx/green.gif" style="margin-bottom: 3px" />'; }
Skal i øvrigt være:
                        if($row[readrec] == "1"){ echo '<img src="gfx/red.gif" style="margin-bottom: 3px" class="readrec1" />'; } else { echo '<img src="gfx/green.gif" style="margin-bottom: 3px" class="readrec2" />'; }

Her har jeg indsat class="readrec1|readrec2", så vi kan bruge den class i JavaScript-koden, når vi skal finde ud af, om en post er læst/ulæst.
Avatar billede cortx Nybegynder
18. november 2007 - 21:41 #3
Super, men hvordan ser javascripten så ud hehe :)

En markeret mail, er jo bare hvor checkboxen er selected :)
<input name="ref[]" type="checkbox" value="'.$row[id].'" selected>
Avatar billede cortx Nybegynder
18. november 2007 - 22:07 #4
mate? :)
Avatar billede w13 Novice
18. november 2007 - 22:19 #5
Ja, nu sku' jeg jo lige stykke den sammen. :)

Brug denne her:
----------------------------------------------
<script type="text/javascript">
function Select(mode){
    var arrImg=document.getElementById("messages").getElementsByTagName("img");
    var arrInput=document.getElementById("messages").getElementsByTagName("input");
    for(var i=arrImg.length-1;i>=0;i--){
        if(mode=="all"){
            if(arrImg[i].className=="readrec1"||arrImg[i].className=="readrec2"){
                arrInput[i].setAttribute("checked",true);
            }
        }else if(mode=="none"){
            if(arrImg[i].className=="readrec1"||arrImg[i].className=="readrec2"){
                arrInput[i].setAttribute("checked",false);
            }
        }else if(mode=="read"){
            if(arrImg[i].className=="readrec1"){
                arrInput[i].setAttribute("checked",true);
            }else{
                arrInput[i].setAttribute("checked",false);
            }
        }else if(mode=="unread"){
            if(arrImg[i].className=="readrec2"){
                arrInput[i].setAttribute("checked",true);
            }else{
                arrInput[i].setAttribute("checked",false);
            }
        }
    }
}
</script>
----------------------------------------------
Så kan du kalde funktionen Select('all'), Select('none'), Select('read') eller Select('unread').

Jeg har testet den, men det betyder jo ikke, at du får den til at fungere med det samme i din egen kode. Prøv lige, og hvis den gi'r fejl, så skriv fejlbeskeden her.
Avatar billede w13 Novice
18. november 2007 - 22:20 #6
Bemærk også, at jeg 2 steder skriver:
  document.getElementById("messages")

Det var fordi jeg testede det på en table med id="messages". Så du bør give den tabel, som posterne ligger i, et id og så lige rette de 2 steder.
Avatar billede cortx Nybegynder
18. november 2007 - 22:28 #7
Super dejligt du gider hjælpe :) Prøver det lige om 10 min, skal lige ryge først hehe ;)
Avatar billede cortx Nybegynder
18. november 2007 - 22:49 #8
Må javascriptet godt ligge lige over min php kode, eller skal det ligge i head?
Avatar billede cortx Nybegynder
18. november 2007 - 22:55 #9
Den vælger kun en.. og det er den første.. Uanset hvilken jeg trykker på :)
Avatar billede cortx Nybegynder
18. november 2007 - 23:00 #10
Eller .. den vælger alle, undtagen 1..

Hvis der er 4, vælger den de første 3.. er der 3, vælger den de først 2..
Avatar billede w13 Novice
18. november 2007 - 23:10 #11
Hvordan ser HTML-koden ud til tabellen med posterne?
Avatar billede w13 Novice
18. november 2007 - 23:10 #12
Altså det outputtede PHP.
Avatar billede cortx Nybegynder
18. november 2007 - 23:15 #13
Du får hele tabellen, som indebærer php også :) skide være med det hehe..

                  echo '
                <h2 style="margin: 0;">Indbakke</h2>
                <table width=100%" border="0" cellpadding="3" cellspacing="0" id="mails">
                <form action="" method="post">
                <tr>
                    <td colspan="4" class="tabo">
                        V&aelig;lg: <a href="#" OnClick="Select('."'".'all'."'".')">Alle</a>, <a href="#" OnClick="Select('."'".'none'."'".')">Ingen</a>, <a href="#" OnClick="Select('."'".'read'."'".')">L&aelig;ste</a>, <a href="#" OnClick="Select('."'".'unread'."'".')">Ul&aelig;ste</a>&nbsp;&nbsp;&nbsp;&nbsp;
                        <select name="markt" size="1" class="input">
                            <option>Med markerede ...</option>
                            <option value="delete">Slet</option>
                            <option value="save">Gem</option>
                            <option value="markread">Marker som læst</option>
                            <option value="markunread">Marker som ulæst</option>
                        </select>
                        <input type="submit" name="domarkt" value="Udfør" class="button" />
                    </td>
                </tr>
                <tr>
                    <td class="tabo2" width="40">&nbsp;</td>
                    <td class="tabo2" width="300">Emne</td>
                    <td class="tabo2" width="300">Afsender</td>
                    <td align="center" class="tabo2">Dato</td>
                </tr>
                ';
               
                $query = mysql_query("SELECT * FROM mail WHERE recipient='$username' AND delrec='1' AND saverec='1'") or die(mysql_error());
                while($row = mysql_fetch_array($query)) {

                    echo '
                    <tr>
                        <td class="tab2"><input name="ref[]" type="checkbox" value="'.$row[id].'"> ';
                        if($row[readrec] == "1"){ echo '<img src="gfx/red.gif" style="margin-bottom: 3px" class="readrec1" />'; } else { echo '<img src="gfx/green.gif" style="margin-bottom: 3px" class="readrec2" />'; }
                        echo '</td>
                        <td class="tab2"><a href="#" OnClick="PopWin('."'".'mailwin.php?show=read&id='.$row[id]."'".','."'".'Send guideme mail'."'".',600,200);">'.$row[subject].'</a></td>
                        <td class="tab2"><a href="user.php?id='.CheckUserId($row[sender]).'&show=medals">'.$row[sender].'</a></td>
                        <td align="center" class="tab2">'.$row[date].'</td>
                    </tr>
                    ';
                   
                }
                echo '</form></table>';
Avatar billede cortx Nybegynder
18. november 2007 - 23:20 #14
I IE kommer der en "ad(varsel" ting popup) når man trykker på emnet (subject), der siger [object Error], men den åbner fint mailen i Firefox..
Avatar billede cortx Nybegynder
18. november 2007 - 23:24 #15
Det med IE har jeg fikset. der manglede '' et par steder i et PopWin..
Avatar billede cortx Nybegynder
18. november 2007 - 23:24 #16
Neej Ikke fikset :/ sorry, det er ikke fikset med object error ..
Avatar billede w13 Novice
18. november 2007 - 23:28 #17
Fejlen fra før var input-submit-knappen ved selectboksen. Så holder min javascriptkode ikke. Ret den til:
--------------------------------------
<script type="text/javascript">
function Select(mode){
    var arrImg=document.getElementById("mails").getElementsByTagName("img");
    for(var i=arrImg.length-1;i>=0;i--){
        if(mode=="all"){
            if(arrImg[i].className=="readrec1"||arrImg[i].className=="readrec2"){
                arrImg[i].previousSibling.setAttribute("checked",true);
            }
        }else if(mode=="none"){
            if(arrImg[i].className=="readrec1"||arrImg[i].className=="readrec2"){
                arrImg[i].previousSibling.setAttribute("checked",false);
            }
        }else if(mode=="read"){
            if(arrImg[i].className=="readrec1"){
                arrImg[i].previousSibling.setAttribute("checked",true);
            }else{
                arrImg[i].previousSibling.setAttribute("checked",false);
            }
        }else if(mode=="unread"){
            if(arrImg[i].className=="readrec2"){
                arrImg[i].previousSibling.setAttribute("checked",true);
            }else{
                arrImg[i].previousSibling.setAttribute("checked",false);
            }
        }
    }
}
</script>
Avatar billede w13 Novice
18. november 2007 - 23:29 #18
Det kræver dog, at du ikke skifter linje eller har mellemrum mellem inputfelterne og billederne, som markerer, om beskederne er læst eller ej.
Avatar billede w13 Novice
18. november 2007 - 23:29 #19
Object error fejlen kan vel ikke have noget med min kode at gøre.
Avatar billede cortx Nybegynder
18. november 2007 - 23:44 #20
error, nej kan der være noget om hehe..

med hensyn til din kode. Har fjernet mellemrummet mellem img og checkboxen men .. i Firefox, vælger den stadig alle undtagen 1, uanset hvilket link jeg trykker på.. og i IE vælger den rigtigt nok en hist og pist, men bare ikke efter om de er læste eller ej.. Og trykker man alle, vælger den som Firefox, alle undtagen 1..
Avatar billede cortx Nybegynder
18. november 2007 - 23:46 #21
nej firefox vælger alle .. hehe.. uanset hvilket link.
Avatar billede cortx Nybegynder
18. november 2007 - 23:48 #22
Ved godt det er meget forvirrende det her, Undskyld for det w13.. Håber du kan leve med det..

Havde selv lavet en fejl.. IE gør det Rigtigt nu! :) Super-duper.
Men ... Firefox vælger alle :/
Kan det ikke fikses?
Avatar billede w13 Novice
18. november 2007 - 23:59 #23
Det var godt nok ikke let at få den til at makke ret. IE og FF opfatter åbenbart checked-værdien vidt forskelligt. Men nu er den der:
---------------------------------
<script type="text/javascript">
function Select(mode){
    var arrImg=document.getElementById("mails").getElementsByTagName("img");
    for(var i=arrImg.length-1;i>=0;i--){
        if(mode=="all"){
            if(arrImg[i].className=="readrec1"||arrImg[i].className=="readrec2"){
                arrImg[i].previousSibling.setAttribute("checked","checked");
            }
        }else if(mode=="none"){
            if(arrImg[i].className=="readrec1"||arrImg[i].className=="readrec2"){
                arrImg[i].previousSibling.setAttribute("checked",false);
                arrImg[i].previousSibling.removeAttribute("checked");
            }
        }else if(mode=="read"){
            if(arrImg[i].className=="readrec1"){
                arrImg[i].previousSibling.setAttribute("checked","checked");
            }else{
                arrImg[i].previousSibling.setAttribute("checked",false);
                arrImg[i].previousSibling.removeAttribute("checked");
            }
        }else if(mode=="unread"){
            if(arrImg[i].className=="readrec2"){
                arrImg[i].previousSibling.setAttribute("checked","checked");
            }else{
                arrImg[i].previousSibling.setAttribute("checked",false);
                arrImg[i].previousSibling.removeAttribute("checked");
            }
        }
    }
}
</script>
Avatar billede w13 Novice
19. november 2007 - 00:00 #24
:)
Avatar billede cortx Nybegynder
19. november 2007 - 00:01 #25
Ved du hvad? Det er fandeme i orden det er! Super lækkert!.
Tusind tak, har smidt en karma også..
Avatar billede cortx Nybegynder
19. november 2007 - 00:03 #26
Men .. Betragter dig som God til JavaScript, så vil du her, samme sted smide mig et popup script? Det lader til, at det jeg bruger, sku ikke virker i IE. Bruger normalt kun firefox..
Avatar billede w13 Novice
19. november 2007 - 00:17 #27
Takker for det! :)

Brug formen:

function Popup(url,name,width,height){
  window.open(url,name,"width="+width+",height="+height);
}

Du kan selvfølgelig også bare skrive det direkte i koden uden brug af funktion:
window.open('test.htm','win','width=300,height=500');
Avatar billede w13 Novice
19. november 2007 - 00:20 #28
name bør være meget kort og ikke særlig kreativt med en masse specialtegn. Ellers så lad det være tomt! Det bruges kun til at referere til vinduet i koden.
Avatar billede cortx Nybegynder
19. november 2007 - 00:36 #29
Tak skal du have :) Det er jo lettest bare at bruge koden direkte hehe..
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