Alle mails selecteren en tegelijk verwijderen
Ik heb een website waar ik heel wat mails (berichten) tegelijk wil verwijderen.
Op het moment heb ik volgende code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$(document).ready(function(){
$("#selectall").change(function(){
var status = $(this).is(":checked") ? true : false;
$(".idx").prop("checked",status);
});
$("#hapus_semua").live("click",function(e) {
e.preventDefault();
$(".ajax").attr("disabled", "disabled");
var sList = "";
$(".idx").each(function () {
if (this.checked)
sList += $(this).val() + ",";
});
var callback = function()
{
$.post("../controller/ajax-admin.php", { daftar: sList , "delall-catch": "yes"},
function(data) {
processReport (data);
}
);
}
confirm("Weet u zeker dat u de geselecteerde mails wilt verwijderen?",callback )
});
$("#selectall").change(function(){
var status = $(this).is(":checked") ? true : false;
$(".idx").prop("checked",status);
});
$("#hapus_semua").live("click",function(e) {
e.preventDefault();
$(".ajax").attr("disabled", "disabled");
var sList = "";
$(".idx").each(function () {
if (this.checked)
sList += $(this).val() + ",";
});
var callback = function()
{
$.post("../controller/ajax-admin.php", { daftar: sList , "delall-catch": "yes"},
function(data) {
processReport (data);
}
);
}
confirm("Weet u zeker dat u de geselecteerde mails wilt verwijderen?",callback )
});
Echter is het zo dat wanneer ik klik op de button dat er niets gebeurd aangezien er in de ajax.php bestand nog wat mist, wat moet ik hier plaatsen om dit stukje werkend te maken?
Gewijzigd op 02/11/2020 14:13:21 door - Ariën -
Dat heb ik door inderdaad ja.... maar die mist dus :)
- Gaat het om echte mails die je uitleest? Of zijn mails hier een synoniem voor privé-berichten?
- Hoe is het opgeslagen?
- Welke procedures moeten er uitgevoerd worden om het te kunnen wissen?
Je zult echt wat meer uitleg moeten geven, want niemand kan hier een concreet antwoord op geven.
De eerste stap is al handig, lees je POST-data eens uit:
En kijk in de Network-tab van je browser welke data er overgestuurd wordt.
Gewijzigd op 02/11/2020 14:21:37 door - Ariën -
selecteer ik 2 mails dan moeten er maar 2 verwijderd worden, selecteer ik de hele lijst dan moet de hele lijst verwijderd worden.. moet klinkt trouwens raar haha.. ik wil graag :)
Wees graag nog iets concreter over de opzet van je systeem.
Gewijzigd op 02/11/2020 14:26:31 door - Ariën -
Het is de bedoeling dat we mail_inbox kunnen legen (database dus) maar met de mails op de mailserver zal verder niets gebeuren
Dan kan je prima met een foreach() aan de slag om de gekozen mails door te lopen, en vervolgens met een query zoals dit DELETE FROM mails WHERE MailID = $id de mails stuk per stuk te verwijderen.
Zorg eerst maar even dat je jouw $_POST array even uitleest. Dan weet je in ieder geval wat je gekozen hebt.
Gewoon MySQL inderdaad en op dit moment bestaat er wat betreft die functie nog helemaal niets in de ajax file.
Ik zou zeggen: Ga aan de slag met de eerste gegeven stappen ;-)
Vorige code is compleet weg, daar is voor in de plek gekomen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$(document).ready(function(){
$( "#target" ).submit(function( event ) {
var action = $("#task").val();
if(action =="delete_email"){
event.preventDefault();
$(".ajax").attr('disabled', 'disabled');
var sList = "";
$('.profile_id').each(function () {
if (this.checked)
sList += "'"+$(this).val().trim() + "',";
});
var modid = 'yes';
var callback = function()
{
$.post('../controller/ajax.php', { list: sList , 'delall-catch': modid},
function(data) {
var re = jQuery.parseJSON(data);
processJson (re);
}
);
}
confirm("<?php echo $trns['confirm_action']; ?>",callback )
}else{
alert( "You must choose an action" );
event.preventDefault();
}
});
$( "#target" ).submit(function( event ) {
var action = $("#task").val();
if(action =="delete_email"){
event.preventDefault();
$(".ajax").attr('disabled', 'disabled');
var sList = "";
$('.profile_id').each(function () {
if (this.checked)
sList += "'"+$(this).val().trim() + "',";
});
var modid = 'yes';
var callback = function()
{
$.post('../controller/ajax.php', { list: sList , 'delall-catch': modid},
function(data) {
var re = jQuery.parseJSON(data);
processJson (re);
}
);
}
confirm("<?php echo $trns['confirm_action']; ?>",callback )
}else{
alert( "You must choose an action" );
event.preventDefault();
}
});
en dan in de ajax heb ik het volgende:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if(isset($_POST['delall-catch'])){
if ($_SESSION['role'] == 'admin' or $_SESSION['role'] == 'master') {
$list = trim(stripcslashes($_POST['list']));
$list = substr($list,0,-1);
if($list == ''){
$r =array('status' => 'error' , 'text'=>'no email selected');
}else{
$sql = "delete from mail_inbox where id in (".$list.") ";
if($db->query($sql)){
$r =array('status' => 'success' , 'text'=> $db->affected_rows . ' email(s) deleted');
}else{
$r =array('status' => 'error' , 'text'=>'Error:'.$sql);
}
}
debug($r,config::debug);
}
}
if ($_SESSION['role'] == 'admin' or $_SESSION['role'] == 'master') {
$list = trim(stripcslashes($_POST['list']));
$list = substr($list,0,-1);
if($list == ''){
$r =array('status' => 'error' , 'text'=>'no email selected');
}else{
$sql = "delete from mail_inbox where id in (".$list.") ";
if($db->query($sql)){
$r =array('status' => 'success' , 'text'=> $db->affected_rows . ' email(s) deleted');
}else{
$r =array('status' => 'error' , 'text'=>'Error:'.$sql);
}
}
debug($r,config::debug);
}
}
Het probleem is nu als volgt: als ik mails wil verwijderen vanuit mail_inbox en dan op id dan werkt het niet.. doe ik wat selecteren en verwijden op mail_inbox en dan op mail_sender dan werkt het wel.. hij pakt puur enkel maar de mail adressen en niet de id's? Hoe kan ik dit wel zo werkend maken? Nu verwijder ik bijvoorbeeld op 1 checkbox 60 mails aangezien de afzender hetzelfde is, dit zal ik graag op id willen zodat ik 1 aanvink dat er 1 verwijderd gaat worden en bij 2 dat er 2 verwijderd gaan worden enzovoort.
Hoe ziet je formulier eruit? Heb je al ervoor gezorgd dat alles met blokhaken ( [] ) al als een array wordt gezien?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<div class="row-fluid">
<form method="get" id="target" class="form-inline">
<div class="widget-box">
<div class="widget-title">
<span class="icon">
<input type="checkbox" id="selectall"> Selecteer Alle
</span>
<h5><?php echo $trns['h5']; ?></h5>
</div>
<div class="widget-content nopadding">
<table class="table table-bordered table-striped table-hover data-table">
<thead>
<tr>
<th></th>
<th><?php echo $trns['website']; ?></th>
<th><?php echo $trns['from']; ?></th>
<th><?php echo $trns['to']; ?></th>
<th><a href="#" class="tip-bottom" data-original-title="Is the sender register? 1= yes, 0 = no "><?php echo $trns['registered']; ?></a></th>
<th><?php echo $trns['subject']; ?></th>
<th><?php echo $trns['action']; ?></th>
<th><?php echo $trns['time']; ?></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<select id="task" name="task" class="span3">
<option value="delete_email"><?php echo $trns['delete_selected']; ?></option>
</select>
<button type="submit" class="btn"><i class="icon-envelope"></i> Go</button>
</form>
</div>
<form method="get" id="target" class="form-inline">
<div class="widget-box">
<div class="widget-title">
<span class="icon">
<input type="checkbox" id="selectall"> Selecteer Alle
</span>
<h5><?php echo $trns['h5']; ?></h5>
</div>
<div class="widget-content nopadding">
<table class="table table-bordered table-striped table-hover data-table">
<thead>
<tr>
<th></th>
<th><?php echo $trns['website']; ?></th>
<th><?php echo $trns['from']; ?></th>
<th><?php echo $trns['to']; ?></th>
<th><a href="#" class="tip-bottom" data-original-title="Is the sender register? 1= yes, 0 = no "><?php echo $trns['registered']; ?></a></th>
<th><?php echo $trns['subject']; ?></th>
<th><?php echo $trns['action']; ?></th>
<th><?php echo $trns['time']; ?></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<select id="task" name="task" class="span3">
<option value="delete_email"><?php echo $trns['delete_selected']; ?></option>
</select>
<button type="submit" class="btn"><i class="icon-envelope"></i> Go</button>
</form>
</div>
Dit is de pagina..
Gewijzigd op 05/11/2020 14:37:02 door - Ariën -
Daar zijn deze codes voor:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$('.del').live("click",function(e) {
e.preventDefault();
var tr = $(this).closest('tr');
var pg = $(this).attr("data");
var callback = function()
{
$.post('../controller/ajax.php', { del: pg , 'delete-mail': 'yes'},
function(data) {
if (data=='success')
tr.remove().fadeIn("slow");
}
);
}
confirm("<?php echo $trns['confirm_action']; ?>",callback )
});
e.preventDefault();
var tr = $(this).closest('tr');
var pg = $(this).attr("data");
var callback = function()
{
$.post('../controller/ajax.php', { del: pg , 'delete-mail': 'yes'},
function(data) {
if (data=='success')
tr.remove().fadeIn("slow");
}
);
}
confirm("<?php echo $trns['confirm_action']; ?>",callback )
});
en dan in de ajax:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if (isset($_POST['delete-mail'])){
if ($_SESSION['role'] =='admin' or $_SESSION['role'] == 'master'){
$sql ="DELETE from mail_inbox WHERE id='".$db->escape_string($_POST['del'])."'";
if ($db->query($sql)){
echo 'success';
}else{
echo 'failed';
}
}else{
echo 'failed';
exit();
}
}
if ($_SESSION['role'] =='admin' or $_SESSION['role'] == 'master'){
$sql ="DELETE from mail_inbox WHERE id='".$db->escape_string($_POST['del'])."'";
if ($db->query($sql)){
echo 'success';
}else{
echo 'failed';
}
}else{
echo 'failed';
exit();
}
}
Dat is dus voor het per stuk zonder checkboxes en ik zou het enorm graag met willen en zoals ik net al aangaf het lukt bijna tot zover enkel pakt hij de mail adressen bij de list in plaats van id's..
En normaal zal ik echt niet snel om hulp vragen en heb tig dingen geprobeerd alleen kom er niet meer helemaal uit
Nu laat je hier een pagina zien met de inhoud van een individuele e-mail.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if (isset($_GET['manage-mail'])){
//Ophalen sites die je mag zien
$toegestanesites='';
$sql= "SELECT web_id FROM `moderator_sites` WHERE moderator_id='".$_SESSION['user_id']."'";
$result = $db->query($sql);
while($row = $result->fetch_object()){
$toegestanesites.=$row->web_id.',';
}
$toegestanesites.='0';
//echo $toegestanesites;
$config['aColumnsin'] = array( 'distinct(email_sender) as xxx', 'domain', 'email_sender', 'email_receiver', " IF(is_register = 1,'ja','nee') as is_register",'subject', 'id as view',"DATE_FORMAT(times,'%d %b %Y %k:%i') as times" );
$config['aColumnsout'] = array('xxx', 'domain', 'email_sender', 'email_receiver', 'is_register','subject','view','times' );
$config['sIndexColumn'] = "id";
$config['sTable'] = "mail_inbox a LEFT JOIN slave_sites e ON a.web_id = e.web_id WHERE e.web_id IN (".$toegestanesites.")";
$config['searchable'] = array(0,2);
$config['aConfig']['xxx']= '<input type="checkbox" name="ck[]" class="profile_id" value="[VAL]">';
$config['aConfig']['view']= '<a href="../admin/email.php?id=[VAL]" title="view email" class="btn btn-mini"><i class="icon-envelope"></i></a>
<a href="#" class="btn btn-mini del" data="[VAL]"><i class="icon-remove"></i></a>';
$config['aConfig']['del']= '';
create_table($config);
}
//Ophalen sites die je mag zien
$toegestanesites='';
$sql= "SELECT web_id FROM `moderator_sites` WHERE moderator_id='".$_SESSION['user_id']."'";
$result = $db->query($sql);
while($row = $result->fetch_object()){
$toegestanesites.=$row->web_id.',';
}
$toegestanesites.='0';
//echo $toegestanesites;
$config['aColumnsin'] = array( 'distinct(email_sender) as xxx', 'domain', 'email_sender', 'email_receiver', " IF(is_register = 1,'ja','nee') as is_register",'subject', 'id as view',"DATE_FORMAT(times,'%d %b %Y %k:%i') as times" );
$config['aColumnsout'] = array('xxx', 'domain', 'email_sender', 'email_receiver', 'is_register','subject','view','times' );
$config['sIndexColumn'] = "id";
$config['sTable'] = "mail_inbox a LEFT JOIN slave_sites e ON a.web_id = e.web_id WHERE e.web_id IN (".$toegestanesites.")";
$config['searchable'] = array(0,2);
$config['aConfig']['xxx']= '<input type="checkbox" name="ck[]" class="profile_id" value="[VAL]">';
$config['aConfig']['view']= '<a href="../admin/email.php?id=[VAL]" title="view email" class="btn btn-mini"><i class="icon-envelope"></i></a>
<a href="#" class="btn btn-mini del" data="[VAL]"><i class="icon-remove"></i></a>';
$config['aConfig']['del']= '';
create_table($config);
}
Dus lees $_POST['ck'] eerst eens uit in print_r in je AJAX-response.
Gewijzigd op 05/11/2020 15:03:31 door - Ariën -
Ik denk zelf eigenlijk dat het in de value="[VAL]" zit.. Verander ik dat namelijk naar test dan geeft ie aan dat ie test niet kan verwijderen.. maak ik er val weer van.. dan pakt hij mail adressen maar dat moet juist ID worden
Ook vraag ik mij af of je het wel zo complex wilt hebben om er een aparte functie voor nodig te hebben. Infeite kan het zo veel simpeler zonder die functie.
En wat zou ik daar moeten aanpassen trouwens voor de id's? Bij Create_table?