Hallo allemaal,

Ik doe ergens iets niet goed. Ik heb geen idee wat.
De regel "alert("record_id = " + id); " in de onderstaande code geeft aan dat id is gevuld met bijvoorbeeld 36.
Maar als ik daarna verder ga met de code wordt de code niet naar menu_tabel_update.php overgebracht te worden.

In beheer_menu.php heb ik de volgende code:


			function SelecteerRegel( x, id)
			{ 
				$(x).siblings().show(); 
				$(x).hide(); 
				$('#Button_Add').hide(); 
				$('#Update_Form').show(); 
				$('#Delete_Yes_No').hide(); 
				alert("record_id = " + id); 
				$.ajax
				({
					type: "POST",
					data: {id: id},
					url: "menu_tabel_update.php",
					dataType: "xml",
					success: function(data) 
					{
						alert(data);
					}
				});
			};


"var_dump($_POST);" geeft in menu_tabel_update.php
array(0) { }

Ik probeer daar met $_POST['íd'] de waarde over te nemen.

Ziet iemand waar ik de fout ingegaan ben?
Frits van Leeuwen op 10/05/2020 17:21:45
Ik ben weer een stap verder. Ik moest regel 4 veranderen in

var idnr = Number( $(this).attr('id').substr(5));


Dit kan makkelijker? Stop het id in een apart data-attribuut, data-id ofzo.

Daarnaast, waarvoor heb je dit specifieke id nodig? Waar gebruik je dit voor? Volgens mij hebben de velden/rijen geen individuele id's nodig. Om het huidige element te selecteren die reageert op een klikactie kun je simpelweg $(this) gebruiken?
Dat was eigenlijk al lange tijd mijn vraag.
Is dan $.(this).(id) wat ik dan moet gebruiken om 1 record te pakken? Ik moet dan wel ajax gebruiken als ik het goed begrijp. Ik kan op die manier toch niet het net zichtbaar gemaakte formulier vullen?
Ik begin langzaam een beter beeld op de werking (van alles) te krijgen.
Als ik een selectie gebruik waarbij ik slechts enkele velden van de selectie gebruik, Kan ik dan de niet getoonde velden overhalen zonder ajax? Ik dacht juist dat dat dus niet kon. En dat ik de id moest gebruiken om 1 record binnen te halen en die vervolgens over te pompen naar het formulier om het daar te kunnen wijzigen.
Een ander idee dat ik nu begin te krijgen is dat ik alle output van de action_get via JSON opmaak stuur.
Dat houd in dat ik dan mijn eerder gegenereerde lijst ombouw. Ik bedoel dat ik de (HTML)lijst nu in action_get.php opbouw, en dat ik dit dan doe in de succes van ajax.
Mijn idee daarbij is dat ik in data van ajax een code gebruik die ik dan in action_get.php herken en op basis daarvan een volledige query kan kiezen voor de juist output. Dit puur voor de veiligheid waar ik voortdurend op gewezen wordt.

Ik begin JSON te begrijpen en er is ook een duidelijke uitleg van de datastructuur er van. Maar eerst wil ik de JSON output kunnen gebruiken. Dus ik probeer nu 1 record naar een formulier te sturen door het gebruik van jquery.
In het formulier hebben alle velden een id.

Ik dacht zelf aan zoiets als dit:


succes : function( data )
					{
						//data downloaded so we call parseJSON function 
						//and pass downloaded data
						var json = $.parseJSON(data);
       					
						//var result = JSON.parse(data);
						//var result = jQuery.parseJSON(data);
						$('#fidnr').val(json.menu_id); 
						$('#fwaarde').val(json.menu_waarde); 
						$('#fsubvan').val(json.menu_sub_van);
						$('#ftekst').val(json.menu_tekst); 
						$('#flink').val(json.menu_link);
					}




[size=xsmall]Toevoeging op 12/05/2020 22:59:34:[/size]

Frits van Leeuwen op 12/05/2020 22:57:08

Een ander idee dat ik nu begin te krijgen is dat ik alle output van de action_get via JSON opmaak stuur.
Dat houd in dat ik dan mijn eerder gegenereerde lijst ombouw. Ik bedoel dat ik de (HTML)lijst nu in action_get.php opbouw, en dat ik dit dan doe in de succes van ajax.
Mijn idee daarbij is dat ik in data van ajax een code gebruik die ik dan in action_get.php herken en op basis daarvan een volledige query kan kiezen voor de juist output. Dit puur voor de veiligheid waar ik voortdurend op gewezen wordt.

Ik begin JSON te begrijpen en er is ook een duidelijke uitleg van de datastructuur er van. Maar eerst wil ik de JSON output kunnen gebruiken. Dus ik probeer nu 1 record naar een formulier te sturen door het gebruik van jquery.
De JASON output is bijvoorbeeld dit:
{ menu_id :8 , menu_tekst :Over Geldboom , menu_waarde :9 , menu_sub_van :0 , menu_link :overgeldboom.php , menu_reg_date :2020-04-25 16:51:11 }"

In het formulier hebben alle velden een id.

Ik dacht zelf aan zoiets als dit:


succes : function( data )
					{
						//data downloaded so we call parseJSON function 
						//and pass downloaded data
						var json = $.parseJSON(data);
       					
						//var result = JSON.parse(data);
						//var result = jQuery.parseJSON(data);
						$('#fidnr').val(json.menu_id); 
						$('#fwaarde').val(json.menu_waarde); 
						$('#fsubvan').val(json.menu_sub_van);
						$('#ftekst').val(json.menu_tekst); 
						$('#flink').val(json.menu_link);
					}







[size=xsmall]Toevoeging op 12/05/2020 23:00:58:[/size]

Frits van Leeuwen op 12/05/2020 22:57:08

Een ander idee dat ik nu begin te krijgen is dat ik alle output van de action_get via JSON opmaak stuur.
Dat houd in dat ik dan mijn eerder gegenereerde lijst ombouw. Ik bedoel dat ik de (HTML)lijst nu in action_get.php opbouw, en dat ik dit dan doe in de succes van ajax.
Mijn idee daarbij is dat ik in data van ajax een code gebruik die ik dan in action_get.php herken en op basis daarvan een volledige query kan kiezen voor de juist output. Dit puur voor de veiligheid waar ik voortdurend op gewezen wordt.

Ik begin JSON te begrijpen en er is ook een duidelijke uitleg van de datastructuur er van. Maar eerst wil ik de JSON output kunnen gebruiken. Dus ik probeer nu 1 record naar een formulier te sturen door het gebruik van jquery.
In het formulier hebben alle velden een id.

Ik dacht zelf aan zoiets als dit:


succes : function( data )
					{
						//data downloaded so we call parseJSON function 
						//and pass downloaded data
						var json = $.parseJSON(data);
       					
						//var result = JSON.parse(data);
						//var result = jQuery.parseJSON(data);
						$('#fidnr').val(json.menu_id); 
						$('#fwaarde').val(json.menu_waarde); 
						$('#fsubvan').val(json.menu_sub_van);
						$('#ftekst').val(json.menu_tekst); 
						$('#flink').val(json.menu_link);
					}




[size=xsmall]Toevoeging op 12/05/2020 22:59:34:[/size]

[quote="Frits van Leeuwen op 12/05/2020 22:57:08"]
Een ander idee dat ik nu begin te krijgen is dat ik alle output van de action_get via JSON opmaak stuur.
Dat houd in dat ik dan mijn eerder gegenereerde lijst ombouw. Ik bedoel dat ik de (HTML)lijst nu in action_get.php opbouw, en dat ik dit dan doe in de succes van ajax.
Mijn idee daarbij is dat ik in data van ajax een code gebruik die ik dan in action_get.php herken en op basis daarvan een volledige query kan kiezen voor de juist output. Dit puur voor de veiligheid waar ik voortdurend op gewezen wordt.

Ik begin JSON te begrijpen en er is ook een duidelijke uitleg van de datastructuur er van. Maar eerst wil ik de JSON output kunnen gebruiken. Dus ik probeer nu 1 record naar een formulier te sturen door het gebruik van jquery.
De JASON output is bijvoorbeeld dit:
"{ menu_id :8 , menu_tekst :Over Geldboom , menu_waarde :9 , menu_sub_van :0 , menu_link :overgeldboom.php , menu_reg_date :2020-04-25 16:51:11 }"

In het formulier hebben alle velden een id.

Ik dacht zelf aan zoiets als dit:


succes : function( data )
					{
						//data downloaded so we call parseJSON function 
						//and pass downloaded data
						var json = $.parseJSON(data);
       					
						//var result = JSON.parse(data);
						//var result = jQuery.parseJSON(data);
						$('#fidnr').val(json.menu_id); 
						$('#fwaarde').val(json.menu_waarde); 
						$('#fsubvan').val(json.menu_sub_van);
						$('#ftekst').val(json.menu_tekst); 
						$('#flink').val(json.menu_link);
					}






