Serialize formgegevens en doorsturen via ajax
Frank Nietbelangrijk op 04/02/2015 12:53:44:
Dat had ik al voorgesteld...Normaliseren van de database? Is dat dan niet handiger?
Als debuggen van de interactie PHP - jQuery al voor problemen zorgt is database optimalisatie wellicht ook een ... te "zware opstap".
EDIT: Misschien bestaat er ook een misverstand. Die serialize aan de jQuery kant is enkel het serialiseren voor transport; aan de PHP-kant zijn $_GET en $_POST weer gewoon arrays, en elementen in je formulier die eindigen met [ rechte haken ] zijn gewoon sub-arrays van $_GET / $_POST. Dit werkt dus gewoon als voorheen, dit is niet allemaal automatisch tekst omdat je aan de jQuery kant "serialiseert".
Gewijzigd op 04/02/2015 13:08:34 door Thomas van den Heuvel
Thomas van den Heuvel op 03/02/2015 17:08:35:
Persoonlijk zou ik hier een koppeltabel van maken, met in elk record een gebruiker-id - mailiinglijst-id paar, maar dat terzijde.
Bedoelde je hier het normaliseren van de database mee?
Dat het item 2x voorkomt is inderdaad een foutje, maar dat krijg ik er later wel uit.
Ik heb nu de kolom een LONGTEXT gegeven. Maar nog steeds is er niks weggeschreven in de database. Zou het kunnen dat die geen array's kan wegschrijven? Ik zal nu eens proberen met die implode.
Toevoeging op 04/02/2015 13:18:43:
Wat gaat er met de id gebeuren als ik de implode gebruik? Ik serialiseer de hele form ineens vandaar dat ook de ID in de array zit. Die moet er natuurlijk apart uit getrokken worden anders kan hij dit niet opslaan bij een bepaald id in de tabel. Ik denk dat daar de fout zit. Hoe kan ik dit oplossen?
Toevoeging op 04/02/2015 13:26:14:
Ik heb even wat testen gedaan met de debugger:
Ik zet dit in mijn test7.php:
Code (php)
En krijg als resultaat in de debugger:
Nu zien we de id apart staan en de mclijst_id ook.
Gewijzigd op 04/02/2015 13:27:59 door Brecht S
En ja, als je je geserialiseerde tekst in je database weer uit wilt lezen en het array van ids wilt doorlopen zul je de omgekeerde bewerking (explode()) moeten uitvoeren. Vandaar mijn opmerking over een mogelijk andere aanpak.
Wel zou je die kolom in een IN statement in MySQL kunnen gebruiken, wellicht (mits deze niet leeg is). Dit lijkt mij echter niet optimaal.
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<script>
$(function () {
$('#mc').change(function() {
var id = <?php echo $_GET['id']; ?>;
var data = $('#form').serializeArray();
data.push({id: 'id', value: id});
$.ajax({
type: 'POST',
url: 'test7.php',
data: data,
//data: $('#form').serialize(),
success: function (data) {
//alert(data);
//alert($('#form').serialize());
}
});
return false;
});
});
</script>
$(function () {
$('#mc').change(function() {
var id = <?php echo $_GET['id']; ?>;
var data = $('#form').serializeArray();
data.push({id: 'id', value: id});
$.ajax({
type: 'POST',
url: 'test7.php',
data: data,
//data: $('#form').serialize(),
success: function (data) {
//alert(data);
//alert($('#form').serialize());
}
});
return false;
});
});
</script>
Dit geeft mij wel de juiste resultaten in de database. Zit dit goed in elkaar of kan ik hier nog iets aan verbeteren?