Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Array

  1. #1

    Array

    Ciao a tutti.
    Stavo sperimentando un sistema di permessi per le pagine contenute in una cartella “pagine”.

    Quindi ho la mia bella cartellina “pagine” contenente le mie belle paginette:
    - start.php
    - lippa_a.php
    - lippa_y.php
    - cacca.php
    - permessi1.php
    etc.etc

    Creo una tabella e vi inserisco un campo “name” ossia l’utente connesso seguito dai campi con i nomi di pagina e relativi permessi “0 = non accedi” “1 = hai il permesso”:
    es

    CREATE TABLE test_permessi (

    id int(10) unsigned NOT NULL auto_increment,
    `name` varchar(100) default NULL,
    `start` varchar(20) default NULL,
    lippa_a varchar(20) default NULL,
    lippa_y varchar(20) NOT NULL,
    cacca varchar(20) NOT NULL,
    permessi1 varchar(20) default NULL,
    permessi2 varchar(20) default NULL,
    permessi3 varchar(20) default NULL,
    PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

    #
    # Dump dei dati per la tabella `test_permessi`
    #

    INSERT INTO test_permessi VALUES (1, 'pippo_test', '9', '1', '1', '1', '1', '1', '9');
    INSERT INTO test_permessi VALUES (2, 'pippo2', '9', '0', '0', '0', '0', '0', '9');
    INSERT INTO test_permessi VALUES (3, 'pippo3', '1', '1', '0', '1', '0', '0', '1');
    ----------------------------------------

    Fin qui tutto a posto!
    Ora poniamo il caso che io metta una nuova pagina nella mia directory: “mucca.php”.

    Dovrei aggiornare la tabella sopra aggiungendo manualmente un nuovo campo con il nome della nuova pagina e inserirvi, per ogni utente, un valore di default pari a “0”.
    Giusto?

    Io farei:
    * leggi la dir e mettila in un array. “ $array_pagine”.

    Array ( [0] => benvenuto [1] => cacca [2] => lippa_a [3] => lippa_y [4] => permessi1 [5] => permessi2 [6] => permessi3 [7] => start [8]=> mucca )

    * Estraggo i dati dal db dove “name = pippo_test” e ottengo un array: “$array_db”:
    }
    Array ( [id] => 1 [name] => pippo_test [start] => 9 [lippa_a] => 1 [lippa_y] => 1 [cacca] => 1 [permessi1] => 1 [permessi2] => 1 [permessi3] => 9 )


    * Confronto i due array e verifico qual è stato il cambiamento (se c’è stato)!
    Dal secondo array $array_db estraggo le chiavi e i valori e li inserisco in due array.

    foreach ($array_db as $k3 => $v3){

    $array_permessi_k[]=$k3;
    $array_permessi_v[]=$v3;

    }

    con l’array dei valori recuperato
    $array_permessi_v faccio un confronto con $array_pagine (che ha in più mucca).

    $array_differenze1 = array_diff($array_pagine, $array_permessi_k);

    foreach ($array_differenze1 as $value) {
    echo "<font color = 'red'>$value</font>
    ";
    }

    e mi stampa “Mucca”.

    Bene!
    Aggiungo agli array precedenti i nuovi valori:
    array_push($array_permessi_k, $value);
    array_push($array_permessi_v, '0');
    e poi li trasformo in stringhe:
    $impk = implode(" ", $array_permessi_k);
    $impv = implode(" ", $array_permessi_v);
    echo $impk;
    echo "
    ";
    echo $impv;

    Ottenendo:
    $stringa_uno = “id name start lippa_a lippa_y cacca permessi1 permessi2 permessi3 benvenuto”;
    $stringa_due = “1 pippo_test 9 1 1 1 1 1 9 0”;

    Da queste due stringhe come faccio a fare una query di update che inserisca i dati nel db per tutti gli utenti?



    Come vi sembra come idea?
    Il metodo è giusto?
    Grazie, sto impazzendo!
    Membro Jedi

  2. #2
    Devi utilizzare una tabella di dettaglio invece che avere N colonne per N elementi da "autorizzare".

    Crea un'altra tabella (es. dettagli_permessi) in cui inserisci una chiave esterna che faccia riferimento all'id di test_permessi, un campo (es. name VARCHAR(20)) che individui la pagina, ed un campo permesso che specifichi il tipo di permesso.

  3. #3
    dettagli_permessi

    id | pagine |nome utente1 |nome utente2|nome utente3|
    ------------------------------------------------------------
    1 | pagina1 | 0 | 1 | x
    ------------------------------------------------------------
    2 | pagina2 | 1 | 1 | x
    ------------------------------------------------------------
    3 | pagina3 | 1 | 0 | x
    ------------------------------------------------------------
    4 | paginax | 0 | 1 | x
    ------------------------------------------------------------

    Intendi una tabella così?
    Cosa vuol dire: "...inserisci una chiave esterna che faccia riferimento all'id di test_permessi, un campo (es. name VARCHAR(20)) che individui la pagina, ed un campo permesso che specifichi il tipo di permesso."

    scusa ma di mysql sò creare la mia tabella semplice semplice.
    Mi spiegheresti meglio?

    Grazie
    Membro Jedi

  4. #4
    Intendi una tabella così?
    No.

    id | id_utente | pagine | permesso

  5. #5
    Scusa ma navigo nel buio alla grande.
    Così?
    #
    # Struttura della tabella `dettagli_permessi`
    #

    CREATE TABLE dettagli_permessi (
    id int(10) NOT NULL auto_increment,
    id_utente int(10) NOT NULL,
    pagine1 varchar(20) default NULL,
    permesso1 tinyint(2) NOT NULL,
    pagina2 varchar(20) NOT NULL,
    permesso2 int(2) default NULL,
    PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

    #
    # Dump dei dati per la tabella `dettagli_permessi`
    #

    INSERT INTO dettagli_permessi VALUES (1, 1, 'start', 0, 'lippa_a', 1);
    INSERT INTO dettagli_permessi VALUES (2, 2, 'start', 0, 'lippa_a', 2);

    Potresti illuminarmi un pò?!
    grazie.
    Membro Jedi

  6. #6
    No, cosi:

    CREATE TABLE dettagli_permessi (
    id int(10) NOT NULL auto_increment,
    id_utente int(10) NOT NULL,
    pagina varchar(20) default NULL,
    permesso tinyint(2) NOT NULL,
    PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

    Se hai questi dubbi, ti suggerisco di iniziare dalle basi della progettazione di database.

  7. #7
    Non sono dubbi i miei ma carenze.

    Però credo di aver capito:


    INSERT INTO dettagli_permessi VALUES (1, 1, 'start', 1);
    INSERT INTO dettagli_permessi VALUES (2, 1, 'lippa_a', 2);
    INSERT INTO dettagli_permessi VALUES (3, 1, 'lippa_y', 1);

    INSERT INTO dettagli_permessi VALUES (4, 2, 'start', 1);
    INSERT INTO dettagli_permessi VALUES (5, 2, 'lippa_a', 2);
    INSERT INTO dettagli_permessi VALUES (6, 2, 'lippa_y', 1);

    Il campo "id_utente" lo collego alla tabella "test_permessi".

    Es al valore "1" di dettagli_permessi.id_utente corrisponde pippo_test di test_permessi

    Da cui verifico il nome della pagina e il permesso.
    Se il permesso è "0" ciccia se "1" accedo!
    Membro Jedi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.