Hulp gezocht bij maken van kruistabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Pagina: « vorige 1 2 3 4 5 volgende »

- DHU -

- DHU -

20/08/2019 23:53:47
Quote Anchor link
snap 'm niet helemaal maar heb 'n vermoeden welke kant dat uitgaat.
Echter het toekennen of intrekken van een rol gaat op basis welke functie iemand heeft. Niet meer niet minder. In sommige gevallen mag iemand niet meer dan een rol hebben. Om diverse reden is daar voor gekozen. Het zal ook niet om honderden mutaties gaan hoor. Maar tja zal vermoedelijk wel iets met veel selectboxen of misschien radio button zijn. Want er zijn maar twee smaken. Toekennen of intrekken. om maar wat te noemen... maar nogmaals heb hier geen benul van want nu handig is omdat ik niet de verschillende methodieken niet ken/weet.
 
PHP hulp

PHP hulp

19/04/2024 06:23:16
 
- Ariën  -
Beheerder

- Ariën -

21/08/2019 00:02:42
Quote Anchor link
Visueel is het gewoon een klikbare cel in plaats van een selectbox.

Al met al zijn rechtensystemen een leuke materie. Voor een project waar ik mij mee bezig houd heb heb ik dit aan de hand van een voorbeeld ingebouwd en aangepast. Maar je moet wel goed op papier zetten hoe je dit vorm geeft, zoals de database, als de classes als de vormgeving in het beheerpaneel.
 
Thomas van den Heuvel

Thomas van den Heuvel

21/08/2019 00:11:42
Quote Anchor link
- Ariën - op 20/08/2019 22:07:06:
Hoe graag Dirk zou willen, als ik zijn eerdere post lees, kan hij weinig invloed uitoefenen op de opzet van de database.

Zou ik toch eens gaan praten met de lui die deze opgezet hebben en periodiek vullen dan.

Ik snap dat je het oorspronkelijke SAP systeem niet kunt wijzigen, en ook de CSV-bestanden die hier uitrollen niet. Ik snap alleen niet waarom je dat dan vervolgens ogenschijnlijk 1:1 in een database kiepert. Je kunt de data in de CSV-bestanden prima omvormen naar beter hanteerbare informatie. Hier kun je veel meer winst pakken. Ook het feit dat het MyISAM is volg ik niet helemaal. Klinkt gewoon als half werk.
Gewijzigd op 21/08/2019 00:13:09 door Thomas van den Heuvel
 
- DHU -

- DHU -

21/08/2019 08:38:51
Quote Anchor link
kan klinken als half werk.... of klinkt het als onervaren.. Ik denk dat ik die laatste opmerking maar niet heb gelezen :-)

Wanneer iets MyISAM is kan je misschein niet begrijpen.. Ik heb dr geen flauwe notie van wat het inhoudt en wat het doet en wat de verschillen zijn. Maar is dat de vraagstelling?

In gesprek gaan met die lui van SAP zal lastig worden. Deze zitten in Zwitserland en om daar nu ff heen te tuffen.
Er is gekozen om de dumpbestanden as is in te lezen zonder om te vormen. Dit is een keuze. Daarnaast de wedervraag.. wat zou er dan omgevormd moeten worden?
 
Thomas van den Heuvel

Thomas van den Heuvel

21/08/2019 17:25:08
Quote Anchor link
Een database die MyISAM-tabellen bevat hangt letterlijk als los zand aan elkaar. Bijvoorbeeld de tabel idm_person2role zal het letterlijk worst wezen dat deze mogelijk een user-rol paar bevat die ofwel refereert aan een niet-bestaande user ofwel aan een niet-bestaande rol of allebei.

Misschien is dit inmiddels veranderd maar bij mijn weten kun je met de MyISAM-engine niet afdwingen dat de data in de verschillende tabellen overeen moet komen. Bijvoorbeeld als user #1 en rol #1 bestaan in hun respectievelijke tabellen, pas dan kun je rol #1 verbinden met user #1 in deze koppeltabel. MyISAM controleert dit niet omdat je geen regels kunt opstellen die dit afdwingen.

Ook zijn er geen voorzieningen voor het kloppend houden van verbanden, bijvoorbeeld dat als je rol #1 verwijdert dat de koppeltabel automatisch de user-rol paren met rol #1 verwijdert.

Dan voorkomt MyISAM ook niet dat als je allerlei informatie toevoegt of wijzigt (in een query-batch) en er gaat halverwege iets fout dat dan het hele feest niet doorgaat. De database is dan half bijgewerkt, en dat kan er voor zorgen dat informatie uit de pas gaat lopen.

