met Ajax variabele naar php overbrengen
Pagina: « vorige 1 2 3 4 volgende »
Frits van Leeuwen op 05/05/2020 18:05:08:
Je zegt i.v.m. de scope werkt het mogelijk niet, die opmerking snap ik niet.
Scope is het geldigheidsgebied van variabelen en functies. Wanneer je dingen in verschillende $().ready( ... ) blokken zet dan weten deze niets van elkaar.
Frits van Leeuwen op 05/05/2020 18:05:08:
Bij het toevoegen gebruik ik POST. Als ik die nu wil samenvoegen met lijst, dan kan ik toch geen GET gebruiken? Of kan heb ik het mis?
Dit zijn toch verschillende AJAX-calls? :/
En je hebt er dus in principe maar twee nodig:
Eén AJAX call (GET) voor het ophalen van de lijst.
Eén AJAX call (POST) voor het uitvoeren van acties (toevoegen/wijzigen/verwijderen).
Ik heb de functie refreshTable zowel binnen de $(document).ready als er buiten geplaatst, dat maakt voor mij geen verschil voor de werking.
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// pagina is open
$( document ).ready(function()
{
$('#Add_Form').hide();
$('#Update_Form').hide();
// zet hier je overige klik events, al is er in principe dus maar 1 nodig
// roep in het success() deel refreshTable() aan voor het verversen van de tabel
// ...
// en tot slot eenmalige functie-aanroep bij het laden van de pagina
refreshTable();
});
// functie definitie
function refreshTable()
{
$.ajax(
{
url: 'action_list.php',
data:
{
'query': "SELECT menu_id, menu_waarde, menu_sub_van, menu_tekst, menu_link FROM tabel_menu ORDER BY menu_waarde, menu_sub_van"
},
dataType: 'html', // HTML code om een tabel te plaatsen of te refreshen
method: 'GET', // je haalt informatie op
success: function(data)
{
$('#Listed_Rows').html(data);
}
});
} // einde function refreshTable
$( "#Add_Row" ).submit(function(e)
{
e.preventDefault(); // hier vangen we het daadwerkelijk submitten van het formulier af
$.ajax
({
url: 'action_add.php',
method: 'POST',
data:
{
'query': "INSERT INTO tabel_menu ( menu_id, menu_waarde, menu_sub_van, menu_tekst, menu_link ) VALUES ( NULL, '" + $('#fwaarde').val() + "', '" + $('#fsubvan').val() + "', '" + $('#ftekst').val() + "', '" + $('#flink').val() + "' )"
},
success: function()
{
refreshTable();
}
});
// formulieren en knoppen tonen of verbergen en waardes weer uitschakelen.
$('#Button_Add').show(); // toevoegknop tonen
$('#Add_Form').hide(); // toevoeg formulier verbergen
});
$( document ).ready(function()
{
$('#Add_Form').hide();
$('#Update_Form').hide();
// zet hier je overige klik events, al is er in principe dus maar 1 nodig
// roep in het success() deel refreshTable() aan voor het verversen van de tabel
// ...
// en tot slot eenmalige functie-aanroep bij het laden van de pagina
refreshTable();
});
// functie definitie
function refreshTable()
{
$.ajax(
{
url: 'action_list.php',
data:
{
'query': "SELECT menu_id, menu_waarde, menu_sub_van, menu_tekst, menu_link FROM tabel_menu ORDER BY menu_waarde, menu_sub_van"
},
dataType: 'html', // HTML code om een tabel te plaatsen of te refreshen
method: 'GET', // je haalt informatie op
success: function(data)
{
$('#Listed_Rows').html(data);
}
});
} // einde function refreshTable
$( "#Add_Row" ).submit(function(e)
{
e.preventDefault(); // hier vangen we het daadwerkelijk submitten van het formulier af
$.ajax
({
url: 'action_add.php',
method: 'POST',
data:
{
'query': "INSERT INTO tabel_menu ( menu_id, menu_waarde, menu_sub_van, menu_tekst, menu_link ) VALUES ( NULL, '" + $('#fwaarde').val() + "', '" + $('#fsubvan').val() + "', '" + $('#ftekst').val() + "', '" + $('#flink').val() + "' )"
},
success: function()
{
refreshTable();
}
});
// formulieren en knoppen tonen of verbergen en waardes weer uitschakelen.
$('#Button_Add').show(); // toevoegknop tonen
$('#Add_Form').hide(); // toevoeg formulier verbergen
});
Het bestand action_list.php ziet er als volgt uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
// action_list.php
// Met dit bestand kan je een tabel tonen.
include("init.php");
include("databaseopenen.php"); // openen van de database
$result_list = mysqli_query($connect, $_GET['query']);
$field_cnt = mysqli_num_fields($result_list);
while ($row = mysqli_fetch_array($result_list, MYSQLI_NUM))
{
// *** regel maken ***
$line = "<tr id='regel" . $row[0] . "'>";
for ($i = 1; $i <= ($field_cnt-1); $i++)
{
$line = $line . "<td>".$row[$i]."</td>";
}
$line = $line . "</tr>";
// *** einde regel maken ***
echo $line;
}
?>
// action_list.php
// Met dit bestand kan je een tabel tonen.
include("init.php");
include("databaseopenen.php"); // openen van de database
$result_list = mysqli_query($connect, $_GET['query']);
$field_cnt = mysqli_num_fields($result_list);
while ($row = mysqli_fetch_array($result_list, MYSQLI_NUM))
{
// *** regel maken ***
$line = "<tr id='regel" . $row[0] . "'>";
for ($i = 1; $i <= ($field_cnt-1); $i++)
{
$line = $line . "<td>".$row[$i]."</td>";
}
$line = $line . "</tr>";
// *** einde regel maken ***
echo $line;
}
?>
De volgende vraag die ik nu heb, is hoe ik de regel aanklikbaar kan maken met jquery. Want dan moet ik natuurlijk het scherm om te muteren open zetten om te gebruiken. Iedere regel heet id='regelX' waar bij X voor een id-nummer staat. Dus id='regel1',id='regel2' enz.
Toevoeging op 06/05/2020 23:36:11:
Stapje voor stapje kom ik verder.
De regels zijn aanklikbaar. De aangeklikte regel verdwijnt en er opent een formulier om te muteren.
De juiste knoppen worden aan gezet. En ik heb het ID nummer in een variabele.
de tabel hoeft niet alle velden te bevatten die het Mutatie_form bevat. Dus vraag ik me nu af, hoe krijg ik het Mutatie_Form gevuld met de informatie die in het record van het ID staat.
Hier onder de code om het formulier in te gaan, Id te pakken, formulier te openen, knoppen in te stellen, en de velden waarden te geven. Alleen nu heb ik daar 'xxxx' ingevuld. (dat moet natuurlijk anders.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$('#Listed_Rows').delegate("tr", "click", function()
{
var idstr = '#'+$(this).attr('id');
var id = idstr.substr(5);
$('#'+this.id).siblings().show(); // alle regels tonen
$('#'+this.id).hide();
$('#Mutatie_Form').show(); // formulier tonen
$('#Button_Add').hide(); // toevoegknop verbergen
$('#Button_Cancel_Add').hide();
$('#Button_Save_Add').hide();
$('#Button_Cancel_Update').show();
$('#Button_Save_Update').show();
$('#Button_Delete_Verzoek').show();
$('#Delete_Yes_No').hide(); // verwijderverzoek verbergen
// velden moeten gevuld worden
$('#fidnr').val('xxxx');
$('#fwaarde').val('xxxx');
$('#fsubvan').val('xxxx');
$('#ftekst').val('xxxx');
$('#flink').val('xxxx');
$('#fwaarde').focus();
});
{
var idstr = '#'+$(this).attr('id');
var id = idstr.substr(5);
$('#'+this.id).siblings().show(); // alle regels tonen
$('#'+this.id).hide();
$('#Mutatie_Form').show(); // formulier tonen
$('#Button_Add').hide(); // toevoegknop verbergen
$('#Button_Cancel_Add').hide();
$('#Button_Save_Add').hide();
$('#Button_Cancel_Update').show();
$('#Button_Save_Update').show();
$('#Button_Delete_Verzoek').show();
$('#Delete_Yes_No').hide(); // verwijderverzoek verbergen
// velden moeten gevuld worden
$('#fidnr').val('xxxx');
$('#fwaarde').val('xxxx');
$('#fsubvan').val('xxxx');
$('#ftekst').val('xxxx');
$('#flink').val('xxxx');
$('#fwaarde').focus();
});
Gewijzigd op 06/05/2020 00:22:48 door Frits van Leeuwen
Uhm... Een AJAX-call om de informatie op te halen?
Tot zover geen probleem denk ik. Maar hoe stop ik dan de velden van het record in de velden van het formulier?
Ik ben haar het googlen gegaan, en heb misschien een oplossing gevonden, maar ik moet me er nog toe zetten om het te proberen.
- Haal het resultaat als een HTML-puzzelstukje op.
- Spuug het resultaat uit in een JSON-formaat, zodat je die eindelijk zelf kan uitlezen met via bijv. jQuery met .parseJSON()
Dat laatste geeft mij voorkeur als het om data gaat. Als het meer om een aparte pagina gaat, dan is HTML een mogelijkheid. Maar je zorgt er wel voor dat je HTML in je request-scripts terecht komt. Niet echt handig bij onderhoud. Je zou dit eventueel als je een template-systeem gebruikt, dit als een template-file kunnen onderbrengen.
Gewijzigd op 07/05/2020 22:02:04 door - Ariën -
Ik heb iets in elkaar geflanst, Maar het werkt nog niet zoals ik wil.
Met de volgende code roep ik met ajax action_get.php op. Waar ik een json string maak. Deze wil ik dan via de jquery gelijkin de velden van mijn form gooien.
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$('#Listed_Rows').delegate("tr", "click", function()
{
var idstr = '#'+$(this).attr('id');
var id = idstr.substr(5);
$('#'+this.id).siblings().show(); // alle regels tonen
$('#'+this.id).hide();
$('#Mutatie_Form').show(); // formulier tonen
$('#Button_Add').hide(); // toevoegknop verbergen
$('#Button_Cancel_Add').hide();
$('#Button_Save_Add').hide();
$('#Button_Cancel_Update').show();
$('#Button_Save_Update').show();
$('#Button_Delete_Verzoek').show();
$('#Delete_Yes_No').hide(); // verwijderverzoek verbergen
// velden moeten gevuld worden
$.ajax(
{
url: 'action_get.php',
data:
{
'action': 'ShowRecord',
'query': "SELECT menu_id, menu_waarde, menu_sub_van, menu_tekst, menu_link FROM tabel_menu WHERE menu_id="+id
},
dataType: 'json', // json code naar form te halen
method: 'GET' // je haalt informatie op
}).done(function( data )
{
var result = $.parseJSON(data);
$('#fidnr').val(result[menu_id]);
$('#fwaarde').val(result[menu_waarde]);
$('#fsubvan').val(result[menu_sub_van]);
$('#ftekst').val(result[menu_tekst]);
$('#flink').val(result[menu_link]);
});
$('#fwaarde').focus();
});
{
var idstr = '#'+$(this).attr('id');
var id = idstr.substr(5);
$('#'+this.id).siblings().show(); // alle regels tonen
$('#'+this.id).hide();
$('#Mutatie_Form').show(); // formulier tonen
$('#Button_Add').hide(); // toevoegknop verbergen
$('#Button_Cancel_Add').hide();
$('#Button_Save_Add').hide();
$('#Button_Cancel_Update').show();
$('#Button_Save_Update').show();
$('#Button_Delete_Verzoek').show();
$('#Delete_Yes_No').hide(); // verwijderverzoek verbergen
// velden moeten gevuld worden
$.ajax(
{
url: 'action_get.php',
data:
{
'action': 'ShowRecord',
'query': "SELECT menu_id, menu_waarde, menu_sub_van, menu_tekst, menu_link FROM tabel_menu WHERE menu_id="+id
},
dataType: 'json', // json code naar form te halen
method: 'GET' // je haalt informatie op
}).done(function( data )
{
var result = $.parseJSON(data);
$('#fidnr').val(result[menu_id]);
$('#fwaarde').val(result[menu_waarde]);
$('#fsubvan').val(result[menu_sub_van]);
$('#ftekst').val(result[menu_tekst]);
$('#flink').val(result[menu_link]);
});
$('#fwaarde').focus();
});
action_get.php ziet er als volgt uit.
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
// action_get.php
// Met dit bestand kan je een tabel tonen of één record inlezen.
include("init.php");
include("databaseopenen.php"); // openen van de database
$result = mysqli_query($connect, $_GET['query']);
$total_fields = mysqli_num_fields($result);
switch($_GET['action'])
{
case 'ShowList':
while ($row = mysqli_fetch_array($result, MYSQLI_NUM))
{
// *** regel maken ***
$line = "<tr id='regel" . $row[0] . "'>";
for ($i = 1; $i <= ($total_fields-1); $i++)
{
$line = $line . "<td>".$row[$i]."</td>";
}
$line = $line . "</tr>";
// *** einde regel maken ***
echo $line;
}
break;
case 'ShowRecord':
while ($row = mysqli_fetch_assoc($result)) {
$line ="{ ";
for ($i = 0; $i <= ($total_fields-1); $i++)
{
if ($i << ($total_fields-1) )
{
$line = $line . mysql_fetch_field($result, $i) . " : " . $row[$i] . " , ";
}
else
{
$line = $line . mysql_fetch_field($result, $i) . " : " . $row[$i] ;
}
}
echo $line . " }";
}
break;
}
?>
// action_get.php
// Met dit bestand kan je een tabel tonen of één record inlezen.
include("init.php");
include("databaseopenen.php"); // openen van de database
$result = mysqli_query($connect, $_GET['query']);
$total_fields = mysqli_num_fields($result);
switch($_GET['action'])
{
case 'ShowList':
while ($row = mysqli_fetch_array($result, MYSQLI_NUM))
{
// *** regel maken ***
$line = "<tr id='regel" . $row[0] . "'>";
for ($i = 1; $i <= ($total_fields-1); $i++)
{
$line = $line . "<td>".$row[$i]."</td>";
}
$line = $line . "</tr>";
// *** einde regel maken ***
echo $line;
}
break;
case 'ShowRecord':
while ($row = mysqli_fetch_assoc($result)) {
$line ="{ ";
for ($i = 0; $i <= ($total_fields-1); $i++)
{
if ($i << ($total_fields-1) )
{
$line = $line . mysql_fetch_field($result, $i) . " : " . $row[$i] . " , ";
}
else
{
$line = $line . mysql_fetch_field($result, $i) . " : " . $row[$i] ;
}
}
echo $line . " }";
}
break;
}
?>
Ik krijg geen foutmeldingen, maar de velden blijven leeg.
Ik weet niet hoe ik kan zien of de ajax opdracht goed wordt uitgevoerd.
https://developers.google.com/web/tools/chrome-devtools/network
Dan kan je prima zien wat je AJAX-request aangeleverd krijgt voor data, en wat die uitspuugt.
Kijk eens in de Network-tab in je browser. Zie ook: Dan kan je prima zien wat je AJAX-request aangeleverd krijgt voor data, en wat die uitspuugt.
Zet geen SQL in je JavaScript.
Wat als een of andere clown daar "DELETE FROM users WHERE 1" van maakt ofzo?
Daarbij, waarom zou je het resultaat handmatig bouwen? Hiervoor is json_encode().
EDIT: Ook lijkt het mij een goede gewoonte om enerzijds in de AJAX-call op te nemen wat voor data je terugverwacht (via dataType) en anderzijds aan de PHP-kant aan te geven wat voor content je terugserveert middels een header('Content-Type: ...');. Een toevoeging van de character encoding kan ook geen kwaad.
Gewijzigd op 09/05/2020 00:54:53 door Thomas van den Heuvel
En ik zie een verouderde mysql_fetch_field functie met een flinke baard.
Beetje bij beetje leer ik ajax ook beter kennen. datatype altijd noemen lijkt me inderdaad een goede gewoonte. Maar dat vanuit de php terug mag je me nog wat verduidelijken. Die snap ik nog niet helemaal. Logisch lijkt het me wel.
oude mysql_fetch_field …. oeps even niet opgelet. Die kopieerde ik uit het gevonden google-resultaat
Bedankt weer voor deze feedback. Ik ga weer kijken wat ik er mee kan.
Gewijzigd op 09/05/2020 11:03:28 door Frits van Leeuwen
In je query wil je uiteraard filteren op een bepaalde waarde/waardes. Dus een ID-nummer van bijv. een lid. Dan geef je uiteraard die mee in je AJAX-request, en uiteraard escape je deze in je query.
Je kunt dit op legio manieren invullen, zo zou je aparte acties voor alles (getAll) of voor een enkel (getOne) record kunnen maken. In het laatste geval heb je een verplichte "id" parameter nodig, anders weet je niet om welk record het gaat. Of je laat het afhangen van het aanwezig zijn of ontbreken van dit id of je één of alle records teruggeeft.
Quote:
Maar dat vanuit de php terug mag je me nog wat verduidelijken.
Alle requests en responses verlopen via het HTTP protocol (kijk eens in de netwerktab naar request en response headers...). Hierbij wordt oa onderhandeld over welke content je toestaat en hoe deze wordt aangeleverd. Als een webserver normaal gesproken een PHP-bestand uitbraakt dan zal dit meestal van het Content-Type text/html zijn. Als je een stuk content als JSON serveert dan zou je moeten aangeven dat dit JSON betreft. Al deze tekst heeft ook een encodering. Het beste lijkt mij altijd om expliciet aan te geven welke encodering je gebruikt, ten einde enige verwarring te voorkomen. Dit wordt met name belangrijk als jouw content diakritische tekens of multibyte karakters bevat. Je zou voor de gein eens kunnen kijken hoe snel jouw applicatie ontspoort als je ergens een trema in stopt.
Een typische snippet voor als je JSON serveert wordt zoiets als:
Code (php)
Bij alles wat je maakt, en vooral wanneer er allerlei interacties met gebruikers zijn, is het zaak dat je continu nadenkt over de veiligheid van je applicatie.
Het feit dat je dit alles voor je uitschuift ("Beveiligingen komen later aan bod, als ik over het internet heen wil.") plus de constante drang om delen of complete queries in JavaScript te stoppen zijn op zijn zachtst gezegd zorgwekkend.
Gewijzigd op 09/05/2020 13:23:33 door Thomas van den Heuvel
Maar als ik nu ga zoeken wat het probleem is, kom ik er achter dat de id die ik aan de query geef niet mee komt naar action_get.php . Als ik achter de query 5 i.p.v. id invul, dan krijg ik wel een antwoord.
Dus op de één of andere manier kan ik +id er niet achter zetten.
Hoe ik de query hier weg haal weet ik nu niet. Ik dacht hem eerst maar werkend te krijgen, en als dat gelukt is wil ik de query wel verstoppen. Maar waar en hoe? Daar heb ik nog geen idee van.
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$('#Listed_Rows').delegate("tr", "click", function()
{
var idstr = '#'+$(this).attr('id');
var idnr = idstr.substr(5);
$('#'+this.id).siblings().show(); // alle regels tonen
$('#'+this.id).hide();
$('#Mutatie_Form').show(); // formulier tonen
$('#Button_Add').hide(); // toevoegknop verbergen
$('#Button_Cancel_Add').hide();
$('#Button_Save_Add').hide();
$('#Button_Cancel_Update').show();
$('#Button_Save_Update').show();
$('#Button_Delete_Verzoek').show();
$('#Delete_Yes_No').hide(); // verwijderverzoek verbergen
// velden moeten gevuld worden
$.ajax(
{
url: 'action_get.php',
method: 'GET', // je haalt informatie op
dataType: 'json', // json code naar form te halen
data:
{
'action': 'ShowRecord',
'query_record': 'SELECT menu_id, menu_waarde, menu_sub_van, menu_tekst, menu_link FROM tabel_menu WHERE menu_id='+idnr
},
succes : function( data )
{
var result = $.parseJSON(data);
$('#fidnr').val(result[menu_id]);
$('#fwaarde').val(result[menu_waarde]);
$('#fsubvan').val(result[menu_sub_van]);
$('#ftekst').val(result[menu_tekst]);
$('#flink').val(result[menu_link]);
}
});
$('#fwaarde').focus();
});
{
var idstr = '#'+$(this).attr('id');
var idnr = idstr.substr(5);
$('#'+this.id).siblings().show(); // alle regels tonen
$('#'+this.id).hide();
$('#Mutatie_Form').show(); // formulier tonen
$('#Button_Add').hide(); // toevoegknop verbergen
$('#Button_Cancel_Add').hide();
$('#Button_Save_Add').hide();
$('#Button_Cancel_Update').show();
$('#Button_Save_Update').show();
$('#Button_Delete_Verzoek').show();
$('#Delete_Yes_No').hide(); // verwijderverzoek verbergen
// velden moeten gevuld worden
$.ajax(
{
url: 'action_get.php',
method: 'GET', // je haalt informatie op
dataType: 'json', // json code naar form te halen
data:
{
'action': 'ShowRecord',
'query_record': 'SELECT menu_id, menu_waarde, menu_sub_van, menu_tekst, menu_link FROM tabel_menu WHERE menu_id='+idnr
},
succes : function( data )
{
var result = $.parseJSON(data);
$('#fidnr').val(result[menu_id]);
$('#fwaarde').val(result[menu_waarde]);
$('#fsubvan').val(result[menu_sub_van]);
$('#ftekst').val(result[menu_tekst]);
$('#flink').val(result[menu_link]);
}
});
$('#fwaarde').focus();
});
De query hoort in je PHP, niet in je JavaScript!
Als ik in die buurt ook een alert(id); plaats krijg ik ook keurig het id nummer in beeld.
Met regel 5 en 6 stuur ik de lijst aan. Door er 1 regel tussen uit te halen. Dat doe ik via id.
De query moet ik dus opbouwen in action_get. Eerder deed ik al iets degelijks. toen had ik de velden die ik wilde hebben in de data gestopt. Dat zou ik dan weer doen.
Waar zag je dat idnr niet meegestuurd werd? In je Network-tab?
Je hebt wel de naam query_record aangepast? Dat is je $_GET namelijk.
- optioneel een actie
- optioneel een id
Dit doe je met 'method': 'GET' en in 'data' stop je het id en eventueel de action.
In het aangeroepen PHP-bestand vis je de id en eventueel de action uit $_GET. Als je je id in het veld 'pietjepuk' stopt moet je deze vervolgens ook weer uit $_GET['pietjepuk'] halen uiteraard.
Snap je nu ondertussen de interactie tussen de AJAX-call en het afhandelend PHP-bestand?
Vervolgens bouw je je query in dit PHP-bestand.
SQL in je JavaScript stoppen die je vervolgens letterlijk uitvoert is knetter lijp. Dit is nu al een aantal keren gemeld. Het enige variabele deel aan de PHP-kant is eventueel het id. Voordat je dit in je query gooit zou je ook moeten controleren of dit id numeriek was en tevens zou dit veld ge-escaped moeten worden, anders kan iemand hier een lap SQL aan vast breien waarmee een heleboel ongein uitgehaald kan worden (SQL-injectie).
Zoals @Ariën hierboven aangeeft kun je in je netwerktab zien hoe de request headers er uitzien. Hier zou je de verstuurde data in terug moeten zien.
Ontwikkel anders dit PHP-bestand eerst eens in afzondering van al die AJAX-zut, zorg dat dit werkt, en klik dit vervolgens aan elkaar.
Ik kan je wel een compleet werkend voorbeeld geven maar dan schieten we het doel een beetje voorbij. Je moet zelf snappen hoe dit werkt en hoe je deze principes zou moeten toepassen.
Anders wil ik het ook wel betaald doen :p.
Gewijzigd op 10/05/2020 01:08:50 door Thomas van den Heuvel
Query kent jquery standaard ook niet, dit is een component uit php. client-sided & serversided zijn op deez manier niet te mixen..
Heb het idee dat je beter de mogelijkheden via php af kunt lopen en de uitkomst via jquery-ajaax weer geeft want het aantal mogelijkheden die je gebruikt is zeer vors....
Gewijzigd op 10/05/2020 04:09:36 door Yoop Overmaat
Database-queries kent jQuery standaard inderdaad niet. Maar dat er een query wordt doorgegeven boeit jQuery dan ook werkelijk niks, en hij behandelt het gewoon als tekst. Ik denk dat dat de gedachtegang van de topicstarter zou zijn geweest. Zoals Thomas als zegt is dit zwaar onveilig! Daarom is het zeer verstandig om de data die je aan je query wilt meegeven, zoals een ID-nummer, deze enkel als data mee te geven. Je query is namelijk iets wat serverside plaatsvindt, en daar ook hoort.
Zo geeft hij het id nummer als nummer door. Dan werkt het wel.
De aanwijzingen van Yoop Overmaat ook even ter harte genomen. Het is een kleine moeite om de naamgeving van variabele aan te passen.
Ik ga de query's opsplitsen. Ik zou alles kunnen overgooien naar de action_get.php en action_post.php, maar ik wilde die juist Multi inzetbaar maken.
Mijn gedachte is nu om de tabel te noemen, de actie, een voorwaarde-veld en een voorwaarde-antwoord.
Bij een lijst wil ik ook de benodigde velden noemen, Omdat ik niet alle velden wil gebruiken.
Onderin ajax heb ik nu dit staan:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
succes : function( data )
{
var result = JSON.parse(data);
$('#fidnr').val(result.menu_id);
$('#fwaarde').val(result.menu_waarde);
$('#fsubvan').val(result.menu_sub_van);
$('#ftekst').val(result.menu_tekst);
$('#flink').val(result.menu_link);
}
{
var result = JSON.parse(data);
$('#fidnr').val(result.menu_id);
$('#fwaarde').val(result.menu_waarde);
$('#fsubvan').val(result.menu_sub_van);
$('#ftekst').val(result.menu_tekst);
$('#flink').val(result.menu_link);
}
Maar daarmee wordt er niets overgenomen.
Bij Netwerk lees ik het antwoord:
"{ menu_id :3 , menu_tekst :menu beheer , menu_waarde :80 , menu_sub_van :8 , menu_link :beheer_menu.php , menu_reg_date :2020-04-25 16:51:11 }"