Visualizzazione risultati 1 fino 22 di 22

Discussione: Problema Include a seconda della Session

  1. #1
    Guest

    Predefinito Problema Include a seconda della Session

    Ciao a tutti;

    Nella pagina index.php, quando la persona che lo visita non è loggata, mostra login.html, se la sessione privilegi ha il valore 0, include pannello_utente.html, se invece ha valore 1, include panello_admin.html.

    Il problema è che nel primo caso funziona perfettamente, mentre gli ultimi due non li include (guardate: http://www.archivionegozio1.altervista.org valore 1= id aaaaa password: aaaaa, mentre valore 0, id: ciccio e password: ciccio)

    Questi sono i sorgenti:

    login_control.php
    Codice PHP:
    <?php
    session_start
    (); // inizio della sessione

    $host="localhost"; // Hostname

    $username="archivionegozio1"; // Mysql username

    $password=""; // Mysql password

    $db_name="my_archivionegozio1"; //Nome del Database

    $tbl_name="utenti"; // Nome della Tabella

    // Procedimento per connettersi al Database

    mysql_connect("$host", "$username", "$password")or die("Connessione Fallita.");
    mysql_select_db("$db_name")or die("Database non trovato.");


    $username = addslashes($_POST['myusername']);
    $pass = addslashes($_POST['mypassword']);

    //qui controlli se l'utente ha scritto nel campo se nn sai cm si fa chiedimi

    $sql = "SELECT * FROM utenti WHERE username = '".$username."' AND password = '".$pass."'";
    $query = mysql_query($sql) or die("errore nella query: ".mysql_error());

    if(
    mysql_num_rows($query) == 1) {

    $riga = mysql_fetch_array($query);
    $_SESSION['privilegi'] = $riga['privilegi']; // qui hai il grado dell'utente loggato
    $_SESSION['username'] = $riga['Username']; // qui l'username
    $_SESSION['pass'] = $riga['Password']; // qui la password
    header("Refresh: 0; URL=index.php");
    }else{
    echo
    "Username o password incoretti";
    header("Refresh: 2; URL=index.php");
    }
    ?>
    index.php
    Codice PHP:
    <?php
    session_start
    ();
    ?>
    <!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>Benvenuto su FareAffari.it!</title>
    <link type="text/css" rel="stylesheet" href="style.css" title="Style" media="all">
    </head>
    <body>
    <div id="contenitore">

    <div id="logo">
    Logo
    </div>

    <div id="menu">

    <?php

    if($_SESSION["privilegi"] === 0) {
    include(
    "pannello_utente.html");
    } else if(
    $_SESSION["privilegi"] === 1) {
    include(
    "pannello_admin.html");
    } else if(!isset(
    $_SESSION["privilegi"])) {
    include(
    "login.html");
    }
    ?>

    <br><br>

    <?php
    include("categorie.html");
    ?>
    </div>
    <div id="corpo">
    <br><br>

    </div>
    </div>
    </body>
    </html>
    pannello_utente.html
    Codice HTML:
    <HTML>
    <HEAD>
    <META NAME="GENERATOR" Content="AlterVista - Editor HTML">
    <TITLE></TITLE>
    </HEAD>
    <BODY>
    Utente<br>
    <a href="logout.php">Logout</a>
    </BODY>
    </HTML>
    pannello_admin.html
    Codice HTML:
    <HTML>
    <HEAD>
    <META NAME="GENERATOR" Content="AlterVista - Editor HTML">
    <TITLE></TITLE>
    </HEAD>
    <BODY>
    Admin<br>
    <a href="logout.php">Logout</a>
    </BODY>
    </HTML>
    Ovviamente queste due ultime pagine sono solo di prova per vedere se funziona.

    Grazie mille!

  2. #2
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    nella tabella 'utenti' il campo 'privilegi' è un intero o una stringa?

  3. #3
    Guest

    Predefinito

    è int

  4. #4
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    negli if in index.php ce scritto $_SESSION["privilegi"] === 0 devi mettere solo 2 uguali

  5. #5
    Guest

    Predefinito

    Perchè ===?? Sono solo 2 ==...
    (con 3 fai circa o uguale)

  6. #6
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Citazione Originalmente inviato da sIM Visualizza messaggio
    Perchè ===?? Sono solo 2 ==...
    (con 3 fai circa o uguale)
    Che? Meglio farsi un ripasso: http://www.php.net/manual/en/languag...comparison.php


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  7. #7
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    Citazione Originalmente inviato da palla000 Visualizza messaggio
    negli if in index.php ce scritto $_SESSION["privilegi"] === 0 devi mettere solo 2 uguali
    se il tipo del campo è un int allora il problema non è li

    ma a me non va nemmeno il login

  8. #8
    Guest

    Predefinito

    Quindi qualcuno mi può aiutare?

  9. #9
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Prima di tutto, gli include non sono condizionali, vengono sempre eseguiti anche se il codice non ci passa.

    Secondo prova a fare un echo di mysql_num_rows() e vedi che risultato ti trova, se fosse 2 non ti loggherebbe.

    Terzo, DEBUG, metti un pò di echo nel codice per visualizzare i valori e trovare l'errore.
    Dimenticavo
    Fai anche un echo di $sql ed il risultato eseguilo in un sqladmin per vedere se il risultato è giusto....
    Ultima modifica di binarysun : 26-05-2009 alle ore 15.51.59
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  10. #10
    Guest

    Predefinito

    Ho provare a fare echo su tutto, ma sembra tutto a posto.

    se è vero che gli include vengono sempre eseguiti, come faccio a fare in modo che nell'index.php visualizzi appunto una determinata pagina a seconda dei privilegi?

  11. #11
    Guest

    Predefinito

    Codice PHP:
    <?php

    if($_SESSION["privilegi"] === 0) {
    $include = "pannello_utente.html";
    } else if(
    $_SESSION["privilegi"] === 1) {
    $include = "pannello_admin.html";
    } else if(!isset(
    $_SESSION["privilegi"])) {
    $include = "login.html";
    }
    include(
    $include);
    ?>
    Ti salvi il percorso da includere in una variabile, che cambia a secondo dei privilegi, ed include il file...

    E a dire che nel tuo topic ti avevo consigliato di fare così....

  12. #12
    Guest

    Predefinito

    Si, ma mi sembrava meglio così.

    Cmq continua a non funzionare ç_ç

  13. #13
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Il problema è la condizione
    mysql_num_rows($query) == 1

    Ti restituisce sempre un numero diverso da zero.
    Prima domanda: è Vero? fai un echo per vedere cosa restituisce.

    Se è vero controlla la query, che sia effettivamente eseguita e che il risultato sia effettivamente di un valore e quale.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  14. #14
    Guest

    Predefinito

    come faccio a fare un echo di mysql_num_rows($query) == 1?

    Grazie mille!

  15. #15
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    Citazione Originalmente inviato da binarysun Visualizza messaggio
    Prima di tutto, gli include non sono condizionali, vengono sempre eseguiti anche se il codice non ci passa.
    non sono d'accordo

    gli include() sottostanno alle normali regole sintattiche come ogni funzione del PHP


    archivionegozio1:

    var_dump(mysql_num_rows($query));
    Ultima modifica di AlexKidd : 27-05-2009 alle ore 00.50.02

  16. #16
    Guest

    Predefinito

    Scrivendo:
    Codice PHP:
    <?php
    var_dump
    (mysql_num_rows($query));
    ?>
    nel codice (alla fine di login_control) dice (sbagliando id o password):

    int(0)

    Con admin loggato:

    int(1)

    Mentre con utente loggato:

    int(1)


    Come posso risolvere quindi il problema? Grazie!

  17. #17
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    sembra corretto

    in index.php (non importa se prima o dopo il blocco di if) inserisci un var_dump($_SESSION["privilegi"]) per capire se la variabile di sessione contiene effettivamente unintero

  18. #18
    Guest

    Predefinito

    in index.php:

    Utente non loggato (visualizza correttamente login.html) Visualizza NULL.

    Utente loggato: string(1) "0"

    Admin loggato: string(1) "1"



    PS: credevo fosse un problema dell'include, allora ho provato a usare header, ma non funziona ugualmente... funziona solo login.html e poi non va in nessuna altra pagina quando loggo con admin o utente, ma va nell'home page e lascia i 2 a capo che ci sono nel codice, nient'altro.



    EDIT2: Ho risolto, era un problema da ridere: bastava mettere "0" e "1" non 1 e 0 nel codice dell'include. Adesso funziona perfettamente, grazie a tutti.
    Ultima modifica di programmarealpc : 28-05-2009 alle ore 18.15.30

  19. #19
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    sei sicuro che sia un intero il tipo del campo privilegi? (e qui si ritorna alla mia domanda iniziale)

  20. #20
    Guest

    Predefinito

    Forse hai scritto mentre stavo editando.... adesso funziona, bastava mettere le virgolette prima e dopo i numeri, perchè sul database c'è 0 e 1, mentre senza le virgolette nel codice lo leggeva come *spazio*0 e *spazio*1.

  21. #21
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    hai ragione, mi ero dimenticato che anche i dati di tipo intero vengono restituiti come stringhe

  22. #22
    Guest

    Predefinito

    grazie comunque per avermi aiutato fino alla fine.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •