met Ajax variabele naar php overbrengen
Frits van Leeuwen op 10/05/2020 17:21:45:
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?
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.
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
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);
}
{
//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);
}
Toevoeging op 12/05/2020 22:59:34:
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:
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
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);
}
{
//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);
}
Toevoeging op 12/05/2020 23:00:58:
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:
Toevoeging op 12/05/2020 22:59:34:
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
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);
}
{
//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);
}
Toevoeging op 12/05/2020 22:59:34:
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:
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
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);
}
{
//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);
}
Toevoeging op 13/05/2020 00:31:04:
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:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
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;
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.
Maar ik heb een regel in mijn code:
Ik dacht dus dat als ik
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?
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:
Code (php)
1
2
3
2
3
$result_record = mysqli_query($connect, $_GET['query_record']);
$line_record = mysqli_fetch_array($result_record, MYSQLI_ASSOC);
echo json_encode($line_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.
Quote:
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.
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.
levert een foutmelding op.
Omdat je aangeeft in de ajax aanroep dat er json terugkomt maakt jquery hiervan al een object
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.
Gewijzigd op 15/05/2020 11:14:19 door Thomas van den Heuvel
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.
Gewijzigd op 15/05/2020 15:17:18 door Frits van Leeuwen
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$.ajax({
...
'success': function(data) {
console.log('success called!');
...
}
});
...
'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.
Daar ben ik weer. Ik was een tijdje weg doordat ik het programmeer werk niet kon voortzetten.
Thomas van den Heuvel, bedankt voor de tip.
Ik liep tegen een probleem op, waardoor ik even niet verder kon programmeren. Maar gelukkig na het nodige aanpassingen werkte alles ineens weer. Aansluitend kon ik de laatste stukjes ook werkend krijgen.
Ik kan nu toevoegen, wijzigen en verwijderen. Het toevoegen en wijzigen doe ik boven de lijst die ik in beeld heb. Het formulier dat ik daarbij gebruik gaat alleen open als ik het nodig heb.
Bij verwijderen krijg onder het formulier de vraag: "Weet je het zeker?" Met een Ja en een nee knop.
Bij nee verdwijnt de vraag en hou je het formulier open.
Bij ja verwijder ik het record en sluit ik het formulier en de vraag. Zo hou ik alleen de lijst over.
De volgende stap is zoeken.
Ik wil hiervoor het zelfde formulier gebruiken als voor toevoegen en muteren. Ik moet dan natuurlijk wel eerst wat knoppen en eventueel ook velden verbergen. En ik moet nog een zoekknop bedenken. Die wil ik onder de lijst zetten naast toevoegen.
En in het formulier moet er natuurlijk ook één staan.
Het resultaat van het zoeken moet dan in de lijst komen. Met daaronder een herstel knop om de volledige lijst weer te zien.
Maar ook sorteren van de lijst is iets dat mijn aandacht krijgt.
Als ik op een kop van de tabel klik, wil ik de lijst daarop laten sorteren. Klik ik er nog eens op, dan wordt hij de andere kant op gesorteerd.
Ik denk dat ik moet beginnen met een default situatie te maken. Deze wordt dan door het klikken op de koppen steeds aangepast en daarmee ook de lijst.