Door
Daan Vee
op 23-03-2018 10:18
gewijzigd op 23-03-2018 10:18
2.516 views
Ik heb een formulier gemaakt waarmee titels kunnen worden ingevoegd/verwijderd.
Bij het laden van de pagina wordt in de database gekeken welke velden al bestaan; die worden vanuit de database geladen.
Met de knop nieuwe titel kun je nieuwe velden aanmaken.
Met een save-button worden alle (nieuwe) velden opgeslagen.
Wat ik raar vind: velden die al bestonden kun je aanpassen en worden juist opgeslagen.
Velden die nieuw worden aangemaakt worden in de database gezet (krijgen een ID), maar de info in de velden wordt niet opgeslagen.
Als ik met element inspecteren in Chrome een bestaande formulier-regel (tijd, titel, functie) kopieer en de ID's aanpas naar een ID wat wel al bestaat in de database wordt dat toch niet opgeslagen. Dat terwijl andere regels die hetzelfde zijn opgebouwd wel worden opgeslagen.
Zit daar een soort van beveiliging in?
Zonder een verdere behandeling van onderliggende techniek is dat natuurlijk koffiedik kijken.
Denk niet dat dit een beveiligingsissue is. Mijn vermoeden is dat deze functionaliteit (zwaar) leunt op JavaScript en/of aanverwante technieken (jQuery?) waarbij er dus blijkbaar een verschil is tussen elementen die al aanwezig waren bij het laden van de pagina en elementen die dynamisch worden toegevoegd.
Bottom line zal waarschijnlijk zoiets zijn dat listeners op dynamisch gegenereerde velden niet goed werken. Dit zou ook het startpunt van je onderzoek kunnen zijn: hoe verschillen deze velden (reeds aanwezig of dynamisch toegevoegd) van elkaar.
Is dit ook een pakket/snippet/module, of heb je dit zelf geschreven? Zit dit in een framework of CMS of in een zelf gerolde website? Andere gebruikte technieken (een JavaScript framework, BootStrap, iets anders)? Je verschaft (eigenlijk veel) te weinig informatie om hier iets zinnigs over te kunnen zeggen.
De dynamisch toegevoegde velden zijn exact hetzelfde als velden die al bestonden, dat is het vreemde.
Toch worden ze niet opgepakt, ze staan ook in hetzelfde <form>....
Ik gebruik onderstaande j-querycode, kan het daar aan liggen?
<script type="text/javascript">
//<![CDATA[
// als je document klaar is met laden...
$().ready(function() {
// als het formulier #theForm wordt gesubmit...
$('form#theForm').submit(function(e) {
// vang het submit event af, jQuery/AJAX handelt dit immers af
e.preventDefault(); // het default gedrag is dat het formulier gePOST wordt, en dat willen we niet
$('#postResult').hide();
$.post(
'shared/saveItem.php?itemID=<?php echo $itemID; ?>', // het script waar je naartoe POST
$('#theForm').serialize(), // verzamel alle form data in 1x (naam, content)
null, // we gebruiken .done() dus deze is niet nodig
'json' // geef een "hint" over het type van de terug te ontvangen data
)
.done(function( data ) {
$('#postResult').show();
})
.fail(function() {
$('#postResult').show();
})
.always(function( data ) {
$('#postResult').show();
setTimeout(function(){ $('#postResult').hide(); }, 3000);
});
});
});
//]]>
</script>
Mja, wat zit er in $('#theForm').serialize(), en hoe zien de statische/dynamische veldnamen eruit? Mogelijk gaat daar iets mis. Daar zou ik dan vervolgens eens naar kijken.