Dit zou je natuurlijk allemaal programmatisch kunnen afdwingen, maar dat is veels te veel werk, foutgevoelig en daarnaast gewoon onnodig, immers...

InnoDB heeft al deze voorzieningen wél: je kunt regels op en tussen tabellen definiëren waarbij er echte relaties bestaan tussen deze tabellen die ervoor zorgen dat je informatie klopt en blijft kloppen. InnoDB kan ook gebruik maken van database-transacties waarbij je batches informatie in het geheel, of in het geheel niet wegschrijft. Dit zorgt ervoor dat de database-toestand altijd een kloppende is en niet vervuild wordt met incomplete data/wijzigingen. Dit alles lijkt mij in een administratief systeem "nogal belangrijk".

---

Wat er mogelijk omgevormd zou kunnen/moeten worden:
- mogelijk toevoegen van extra tabellen voor rapportages etc, dit hangt van je informatievraag/-vragen af? of het verder uitsplitsen van data (Level 1:Level 2:Level 3:Level 4:Level 5 *kuch*)
- verwijdering van hard coding tussen tabellen (maak gebruik van interne nummeringen waar we het over gehad hebben)
- mogelijke dataverrijking, je zou extra velden met extra (voor mensen leesbare) informatie kunnen toevoegen
- bedien je van eenvoudigere/andere tabel- en kolomnamen zodat je op een intuïtievere manier queries kunt uitvoeren en informatie kan opvragen (Level 1:Level 2:Level 3:Level 4:Level 5 *kuch*)

Oftewel met de KENNIS van het systeem kun je je import een gigantische boost geven zodat je database een goed georganiseerd register is waar je snel informatie uit kunt opvragen. Daar was deze hele exercitie toch voor bedoeld? Voor het geven van inzicht, dan zul je ook wat moeite moeten doen om een overzichtelijk iets te creëren. Als je dit gewoon 1:1 vertaalt dan is dat toch een beetje, om een maat te quoten, "shit in, shit out".

Als dat afdoende is, soit. Maar dat is tegelijkertijd een (groot) gemis in die zin dat je er mogelijk veel *meer* mee kunt. Je mist dan een heleboel potentieel omdat je nog steeds met dezelfde SAP-meuk werkt.
Gewijzigd op 21/08/2019 17:27:45 door Thomas van den Heuvel
 
- DHU -

- DHU -

21/08/2019 21:54:22
Quote Anchor link
Mooi en leerzaam verhaal. Toch wil ik me afvragen of het voor mij werkbaar zou zijn om die energie in te steken met alle goede bedoelingen van dien. (Level 1:Level 2:Level 3:Level 4:Level 5 geneuzel was een eenmalig iets en wordt nergens anders toegepast en daar is een oplossing voor gekomen. Hulde..

Nu kan ik mijn energie steken in tabellen types en opsplitsen van samenvoegingen... maar uiteindelijk moet ik weer 'n output gaan genereren en dan die opsplitsingen weer samen gaan voegen. Want de output moet weer corresponderen met de SAP omgeving. Is het dat allemaal waard? Ik kan die inschatting niet maken.

Neem niet weg dat ik dit zeer leerzaam vind... Ondanks dat ik nog 'n nitwit ben zou ik ook een andere structuur gekozen hebben.

Alles in ogenschouw nemen kan ik het niet overzien of het wel/niet de moeite waard is en wat ik er bij gebaat ben omdat ik die andere methodiek niet ken en daar dan ook energie in moet steken. Tijd die ik eigenlijk daar niet voor heb.
 
- DHU -

- DHU -

23/08/2019 22:05:52
Quote Anchor link
jongens ... heb ff 'n blackout.... ik kan niet ontdekken waarom onderstaande niet werkt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
function m2r(){
        global $MySQL;
        
        if (isset($_POST['submit'])) {

            $naam = mysqli_real_escape_string($MySQL, $_POST['naam']);
            
        $aanmaken = "INSERT INTO `m2r`
        
                    (`naam`)
        
                    VALUES
                    
                    ('$naam')"
;

            if (mysqli_query($MySQL, $aanmaken)){
            echo '<h3">Er is een nieuwe naam toegevoegd aan de database</h3>.';
        }
else{
            echo 'Sorry,'.mysqli_error($MySQL);
            }
        }

    
    ?>

    <form action="?actie=m2r" method="post" enctype="multipart/form-data">
        <table cellpadding="3" border="0">
            <tr>
                <td><h5>Naam</h5></td>
                <td><input type="text" name="naam"></td>
            </tr>
            <tr>
                <td></td>
                <td><input type="submit" name="submit" value="Opslaan"></td>
            </tr>
        </table>
    </form>
    <?php
}
?>


ik ontvang de foutmelding: Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in


ik wil nl een shot geven of het me lukt om via form de kruistabel te kunnen bewerken... maar dan met zoiets basaal de mist in :-)
Gewijzigd op 23/08/2019 23:46:26 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

