Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    errore caricamento pagina al login

    salve a tutti, sto cercando di sviluppare un sito su apache con database postgresql. ho un problemino con la pagina di login. eccola:
    Codice PHP:
    <?php 
    function controlloDB($usr$pass){
        
    $conn_string "host=localhost port=5432 dbname=x user=y password=z";

        
    $dbconn pg_connect($conn_string) or die ("Impossibile connettersi al database PostGres --> " pg_last_error($conn));

        
    $result2 pg_query($dbconn,'SET CHARACTER SET utf8');

        
    $sql "SELECT count(*),nickname FROM utenti where nick_norm='".$usr."' AND password='".$pass."' GROUP BY id_utente";
        
    $result pg_query($dbconn,$sql);
        
        while (
    $row pg_fetch_row($result)) {
            if (
    $row[0]>0){
                echo 
    "corretto";
                
    $_SESSION['user']=$row[1];
                
    $login_user=$row[1];
            }
            else {
                echo 
    "utente e/o password sbagliati";
            }
        }

        
    pg_close($dbconn);
        return 
    $login_user;
    }

    //dati per il login 
    $redirect="/login.php"
     
    //gestione della sessione nel caso in cui i cookie sono disabilitati 
    if(IsSet($_POST['PHPSESSID']) && !IsSet($_COOKIE['PHPSESSID'])) 

      
    $PHPSESSID=$_POST['PHPSESSID']; 
      
    header("Location:".$redirect."?PHPSESSID=$PHPSESSID"); //si ricarica la pagina di login 

     
    session_start(); //si inizia o continua la sessione 
     
    //controllo user e passwd da login 
    if(IsSet($_POST['user']) && IsSet($_POST['psw'])) 
    {
        
    $passmd5($_POST['psw']);
        
    $usr$_POST['user'];
        
    $usrstrtolower($usr);
        
    $login_usercontrollaDB($usr,$pass);
    }

    //creazione cookie per login automatico 
    if(IsSet($_POST['ricorda']) && IsSet($_SESSION['user'])) 

      
    $cok=md5($usr)."%%".$pass
      
    setcookie("sav_user",$cok,time()+31536000); 

     
    //logout 
    if($_GET['logout']==1

      
    $_SESSION=array(); // Desetta tutte le variabili di sessione. 
      
    session_destroy(); //DISTRUGGE la sessione. 
      
    if(IsSet($_COOKIE['sav_user'])) //se presente si distrugge il cookie di login automatico 
        
    setcookie("sav_user",$cok,time()-31536000); 
      
    header("Location:".$redirect); //si ricarica la pagina di login 
      
    exit; //si termina lo script in modo da ritornare alla schermata di login 

     
    //controllo user e passwd da cookie 
    if(IsSet($_COOKIE['sav_user'])) 

      
    $info_cok=$_COOKIE['sav_user']; 
      
    $cok_user=strtok($info_cok,"%%"); 
      
    $cok_pass=strtok("%%"); 
      
    setcookie("sav_user",$info_cok,time()+31536000); 
      
    $login_usercontrollaDB($cok_user,$cok_pass);

     
    //caso in cui si vuole ricordare il login, ma i cookie sono off 
    if(!IsSet($_COOKIE['PHPSESSID']) && IsSet($_POST['ricorda'])) 
      
    header("Location:".$redirect."?nocookie=1"); 
     
    $PHPSESSID=session_id(); 
     
    if(!IsSet(
    $_SESSION['user'])) //non siamo loggati, pagina di login 

      if(
    $_GET['nocookie']==1//i cookie sono off e si vuole ricordare il login 
        
    echo "Spiacente, ma con i cookie disabilitati non posso fare i miracoli ;)

    Attivali se vuoi ricordare il tuo login.
    "

      echo 
    "

     <FORM METHOD=POST ACTION=\"login.php\"> 
    username: 
    <INPUT TYPE=TEXT NAME=user>
     
    password: 
    <INPUT TYPE=PASSWORD NAME=psw>
     
    ricordami: <INPUT TYPE=CHECKBOX NAME=ricorda VALUE=1>

     
    <INPUT TYPE=SUBMIT NAME=SUBMIT VALUE=\"Login\">
    "

     
      if(!IsSet(
    $_COOKIE['PHPSESSID'])) //i cookie sono off, dobbiamo propagare noi il PHPSESSID 
        
    echo "<INPUT TYPE=HIDDEN NAME=PHPSESSID VALUE=$PHPSESSID>"
      echo 
    "</FORM>"

    else 
    //siamo loggati pagina riservata 

      
    $username=$_SESSION['user']; 
      echo 
    "Il tuo ID ?: $PHPSESSID 

    "

      echo 
    "Sei loggato come: $username

    "

      echo 
    "<A HREF=\"login.php?logout=1\">logout</A>"

    ?>
    ora non capisco perché cliccando sul bottone del form cerca di ricaricarmi la pagina di login ma non la carica. sapete aiutarmi? grazie.

  2. #2
    se ho capito bene te vuoi creare una pagina di login che si ricarica nel caso i dati siano errati giusto?

  3. #3
    sì e che mostri il logout in caso di login corretto

  4. #4
    Io lavorerei su 2 pagine, la pagina 'Login' e la pagine 'Riservato' (pagina protetta da password).
    Il codice per il login (ovviamente puoi aggiungere tutti i controlli presenti sulla tua versione, questo codice è semplificato all'essenziale):
    Codice PHP:
    <?PHP
        $user 
    "prova";
        
    $pass "password";

        
    $username $_POST["id"];
        
    $password $_POST["pw"];

        if (
    $username == $user && $password == $pass)
        {
            
    header('Location: riservato.html');
        }
        else
        {
            
    header('Location: login.html');
        }
    ?>
    La pagina riservato contiene un bottone 'Logout' che quando premuto riporta alla pagina 'index.php', se vuoi puoi anche implementare un metodo che al logout cancella i cookies.
    Così il tuo codice rimane semplice, pulito e sicuro.

  5. #5
    mmm ok, ho capito, la parte su sessione cookie ti sembra giusta? perché quella parte di codice (palesemente copiata) se i cookie sono disattivati riporta sempre alla pagina di login sennò dà errore 500 quando carica la pagina di login (che se ho capito devo mettere queste cose nella pagina riservata)

  6. #6
    Perchè vuoi usare i cookies?
    Se usi lo script che ti ho postato puoi farne a meno.
    Io evito di mettere sessioni e cookies assieme perchè fanno la stessa cosa (uno scade quando chiudi il browser e l'altro quando arriva alla data di scadenza o li elimini).
    Se proprio vuoi dare un'aiuto a chi fa il login puoi memorizzare le variabili in una sessione, così finchè rimane aperto il browser non deve reinserire l'utente e la password, più semplice da implementare e più sicuro.

  7. #7
    ok, seguendo quello che hai scritto sono arrivato a questo
    Codice PHP:
    <?php 
    function controlloDB($usr$pass){
        
    $trovato=false;
        
    $conn_string "host=localhost port=5432 dbname=x user=y password=z";

        
    $dbconn pg_connect($conn_string) or die ("Impossibile connettersi al database PostGres --> " pg_last_error($conn));

        
    $result2 pg_query($dbconn,'SET CHARACTER SET utf8');

        
    $sql "SELECT count(*),nickname FROM utenti where nick_norm='".$usr."' AND password='".$pass."' GROUP BY id_utente";
        
    $result pg_query($dbconn,$sql);
        
        while (
    $row pg_fetch_row($result)) {
            if (
    $row[0]>0){
                
    $trovato=true;
                
    $_SESSION['user']=$row[1];
            }
        }

        
    pg_close($dbconn);
        return 
    $trovato;
    }
     
    session_start(); //si inizia o continua la sessione 
     
    //controllo user e passwd da login 
    if(IsSet($_POST['user']) && IsSet($_POST['psw'])) 
    {
        
    $passmd5($_POST['psw']);
        
    $usr$_POST['user'];
        
    $usrstrtolower($usr);
        
    $login_usercontrolloDB($usr,$pass);
        if (
    $login_user)
            
    header('location: /index.php');
        else
            echo 
    "username o password sbagliata";
    }

    //logout 
    if($_GET['logout']==1

      
    $_SESSION=array();
      
    session_destroy();
      
    header('Location: /index.php');

    ?>

    <FORM METHOD=POST ACTION=""> 
    username: 
    <INPUT TYPE=TEXT NAME=user>

    password: 
    <INPUT TYPE=PASSWORD NAME=psw>

     
    <INPUT TYPE=SUBMIT NAME=SUBMIT VALUE="Login">
    giusto?

  8. #8
    io modificherei il codice in questo ordine:
    1. connettiti al db
    2. apri la sessione
    3. recupera l'utente e la password
    4. la query select recupera la password relativa all'utente (usi l'utente come condizione).
    5. controlli se la password è corretta
    6. permetti o neghi l'accesso.

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.