meerdere data tegelijk updaten

Overzicht

Sponsored by: Vacatures door Monsterboard

Jop B

Jop B

10/11/2018 00:19:13
Anchor link
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.


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).
 
PHP hulp

PHP hulp

19/04/2024 01:59:54
 
Thomas van den Heuvel

Thomas van den Heuvel

10/11/2018 01:27:39
Anchor link
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.
 
Bryan De Baar

Bryan De Baar

10/11/2018 17:31:04
Anchor link
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?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
var data = $('#data').val(); werkt niet


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
            }
        });


dan is de output data%5B%5D=1
 
- Ariën  -
Beheerder

- Ariën -

10/11/2018 18:21:12
Anchor link
Wat doet je action.php?
 
Bryan De Baar

Bryan De Baar

10/11/2018 18:26:11
Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?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
Gewijzigd op 10/11/2018 18:33:39 door Bryan De Baar
 
Rob Doemaarwat

Rob Doemaarwat

10/11/2018 19:24:05
Anchor link
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.
 
Bryan De Baar

Bryan De Baar

11/11/2018 23:42:33
Anchor link
@rob,

dan krijg ik een array binnen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Array ( [action] => Save [id] => id%5B%5D=1 )


Maar dus niet meerdere id's
 
Thomas van den Heuvel

Thomas van den Heuvel

12/11/2018 00:38:00
Anchor link
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...
Gewijzigd op 12/11/2018 01:08:09 door Thomas van den Heuvel
 
Jop B

Jop B

12/11/2018 21:33:22
Anchor link
@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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>


jQuery
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
$(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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?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 ?
 
Adoptive Solution

Adoptive Solution

12/11/2018 22:31:24
Anchor link
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 :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?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.
 
Thomas van den Heuvel

Thomas van den Heuvel

13/11/2018 01:12:36
Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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>';
}

?>
Gewijzigd op 13/11/2018 13:04:14 door Thomas van den Heuvel
 
Jop B

Jop B

13/11/2018 19:22:09
Anchor link
De serialize zal niet werken bij Wordpress.
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:)
 
- Ariën  -
Beheerder

- Ariën -

31/01/2019 07:43:20
Anchor link
Topic onnodig gekicked vanwege (inmiddels verwijderde) spam. Daarom gesloten. Topicstarter kan eventueel verzoek tot heropening indienen.
 
 

Dit topic is gesloten.



Overzicht

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.