Ik wilde de onderstaande gegevens opslaan in mijn database:


<input id="618" type="text" name="titelnaam[]" value="" placeholder="Naam" class="form-control" style="width:200px;">
<input type="text" id="618" name="titelfunctie[]" value="" placeholder="Functie" class="form-control" style="width:200px;">

<input id="619" type="text" name="titelnaam[]" value="" placeholder="Naam" class="form-control" style="width:200px;">
<input type="text" id="619" name="titelfunctie[]" value="" placeholder="Functie" class="form-control" style="width:200px;">

<input id="620" type="text" name="titelnaam[]" value="" placeholder="Naam" class="form-control" style="width:200px;">
<input type="text" id="620" name="titelfunctie[]" value="" placeholder="Functie" class="form-control" style="width:200px;">


Mijn database omvat een ID-, naam- en functie-veld.
Omdat de pagina dynamisch is, en er ook nieuwe velden kunnen worden aangemaakt wil ik alles wat op een bepaald moment op de pagina staat saven via een array.
Maar... hoe?

Hoe lees ik dit uit?

Iets als: if (isset($_POST['titelnaam'])) {
Maarja... hoe krijg ik het dan bij het juiste ID gesaved?
Wat wil je nu eigenlijk? Alles met één knop opslaan? Of per item een save-knop aanbieden?

Geen save-knop, maar met de onderstaande blur, die ik eerder liet zien alle velden versturen in een array.
Als dat niet mogelijk is dan het liefst een save-knop.


   <script>
$(document).ready(function(){
    $("input").blur(function(){
        alert("This input field has lost its focus.");
    });
});
</script>
Dus als je één entry wijzigt POST je alles naar je verwerkscript? :/

Dit klinkt trouwens als een dubbel topic. Je bent daar praktisch hetzelfde aan het bespreken.

Orden je gedachten en je topics eens :p.
Daan Vee op 28/02/2018 16:16:05

Geen save-knop, maar met de onderstaande blur, die ik eerder liet zien alle velden versturen in een array.
Als dat niet mogelijk is dan het liefst een save-knop.


   <script>
$(document).ready(function(){
    $("input").blur(function(){
        alert("This input field has lost its focus.");
    });
});
</script>



Probeer dit eens:


$(document).ready(function(){
    $("input").blur(function(){
        type: "POST",
        url: "script.php",
        alert("This input field has lost its focus.");
    });
});

Als ik mij niet vergis stuurt hij hem dan door naar script.php en daar kan je hem ophalen met $_POST
Dan zou je elk item eerst een eigen form-blok in HTML moeten geven. Als ik mij niet vergis hoef je nu enkel de $.ajax() functie met de serialize functie kunnen toepassen.

@Jasper: Kijk toch eens goed naar je code. Hoe wil jij met een blur() (!!!) meteen een AJAX-request uitvoeren? Dit klopt niet!
Hoe lees ik in update.php de array uit? Aangezien elke regel een andere naam (met ID) heeft...

titelnaam[ID]
titelfunctie[ID]

$_POST[titelnaam] werkt dan toch niet?
Kijk eerst maar naar je $_POST global met print_r().
De array komt door in update.php.

$titel = implode(',', $_POST['titelnaam']);

Dat geeft alle ingevulde titels gescheiden door een comma.
Hoe krijg ik ook het ID erbij te zien in een array?
Wat zegt je print_r nu precies in je PHP-script?
Als je het zo doet:


<!DOCTYPE html>
<html>
    <head>
        <title>PHPHulp</title>
        <style type="text/css">
            body { font: 12px Monaco; color: #999; }
            input { font-family: inherit;  }
        </style>
    </head>
    <body>

        <div class="feedback"></div>

        <form class="my-form" method="post" accept-charset="UTF-8">
            <input id="618" type="text" name="titelnaam[618]" value="" placeholder="Naam" class="form-control" style="width:200px;">
            <input type="text" id="618" name="titelfunctie[618]" value="" placeholder="Functie" class="form-control" style="width:200px;">
            <br>
            <input id="619" type="text" name="titelnaam[619]" value="" placeholder="Naam" class="form-control" style="width:200px;">
            <input type="text" id="619" name="titelfunctie[619]" value="" placeholder="Functie" class="form-control" style="width:200px;">
            <br>
            <input id="620" type="text" name="titelnaam[620]" value="" placeholder="Naam" class="form-control" style="width:200px;">
            <input type="text" id="620" name="titelfunctie[620]" value="" placeholder="Functie" class="form-control" style="width:200px;">
        </form>

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script>
            'use strict';

            var $form = $('.my-form');
            var $feedback = $('.feedback');

            $(function(){
                $(document).on('blur', 'input', function(){
                    var data = $form.serialize();
                    $.ajax({
                        data: data,
                        url: 'ajax.php'
                    });
                });
            });
        </script>
    </body>
</html>


ajax.php:

<?php
echo '<pre>';
print_r($_GET);
echo '</pre>';
?>


dan zie je na een JavaScript "blur" event deze output in (bijvoorbeeld) Chrome developer:

<pre>Array
(
    [titelnaam] => Array
        (
            [618] => Jan
            [619] => 
            [620] => 
        )

    [titelfunctie] => Array
        (
            [618] => Webdeveloper
            [619] => 
            [620] => 
        )

)
</pre>


Door dus de id's binnen de brackets te plaatsen (zoals eerder gesuggereerd) krijg je in ajax.php een keurige array met het id als key, zodat je hem vervolgens kunt verwerken.

Reageren