meerdere data tegelijk updaten
Ik krijg de inputs dus gepresenteerd met een verborgen id zoals onderstaand voorbeeld
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div class="rij1">
<input name="firstname">
<input name="lastname">
<input type="hidden" id="1">
</div>
<div class="rij2">
<input name="firstname">
<input name="lastname">
<input type="hidden" id="2">
</div>
<div class="rij3">
<input name="firstname">
<input name="lastname">
<input type="hidden" id="3">
</div>
enz.
<input name="firstname">
<input name="lastname">
<input type="hidden" id="1">
</div>
<div class="rij2">
<input name="firstname">
<input name="lastname">
<input type="hidden" id="2">
</div>
<div class="rij3">
<input name="firstname">
<input name="lastname">
<input type="hidden" id="3">
</div>
enz.
nu wil ik de records updaten maar tegelijk dmv submit, dit betekend dat de id gelijk is aan id in de databse
Zelf denk ik dat er een loop gemaakt moet worden? Ben nog niet heel goed thuis in MySQL. (1 record per keer lukt wel).
Anyhow, als je nu firstname, lastname en id eens aanpast naar firstname[], lastname[] en id[] dan kun je in 1x het hele formulier serialiseren zonder allerlei bewerkingen te doen op je formulierdata. De informatie wordt dan in arrays gestopt en kun je met een (redelijk) simpele loop alle data aflopen er per record wegschrijven.
Om de werking van deze opzet verder te bekijken is het misschien een idee om het AJAX-deel in eerste instantie weg te laten, en de inhoud van $_POST te dumpen met wat (hulp)functies zodat je een goed beeld hebt van deze arraystructuur.
Ik heb inputs en wil deze als array hebben zodat ik ze met een loop kan uitlezen in php
<input name="data[]" id="data">
Hoe verzend ik met AJAX dan de waardes?
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
var data = $('#data').serialize();
$.ajax({
url: "action.php",
method: "POST",
data:{action:action, data:data},
success:function(data){
$('#result').html(data);
}
});
$.ajax({
url: "action.php",
method: "POST",
data:{action:action, data:data},
success:function(data){
$('#result').html(data);
}
});
dan is de output data%5B%5D=1
Wat doet je action.php?
ik geef de waarde terug zodat ik kan zien wat de output tot nu is als ik een array kan krijgen met de meerdere waardes kan ik deze verder gebruiken in het script
Gewijzigd op 10/11/2018 18:33:39 door Bryan De Baar
Je data zit nu in $_POST['data']. Doe gewoon een print_r($_POST); in je action.php en je ziet precies wat er binnen komt.
dan krijg ik een array binnen
Maar dus niet meerdere id's
@Bryan, in een andere thread die jij had gestart heb ik hier ook al uitgebreid antwoord op gegeven? De aanpak is nagenoeg hetzelfde...
Gewijzigd op 12/11/2018 01:08:09 door Thomas van den Heuvel
serialize kan ik niet gebruiken aangezien ik in Wordpress werk, maar heb een loop gemaakt waardoor ik de informatie in een array binnen krijg
Hier een stuk van de code:
HTML
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<div class="rij1">
<input name="firstname">
<input name="lastname">
<input type="hidden" id="1">
</div>
<div class="rij2">
<input name="firstname">
<input name="lastname">
<input type="hidden" id="2">
</div>
<div class="rij3">
<input name="firstname">
<input name="lastname">
<input type="hidden" id="3">
</div>
<input name="firstname">
<input name="lastname">
<input type="hidden" id="1">
</div>
<div class="rij2">
<input name="firstname">
<input name="lastname">
<input type="hidden" id="2">
</div>
<div class="rij3">
<input name="firstname">
<input name="lastname">
<input type="hidden" id="3">
</div>
jQuery
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
$(document).on('click', '#action', function(){
var action = $('#action').text();
var firstname =[];
var lastname = [];
var id = [];
$('input[name="firstname"]').each(function() {
firstname.push($(this).val());
});
$('input[name="lastname"]').each(function() {
lastname.push($(this).val());
});
$('input[name="id"]').each(function() {
id.push($(this).val());
});
$.ajax({
url: "action.php",
method: "POST",
data:{action:action, firstname:firstname, lastname:lastname, id:id},
success:function(data){
$('#result').html(data);
}
});
});
var action = $('#action').text();
var firstname =[];
var lastname = [];
var id = [];
$('input[name="firstname"]').each(function() {
firstname.push($(this).val());
});
$('input[name="lastname"]').each(function() {
lastname.push($(this).val());
});
$('input[name="id"]').each(function() {
id.push($(this).val());
});
$.ajax({
url: "action.php",
method: "POST",
data:{action:action, firstname:firstname, lastname:lastname, id:id},
success:function(data){
$('#result').html(data);
}
});
});
PHP print_r output
Code (php)
Hoe kan ik zorgen dat de update van id 1 ook de namen van id 1 zijn ?
Er kan dus ook niks in de output array staan.
Maar als het er wel is, dan kan je zo de output zien in action.php :
Code (php)
Met wat inspanning is het te vinden op de interwebs.
Jop B op 12/11/2018 21:33:22:
serialize kan ik niet gebruiken aangezien ik in Wordpress werk
Ik bedoel de serialize() in jQuery, dit staat verder los van WordPress.
Waarschijnlijk kom je met een array-naamgeving wel een eind? Dus firstname[], lastname[] etc. Je zou zelfs het id daar in kunnen vullen, dan heb je dat hidden veld niet meer nodig, dus firstname[3] en lastname[3] voor id 3. Ik zou de classname ook gewoon "rij" houden, in plaats van "rij1", "rij2", etc.
EDIT Daarnaast, is deze hele constructie wel gewenst? In wat voor gevallen verwerk je dit soort gegevens in bulk? Vaak heb je een soort van (readonly) overzichtspagina en als je dan iets wilt wijzigen ga je naar een detailpagina waar je meestal één record... in details... ziet en in afzondering kunt wijzigen.
--
@Adoptive print_r() kun je ook retourneren als string, dus je zou zoiets kunnen doen:
Is weer wat korter.
Je zou dit ook een functie kunnen stoppen. En voor de goede orde nog even kunnen escapen in de HTML-context, want je geeft dit meestal in een HTML-document weer. Je zou dan tot de volgende twee handige functies kunnen komen voor debugging:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
Gewijzigd op 13/11/2018 13:04:14 door Thomas van den Heuvel
Data{action:action} is verplicht omdat Wordpress een eigen AJAX file inlaad. Zo krijg je ook toegang tot de database en met een eigen ajax moet je diversen dingen doen om toegang te krijgen.
Action verwijst naar een hook die weer leid naar een functie.
Bijvoorbeeld action:hulp
Hulp word dan gekoppeld aan een hook die je dan weer aan een php functie kunt knopen.
Daarom dat ik een eigen loop heb gemaakt voor de meerdere rijen.
Ik ga dit zometeen even met MySQL combineren en hopen dat het werkt:)
Topic onnodig gekicked vanwege (inmiddels verwijderde) spam. Daarom gesloten. Topicstarter kan eventueel verzoek tot heropening indienen.