[/quote]



[size=xsmall]Toevoeging op 13/05/2020 00:31:04:[/size]

Ik zag dat mijn JSON string fout was.

De string had er zo uit moeten zien:
{"menu_id":"8","menu_tekst":"Over Geldboom","menu_waarde":"9","menu_sub_van":"0","menu_link":"overgeldboom.php","menu_reg_date":"2020-04-25 16:51:11"}

De code die dit had moeten genereren, is de volgende:

case 'ShowRecord':
			header('Content-Type: application/json; charset=UTF-8');
			$result_record = mysqli_query($connect, $_GET['query_record']);
			$line_record = mysqli_fetch_array($result_record, MYSQLI_ASSOC);
			echo json_encode($line_record); 
			break;


Hiermee ben ik nog niet bij het in de velden op het formulier gooien. Want daar ben ik nog niet uit.
Sorry, ik heb de indruk dat ik een aantal berichten hier dubbel heb staan. Ik heb geen idee hoe dat kan.

Maar ik heb een regel in mijn code:
	
<input type="text" id = "fwaarde" name="fwaarde" autofocus size="5">																


Ik dacht dus dat als ik

 $('#fwaarde').val(json.menu_waarde);

gebruik dat het veld gevuld zou worden met de input dat ik uit JSON kreeg.
Maar er wordt helemaal niets in gezet.

Wie heeft er suggesties?
Waarschijnlijk produceert je PHP-code nu foutmeldingen / geen queryresultaat, want deze code:
mysqli_query($connect, $_GET['query_record']);

gaat uiteraard niet werken.

Als je nu eens het PHP-bestand apart opvraagt, en eens wat debugging aanzet?

Ik zou de informatie die doorgegeven wordt om duidelijk te maken wat voor data de aanroepende partij (de JavaScript) wil hebben zo kort mogelijk houden. Zo zou je dus het meegeven van een id (of niet) de doorslaggevende factor kunnen laten zijn. Geen id meegegeven? retourneer alle data, desnoods als plak HTML. Wel een id meegegeven: retourneer een enkel record in JSON-uitvoering. Maar mogelijk is dit al een rare spagaat om te combineren in één PHP-bestand, tenzij je voor alle operaties aparte acties hebt zodat je dus alles al in aparte compartimenten hebt opgedeeld. Maar dat is dus een stukje architectuur / gestandaardiseerde aanpak die je jezelf zou moeten aanleren om het bouwen van wat grotere stukken code / complete websites wat aangenamer of in ieder geval wat gestructureerder aam te vliegen.

Op het moment dat je echt applicaties gaat bouwen loont het zeker (ook) de moeite om wat schillen aan te gaan brengen rondom database-operaties. Dit om het afhandelen van foutmeldingen beter te stroomlijnen.

Want wat je nu doet:
$result_record = mysqli_query($connect, $_GET['query_record']);
$line_record = mysqli_fetch_array($result_record, MYSQLI_ASSOC);
echo json_encode($line_record);

Alles na mysqli_query() gaat door de vleesmolen. $result_record bevat mogelijk de waarde false in plaats van een mysqli_result object. mysqli_fetch_array() zal daarom nooit goedgaan, maar jouw programma ratelt vrolijk verder. Het zou beter zijn dat je voorzieningen hebt zodat jouw applicatie aan de noodrem trekt op het moment dat mysqli_query mislukt om verdere ongelukken te voorkomen.

Wie heeft er suggesties?

Beschouw (dus) het PHP-bestand in afzondering en dump zonodig extra informatie op het scherm. Indien de fout (overduidelijk?) niet in het JavaScript-deel zit dan is het betrekken van deze JavaScript in dit vraagstuk een overcomplicatie die alleen maar voor ruis/afleiding zorgt.

Je moet het als volgt zien. Het PHP-bestand werkt precies hetzelfde als voorheen, alsof je een pagina opvraagt met de details van een specifiek record:

get.php?id=1234

Het enige wat verschilt is hoe deze informatie vervolgens weergegeven wordt (en hoe deze verder wordt gebruikt).

In plaats van een HTML-pagina produceert dit PHP-bestand een JSON-string.

That's it.

Los van de techniek die je gebruikt voor weergave is het gewoon common sense om de invoer te valideren. Het heeft geen zin om een query uit te voeren als $_GET['id'] niet bestaat of als $_GET['id'] niet numeriek is.

