ik heb een 15 rijen met 2 input in mijn html, deze word geladen dmv AJAX welke een php aanroept met mysql.
Ik krijg de inputs dus gepresenteerd met een verborgen id zoals onderstaand voorbeeld


<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.


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).
Vraag me toch af in welk geval je gebruikersinformatie in bulk wilt bijwerken?

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 ben ook geïnteresseerd in deze topic.

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?

var data = $('#data').val(); werkt niet



var data = $('#data').serialize();
$.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?

<?php
$id = array($_POST['id']);
		foreach($id as $id){
			echo $id;
	}	
?>


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
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.
@rob,

dan krijg ik een array binnen

Array ( [action] => Save [id] => id%5B%5D=1 )


Maar dus niet meerdere id's
Dan klopt er waarschijnlijk niet al teveel van de HTML van het formulier. <input>s die buiten de <form> tags vallen enzo? En als je dat met AJAX doet, hoe serialiseer je dat dan? Laat eens wat relevante code zien?

@Bryan, in een andere thread die jij had gestart heb ik hier ook al uitgebreid antwoord op gegeven? De aanpak is nagenoeg hetzelfde...
@thomas,

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

<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>


jQuery

$(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);
			}
	});
});


PHP print_r output

<?php
Array ( 
	[action] => Save 
	[firstname] => Array ( [0] => John [1] => Jan )
	[lastname] => Array ( [0] => Doe [1] => Janssen ) 
	[id] => Array ( [0] => 1 [1] => 2 ) 
	)
?>


Hoe kan ik zorgen dat de update van id 1 ook de namen van id 1 zijn ?
Er is geen input met name=id en ook geen value.

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 :

<?php

echo '<pre>';

print_r( $_POST );

echo '</pre>';

$count = count( $_POST['id'] );
for ( $i = 0; $i < $count; $i++ ) {
	echo $_POST['id'][$i] . ' : ' . $_POST['firstname'][$i] . ' ' . $_POST['lastname'][$i] . '<br />';
}
?>


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:
<?php
echo '<pre>'.print_r($_POST, true).'</pre>';
?>

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:
<?php
// shorthand voor het escapen in de HTML-context
function escape($in) {
    return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}

// voor het veilig dumpen van allerhande data in de HTML-context
function dump($in) {
    if (is_array($in)) {
        $in = print_r($in, true);
    }
    echo '<pre>'.escape($in).'</pre>';
}
?>

Reageren