• User

    Area riservata per ogni singolo utente!

    Salve a tutti,
    vi chiedo gentilmente aiuto, poichè con il php sono un pò incasinato.

    Ho trovato in giro per la rete e anche in questo forum, degli script php pronti per creare aree riservate con registrazione utenti tramite database, fatti molto bene, sopratutto quello di Thedarkita
    *(*tutorial-area-privata)

    ...funzionano tutti a perfezione!

    il problema:
    devo creare un sito per un avvocato.

    Mi ha chiesto di creare delle pagine riservate, dove ogni cliente possa andare a controllare la propria pratica dopo essersi loggato (dove in precedenza l'utente si è registrato nel sito).

    Ho bisogno quindi, non di un'area riservata uguale per tutti, ma che....
    ...una volta che il cliente si è loggato venga reindirizzato alla sua
    AREA PERSONALE (non raggiungibile da url)...

    in poche parole:
    mi sembra di aver capito che c'è bisogno di un associazione nel DATABASE dell'id assegnato, con la propria pagina_personale.php

    In un post vecchio Thedarkita consigliava una cosa del genere:

    if($_SESSION['login'] != 1)
    {
    header('Location: /privata_1.php');
    exit;
    }

    ho capito bene?
    significa che se si è loggato id1 deve reindirizzare alla pagina "privata_1.php"?
    perchè fosse così andrebbe già bene...ma poi la pagina vierrebbe raggiunta anche da url?
    inoltre...
    io preferirei la soluzione dell'associazione nel databse del id/link
    :oaiutooooo!


  • Consiglio Direttivo

    Ciao ginolatino e benvenuto nel Forum GT 😉

    Beh, molto più semplicemente puoi impostare le pagine di visualizzazione (senza replicarle per ogni utente iscritto) visualizzando in quelle pagine solo cio' che è legato all'id utente connesso 😉

    Un esempio facile facile:
    diciamo che in una di queste pagine si debba visualizzare tutte le pratiche legate a quell'utente ed il loro stato (chiamiamola pratiche questa tabella). Ti bastera' selezionare i record relativi all'id utente connesso impostando il WHERE
    [php]$sql="SELECT * FROM pratiche WHERE id_user='$id'";[/php]dove $id è l'id utente ovviamente 😉
    Quindi con un'unica pagina otterrai il risultato voluto, ed ogni cliente visualizzerà solo ed esclusivamente le proprie pratiche 😉

    EDIT: dimenticavo! ovviamente ad ogni pagina devi fare il controllo della sessione, se non c'è una sessione attiva indirizzi l'utente allla index o dove ti pare 😉


  • User

    Intanto grazie per avermi chiarito il ruolo del databse. Mi sembra di aver capito che l'area riservata è uguale per tutti, sono i contenuti che cambiano a seconda dell'utente che effettua il login e che viene riconosciuto dal database, che mostra i contenuti dello stesso. Il problema però è che tecnicamente senza una query pronta, non so impostare una nuova tabella con le pratiche. Come dovrei fare? Creare una nuova tabella nel database con i campi: id 1 e pratica n.1? Poi la riga che mi hai scritto te, dove la metto, nel file login.php? Possibile che non esista un tutorial che spiega passo, passo tutta la faccenda? Sai, è da venerdì scorso che sto dalle 8:00 alle 20:00 sopra a questa cosa!?

    Aiutami!


  • Consiglio Direttivo

    Come prima cosa ti consiglio di trovare un libro su PHP e MySQL ce ne sono molti in giro e non hanno nemmeno prezzi esosi, ed un libro basta per avere già delle discrete basi di partenza. (ne sono una prova vivente :D, non sono un'esperto, ma mi ci barcameno diciamo :2:
    Per come costruire le tabelle del tuo Db il tutto dipende da cosa hai bisogno ovviamente, caso per caso varia come costruirle, pertanto con un semplice tutorial ci fai molto poco....

    ti faccio un esempio di come si potrebbero costruire le tabelle:
    Prima tabella: user (ovvero dove salvi i dati degli utenti)
    campi tabella:

    • id (primary_key, auto_increment)
    • username
    • password
    • email
    • indirizzo
    • cap
    • citta
    • provincia
    • telefono
    • cellulare
    • etc etc

    Seconda tabella: pratiche (ora quà dipende da cosa vuol far visualizzare l'avvocato ai suoi clienti, ammettiamo che voglia solo far visualizzare il numero pratica, descrizione e stato)
    campi tabella:

    • id (primary_key, auto_increment, questo sarà il numero pratica)
    • id_user (questo è l'id dell'utente relativo a questa pratica)
    • descrizione
    • stato

    per il login nessun problema, non ti varia nulla alla fine, i vari SELECT che andrai a fare saranno nelle pagine interne alla tua area riservata
    ad esempio nella pagina dove l'utente visualizzerà le proprie pratiche potresti mettere (verificando come prima cosa che l'utente sia loggato ovviamente):
    [php]<?
    require_once ("config.php"); //richiamo al file di connessione al Db
    $sql="SELECT id, descrizione, stato FROM pratiche WHERE id_user='$id'"; //l'$id lo recuperi dalla sessione 😉
    $query = @mysql_query ($sql) or die (mysql_error());
    ?>
    <table border="1">
    <tr><th>Pratica n.</th><th>Descrizione</th><th>Stato</th></tr>
    <?
    while ($array= mysql_fetch_array($query)) // raccogliamo il risultato della query in un array e usciamo fuori tutto il suo contenuto a video
    {
    echo "<tr><td>".$array['id']."</td><td>".$array['descrizione']."</td><td>".$array['stato']."</td></tr>";
    }
    ?>
    </table>[/php]Questo è un esempio molto semplificato di quello che potresti fare ovviamente, tutto, ripeto, dipende da che cosa vuoi ottenere e solo sapendo cosa vuoi come risultato puoi costruire il tuo Db relativo 😉

    Un consiglio: non costruire il tuo Db man mano che incontri la necessità di usare una tabella, potresti finire per creare infinite tabelle di dati che già hai o puoi ottenere facilmente. Pertanto studiati bene l'insieme di cio' che ti servirà e quindi crea le tue tabelle di conseguenza 😉


  • User

    Prima cosa, grazie ancora del tempo dedicatomi, troppo gentile, mi stai salvando dall'esaurimento!

    La tabella utenti è già creata, perchè l'area riservata è già funzionante.

    Per quanto riguarda la tabella pratiche:
    diciamo che va bene per adesso solo la descrizione e lo stato della pratica, può bastare.*

    quindi...
    ti dico quello che non mi riporta:

    1. devo creare tante tabella per quanti clienti ho?
    2. e se il cliente ha più pratiche?
    3. nella/e tabella/e dove lo inserisco il valore per ogni campo e che tipo di valore?

    poi per quanto riguarda il codice che mi hai postato mi è più chiaro, a questo punto il mio problema si è decisamente dimezzato del 50% grazie a te, però abbi pazienza perchè nel database sono incasinato...

    *comunque il modello dell'avvocato è così:
    Cliente con password accede alla sua area dove trova dei file .doc dove cliccandoci li può aprire e leggere i suoi procedimenti penali o come dici te visualizzare il nome della pratica (descrizione) e vedere lo stato (a che punto sta).

    Diciamo che a me interessano tutti e due le soluzioni, ma il fatto sta a capire la logica della cosa, poi un discorso o un altro li personalizzo io.


  • Consiglio Direttivo
    1. devo creare tante tabella per quanti clienti ho?
    1. e se il cliente ha più pratiche?
    2. nella/e tabella/e dove lo inserisco il valore per ogni campo e che tipo di valore?spe...ti facilito l'associazione di pensiero, pensa ad una tabella del Db come ad un foglio excel

    Intestazione colonne = nome dei campi
    contenuto celle = dati del campo

    indi ti basta una sola tabella per tutti:
    | id | id_user | descrizione | stato | *nome campi = intestazione colonne
    *| _1 | 5 | pratica per..| ok | (pratica n. 1 relativa all'user n. 5)
    | _2 | 3 | pratica per..| ko | (pratica n. 2 relativa all'user n. 3)
    etc etc etc

    😉


  • User

    ...ma se per esempio l'id_user 5 ha 2 pratiche, devo fare una cosa del genere?

    | id | id_user | descrizione | stato | nome campi = intestazione colonne
    | _1 | 5 | pratica per..| ok | (pratica n. 1 relativa all'user n. 5)
    | _2 | 5 | pratica per..| ok | (pratica n. 2 relativa all'user n. 5)

    e comunque rimane il problema che non so come crearle in phpmyadmin, cioè che valore mettere del tipo: ID>TIPO>LUNGHEZZA>NULL>PREDEFINITO>CHIAVE PRIMARIA....come impostare?

    poi...una query riusciresti per pietà a crearmela tipo:

    query SQL:
    CREATE TABLE pratiche


  • User

    Questo è il risultato della pagina privata.php dopo il login, manca qualcosa...

    Pratica n.DescrizioneStato

    questa è la query per la creazione della tabella pratiche:

    CREATE TABLE pratiche (
    id int(11) NOT NULL auto_increment,
    id_user INT(11) NOT NULL,
    descrizione VARCHAR(255) NOT NULL,
    stato VARCHAR(10) NOT NULL,
    PRIMARY KEY (id)
    );

    che c'è di sbagliato?
    perchè non mi dà il numero della pratica e lo stato?

    mi viene fuori solo la tabella senza risultati sotto


  • Consiglio Direttivo

    Non vedi dati perchè hai solo creato una tabella, mancano i record al suo interno 😉

    prova così:
    [php] $sql="INSERT INTO pratiche (id_user, descrizione, stato) VALUES ('3', 'Pratica relativa al..........', 'evasa')";
    $query=@mysql_query ($sql) or die (mysql_error());[/php]questo tramite una pagina di php, richiamando ovviamente il file di connessione
    oppure molto più semplicemente dal pannello phpmyadmin manda la query:

    INSERT INTO pratiche (id_user, descrizione, stato) VALUES ('3', 'Pratica relativa al..........', 'evasa')
    

  • User

    intanto rinnovo il grazie, se non ci fossi tu...
    cmq pian piano ci sto arrivando...

    continua a non stamparmi niente dopo il login!

    ho inserito in phpmyadmn il record seguente:

    INSERT INTO pratiche (id_user, descrizione, stato) VALUES ('1', 'Casellario giudiziale', 'evasa')
    allora...
    ho nella tabella utenti registrato il mio nome.

    id= 1
    user= gino latino
    pass=25478

    nel record della tabella pratiche ho inserito id_user=1...invece dovevo inserire id_user=ginolatino?

    grazie in anticipo


  • Consiglio Direttivo

    @ginolatino said:

    nel record della tabella pratiche ho inserito id_user=1...invece dovevo inserire id_user=ginolatino?
    é giusto
    ma nella pagina di visualizzazione hai associato l'id dell'utente connesso alla variabile $id??
    Non so come tu abbia impostato la sessione, se nella sessioni ti "trasporti" l'id utente, una cosa del genere:
    [PHP]$id=$_SESSION['id'];[/PHP]


  • User

    guarda ti posto la pagina privata.php
    che farebbe parte dello script di thedarkita, ma modiificata con i tuoi script d'aiuto, eccola qui (mi sa che manca l'associazione dell'id utente?):

    privata.php

    [php]<?php
    // Includo la connessione al database
    require('config.php');
    // Se non è stata definita la variabile manda l'utente alla homepage
    if(!isset($_SESSION['login']))
    {
    header('Location: index.php');
    exit;
    }
    $sql="SELECT id, descrizione, stato FROM pratiche WHERE id_user='$id'"; //l'$id lo recuperi dalla sessione 😉
    $query = @mysql_query ($sql) or die (mysql_error());
    ?>
    <table border="1">
    <tr><th>Pratica n.</th><th>Descrizione</th><th>Stato</th></tr>
    <?
    while ($array= mysql_fetch_array($query)) // raccogliamo il risultato della query in un array e usciamo fuori tutto il suo contenuto a video
    {
    echo "<tr><td>".$array['id']."</td><td>".$array['descrizione']."</td><td>".$array['stato']."</td></tr>";
    }
    ?>
    </table>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Area privata</title>
    </head>
    <body>
    <br />
    <a href="logout.php">Logout</a><br />
    </body>
    </html>[/php]


  • Consiglio Direttivo

    @ginolatino said:

    (mi sa che manca l'associazione dell'id utente?)
    infatti 😉

    privata.php

    [php]<?php
    // Includo la connessione al database
    require('config.php');
    // Se non è stata definita la variabile manda l'utente alla homepage
    if(!isset($_SESSION['login']))
    {
    header('Location: index.php');
    exit;
    }
    $id=$_SESSION['login'];
    $sql="SELECT id, descrizione, stato FROM pratiche WHERE id_user='$id'"; //l'$id lo recuperi dalla sessione 😉
    $query = @mysql_query ($sql) or die (mysql_error());
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Area privata</title>
    </head>
    <body>
    <table border="1">
    <tr><th>Pratica n.</th><th>Descrizione</th><th>Stato</th></tr>
    <?
    while ($array= mysql_fetch_array($query)) // raccogliamo il risultato della query in un array e usciamo fuori tutto il suo contenuto a video
    {
    echo "<tr><td>".$array['id']."</td><td>".$array['descrizione']."</td><td>".$array['stato']."</td></tr>";
    }
    ?>
    </table>
    <a href="logout.php">Logout</a><br />
    </body>
    </html>[/php]Prova così 😉


  • User

    niente da fare, ho aggiunto la sessione, ma non mi mostra i risultati...

    senti stavo pensando che c'è un problema nella tabella del database:

    allora ricapitolando...

    ho creato questa tabella per le pratiche:

    CREATE TABLE `pratiche` (
    `id` int(11) NOT NULL auto_increment,
    `id_user` INT(11) NOT NULL,
    `descrizione` VARCHAR(255) NOT NULL,
    `stato` VARCHAR(10) NOT NULL,
    PRIMARY KEY (`id`)
    );
    
    

    poi in seguito al tuo consiglio ho aggiunto il record:

    INSERT INTO pratiche (id_user, descrizione, stato) VALUES ('1', 'Casellario giudiziale', 'evasa')
    

    Quindi, fin qui siamo al punto che:

    la pratica che si chiama casellario giudiziale e lo stato è evasa...

    nella tabella utenti risulta che lo username ginolatino è associato all'id=1...

    ...quando effettuo il login con ginolatino, mi dovrebbe venire fuori a video: casellario giudiziale = evasa...perchè nel record della tabella pratiche abbiamo aggiunto questo, giusto?

    mentre se effettuo il login con un altro utente dato che non è stato inserito nessun recor non dovrebbe venire fuori niente, giusto il ragionamento?

    ulteriormente:
    il login riconosce l'id 1 o username ginolatino?(quindi devo cambiare il record nella tabella pratiche da id_user >int >11 a id_user >varchar >25 e scrivere ginolatino??????

    ti prego fammi un pò di chiarezza!:?...se no altrimenti ti posto tutto lo script e le tabelle...è una minaccia!:giggle:


  • User

    ce l'ho fattaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!!!!!!!!!! 🙂

    sei un grande, grazie veramente!!!!!

    ho riportato la tabella pratiche come era prima, ossia con id_user=1, quindi quando mi loggo con ginolatino (id=1) mi viene fuori finalmente:

    pratica n.|descrizione |stato |
    1 |casellario giudiziale|evasa|

    ok, ora se non mi vuoi lasciare ti chiedo l'ultimo favore:

    vorrei far visualizzare al cliente (quello che mi è stato chiesto dall'avvocato) che si logga la lista delle sue pratiche esempio:

    |pratica numero|descrizione |stato |

    |1 |casellario giudiziale.doc|in lavorazione|
    |2 |denuncia.doc |lavorata |

    ma invece di visualizzare solo il testo ci dovrebbe essere un collegamento per aprire la pratica in formato .doc e leggerla

    se mi aiuti per questa cosa ti mando un camion di pizze margherite con spedizione veloce:yuppi:


  • Consiglio Direttivo

    Puoi aggiungere un campo alla tabella pratiche dove ti salvi il path del documento e quindi far visualizzare all'utente, nella tabella, il link al documento
    Due consigli:

    • fai gestire tutto con dei pdf non con dei .doc, .txt, .xls, etc etc.
    • dati i contenuti di questi documenti fossi in te starei molto attento a come/dove li salvi ne va del tuo lavoro e di quello dell'avvocato 😉

    In giro ci dovrebbero essere degli script per evitare i download 😉


  • User

    sì, in effetti stavo pensando che per la sicurezza dei dati, non è il caso creare dei collegamenti a dei file pdf, contenuti in delle cartelle...

    ma più che altro allora a questo punto sarebbe meglio far visualizzare a video una volta loggati, l'intera pratica che ne dici?


  • Consiglio Direttivo

    Se trovi uno script che ti blocca il DL dei file stai, più o meno, apposto.
    Senno' inserisci tutto su Db (volendo puoi usare la libreria FPDF per creare online dei PDF con i dati contenuti nel tuo Db 😉 )

    P.S. ah, in tutto questo ovviamente servirà una pagina ad accesso esclusivo dell'avvocato per caricare i record delle pratiche sul Db 😉 e poi metterei anche la tracciatura dei log degli utenti con tanto di IP ed altro 😉


  • User

    Sì in effetti mi sa che è la soluzione migliore...

    comunque in altra situazione meno delicata, volendo usare la soluzione del campo aggiunto nella tabella inserendo il path....

    la cartella si chiama pratiche, digitando ww.miosito/pratiche/pratica.pdf non si accede direttamente all'url?
    era questo che mio stavi dicendo con...

    @Samyorn said:

    Se trovi uno script che ti blocca il DL dei file stai, più o meno, apposto.


  • Consiglio Direttivo

    Si, praticamente tramite .htaccess blocchi il DL diretto, ed il Dl avverrà tramite uno script 😉

    Un qualcosa del genere almeno, ricordo di averlo visto tempo fa ma non l'ho usato 😉