Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 30
  1. #1
    Utente di HTML.it L'avatar di taba93
    Registrato dal
    Oct 2007
    Messaggi
    83

    Problema utenti di diverso livello

    Ciao a tutti...ho un problema nel login di utenti di diverso livello (i livelli sono 2: amministratore e moderatore):

    nella pagina che mi controlla se il login è giusto il codice è questo:
    Codice PHP:
    <?php

    include "includes/config.inc.php";

    //Connessione al db mysql
    $db mysql_connect($db_host$db_user$db_password);
        if (
    $db == FALSE)
        die (
    "Errore nella connessione al database. Verificare i parametri nel file config.inc.php");
        else {
        }
    //Selezione del database
    mysql_select_db($db_name$db)
        or die (
    "Errore nella selezione del database. Verificare i parametri nel file config.inc.php"); //connessione al database

    $username $_POST['username'];
    $passwd $_POST['passwd'];

    $sql="SELECT * FROM users WHERE username='$username' and passwd='$passwd'";
    $result = @mysql_query($sql);
    $count = @mysql_num_rows($result);
     
    if(
    $count==1){

    session_register ("username");
    session_register ("potere"); // è il livello dell'utente  
    header("location:login_success.php?user=$username");
    }
    else {
    echo 
    "Attenzione username o password errati!

    Reinseriscili cliccando <a href=\"http://www.rainerum.it/media/docenti.php\">QUI</a>."
    ;
    }
    ?>
    poi ho la pagina login_successfull.php che ha questo codice e che ci manda ad una pagina di amministrazione dove ci sono scritte tutte le cose che si possono fare e a questa vi possono accedere tutti (moderatori ed amministratori):
    Codice PHP:
    <?php
    session_start
    ();
    $username $_GET['user'];

    if(
    session_is_registered(username)) { 
    echo
    "Benvenuto $username! Accedi da <a href=\"index.php\">QUI</a> all'inserimento di contenuti.";
    }
     else {
        
    header('location:login.php'); 
    }


    ?>
    Da lì poi uno sceglie per esempio di andare a modificare gli utenti cliccando su un link k ci manda alla pagina usermanager.php (a questo punto in questa pagina c'è un if che dice che se la sessione registrata del livello dell'utente è pari a 1 (amministratore)gli fa vedere il contenuto della pagina. altrimenti non gliela fa vedere.
    il codice della pagina è questa (ometto tutto il codice effettivo di usermanager.php xke è inutile ai fini del problema in quanto so che quello funziona perfettamente):

    Codice PHP:
    <?php
    session_start
    ();
    if (
    $_SESSION["potere"] == "1"){ 

    //fai vedere tutto



    else { 
    echo 
    "Non sei autorizzato ad entrare";
     }
    ?>
    Mi sapreste dare una mano? grazie

    -edit- mi sono dimenticato di dire il problema... ...comunque il problema è che sembra che non salvi alcuna sessione del livello perchè mi dice che non ho le autorizzazioni per entrare nonostante il mio livello sia settato a "1"

  2. #2
    Utente di HTML.it L'avatar di taba93
    Registrato dal
    Oct 2007
    Messaggi
    83
    UP

  3. #3
    Originariamente inviato da taba93
    UP
    Ci provo, perchè messa così non è semplice, bisognerebbe rifarsi tutto il sitema per provare, comunque:

    Togli session_register che dalla versione 5.3 se non erro è deprecato e usa:
    codice:
    $_SESSION['username'] = //quello che è;
    $_SESSION['poteri'] = // quello che è;
    Per controllare se è settata invece di session_is_registered, stesso discorso di prima, usa:
    codice:
    if(isset($_SESSION['username'])){......
    Prova e togli le @ davanti ai vari mysql..., altrimenti se ci sono errori non li vedi.

    Facci sapere.

  4. #4
    Utente di HTML.it L'avatar di taba93
    Registrato dal
    Oct 2007
    Messaggi
    83
    non cambia niente...qualcuno ha qualche idea? io sono ore k mi scervello!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    28
    Interessa anche a me e ci sto impazzendo xD up

  6. #6
    Ciao Taba!

    Non conoscendo al 100% la struttura del tuo codice non potrei dare risposte precise al 100%, comunque...

    Ho notato che in nessuna parte, nel codice che hai postato qui, c'è un punto in cui imposti il valore per la sessione 'potere' ($_SESSION['potere'])

    Presumendo che questo dettaglio sia stato per qualche ragione tralasciato (o forse semplicemente si trova in qualche altra parte del tuo script che non hai postato) ho modificato il primo frammento di login in questo modo:

    Codice PHP:
    <?php 

    include "includes/config.inc.php"

    //Connessione al db mysql 
    $db mysql_connect($db_host$db_user$db_password); 
        if (
    $db == FALSE
        die (
    "Errore nella connessione al database. Verificare i parametri nel file config.inc.php"); 
        else { 
        } 
    //Selezione del database 
    mysql_select_db($db_name$db
        or die (
    "Errore nella selezione del database. Verificare i parametri nel file config.inc.php"); //connessione al database 

    $username $_POST['username']; 
    $passwd $_POST['passwd']; 

    $sql="SELECT * FROM users WHERE username='$username' and passwd='$passwd'"
    $result = @mysql_query($sql); 
    $count = @mysql_num_rows($result); 
    $getinfo = @mysql_fetch_array($sql);
      
    if(
    $count==1){ 

    /*
    session_register ("username"); 
    session_register ("potere"); // e il livello dell'utente   
    */

    $_SESSION['username'] = $getinfo['username'];
    $_SESSION['potere'] = $getinfo['potere'];

    header("location:login_success.php?user=$username"); 

    else { 
    echo 
    "Attenzione username o password errati!

    Reinseriscili cliccando <a href=\"http://www.rainerum.it/media/docenti.php

    \">QUI</a>."


    ?>
    Noterai che sulla riga 21 (dove esegui le funzioni mysql) ho inserito questa linea di codice:

    Codice PHP:
    $getinfo = @mysql_fetch_array($sql); 
    Questa funzione, che probabilmente già conosci, estrapola le informazioni dalla tabella users, rispettando ovviamente le richieste che hai dichiarato nella tua query ($sql)

    Ovviamente, non conoscendo la struttura della tabella 'users' non so se è presente assieme al nome utente, come ho semplicemente teorizzato, la colonna 'potere'.
    Quello che faccio è semplicemente assegnare alla sessione potere ($_SESSION['potere']) il valore corrispondente all'utente che entra.

    Ripeto comunque che non so se questa è la soluzione che fa al caso tuo, in quanto non conosco la struttura del sistema e non so se la sessione sopracitata viene dichiarata in altre pagine.

    Attendo una tua risposta per colmare i miei dubbi e per poter arrivare ad una soluzione concreta!

  7. #7
    questo script è soggetto alle SQL injection... e fra l'altro si tratta del classico caso di scuola riportato classicamente come esempio...

    Codice PHP:
    $username $_POST['username'];  
    $passwd $_POST['passwd'];  

    $sql="SELECT * FROM users WHERE username='$username' and passwd='$passwd'"
    ... senza poi contare le troppe chiocciole (operatore silent) sparse nello script...

    ---------------

    venendo al tuo quesito per fare quello che cerchi è possibile strutturarlo in modo più o meno complesso in cui il top sarebbe la realizzazione di un ACL acronimo di access control list (ma non è propriamente semplicissima da sviluppare).

    Una cosa + semplice sarebbe quella di modificare la tabella utenti inserendovi un campo di tipo INT chiamato, ad esempio, "livello"/"ruolo"/"id_role" (eviterei potere... per una serie di ragioni)

    Inoltre, se proprio non si vuol scomodare cose complesse e OOP mi creerei un piccola libreria di funzioni (verifica dell'tente loggato, controllo del ruolo, controllo dei permessi/poteri) e un relativo file di costanti/impostazioni con cui gestire i diversi ruoli e i poteri associati a ciascuno di essi.
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    28
    Kajin ho modificato il mio script login seguendo i tuoi consigli ed ora ho questo, anche se avrò scritto qualche cavolata xD:
    P.s. nel mio database nella tabella utenti è presente la colonna "level", che indica il livello utente

    <?php
    session_start();
    $nomehost = "";
    $nomeuser = "";
    $password = "";
    $dbname="";
    $myusername=$_POST['username'];
    $mypassword=$_POST['password'];
    $level=$_SESSION['level'];
    $connessione = mysql_connect($nomehost,$nomeuser,$password);
    $database_select=mysql_select_db($dbname,$connessi one);
    $sql="SELECT * FROM utenti WHERE username='$myusername' and password= md5('$mypassword')";
    $result=mysql_query($sql);
    $count=mysql_num_rows($result);
    $getinfo = mysql_fetch_array($sql);
    $_SESSION['username'] = $myusername;
    $_SESSION['level'] = $getinfo['level'];
    if($count==1){
    session_register("myusername");
    session_register("mypassword");
    header ("location:logged.php");exit;mysql_close();
    }
    else{
    header("location:loggedn.php");session_destroy();m ysql_close();
    }
    ?>


    Il lato html è questo, in cui ho provato a mettere la restrizione per visualizzarlo in base al livello:
    <?php
    session_start();
    if ($_SESSION['level'] == "2"){

    echo "ciao";


    }
    else {
    echo "Non sei autorizzato ad entrare";
    }
    ?>
    <div id="chpss">
    <h2>Inserisci i dati per il cambio password</h2>

    <form name="login" method="POST" action="cpass.php">
    <table border="0">
    <tr>
    <td>Username: <input type="text" name="username" size='30' min="3" max="20" pattern="[a-zA-Z0-9]+$" title="Solo caratteri alfanumerici" value='' placeholder="Inserisci il tuo username" required/></td>
    </tr>
    <tr>
    <td>Password: <input type="password" name="mypassword" size='30' pattern=".{5,}" title="Inserire minimo 5 lettere o numeri" value='' placeholder="Inserisci la tua password" required/></td>
    </tr>
    <tr>
    <td>Nuova password: <input type="password" name="passworda" size='30' pattern=".{5,}" title="Inserire minimo 5 lettere o numeri" value='' placeholder="Inserisci la nuova password" required/></td>
    </tr>
    <tr>
    <td>Conferma password: <input type="password" name="passwordb" size='30' pattern=".{5,}" title="Inserire minimo 5 lettere o numeri" value='' placeholder="Ridigita la password" required/></td>
    </tr>
    <tr>
    <td><input type='submit' name='action' class='submit' value='Salva'></td>
    </tr>
    </table>
    </form>

    </div>


    Come detto da taba sembra che non legga il livello poichè compare sia che entri con un account di lv 1 che con uno di lv 2, il messaggio "Non riuscito"
    Probabilmente avrò fatto 1 errore stupido nello script

  9. #9
    Non ti piacciono i miei consigli?... vabbè...

    la variabile $getinfo non la valorizzi in maniera esatta (...così impari a mettere le @!!!)

    la funzione mysql_fetch_array la devi eseguire su $result e non su $sql.


    ... ma ti ripeto lo script ha diverse falle e lo devi organizzare in modo + strutturato se non vuoi che diventi ingestibile col proseguire del suo sviluppo/implementazione...
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    28
    Ok oly provo subito e ti dico

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.