23/08/2019 22:32:36
Quote Anchor link
Hoe ziet je connectie eruit?
 
- DHU -

- DHU -

23/08/2019 22:48:40
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

$connection
= mysqli_connect("localhost", "root", "");
$connection->set_charset('utf8');

if(!$connection){
    echo "Er kan geen connectie met de server worden gemaakt" . die(mysqli_error($connection));;
}

$dbselect = mysqli_select_db($connection, "bigpicture");
if(!$dbselect){
    echo "Er kan geen connectie met de database worden gemaakt" . die(mysqli_error($connection));
}

?>
 
- Ariën  -
Beheerder

- Ariën -

23/08/2019 23:19:48
Quote Anchor link
Juist, $connection dus. :-)
 
- DHU -

- DHU -

23/08/2019 23:39:19
Quote Anchor link
duh... thnx
 
- DHU -

- DHU -

25/08/2019 10:28:49
Quote Anchor link
Goeiemorgen allemaal.. the next step in het kruistabellen.

Ben met bovenstaande aan de slag gegaan en heb het kruistabel omgevormd tot formulier. Code volgt verderop. Uiteraard werkt het nog niet omdat ik nu niet weet wat de vervolgstappen zijn. Heb wat geprobeerd maar geen resultaat.
De bedoeling is dat er bij een bestaande match (?) de optie V is. V staat voor verwijderen. Daar waar geen koppeling is moet de optie T komen te staan. T staat voor toekennen. So far so good.

Maar het opslaan gedeelte werkt nu omdat ik geen notie heb welke stappen ik moet uitvoeren. Hier de hulpvraag.
in de tabel m2r moet dus komen te staan het personeelsnummer van de persoon in kwestie, de rolnaam, en de mutatie T of V. Wanneer ik die combi heb dan kan ik daar aan toevoegen een timestamp en wie deze mutatie gemaakt heeft. Dat zijn automatisch gegevens.

geen flauw idee hoe ik bovenstaand aan moet gaan pakken. mede ook door het feit dat ik het array verhaal ook nog niet helemaal tot in het uiterste snap. :-)

Gevoelsmatig hangt het er nu op hoe ik de mutaties weg kan gaan schrijven naar de tabel. Wil graag jullie hulp daar bij aanroepen.

