Avatar billede cortx Nybegynder
18. november 2007 - 17:52 Der er 14 kommentarer og
1 løsning

Slet flere (funktion til internent mailsystem)

Heej alle eksperter :)

Sidder og programmerer et internt mailsystem, hvortil jeg godt vil have en funktion der gør det muligt at slette flere mails af gangen - mere præcist, dem der er markeret (checkbox).

Queryen der udskriver, ser således ud:

                $query = mysql_query("SELECT * FROM mail WHERE recipient='$username' AND delrec='1'") or die(mysql_error());
                while($row = mysql_fetch_array($query)) {
                    if($row[readrec] == "1"){
                        $ReadRec = '<img src="gfx/green.gif">';
                    } else {
                        $ReadRed = '<img src="gfx/red.gif">';
                    }
                   
                    echo '
                    <tr>
                        <td align="left"><input name="select" type="checkbox">'.$ReadRec.'</td>
                        <td align="left"><a href="?show=inbox&mail='.$row[id].'">'.$row[subject].'</a></td>
                        <td align="left"><a href="user.php?id='.CheckUserId($row[sender]).'&show=medals">'.$row[sender].'</a></td>
                        <td align="left">'.$row[date].'</td>
                    </tr>
                    ';
                }

Der skal selvfølelig opsættes en query med DELETE, men hvordan får jeg den til at DELETE de markerede? :)

På forhånd tak,
Rasmus Henriksen,
Cortx
Avatar billede straszek Praktikant
18. november 2007 - 18:30 #1
hvis du ændre
<td align="left"><input name="select" type="checkbox">'.$ReadRec.'</td>

Til
<input type="checkbox" name="ref[]" value="<?php echo $row["id"]; ?>">

Så kan du bruge
foreach($_POST["ref"] as $refid) {
DELETE FROM tabel WHERE id = $refid
}
Avatar billede cortx Nybegynder
18. november 2007 - 18:34 #2
Så ..

Ud for hver mail i queryen der udskriver:
<input type="checkbox" name="ref[]" value="<?php echo $row["id"]; ?>">

En if(issset($_POST[DoDelete]) {} ..

Og inde i den,
foreach($_POST["ref"] as $refid) {
DELETE FROM tabel WHERE id = $refid
}
Avatar billede cortx Nybegynder
18. november 2007 - 18:34 #3
og self en knap et sted:

<input type="submit" name="DoDelete" value="Slet markerede" />
Avatar billede straszek Praktikant
18. november 2007 - 18:36 #4
jeps
Avatar billede cortx Nybegynder
18. november 2007 - 18:44 #5
det prøver jeg lige så :)
Avatar billede cortx Nybegynder
18. november 2007 - 19:47 #6
Det virker ikke rigtigt, hmm..

Delete / update til "slettet":

            if ($show == "inbox") {
                if(isset($_POST[domarkt])) {
                    if($_POST[markt] == "delete") {
                        foreach($_POST["ref"] as $refid) {
                            $query = mysql_query("UPDATE mail SET delrec='2' WHERE recipient='$username' AND id='$refid'") or die(mysql_error());
                        }
                    }
                }


Og det der gør at man kan slette:
                        <form action="" method="post">
                        <select name="markt" size="1" class="input">
                            <option>Med markerede ...</option>
                            <option value="delete">Slet</option>
                            <option value="markread">Marker som læst</option>
                            <option value="markunread">Marker som ulæst</option>
                            <option value="attachstar">Tilføj stjerne</option>
                            <option value="killstar">Fjern stjerne</option
                        </select>
                        <input type="submit" name="domarkt" value="Udfør" class="button" />
                        </form>


Og selve udskrivningen:
                    <tr>
                        <td class="tab2"><input name="ref[]" type="checkbox" value="'.$row[id].'"> '.$ReadRec.'</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>


Hvad er i vejen hehehe :P
Avatar billede cortx Nybegynder
18. november 2007 - 19:48 #7
Fejlen:
Warning: Invalid argument supplied for foreach() in C:\AppServ\www\gm\mail.php on line 16
Avatar billede cortx Nybegynder
18. november 2007 - 20:02 #8
Fandt fejlen, skulle jo self sætte formen rundt om det hele og ikke kun om select og button .. så fanger den jo ikke checkboxsne hehe :)

Tak for hjælpen, smid et svar!
Avatar billede straszek Praktikant
18. november 2007 - 21:02 #9
svar :-)
Avatar billede cortx Nybegynder
18. november 2007 - 21:04 #10
Super :) Det kan være du kan hjælpe her også:


http://www.eksperten.dk/spm/806433
Avatar billede showsource Seniormester
19. november 2007 - 00:18 #11
id er et tal?

I stedet for at bruge foreach() ( udføre en query for hver ) kan du bruge

$del_ref = implode(",", $_POST["ref"]);
// og så afvikle en query
UPDATE mail SET delrec = 2 WHERE id IN (". $del_ref .") AND recipient = '". $username ."'
Avatar billede cortx Nybegynder
19. november 2007 - 10:01 #12
Lyder smart, vil jeg da lige prøve :) Men det skal da lige siges at foreach() virker fint, men for at belaste serveren mindre, ville de være smart med dit eks. showsource ..
Avatar billede cortx Nybegynder
19. november 2007 - 10:21 #13
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '17' AND recipient='RHCortx'' at line 1


                if(isset($_POST[domarkt])) {
                    if($_POST[markt] == "delete") {
                        $del_ref = implode(",", $_POST["ref"]);
                        $query = mysql_query("UPDATE mail SET delrec='2' WHERE id IN $del_ref' AND recipient='$username'") or die(mysql_error());
                    }
                }
Avatar billede cortx Nybegynder
19. november 2007 - 10:30 #14
Sådan skulle queryen se ud:
$query = mysql_query("UPDATE mail SET delrec='2' WHERE id IN ($del_ref) AND recipient='$username'") or die(mysql_error());

Regnede ikke med at det havde betydning hvorvidt der var (". og .") eller ej, men ved nærmere kig, kan jeg se at der self skal være ().
Avatar billede cortx Nybegynder
19. november 2007 - 11:50 #15
Tak skal du have :) Har givet karma..
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