Hulp gezocht bij maken van kruistabel
Als dit allemaal nieuw is dan zul je wel wat tijd en energie moeten investeren om dit te begrijpen en onder de knie te krijgen. Dus wordt dit voor nu even een stap zijwaarts.
Gewijzigd op 25/08/2019 18:57:12 door Frank Nietbelangrijk
Zorg dat je eerst inziet wat een Javascript AJAX-request is, en wat het doet. En hoe het werkt. In combinatie met de jQuery-library is het uitlezen en aanpassen van de HTML-elementen erg eenvoudig.
Gewijzigd op 25/08/2019 18:52:49 door - Ariën -
Kortom hier kom ik niet verder mee. Dit zijn ook technieken waarvan ik zelf denk dat ik uren/dagen/weken bezig ben om een te uberhaupt er wat van te begrijpen.
Ga het wel over een ander boeg gooien en ik probeer iemand via die 'vacature forum' te vinden die me hiermee wil helpen. Daar mag een tarief tegenover staan. Even uitvogelen om dat forum in elkaar steekt.
Niet lastig, alleen de criteria doornemen en toepassen.
Jouw huidige opzet hebben we al onderzocht. Om één gigantische update te doen over alle gebruikers/rollen of zelfs alle rollen van een enkele gebruiker (dat is mij niet helemaal duidelijk, wil je het een, of het ander, of allebei, oftewel, hoe luidt nou precies *jouw* functionele spec?) lijkt mij enigszins risicovol, voornamelijk omdat je niet de middelen hebt om zo'n (middel)grote mutatie "atomair" (als één ondeelbare actie) te laten verlopen. En dat is weer een gevolg van het feit dat je geen (echte) relationele database gebruikt, maar MyISAM-tabellen. En zelfs dan zou dat mijn voorkeur niet hebben.
Dus okay, dan ga je naar een strategie kijken die (bijvoorbeeld) één mutatie per keer verricht (andere opties mogelijk?): het toevoegen of verwijderen van een enkele rol. Dat is functioneel dus wellicht een betere aanpak. En vervolgens ga je dus kijken naar een implementatiemethode hiervoor. Dan check je in je gereedschapskist of je zoiets hebt, en anders kijk je eens hoe andere mensen dat aanvliegen.
Maar allereerst moet je dus een soort van PLAN hebben, voordat je begint te rennen. Maakt niet uit of je niet direct weet hoe je dit implementeert, maar als je een functionele specificatie hebt (een abstract IDEE van wat er moet gebeuren, dus een soort van boodschappenlijst: dit zijn de acties die achtereenvolgens moeten gebeuren, zonder hierin enige techniek te betrekken, want dat is dan weer implementatie) dan is echt 50% van het werk al gedaan. De implementatie is "slechts" een (mogelijk haast willekeurige) uitdraai van een functionele spec...
Dit is toch een beetje hoe je in zijn algemeenheid software ontwikkelt dacht ik.
Gewijzigd op 25/08/2019 19:25:06 door Thomas van den Heuvel
De opdracht lijkt uitgesproken vrij eenvoudig te zijn maar klaarblijkelijk heb ik Plan van aanpak, functioneel- en technische ontwerp nodig terwijl ik van alle kant met handjes en voetjes gebonden ben. Ik hoop dat ik iemand daar tref die eea wil bouwen.
(Het linkje wordt dan zoiets als http://mijndomein.nl/users/edit-roles?id=4)
Op die pagina maak je vervolgens het formulier waarmee je de rol van de gebruiker kunt aanpassen....
Deze pagina moet dan uiteraard alleen toegankelijk zijn voor gebruikers met voldoende rechten
Gewijzigd op 26/08/2019 08:49:16 door Frank Nietbelangrijk
dit zou dan betekenen dat voor iedere gebruiker een pagina moet worden geopend? Dit lijkt me niet zo werkbaar. Maar ik kan niet helemaal goed beoordelen hoe je dat dan voor ogen ziet. Let op.. ik hoef de rol van gebruiker niet aan te passen he.... alleen de rollen die aan een gebruiker zijn gekoppeld. Inhoudelijke rolaanpassing zijn hier niet van toepassing
ps.. ingesloten link werkt niet
Quote:
Maar de wens blijft om een rol aan iemand te kunnen koppelen of in te trekken op welke vorm dan ook. Inmiddels heb ik een post gedaan in de vacture deel.
Deze functionaliteit staat in principe helemaal los van de rest. Dit onderdeel zou je dus ook in complete isolatie van de rest kunnen aanpakken. Ook zou je dus een soort van prototype of proof of concept kunnen bouwen die precies doet wat jij wilt. Het lijkt mij handig en verstandig om dit soort dingen ook te compartimenteren. Alles bij elkaar is dit dan weliswaar een redelijk complex ding, maar als je dit onderdeel per onderdeel aftikt dan valt dit allemaal reuze mee. Zoals vanouds: verdeel en heers.
Quote:
klaarblijkelijk heb ik Plan van aanpak, functioneel- en technische ontwerp nodig terwijl ik van alle kant met handjes en voetjes gebonden ben
Je hoeft dit alles helemaal niet over een zwaar gedocumenteerde boeg te gooien, maar je moet op zijn minst weten wat je gaat maken en waarom je voor die aanpak kiest. Dit zijn namelijk stuk voor stuk ontwerpbeslissingen die een directe invloed hebben hoe iets (technisch) werkt en hoe iets er (visueel) uit komt te zien. Dit moet dus echt gebaseerd zijn op en onderbouwd worden door argumenten, je moet deze beslissingen namelijk altijd kunnen verdedigen.
Als je dit niet doet dan bedien je je al snel van een aanpak die nergens op gebaseerd is en dan is elke structuur letterlijk en figuurlijk ver te zoeken, en deze structuur kan juist een enorme bijdrage leveren aan het begrip. Je overtuigt jezelf als het ware van je handelswijze en dat levert gigantisch veel inzicht op omdat je hebt uitgezocht wat de mogelijkheden zijn, en je hebt uiteindelijk vanwege redenen xyz bewust gekozen voor een specifieke aanpak.
Wat ik tot nu toe heb gezien in deze en andere threads zijn in zekere zin "groeipijnen", je moet jezelf iets eigen maken wat je nog niet echt beheerst. En dat is ingewikkeld, dat snap ik, maar ik denk dat als je de hele tijd flippert tussen "gaan we doen" en "gaat me nooit lukken" dat dit een proces van wringen en wurgen wordt / blijft.
Zoals met zoveel vraagstukken op dit forum is "het probleem" niet zozeer het probleem, maar meer de benadering en aanpak van "het probleem". Dit is meer een kwestie van "mentale" training en vergt een wat abstractere benadering van een programmeervraagstuk dan dat dit nu echt over "parate kennis" gaat.
Vraagstukken zijn ook zelden tot nooit uniek in die zin dat jij de enige bent die tegen dat unieke probleem aanloopt. Ga dus eens op zoek naar informatie over simpele voorbeelden die ongeveer doen wat jij wilt en ga daar dan mee aan de slag. Kijk ook een naar AJAX/asynchrone requests et cetera. Zelfs als je helemaal geen fantasie hebt zou je altijd nog kunnen kijken wat anderen doen. Maak jezelf hiermee vertrouwd als instrument voor het oplossen van programmeervraagstukken: simpelweg Googlen.
Of je moet besluiten dat hier je interesse overduidelijk niet ligt en abstract denkvermogen jouw ding niet is, of dat je (grote) moeite hebt met het leren van nieuwe dingen ofzo (hey, wie heeft dit niet?), ik heb dit (laatste) zelf ook een beetje, dat ik niet graag uit mijn comfort zone treed. Ik bedoel dat kan, dat is geen oordeel ofzo, mensen zijn gewoon verschillend. Zou je toch voorstellen om de knoop door te hakken want ik krijg de indruk dat de enige begrenzing een soort van overmachtsgevoel is ofzo, ik heb verder volgens mij nog niet over andere begrenzingen gehoord. Maar dat kan dus voor een groot deel, of misschien wel helemaal, gecompenseerd worden door een andere benadering of "mindset" van het vraagstuk.
Gewijzigd op 26/08/2019 19:23:06 door Thomas van den Heuvel
Ik dacht dat wat ik nu zou willen wel inmiddels duidelijk is. Hoe te realiseren nog niet. Maar ik heb hier een op de vacature deel ook een oproep geplaatst. Hopelijk reageert iemand daar. Want dit is niet helemaal mijn ding merk ik wel. Ben al heel blij met het overzicht wat er nu staat hoor. Het geeft een mooi inzicht wie welke rol heeft. Maar het muteren zou een fantastische uitbreiding zijn.
Dirk Huizinga op 26/08/2019 15:46:09:
dit zou dan betekenen dat voor iedere gebruiker een pagina moet worden geopend?
Je opent de pagina van de gebruiker waarvan je de rollen die aan hem gekoppeld zijn wilt wijzigen. Dit is niet meer dan een muisklik. Je hoeft maar één (dynamische) pagina te maken.
Dirk Huizinga op 26/08/2019 15:46:09:
Let op.. ik hoef de rol van gebruiker niet aan te passen he.... alleen de rollen die aan een gebruiker zijn gekoppeld.
Oke maar dat maakt verder geen verschil
Dirk Huizinga op 26/08/2019 15:46:09:
ps.. ingesloten link werkt niet
Klopt. Het is als voorbeeld bedoeld hoe je de pagina waarin je de gebruiker aan zijn rollen koppelt aan kunt roepen. Merk op dat je de gebruikers_id meegeeft als GET variabele.
Toevoeging op 27/08/2019 09:12:41:
Misschien is de zoekterm php crud example interessant?
Gewijzigd op 27/08/2019 09:13:32 door Frank Nietbelangrijk
wanneer ik op link klik dan wordt een formulier getoond met twee gevulde velden met de waarden die ik heb meegegeven in de link.... ik zou dus zeggen nu ff op het knoppie Opslaan klikken en dan wordt de koppeling toegevoegd aan de database.... Maar dat lukt dus niet... er wordt niets weggeschreven... zit te puzzelen hoe dit kan en wat proberen...
Het zal ongetwijfeld met ON SUBMIT te maken hebben. we blijven proberen
- De action van het formulier is niet correct
- De afhandeling van je formulier klopt niet
- Je query mislukt.
Het is een kwestie van debuggen, en stap voor stap een string plaatsen om te kijken waar het spaak loopt, en welke route wel wordt bewandeld door je script.
het is niet een kwestie van iets roepen en dat ik dan alles maar snap
Het is iets wat bij de basis hoort, als je iets wilt programmeren.
Toevoeging op 28/08/2019 09:41:53:
Algemene tip:
Op php.net vindt je uitgebreide informatie over iedere functie in php (bijvoorbeeld de functie mysqli_query). Bij het kopje Return Values staat beschreven wat de functie mogelijk voor waarden terug kan geven. Door deze waarden vervolgens te testen in je programma kun je achterhalen of er een fout optreedt. Wanneer dat het geval is zou je een nette melding kunnen tonen. Het resultaat is dat je minder hoeft te gissen en sneller fouten oplost.
Code (php)
Gewijzigd op 28/08/2019 09:50:05 door Frank Nietbelangrijk
vorige variant hier een "mockup" met jQuery/AJAX. Het enige wat ontbreekt is een koppeling met de database, met daarbij:
- het uitlezen van de rollen, gebruikers, en de koppelingen hiertussen
- communicatie met de koppeltabel in de AJAX-call
Het enige wat in wezen verschilt is dat ik enkele cellen heb voorzien van een id en wat data-attributen, de rest is wat jQuery. De syntax lijkt ingewikkeld, maar alle afzonderlijke operaties zijn in principe bij elkaar te Googlen. En ja, dat kost wat tijd als hier niet vertrouwd mee bent, maar met wat annotatie in code en fatsoenlijke naamgeving van de variabelen zou je hier toch chocola van moeten kunnen maken.
Uiteraard moeten deze scripts ook afgeschermd worden van de buitenwereld met authenticatie of wat dan ook... Het gaat hier puur om de werking, niet om security of precieze database-operaties of wat dan ook. Dat zou je zelf wel in moeten kunnen vullen. Dit alles zou je in ieder geval een idee/aanzet moeten geven.
style.css
index.php
ajax.php
werkend voorbeeld
Vragen? Vragen!
Voortbordurend op mijn - het uitlezen van de rollen, gebruikers, en de koppelingen hiertussen
- communicatie met de koppeltabel in de AJAX-call
Het enige wat in wezen verschilt is dat ik enkele cellen heb voorzien van een id en wat data-attributen, de rest is wat jQuery. De syntax lijkt ingewikkeld, maar alle afzonderlijke operaties zijn in principe bij elkaar te Googlen. En ja, dat kost wat tijd als hier niet vertrouwd mee bent, maar met wat annotatie in code en fatsoenlijke naamgeving van de variabelen zou je hier toch chocola van moeten kunnen maken.
Uiteraard moeten deze scripts ook afgeschermd worden van de buitenwereld met authenticatie of wat dan ook... Het gaat hier puur om de werking, niet om security of precieze database-operaties of wat dan ook. Dat zou je zelf wel in moeten kunnen vullen. Dit alles zou je in ieder geval een idee/aanzet moeten geven.
style.css
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
/*
NOTES
- choose an appropriate value for the minimum cell width (table.matrix td min-width)
*/
table.matrix { border-collapse: collapse; border-style: solid; border-width: 1px; border-color: #aaaaaa; }
table.matrix td { height: 25px; margin: 0; padding: 0; border-style: solid; border-width: 1px; min-width: 50px; text-align: center; }
table.matrix td a { display: block; width: 100%; height: 100%; text-decoration: none; color: #000000; line-height: 25px; }
table.matrix td a.checked { background-color: #ccffcc; }
table.matrix td a.unchecked { background-color: #ffcccc; }
table.matrix td a.waiting { background-color: #ffffcc; }
NOTES
- choose an appropriate value for the minimum cell width (table.matrix td min-width)
*/
table.matrix { border-collapse: collapse; border-style: solid; border-width: 1px; border-color: #aaaaaa; }
table.matrix td { height: 25px; margin: 0; padding: 0; border-style: solid; border-width: 1px; min-width: 50px; text-align: center; }
table.matrix td a { display: block; width: 100%; height: 100%; text-decoration: none; color: #000000; line-height: 25px; }
table.matrix td a.checked { background-color: #ccffcc; }
table.matrix td a.unchecked { background-color: #ffcccc; }
table.matrix td a.waiting { background-color: #ffffcc; }
index.php
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
// normally, this information comes from a database
$users = array(
1 => array('name' => 'GOD', 'roles' => array(1 => true)),
2 => array('name' => 'Bob', 'roles' => array(2 => true, 3 => true)),
3 => array('name' => 'Joe', 'roles' => array(3 => true)),
4 => array('name' => 'Bubba', 'roles' => array(4 => true)),
);
$roles = array(
1 => 'developer',
2 => 'administrator',
3 => 'moderator',
4 => 'only human',
);
// calculate how often a role is used
$roleCount = array();
foreach ($roles as $id => $whatever) {
$roleCount[$id] = 0;
}
foreach ($users as $user) {
foreach ($user['roles'] as $id => $whatever) {
// if we can assume $user['roles'] only contains existing roles we can drop this if-statement
if (isset($roleCount[$id])) {
$roleCount[$id]++;
} else {
// nonexisting role?
}
}
}
header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>interactive matrix</title>
<link href="style.css?<?php echo $_SERVER['REQUEST_TIME']; ?>" rel="stylesheet" type="text/css">
<!-- grab jQuery from CDN, for more stable performance download your own copy and refer to it locally -->
<script
src="https://code.jquery.com/jquery-1.12.4.min.js"
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
crossorigin="anonymous"></script>
</head>
<body>
<table border="1" class="matrix" id="matrix">
<!-- user row, initial cell is for role and role usage count column, hence colspan 2 -->
<tr><td colspan="2"> </td><?php
foreach ($users as $userId => $user) {
?><td><?php echo $user['name']; ?></td><?php
}
?></tr>
<!-- user role count row -->
<tr><td> </td><td>#</td><?php
foreach ($users as $userId => $user) {
?><td id="userRoleCount-<?php echo $userId; ?>"><?php echo count($user['roles']); ?></td><?php
}
?></tr>
<!-- the actual user-role matrix -->
<?php
foreach ($roles as $roleId => $roleName) {
?><tr id="roleRow-<?php echo $roleId; ?>">
<td><?php echo $roleName; ?></td>
<td id="roleCount-<?php echo $roleId; ?>"><?php echo $roleCount[$roleId]; ?></td><?php
foreach ($users as $userId => $user) {
$checked = isset($user['roles'][$roleId]);
?><td><a href="javascript:void(0);" data-user="<?php echo $userId; ?>" data-role="<?php echo $roleId; ?>" data-checked="<?php echo ($checked ? '1' : '0'); ?>" class="<?php echo ($checked ? 'checked' : 'unchecked'); ?>"><?php echo ($checked ? '✔' : '✖'); ?></a></td><?php
}
?></tr><?php
}
?></table>
<script type="text/javascript">
//<![CDATA[
$().ready(function() {
// no need to make a delegated onclick as the table itself is not dynamic
$('table#matrix a').on('click', function(e) {
e.preventDefault();
var userId = $(this).attr('data-user');
var roleId = $(this).attr('data-role');
var checked = $(this).attr('data-checked');
console.log('click on user '+userId+', role '+roleId+', checked '+checked);
$(this).removeClass('checked').removeClass('unchecked').addClass('waiting').html('☎');
var that = this; // save reference to hyperlink
$.ajax({
'url': 'ajax.php',
'data': {'user': userId, 'role': roleId, 'checked': checked },
'dataType': 'json',
'success': function(data) {
if (data.status == 'ok') {
// update checked value
$(that).attr('data-checked', data.checked);
// update user role count
var userRoleCount = 0;
$('table#matrix a[data-user='+data.user+']').each(function() {
if ($(this).attr('data-checked') == 1) {
userRoleCount++;
}
});
$('#userRoleCount-'+data.user).html(userRoleCount);
// update role count
var roleCount = 0;
$('#roleRow-'+data.role+' a').each(function() {
if ($(this).attr('data-checked') == 1) {
roleCount++;
}
});
$('#roleCount-'+data.role).html(roleCount);
// update icon
var cssClass = data.checked ? 'checked' : 'unchecked';
var icon = data.checked ? '✔' : '✖';
$(that).removeClass('waiting').addClass(cssClass).html(icon);
} else {
alert('error retrieving data :(');
}
}
});
})
});
//]]>
</script>
</body>
</html>
// normally, this information comes from a database
$users = array(
1 => array('name' => 'GOD', 'roles' => array(1 => true)),
2 => array('name' => 'Bob', 'roles' => array(2 => true, 3 => true)),
3 => array('name' => 'Joe', 'roles' => array(3 => true)),
4 => array('name' => 'Bubba', 'roles' => array(4 => true)),
);
$roles = array(
1 => 'developer',
2 => 'administrator',
3 => 'moderator',
4 => 'only human',
);
// calculate how often a role is used
$roleCount = array();
foreach ($roles as $id => $whatever) {
$roleCount[$id] = 0;
}
foreach ($users as $user) {
foreach ($user['roles'] as $id => $whatever) {
// if we can assume $user['roles'] only contains existing roles we can drop this if-statement
if (isset($roleCount[$id])) {
$roleCount[$id]++;
} else {
// nonexisting role?
}
}
}
header('Content-Type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>interactive matrix</title>
<link href="style.css?<?php echo $_SERVER['REQUEST_TIME']; ?>" rel="stylesheet" type="text/css">
<!-- grab jQuery from CDN, for more stable performance download your own copy and refer to it locally -->
<script
src="https://code.jquery.com/jquery-1.12.4.min.js"
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
crossorigin="anonymous"></script>
</head>
<body>
<table border="1" class="matrix" id="matrix">
<!-- user row, initial cell is for role and role usage count column, hence colspan 2 -->
<tr><td colspan="2"> </td><?php
foreach ($users as $userId => $user) {
?><td><?php echo $user['name']; ?></td><?php
}
?></tr>
<!-- user role count row -->
<tr><td> </td><td>#</td><?php
foreach ($users as $userId => $user) {
?><td id="userRoleCount-<?php echo $userId; ?>"><?php echo count($user['roles']); ?></td><?php
}
?></tr>
<!-- the actual user-role matrix -->
<?php
foreach ($roles as $roleId => $roleName) {
?><tr id="roleRow-<?php echo $roleId; ?>">
<td><?php echo $roleName; ?></td>
<td id="roleCount-<?php echo $roleId; ?>"><?php echo $roleCount[$roleId]; ?></td><?php
foreach ($users as $userId => $user) {
$checked = isset($user['roles'][$roleId]);
?><td><a href="javascript:void(0);" data-user="<?php echo $userId; ?>" data-role="<?php echo $roleId; ?>" data-checked="<?php echo ($checked ? '1' : '0'); ?>" class="<?php echo ($checked ? 'checked' : 'unchecked'); ?>"><?php echo ($checked ? '✔' : '✖'); ?></a></td><?php
}
?></tr><?php
}
?></table>
<script type="text/javascript">
//<![CDATA[
$().ready(function() {
// no need to make a delegated onclick as the table itself is not dynamic
$('table#matrix a').on('click', function(e) {
e.preventDefault();
var userId = $(this).attr('data-user');
var roleId = $(this).attr('data-role');
var checked = $(this).attr('data-checked');
console.log('click on user '+userId+', role '+roleId+', checked '+checked);
$(this).removeClass('checked').removeClass('unchecked').addClass('waiting').html('☎');
var that = this; // save reference to hyperlink
$.ajax({
'url': 'ajax.php',
'data': {'user': userId, 'role': roleId, 'checked': checked },
'dataType': 'json',
'success': function(data) {
if (data.status == 'ok') {
// update checked value
$(that).attr('data-checked', data.checked);
// update user role count
var userRoleCount = 0;
$('table#matrix a[data-user='+data.user+']').each(function() {
if ($(this).attr('data-checked') == 1) {
userRoleCount++;
}
});
$('#userRoleCount-'+data.user).html(userRoleCount);
// update role count
var roleCount = 0;
$('#roleRow-'+data.role+' a').each(function() {
if ($(this).attr('data-checked') == 1) {
roleCount++;
}
});
$('#roleCount-'+data.role).html(roleCount);
// update icon
var cssClass = data.checked ? 'checked' : 'unchecked';
var icon = data.checked ? '✔' : '✖';
$(that).removeClass('waiting').addClass(cssClass).html(icon);
} else {
alert('error retrieving data :(');
}
}
});
})
});
//]]>
</script>
</body>
</html>
ajax.php
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
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
<?php
sleep(1); // simulate wait time
$response = array(
'status' => 'error',
);
function isId($in) {
return preg_match('#^[1-9][0-9]*$#', $in) === 1;
}
// normally we check data with database and update stuff accordingly
if (
isset($_GET['user']) && isId($_GET['user']) &&
isset($_GET['role']) && isId($_GET['role']) &&
isset($_GET['checked']) && in_array($_GET['checked'], array('0', '1'))
) {
// for now just flip checked
$user = $_GET['user'];
$role = $_GET['role'];
$checked = 1 - $_GET['checked'];
$response = array(
'status' => 'ok',
'user' => $user,
'role' => $role,
'checked' => $checked,
);
}
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($response);
?>
sleep(1); // simulate wait time
$response = array(
'status' => 'error',
);
function isId($in) {
return preg_match('#^[1-9][0-9]*$#', $in) === 1;
}
// normally we check data with database and update stuff accordingly
if (
isset($_GET['user']) && isId($_GET['user']) &&
isset($_GET['role']) && isId($_GET['role']) &&
isset($_GET['checked']) && in_array($_GET['checked'], array('0', '1'))
) {
// for now just flip checked
$user = $_GET['user'];
$role = $_GET['role'];
$checked = 1 - $_GET['checked'];
$response = array(
'status' => 'ok',
'user' => $user,
'role' => $role,
'checked' => $checked,
);
}
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($response);
?>
werkend voorbeeld
Vragen? Vragen!
Gewijzigd op 28/08/2019 17:45:02 door Thomas van den Heuvel
Maar tja... dan zie ik dit pareltje... Prachtig. Hier ga ik zeker mee aan de slag want dit was wel wat ik aanvankelijk bedoelde en er hoeft niet steeds een pagina geopend te worden.. als op deze manier koppelingen tussen rol/persoon kan toevoegen/intrekken in een tabel werkt dit vele malen eenvoudiger en sneller...
Maar nogmaals mijn complimenten.