Dan de gehele code....

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
    function ou_r2mkruistabel (){
        global $connection;
        
        $where = NULL;
        if (isset($_GET['ou'])){
            $where = 'WHERE idm_person.ACHMEA_REF_OU = "'.mysqli_real_escape_string($connection, $_GET['ou']).'"';
        }
        
        $sqlUitlezen = mysqli_query($connection, "SELECT    
        CONCAT(idm_person.ACHMEA_CALLNAME, ' ', idm_person.MX_LASTNAME, ' <br>(', idm_person.ACHMEA_EMPLOYEENUMBER, ')' ) naam,
        idm_person2role.MSKEYVALUE_ROL rol

        
        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."

        ORDER BY idm_person2role.MSKEYVALUE_ROL, idm_person.MX_LASTNAME ASC
        ");
        
        //---------------
        $sqlUitlezenOu = mysqli_query($connection, "SELECT
        idm_person.DISPLAYNAME,
        idm_ou.MSKEYVALUE_OU,
        idm_ou.DISPLAYNAME
        
        FROM idm_person
        
        INNER JOIN `idm_ou` ON idm_person.ACHMEA_REF_OU = idm_ou.MSKEYVALUE_OU

        ".$where."
        ");
        
        $sqlTelRecords = mysqli_num_rows($sqlUitlezen);
        $sqlAantal = $sqlTelRecords - 1;
        $sqlAantalOu = mysqli_num_rows($sqlUitlezenOu);
        if ($sqlAantalOu > 0){
            $sqlDataOu = mysqli_fetch_assoc($sqlUitlezenOu);
            
            echo '<table border="0" width="100%">';
            echo '<tr>';
            echo '<td align="center" valign="top" rowspan="3" width="100"><a href="javascript:javascript:history.go(-1)"><img src="../img/vorige_pagina_button.png" height="80"></td>';
            echo '<td valign="bottom"><h3>Rol / Medewerker koppelingen (matrix)</h3></td>';
            echo '</tr>';
            echo '<td valign="top"><h2>'.$sqlDataOu['DISPLAYNAME'].'</h2></td>';
            echo '</tr>';
            echo '<tr>';
            echo '<td align="right"><h6>Ik heb '.$sqlAantal.' rol / medewerker koppelingen gevonden op de afdeling <i>'.$sqlDataOu['DISPLAYNAME'].'</i></h6></td>';
            echo '</tr>';
            echo '</table>';
        }

        //---------------
                
                if (isset($_POST['submit'])) {

                $naam = mysqli_real_escape_string($connection, $_POST['naam']);
                    
                $aanmaken = "INSERT INTO `m2r`
                
                            (`naam`)
                
                            VALUES
                            
                            ('$naam')";

                    if (mysqli_query($connection, $aanmaken)){
                    echo '<h3">Er is een nieuwe m2r koppeling toegevoegd aan de database</h3>.';
                }else{
                    echo 'Sorry,'.mysqli_error($connection);
                    }
                }
        
        //---------------
        
        $sqlData = mysqli_fetch_all($sqlUitlezen, MYSQLI_ASSOC);
        
        if ($sqlAantal > 0){
            
            $roleCount = array();
            foreach ($sqlData as $rij) {
                $namen[$rij['rol']] = $rij['rol'];
                $draai[$rij['naam']][$rij['rol']] = true;
                if (isset($roleCount[$rij['rol']]) === false) {
                    $roleCount[$rij['rol']] = 0;
                }
                $roleCount[$rij['rol']]++;
            }
            
            echo '<form action="?actie=m2r" method="post" enctype="multipart/form-data">';
            
                echo '<table id="idmdata" border="0">' . PHP_EOL;
                echo '<tr>
                        <th colspan="2"></th>';
                            foreach($draai as $key=>$rol) {
                                echo '<th>' . $key . '</th>';
                            }
                echo '</tr>';
                
                echo '<tr>
                        <td>Uniek kenmerk rol</td>
                        <td bgcolor="silver" align="center"><font color="white"><b>#</b></font></td>';
                            foreach($draai as $key=>$rol) {
                                echo '<td bgcolor="navy" align="center"><font color="white"><b>'.count($rol).'</b></font></td>';
                            }
                echo '</tr>';
                
            foreach ($namen as $naam) {
                echo '<tr>
                    <td>'. $naam . '</td>' . PHP_EOL;
                    
                if ($roleCount[$naam] ==1){
                    echo '<td bgcolor="red" align="center"><font color="white"><b>'.$roleCount[$naam].'</b></font></td>';                    
                    }else{
                        echo '<td bgcolor="navy" align="center"><font color="white"><b>'.$roleCount[$naam].'</b></font></td>';
                    }
                        foreach($draai as $key=>$rol) {
                            if(isset($draai[$key][$naam])) {
                                
                                echo '<td align="center">
                                      <select name="rights[news][edit]">
                                            <option value=""checked>?</option>
                                            <option value="Verwijderen">V</option>
                                        </select>
                                      </td>';
                            }else{
                                echo '<td align="center">
                                        <select name="rights[news][edit]">
                                            <option value="" checked></option>
                                            <option value="Toekennen">T</option>
                                        </select>
                                      </td>';
                            }
                        }
                echo '</tr>';
            }
                
                echo '</form>';
                
                echo '</table>';
                echo '<center><br /><input type="submit" name="submit" value="Opslaan"></center>';
        }else{
            echo '<center><a href="javascript:javascript:history.go(-1)"><img src="../img/no-data.png"></a></center>';
        }        
    }


levert onderstaand output op:
Afbeelding
Gewijzigd op 25/08/2019 10:37:36 door - DHU -
 
Thomas van den Heuvel

Thomas van den Heuvel

25/08/2019 15:30:33
Quote Anchor link
Uhm, maar wat kun je dan in 1x aanpassen? De rollen van *alle* personen?

Dat zijn nogal veel mutaties in één keer lijkt mij? Als je dit niet in een transactie giet lijkt mij dit ook nog eens heel erg gevaarlijk vanwege het eerder geschetste scenario waarbij zo'n bulk-operatie, om wat voor reden dan ook, halverwege spaak loopt, en de informatie dan maar half is bijgewerkt ofzo.

Tenzij je dus heeeeeeeeel veel gaat vergelijken en dan alles uitsplitst (had iemand een rol al, heeft iemand de rol nog steeds, heeft iemand de rol niet meer). Lijkt mij allemaal veelste ingewikkeld.

In plaats daarvan zou ik nog steeds voor de eerdere lichtgewicht aanpak kiezen waarbij je simpelweg een vinkje ziet als iemand een rol wel heeft, en een leeg vakje ofzo wanneer dit niet het geval is. Hoef je niet eens de pagina te verversen en is de situatie meteen bijgewerkt wanneer je op zo'n vakje klikt.

Ook qua complexiteit qua HTML/PHP-code heeft dit voordelen, de JavaScript die je hiervoor nodig hebt staat in principe helemaal los van de reeds bestaande functionaliteit en kun je apart toevoegen.
 
- DHU -

- DHU -

25/08/2019 17:19:34
Quote Anchor link
Hoi Thomas,

Het grootste deel van je reactie denk ik te begrijpen ... en je het klopt dat je veel mutaties kan doen via dit formulier en je scenario dit nogal links is heb ik met niet voldoende beseft. MAar je hebt daar wel 'n punt inderdaad. op deze manier kan je veel intrekken/toekennen waar je bij moet afvragen of je dat wel.

Tot so far snap ik het... Maar bij het laatste deel krijg ik error en snap helemaal geen snars van je zegt. Wat bedoel je met 'n lichtgewicht. Dat vinkjes overzicht had ik toch al (voor ik er een form van maakte).. maar hoe krijg ik dat muteerbaar? Hoe kan ik wel een rol intrekken of toekennen... via dat overzicht?
 
- Ariën  -
Beheerder

- Ariën -

25/08/2019 17:52:18
Quote Anchor link
Met lichtgewicht bedoelt hij dat elke aanpassing in de rechten-matrix direct wordt doorgevoerd, en niet in een groot geheel. Het is simpeler toe te passen dan dat je alles in zijn geheel verstuurt.
 
- DHU -

- DHU -

25/08/2019 18:14:13
Quote Anchor link
Dat klinkt makkelijker gezegd dan gedaan, maar ook heel wat plausibeler en more safe. Wanneer ik Thomas goed begrijp gaat dat via javascript... daar snap ik helemaal niks van. Hoe moet ik dat dan gaan toepassen op de matrix?
 
- Ariën  -
Beheerder

- Ariën -

25/08/2019 18:17:46
Quote Anchor link
Per keer dat je een selectbox of switch-knop indrukt vindt er direct een AJAX-request plaats die de keuze direct doorvoert in de database.
Gewijzigd op 25/08/2019 18:18:06 door - Ariën -
 
- DHU -

- DHU -

25/08/2019 18:25:43
Quote Anchor link
- Ariën - op 25/08/2019 18:17:46:
Per keer dat je een selectbox of switch-knop indrukt vindt er direct een AJAX-request plaats die de keuze direct doorvoert in de database.



hoi Ariën, nu ga je buitenaards spreken voor me... Snap werkelijk helemaal niks wat hier staat. je raakt me hier kwijt :-)
 
- Ariën  -
Beheerder

- Ariën -

25/08/2019 18:27:37
Quote Anchor link
Wat snap je dan niet precies? Termen zijn ook te Googlen ;-). Als ik iets niet weet, kijk ik wat het is, zodat ik me weer verder in de discussie kan werpen.
Gewijzigd op 25/08/2019 18:28:27 door - Ariën -
 
- DHU -

- DHU -

25/08/2019 18:47:52
Quote Anchor link
Heb ook wel geGoogled hoor... wat ik dan op W3 zie is een lading script achter een button waar ik geen zak van snap. PHP heeft nog zoveel geheimen.. .laat staan dat ik dat ook nog AJAX erbij moet gaan leren.. Beetje een te hoge plank zeg maar. Javascript is helemaal een onleesbaar iets voor mij. Vervolgens moet je dit dan nog op eea manier in de kruistabel gaan inpassen. Hier ga ik niet verder mee komen. Eens na gaan of er nog 'n 3e methodiek is. Allerlei vormen van techniek op één hoop is teveel van het goede.
 

Pagina: « vorige 1 2 3 4 5 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.