Hulp gezocht bij maken van kruistabel
Pagina: « vorige 1 2 3 4 5 volgende »
Ik hoop dat dit de zaak opheldert en dat we je alsnog kunnen helpen hier met je hulpvraag.
Want nu wordt het topic juist extra warrig, en dat willen we voorkomen. Ik hoop niet dat je dit ziet als pesterijen of iets dergelijks, maar je moet het enkel zien als een sturing zodat het forum en het topic overzichtelijk blijft.
Gewijzigd op 08/07/2019 23:01:01 door - Ariën -
Misschien even opnieuw beginnen?
@ Dirk Huizinga
Dit is een openbaar forum. Alles wordt hier in de openbaarheid besproken. Wil je privé-contact of privé-begeleiding dan kun je inderdaad beter, zoals Ariën voorstelde, een vacature plaatsen.
De opties zijn dus:
1) In de openbaarheid je probleem bespreken, zodat iedereen zich op het forum ermee kan bemoeien
2) Een vacature plaatsen als je 1-op-1 contact wil met iemand die het probleem tegen betaling oplost
Je moet voor jezelf uitmaken welke optie jouw voorkeur heeft.
Hoe jij jouw vraag stelt, ik citeer "Dit hoeft uiteraard niet kosteloos te zijn. Ga graag met iemand daarover in onderhandeling buiten het forum om." lijkt het alsof je voor optie 2 kiest waarbij je dus een vacature dient te plaatsen.
Als een vacature niet de bedoeling is, dan kun je je vraag gewoon hier op het forum stellen, maar dan kan dus ook iedereen erop reageren en is er geen sprake van 1-op-1 contact. Indien je voor deze optie kiest, dan is het wel de bedoeling dat je aangeeft wat je zelf al hebt geprobeerd met wat code erbij.
Hoop dat het zo wat duidelijker voor je is.
https://www.phphulp.nl/php/forum/topic/koppelings-matrix-hoe-maak-je-die/102754/
Helaas hebben we niks meer van hem gehoord hierover, dus mogelijk zat hij al dicht in de buurt van een goede oplossing die hem gegeven is?
Ben alweer bijna een hele zaterdag bezig om een kruistabel in elkaar te flansen... Tjee zeg.. in tegenstelling at jullie zeggen dat het allemaal voorgekauwd is blijft het wel puzzelen voor mij hoor ;-)
Maar ik denk dat ik mijn query voor elkaar heb. Ik krijg zonder foutmelding de data uit de tabellen die voor nu voldoende is.
Dit kan ik ook in kruistabel format op scherm krijgen... verticaal de rollen en horizontaal de personen van een bepaalde afdeling.
Maar bij de opbouw van de tabel lijkt er toch wat mis te gaan wat ik niet begrijp waarom.
Het lijkt erop dat dat de verticale regels met 1 regel zakt zodat bovenaan een lege regel ontstaat maar wel een match wordt gevonden.. (sorry, beter kan ik het omschrijven).
Hier een plaatje met wat ik bedoel:
dan de code.
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
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
<?php
require_once('../inc/connect.php');
$sqlUitlezen = mysqli_query($connection,
$sql = "SELECT
CONCAT(idm_person.CALLNAME, ' ', idm_person.MX_LASTNAME, ' <br>(', idm_person.EMPLOYEENUMBER, ')' ) naam,
idm_person.MSKEYVALUE_MEDEWERKER,
idm_role.MSKEYVALUE_ROL rol,
idm_role.DISPLAYNAME,
idm_role.ROLETYPE
FROM `idm_person`
LEFT JOIN `idm_person2role`
ON idm_person.MSKEYVALUE_MEDEWERKER = idm_person2role.MSKEYVALUE_MEDEWERKER
LEFT JOIN `idm_role`
ON idm_role.MSKEYVALUE_ROL = idm_person2role.MSKEYVALUE_ROL
WHERE idm_person.REF_OU = 'OU:60000203'
ORDER BY idm_role.ROLETYPE, idm_role.MSKEYVALUE_ROL
");
$data = mysqli_fetch_all($sqlUitlezen, MYSQLI_ASSOC);
foreach($data as $rij) {
$namen[$rij['rol']] = $rij['rol'];
$draai[$rij['naam']][$rij['rol']] = true;
}
echo '<table cellspacing="0" cellpadding="2" border="1" bordercolor="#e1e3e6">' . PHP_EOL;
echo '<tr><td></td>';
foreach($draai as $key=>$rol) {
echo '<td nowrap><font size="2">' . $key . '</font></td>';
}
echo '</tr>';
foreach ($namen as $naam) {
echo '<tr><td nowrap><font size="2">'. $naam . '</font></td>' . PHP_EOL;
foreach($draai as $key=>$rol) {
if(isset($draai[$key][$naam])) {
echo '<td align="center" valign="middle">?</td>';
}else{
echo '<td></td>';
}
}
echo '</tr>';
}
echo '</tr>
</table>';
?>
require_once('../inc/connect.php');
$sqlUitlezen = mysqli_query($connection,
$sql = "SELECT
CONCAT(idm_person.CALLNAME, ' ', idm_person.MX_LASTNAME, ' <br>(', idm_person.EMPLOYEENUMBER, ')' ) naam,
idm_person.MSKEYVALUE_MEDEWERKER,
idm_role.MSKEYVALUE_ROL rol,
idm_role.DISPLAYNAME,
idm_role.ROLETYPE
FROM `idm_person`
LEFT JOIN `idm_person2role`
ON idm_person.MSKEYVALUE_MEDEWERKER = idm_person2role.MSKEYVALUE_MEDEWERKER
LEFT JOIN `idm_role`
ON idm_role.MSKEYVALUE_ROL = idm_person2role.MSKEYVALUE_ROL
WHERE idm_person.REF_OU = 'OU:60000203'
ORDER BY idm_role.ROLETYPE, idm_role.MSKEYVALUE_ROL
");
$data = mysqli_fetch_all($sqlUitlezen, MYSQLI_ASSOC);
foreach($data as $rij) {
$namen[$rij['rol']] = $rij['rol'];
$draai[$rij['naam']][$rij['rol']] = true;
}
echo '<table cellspacing="0" cellpadding="2" border="1" bordercolor="#e1e3e6">' . PHP_EOL;
echo '<tr><td></td>';
foreach($draai as $key=>$rol) {
echo '<td nowrap><font size="2">' . $key . '</font></td>';
}
echo '</tr>';
foreach ($namen as $naam) {
echo '<tr><td nowrap><font size="2">'. $naam . '</font></td>' . PHP_EOL;
foreach($draai as $key=>$rol) {
if(isset($draai[$key][$naam])) {
echo '<td align="center" valign="middle">?</td>';
}else{
echo '<td></td>';
}
}
echo '</tr>';
}
echo '</tr>
</table>';
?>
Kortom ik ben er nog niet. Maar ik wordt 'n beetje draaierig van de tabelopbouw...
waar zit 'm nu het feit dat ik een blanco regel heb?
Gewijzigd op 17/08/2019 15:13:41 door - DHU -
Waar zie je een blanco regel? Vanuit welke statement?
- Ariën - op 17/08/2019 15:21:54:
el
Waar zie je een blanco regel? Vanuit welke statement?
Waar zie je een blanco regel? Vanuit welke statement?
Zie ingesloten image.. aangeven met pijltje.. voor mijn gevoel hoor de lege cel op de 2e rij daar niet te zijn. Lijkt of de rollen allemaal 1 cell naar beneden zijn geschoven. Beetje lastig uitleggen..
Met een simpele diff (kan elke goede editor) zie je zo de verschillen.
PS: onthoud wel dat font-tags in het museum thuishoren. Tegenwoordig hebben we CSS ;-)
Gewijzigd op 17/08/2019 15:29:25 door - Ariën -
Het makkelijkste is gewoon de broncode te bekijken van de uitgedraaide HTML (Ctrl-U in de meeste browsers).
Naar alle waarschijnlijkheid zit er een fout in de opmaak van de HTML.
- Ariën - op 17/08/2019 15:28:11:
Het beste advies om dit te tackelen is met maken van een mock-up in HTML, en te kijken waar het in de geparste HTML fout gaat. Zorg dat je exacte dezelfde data toont.
Met een simpele diff (kan elke goede editor) zie je zo de verschillen.
PS: onthoud wel dat font-tags in het museum thuishoren. Tegenwoordig hebben we CSS ;-)
Met een simpele diff (kan elke goede editor) zie je zo de verschillen.
PS: onthoud wel dat font-tags in het museum thuishoren. Tegenwoordig hebben we CSS ;-)
Ik mis wat tekst naast een quote?
Maar dan de vraag wat is een mock-up in html? geparste html? een simpele diff? Lijkt me een eea design tool. Ik vermoed dat daar dan ook weer alle kanten uit kan.
Toevoeging op 17/08/2019 17:23:30:
Thomas van den Heuvel op 17/08/2019 15:53:01:
Waar komt de </tr> op regel 51 vandaan?
Het makkelijkste is gewoon de broncode te bekijken van de uitgedraaide HTML (Ctrl-U in de meeste browsers).
Naar alle waarschijnlijkheid zit er een fout in de opmaak van de HTML.
Het makkelijkste is gewoon de broncode te bekijken van de uitgedraaide HTML (Ctrl-U in de meeste browsers).
Naar alle waarschijnlijkheid zit er een fout in de opmaak van de HTML.
die </tr> op regel 51 lijkt me idd ook teveel. Heeft geen toegevoegde waarde.
Maar een fout opsporen met de <ctrl>+u optie is met blote oog een pittig klus de code wordt dus danig achter elkaar aangekwakt op beeld getoond dat het speuren met loep gaat worden. Maar ik zal het eens een kladbok gaan dumpen en eea gaan orden want zo is het niet te doen :-)
Ongetwijfeld ergens opmaakvautje ... :-)
mock-up is een tijdens de ontwerp- of productiefase op schaal of op ware grootte gemaakt model van een ontwerp of product. In de software-industrie komt het begrip tevens voor bij het vroeg in het ontwikkelproces testen van de gebruikersinterface van het software-ontwerp.
Met een diff kan je vergelijken wat de verschillen zijn tussen twee stukken text of scripts. Er zijn ook speciale sites die dit kunnen, zoals DiffChecker.
Je kan ook de geparste HTML (in een volledig HTML-document) laten testen door de W3 Validator.
Een Met een diff kan je vergelijken wat de verschillen zijn tussen twee stukken text of scripts. Er zijn ook speciale sites die dit kunnen, zoals DiffChecker.
Je kan ook de geparste HTML (in een volledig HTML-document) laten testen door de W3 Validator.
Gewijzigd op 17/08/2019 17:32:35 door - Ariën -
De code zonder foutmelding (aldus de validator) 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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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
<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="UTF-8">
<title>Kruistabel rol - medewerker</title>
</head>
<body>
<?php
require_once('../inc/connect.php');
$sqlUitlezen = mysqli_query($connection,
$sql = "SELECT
CONCAT(idm_person.CALLNAME, ' ', idm_person.MX_LASTNAME, ' <br>(', idm_person.EMPLOYEENUMBER, ')' ) naam,
idm_person.MSKEYVALUE_MEDEWERKER,
idm_role.MSKEYVALUE_ROL,
idm_role.DISPLAYNAME rol,
idm_role.ROLETYPE
FROM `idm_person`
LEFT JOIN `idm_person2role`
ON idm_person.MSKEYVALUE_MEDEWERKER = idm_person2role.MSKEYVALUE_MEDEWERKER
LEFT JOIN `idm_role`
ON idm_role.MSKEYVALUE_ROL = idm_person2role.MSKEYVALUE_ROL
WHERE idm_person.REF_OU = 'OU:60000203'
ORDER BY idm_role.ROLETYPE, idm_role.MSKEYVALUE_ROL
");
$data = mysqli_fetch_all($sqlUitlezen, MYSQLI_ASSOC);
foreach($data as $rij) {
$namen[$rij['rol']] = $rij['rol'];
$draai[$rij['naam']][$rij['rol']] = true;
}
echo '<table>' . PHP_EOL;
echo '<tr><th></th>';
foreach($draai as $key=>$rol) {
echo '<th>' . $key . '</th>';
}
echo '</tr>';
foreach ($namen as $naam) {
echo '<tr><td>'. $naam . '</td>' . PHP_EOL;
foreach($draai as $key=>$rol) {
if(isset($draai[$key][$naam])) {
echo '<td>?</td>';
}else{
echo '<td></td>';
}
}
echo '</tr>';
}
echo '</table>';
?>
</body>
</html>
<html lang="nl">
<head>
<meta charset="UTF-8">
<title>Kruistabel rol - medewerker</title>
</head>
<body>
<?php
require_once('../inc/connect.php');
$sqlUitlezen = mysqli_query($connection,
$sql = "SELECT
CONCAT(idm_person.CALLNAME, ' ', idm_person.MX_LASTNAME, ' <br>(', idm_person.EMPLOYEENUMBER, ')' ) naam,
idm_person.MSKEYVALUE_MEDEWERKER,
idm_role.MSKEYVALUE_ROL,
idm_role.DISPLAYNAME rol,
idm_role.ROLETYPE
FROM `idm_person`
LEFT JOIN `idm_person2role`
ON idm_person.MSKEYVALUE_MEDEWERKER = idm_person2role.MSKEYVALUE_MEDEWERKER
LEFT JOIN `idm_role`
ON idm_role.MSKEYVALUE_ROL = idm_person2role.MSKEYVALUE_ROL
WHERE idm_person.REF_OU = 'OU:60000203'
ORDER BY idm_role.ROLETYPE, idm_role.MSKEYVALUE_ROL
");
$data = mysqli_fetch_all($sqlUitlezen, MYSQLI_ASSOC);
foreach($data as $rij) {
$namen[$rij['rol']] = $rij['rol'];
$draai[$rij['naam']][$rij['rol']] = true;
}
echo '<table>' . PHP_EOL;
echo '<tr><th></th>';
foreach($draai as $key=>$rol) {
echo '<th>' . $key . '</th>';
}
echo '</tr>';
foreach ($namen as $naam) {
echo '<tr><td>'. $naam . '</td>' . PHP_EOL;
foreach($draai as $key=>$rol) {
if(isset($draai[$key][$naam])) {
echo '<td>?</td>';
}else{
echo '<td></td>';
}
}
echo '</tr>';
}
echo '</table>';
?>
</body>
</html>
Niet dat ik er iets verder mee gekomen ben.. op paar kleine dingetjes na... want de output is onveranderd.
Gewijzigd op 17/08/2019 20:03:17 door - DHU -
Kijk anders eens met print_r() naar de inhoud van je rechten/roles boom?
En kijk of dit overeenkomt met je tabel.
Gewijzigd op 17/08/2019 18:33:07 door - Ariën -
hieronder een deel van de voorgestelde print_r()
Array
(
[0] => Array
(
[naam] => naam1 wegehaald ivm privacy
(018411)
[MSKEYVALUE_MEDEWERKER] => 100.005756
[MSKEYVALUE_ROL] =>
[rol] =>
[ROLETYPE] =>
)
[1] => Array
(
[naam] => Dirk Huizinga
(008475)
[MSKEYVALUE_MEDEWERKER] => 100.002201
[MSKEYVALUE_ROL] => ROLE:OU:50000597:ALGEMEEN
[rol] => Algemeen
[ROLETYPE] => OU
)
[2] => Array
(
[naam] => naam1 wegehaald ivm privacy
(010780)
[MSKEYVALUE_MEDEWERKER] => 100.003205
[MSKEYVALUE_ROL] => ROLE:OU:50000597:ALGEMEEN
[rol] => Algemeen
[ROLETYPE] => OU
)
dit loopt helemaal door tot nummer 226. Dus die lap tekst bespaar ik jullie maar :-)
opmerking is dat ik namen van medewerkers heb weggehaald maar die staan er wel hoor.
wat mij opvalt is dat array [0] wel een naam, mskeyvalue_medewerker heeft maar de mskeyvalue_rol blijf legen. Dit wordt echter wel vanaf array [1] gevuld..
ik raak het overzicht kwijt en ik probeer voorzichtig wat dingetjes maar tot nu toe geen resultaat... blijft een zoekklus
Gewijzigd op 17/08/2019 20:12:38 door - DHU -
Maar deze lege record zie je niet in de query terug?
Toevoeging op 18/08/2019 10:51:21:
Ergens gebeurt er iets wat niet klopt. Kan alleen de vinger niet op de zere plek liggen. Vanmorgen een vergelijking gehouden met het resultaat van de kruistabel t.o.v. het bronbestand.
Daarbij maakte ik de conclusie dat bij alleen de eerste genoemde persoon de rolnaam niet wordt weergegeven. de match is er wel zodat het lijkt dat het een lege rol is. Maar dat is niet zo. Als ik in het bronbestand kijkt mist hij in de kruistabel inderdaad één rol.
Van alle daaropvolgende personen kloppen de matches wel. Maar tja, daarmee heb ik de oplossing nog niet gevonden.
Gewijzigd op 18/08/2019 07:36:04 door - DHU -
Ik zit ook te kijken, maar hij loopt m.i. toch echt de array af vanaf het begin, zonder dergelijke berekeningen. Want er staat normaal niks boven Achmea Algemeen?
Vanmorgen dit ook op de oorspronkelijke van JAN R (zie begin topic) toegpast en daar heb ik ook die blanco regel. Dacht dat het daarmee te maken had omdat ik eea had omgedraaid omdat ik verticaal de rollen wil en horizontaal de personen. Maar dat is enige wijziging in de tabelopbouw.. Ik weet niet of het correct is gebeurt maar ik had wel resultaat. Toen dacht ik dat het met LEFT JOINS te maken had. In de oorspronkelijk code wordt er namelijk allleen JOIN gebruikt maar wanneer ik dat dat toepas blijf ik maar een zandloper behouden en gebeurt er niet veel. (op het oog dan he).. En het gekke is dat alleen dit euvel voorkomt bij de eerste genoemde persoon.
De foreach loopt alle records af, dus als je door een JOIN issue een waarde mist, dan zou je dat ook in je query moeten zien.