Los van de techniek die je gebruikt voor weergave zouden alle variabele DATA-delen die van een externe bron afkomstig zijn en gebruikt worden in de SQL van een query ontdaan moeten worden van een potentieel speciale betekenis, oftewel, deze zouden ge-escaped moeten worden.

Los van de techniek die je gebruikt voor weergave zou je programma "mondig" moeten zijn over fouten. Desnoods alleen tijdens ontwikkeling. Afhankelijk van de situatie geven deze meer of minder details over de aard van de fout.

Indien het de taak van het PHP-bestand is om informatie op te lepelen van een enkel record, dan kan dit om een aantal redenen mislukken:
- er is geen (numeriek) id meegegeven
- het record met het opgegeven id bestaat niet (meer)
- eventueel andere fouten bij het uitvoeren van de query

Dit zou je ook als een error-status terug kunnen geven in JSON-vorm, dit verschaft jou als ontwikkelaar en ook als gebruiker direct informatie dat er iets is misgelopen.

Maar dit is dus wederom een ontwerpbeslissing: voeg je hier wat meer controles aan toe zodat je applicatie wat robuuster is of in ieder geval wat robuuster reageert en niet omvalt omdat je code / de query in de soep loopt, of tref je deze voorzieningen niet. Zoals eerder gezegd zou dit op zijn minst de ontwikkeling helpen omdat dit een schat aan informatie geeft over de toestand van variabelen binnen jouw applicatie. Hiermee creeer je voor jezelf overzicht, wat je op dit moment hard nodig lijkt te hebben.
Bedankt voor deze uitleg. Ik leer iedere keer weer nieuwe dingen en krijg nieuwe inzichten.

Ik heb JSON gebruikt eigenlijk als advies hier in het forum. En dus ging ik er mee aan de slag. Maar ik ben er nu een tijdje mee aan het klooien, en krijg het niet voor elkaar om het met jquery als invulling in de HTML INPUT te plaatsen.
En dat terwijl het JSON antwoord uit ajax wel goed is.

Maar met deze uitleg kreeg ik weer een nieuw inzicht. En aangezien het met JSON niet lukt, bedacht ik me dat ik het formulier ook in action_get.php kan opbouwen en vullen. Ik doe dat tenslotte ook met het opbouwen van een lijst.

Dus mijn voorlaatste idee om meer met JSON te gaan doen gooi ik over bord. Want HTML over gooien is wel makkelijker.

Bedankt voor zover.
Blijkbaar kijk je niet in de console van de devtools, want

var json = $.parseJSON(data);

levert een foutmelding op.

Omdat je aangeeft in de ajax aanroep dat er json terugkomt maakt jquery hiervan al een object
Alles over de schutting gooien als HTML kan, maar dat is dus een ontwerpbeslissing die je moet kunnen onderbouwen. Het zou niet uit moeten maken hoe de informatie aangeleverd wordt (HTML of JSON) en "krijg het anders niet aan de praat" is niet zo'n sterk argument.

En wat @Ger zegt dus. Bouw voorzieningen in om fouten te kunnen detecteren en gebruik de reeds aanwezige tools hiervoor.

Als je gebruik maakt van technieken als AJAX dan zul je moeten leren om je console + je netwerktab in de gaten te houden, omdat deze je dus een heleboel (kunnen) vertellen over wat er allemaal onder water gebeurt. Anders ben je dus letterlijk blind aan het ontwikkelen en merk je pas helemaal aan het einde van de rit dat er dingen misgaan.

Weet niet wat voor browser je doorgaans gebruikt, maar zo'n developer toolbar zit meestal onder de F12-toets.
Ik heb de oplossing gevonden.....
Ik keek er steeds over heen.
succes: moest success: zijn. Zo simpel was het probleem. zucht... :-)

Ik gooi JSON dus niet over bord. Want het past beter bij mijn oorspronkelijke plan.

Bedankt voor de hulp tot zo ver.
Tip voor de toekomst: zet een simpel console.log() statement in het onderdeel wat je wenst te controleren, bijvoorbeeld als volgt:
$.ajax({
    ...
    'success': function(data) {
        console.log('success called!');
        ...
    }
});


Indien er vervolgens in je console geen boodschap "success called!" verschijnt, dan weet je dus dat dat deel van de code nooit bereikt wordt.

Op die manier heb je dit soort basale (spellings)fouten er snel uit, of kun je in ieder geval heel snel inzoomen op het probleemgebied door het toevoegen van meerdere boodschappen.

Reageren