[PHP] Problemi con il riconoscimento login.

Discussione in 'PHP' iniziata da MimmoFusco, 11 Febbraio 2019.

  1. MimmoFusco

    MimmoFusco Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    19
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Salve ragazzi, come da titolo ho un problema con il login.
    Ho creato tutto e non mi da errori il php, eppure non riconosce l'utente.
    Dove o in cosa sbaglio?

    Questo è Modulo Html
    HTML:
     <form name="form_login" method="POST" action="" >
       <label class="label">User:</label><br>
       <input type="text" class="form" required="" name="User">
       <label class="label">Password:</label><br>
       <input type="text" class="form" required="" name="Password" ><br>
       <input type="submit" value="Accedi">
     </form>
    
    Questo è il file Login.php
    PHP:
    <?php
    // Apriamo la sessione
    session_start();
    // Creo una logica condizionale per verificare User e Password.
    if (isset($_POST['User']) && isset($_POST['Password'])){
      
    // Richiamiamo la connessione al DataBase
      
    include 'config.php';
      
    // Recupero dal POST username e password
      
    $User $_POST['User'];  
      
    $Password $_POST['Password'];
      
    // Creo una query SQL di SELECT.
      
    $sql mysql_query("SELECT id FROM Utenti WHERE User = '$User' AND Password= '$Password'")
      or die (
    mysql_error());
      
    // Se la query restituisce un risultato creo la sessione di autenticazione
      
    if (mysql_num_rows($sql) > 0) {
        
    $riga mysql_fetch_array($sql);
        
    $_SESSION['id'] = $riga['id'];
     
    header("location: dati_utente.php");
      }else{
        
    $error "lo User o Password non sono Corretti";
      }
    }
    ?>
    Questo è il file dati_utente.php
    PHP:
    <?php
    // Avvio la sessione
    session_start();
    // Apriamo la sessione in base all'id utente.
    if (isset($_SESSION['id'])){
      
    // Richiamiamo la connessione al database.
      
    include 'config.php'
      
    // Creo una query SQL di SELECT e identifico l'id di sessione.
      
    $sql mysql_query("SELECT * FROM Utenti = ".(int)$_SESSION['id']);
      
    // Creo un array di dati dall'archivio utenti.
      
    $riga mysql_fetch_array($sql);
      
    $dati = array();
      
    $dati[]= $riga['User'];
      
    $dati[]= $riga['Password'];
      
    $dati[]= $riga['Nome'];
      
    $dati[]= $riga['Email'];
     
      echo 
    $dati[0] . "<br/>";
      echo 
    $dati[1] . "<br/>";
      echo 
    $dati[2] . "<br/>";
      echo 
    $dati[3] . "<br/>";
    }else{
      echo 
    "Utente non loggato"
    }
    ?>
     
    Ultima modifica: 11 Febbraio 2019
  2. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.550
    Mi Piace Ricevuti:
    126
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    forse perché non hai definito nessuna azione ….
    method="POST" action=""
     
  3. MimmoFusco

    MimmoFusco Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    19
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ciao, grazie per la risposta, in realtà accedo al file dopo una serie fitta di controlli javascript.
     
    Ultima modifica: 12 Febbraio 2019
  4. MimmoFusco

    MimmoFusco Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    19
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ok, ho risolto il riconoscimento dello User e della Password Così:

    Posto il codice magari servirà ad altri...

    PHP:

    <?php
      
    // Apriamo la sessione
      
    session_start();
     
    // Creo una logica condizionale per verificare User e Password.
     
    if (isset($_POST['User']) && isset($_POST['Password'])){
     
      
    // Richiamiamo la connessione al DataBase
      
    @include_once 'config.php';
     
    // Recupero dal POST username e password
      
    $User$_POST['User']; 
      
    $Password $_POST['Password'];

     
    //Registro User e Password
      
    $_SESSION['User'] = $User;
      
    $_SESSION['Password'] = $Password;

      
    // Creo una query SQL di SELECT.
     
      
    $sql "SELECT id FROM Utenti WHERE User = '$User' AND Password= '$Password'";
      
    $result mysqli_query($connessione$sql);
     
      
    // Se la query restituisce un risultato creo la sessione di autenticazione
     
     
    if (mysqli_num_rows($result) == 1){
        
    header("location: Dati_Utente.php");
      echo 
    "User e Password Corretti";
      } else {
       
    /*Username e password errati, redirect alla pagina di login*/
      
    echo "User e Password Errati";
     }
     
    }
    ?>

    Ora però, dopo aver riconosciuto lo user e la pass dell'utente ho problemi con il riconoscimento dei dati dell'utente logato
    nella pagina Dati_Utente.php

    Ecco il codice:

    PHP:

    <?php
      session_start
    ();
      include 
    "config.php";
     
      
    $User$_POST['User']; 
      
    $Password $_POST['Password']; 

      
    $sql "SELECT * FROM Utenti WHERE id = ".(int)$_SESSION['id'];
      
    $riga mysqli_query($connessione$sql);
      
    $riga mysql_fetch_array($sql);
     
      
    $dati = array();
      
    $dati[] = $riga['User'];
      
    $dati[] = $riga['Password'];
      
    $dati[] = $riga['Nome'];
      
    $dati[] = $riga['Email'];
      echo 
    "Dati=".implode(",",$dati);
     
    ?>
    Mi da questo errore:
    Fatal error: Uncaught Error: Call to undefined function mysql_fetch_array() in
     
    Ultima modifica: 12 Febbraio 2019
  5. MimmoFusco

    MimmoFusco Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    19
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Adesso sono riuscito ad eliminare l'errore ma non mostra comunque i dati dell'utente dopo il login.
    Non riesco a capire dove sbaglio…

    Ecco il codice:

    PHP:
    <?php
      session_start
    ();
      include 
    "config.php";
     
      
    $User$_POST['User'];
      
    $Password $_POST['Password'];
     
      
    $sql "SELECT * FROM Utenti WHERE id = ".(int)$_SESSION['id'];
      
    $riga mysqli_query($connessione$sql);
      
    $row $riga->fetch_array(MYSQLI_ASSOC);

      echo 
    $row['User'] . "<br/>";
      echo 
    $row['Password'] . "<br/>";
      echo 
    $row['Nome'] . "<br/>";
      echo 
    $row['Email'] . "<br/>";

     
    ?>

     
  6. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.550
    Mi Piace Ricevuti:
    126
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    l'unica modifica che rilevo nei post successivi al primo é il passaggio da mysql a mysqli
    non vedo soluzione per errori

    mentre in uno script che hai postato, leggo,
    $riga = mysqli_query($connessione, $sql);
    $riga = mysql_fetch_array($sql);
    forse la seconda riga é di troppo,

    pubblichi brevi sequenze di codice che non permettono un aiuto/supporto efficace
    non avendo noi conoscenza del codice, vedi a questo proposito
    che non si leggono da nessuna parte
     
  7. MimmoFusco

    MimmoFusco Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    19
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ciao, intanto grazie per il feedback.
    Posto subito il codice, No problem.

    Ecco tutto il codice sviluppato.

    Premessa, mancano molti controlli specie sulla password, come l'MD5 da php per esempio.
    o la possibilità di non inserire alcuni tipi di caratteri speciali direttamente da javascript.

    Ma per ora voglio risolvere il problema della lettura dei dati dopo il login, inoltre credevo fosse
    meglio postare codice snello e diretto, mentre mi hai fatto capire che (ovviamente per poter ricevere aiuto bisogna postare tutto il codice nella sua completezza).

    Comunque dopo aver capito come sviluppare il tutto, bisognerà creare delle classi PHP ed implementare l' MD5
    sulla password e altri controlli in javascript.

    Ecco la pagina Html login.php
    HTML:
    // Richiamo il file per i controlli  js.
    <script src="login.js"></script>
    
    // Creo il form html.
    <form name="form_login" method="POST" action="" >
       <label class="label">User:</label><br>
       <input type="text" class="form" required="" name="User" onFocus="re()">
       <label class="label">Password:</label><br>
       <input type="text" class="form" required="" name="Password" onFocus="re()"><br>
       <input type="submit" value="Accedi" onClick="controlli()"><br>
      <div id="errore"></div>
    </form>
    
    Ecco i controlli Javascript del file login.js
    PHP:
     function controlli(){
     
      
    // Verifico che i campi contengano i valori adatti con le espressioni regolari.
       
    var controllo_User=/^[a-zA-Zàèìòù']{3,16}/;
       var controllo_Password=/^[a-z0-9]{8,16}/i;
     
       var User_f = document.form_login.User.value;
       var Pass_f = document.form_login.Password.value;
      
       // Verifico che i dati corretti siano esatti oppure mostro l'
    errore in html
      
    if(!controllo_User.test(User_f)){
        
    document.getElementById("errore").innerHTML "Inserire User, Min. 8 Caratteri Max. 16";
      }else if(!
    controllo_Password.test(Pass_f)){
        
    document.getElementById("errore").innerHTML "Inserire Password, Min. 8 Caratteri Max. 16";
     }else{
        
    document.form_login.action="Login.php";
        
    document.form_login.submit();
      }
     
    }
    // Al click di ogni campo input faccio sparire il messaggio di errore "se prodotto".
    function re(){ document.getElementById("errore").innerHTML "";}
    Ecco la pagina login.php

    PHP:
    <?php
      
    // Apriamo la sessione
      
    session_start();
     
    // Creo una logica condizionale per verificare User e Password.
     
    if (isset($_POST['User']) && isset($_POST['Password'])){
     
      
    // Richiamiamo la connessione al DataBase
      
    @include_once 'config.php';
      
    // Recupero dal POST username e password
      
    $User$_POST['User'];
      
    $Password $_POST['Password'];
     
      
    $_SESSION['User'] = $User;
      
    $_SESSION['Password'] = $Password;
      
    // Creo una query SQL di SELECT.
     
      
    $sql "SELECT id FROM Utenti WHERE User = '$User' AND Password= '$Password'";
      
    $result mysqli_query($connessione$sql);
     
      
    // Se la query restituisce un risultato creo la sessione di autenticazione
     
     
    if (mysqli_num_rows($result) == 1){
        
    header("location: Dati_Login.php");
      echo 
    "User e Password Corretti";
      } else {
       
    /*Username e password errati, redirect alla pagina di login*/
      
    echo "User e Password Errati";
      }
     }
    ?>
    Ecco la pagina Dati_Login.php dove riscontro il problema, ovvero dopo il login non legge tutti i dati dell'utente ma solo lo user e la password aperti nella sessione.
    In pratica è come se non prendesse in considerazione la query sql e non mostrasse i dati nome e email

    PHP:
    <?php
      session_start
    ();
      include 
    "config.php";
     if(isset(
    $_SESSION['User'])&& isset($_SESSION['Password'])) {
       
    $sql "SELECT * FROM Utenti WHERE User = ".(int)$_SESSION['User'];
       
    $result mysqli_query($connessione$sql);
     
       echo 
    "User:"$_SESSION['User'] . "<br/>";
       echo 
    "Password:"$_SESSION['Password'] . "<br/>";
       echo 
    "Nome:"$_SESSION['Nome'] . "<br/>";
       echo 
    "Email:"$_SESSION['Email'] . "<br/>";
     
    }
     
    ?>
     
    Ultima modifica: 13 Febbraio 2019
  8. Daniele_Carrara

    Daniele_Carrara Nuovo Utente

    Registrato:
    20 Aprile 2018
    Messaggi:
    12
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Da quello che vedo $_SESSION['User'] e $_SESSION['Password'] sono settate con i valori che raccogli dal post nella pagina login.php

    Per quanto riguarda $_SESSION['Nome'] e $_SESSION['Email'] non gli assegni alcun valore.

    Dopo aver effettuato la query i valori sono all'interno di $result e da li devi assegnare tale valore alle relative variabili di sessione, esempio:

    PHP:
    $sql "SELECT * FROM Utenti WHERE User = ".(int)$_SESSION['User'];
    $result mysqli_query($connessione$sql);
    $_SESSION['Nome'] = $result->Nome;
    $_SESSION['Email'] = $result->Email;
     
  9. MimmoFusco

    MimmoFusco Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    19
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ciao Daniele_Carrara, ti ringrazio tanto per la risposta celere.
    Tuttavia non funziona, ma la tua logica è assolutamente esatta!
     
  10. Daniele_Carrara

    Daniele_Carrara Nuovo Utente

    Registrato:
    20 Aprile 2018
    Messaggi:
    12
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ciao, il problema è sempre legato al valore delle variabili $_SESSION['Nome'] e $_SESSION['Email']?
     
  11. MimmoFusco

    MimmoFusco Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    19
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Si, non restituisce alcun valore, non da alcun errore ma neppure restituisce i valori.
     
  12. Daniele_Carrara

    Daniele_Carrara Nuovo Utente

    Registrato:
    20 Aprile 2018
    Messaggi:
    12
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Credo possa dare problemi la query, prova ad effettuare un var_dump() di $result per vedere se effettivamente la query viene eseguita (in caso ci fossero problemi con la query stamperebbe a video "false".

    nel caso prova a riscrivere la query in questo modo:
    PHP:
    $ur intval($_SESSION['User']);
    $sql "SELECT * FROM Utenti WHERE User = '$ur' ";
    a me è capitato più volte che la composizione della query desse problemi con concatenazioni o altro, io cerco semrpe di lasciarla il più pulita possibile :)
     
  13. MimmoFusco

    MimmoFusco Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    19
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    :eek: Non stampa a video nessun risultato, è come se non calcolasse il codice se non lo user e la password della sezione aperta
     
  14. Daniele_Carrara

    Daniele_Carrara Nuovo Utente

    Registrato:
    20 Aprile 2018
    Messaggi:
    12
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Forse sono io che mi sono perso qualcosa, ma qui il valore del post viene inserito in $GameTag mentre la variabile $User non trovo dove venga settata
     
  15. MimmoFusco

    MimmoFusco Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    19
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Si, ho sbagliato io a copiare e incollare poiché è il vecchio nome ora per una più facile comprensione l'ho chiamata User quella variabile li
     
  16. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    966
    Mi Piace Ricevuti:
    56
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Stando a quanto hai scritto controlla la query
    PHP:
    $conn=new mysqli(...)

    //risultato della query
    $data_user=$conn->query(SQL)->fetch_assoc();

    //var per prelevare i dati utente necessari
    $fillable=['Nome','Email','Cognome'.....]
    //assegno a SESSION di $fillable[0,1,2.....n] il valore corrispondente, se non settato 'no set'
    foreach($fillable as $item)$_SESSION[$item]=$data_user[$item]??'no set';

    var_dump($data_user);
    var_dump($_SESSION]
    Se trovi il 'no set' in SESSION la query ha qualche errore....

    Prova a fare una query forzando tramite id utente....
     
    Ultima modifica: 13 Febbraio 2019
  17. MimmoFusco

    MimmoFusco Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    19
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ciao, grazie per la risposta, proverò a capire come adattare il tuo codice al mio script
     
    Ultima modifica: 13 Febbraio 2019
  18. MimmoFusco

    MimmoFusco Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    19
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Il risultato del var_dump è il seguente:
    string(47) "SELECT * FROM Utenti WHERE User = ''" object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(5) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) }
     
  19. MimmoFusco

    MimmoFusco Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    19
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ora ho cambiato così ma non funziona nulla…
    Pagina bianca, nessun dato!

    PHP:
    <?php
      session_start
    ();
      include 
    "config.php";
     
     if(isset(
    $_SESSION['User'])&& isset($_SESSION['Password'])) {

       
    $sql "SELECT * FROM Utenti WHERE User = '".$User."'";
       
    $result mysqli_query($connessione$sql);
       
    $number mysqli_num_rows($result);
     
       
    $i 0;
      if (
    $number 1) {
        print 
    "<center><p>La ricerca non ha prodotto nessun risultato</p></center>";
      }else{
        while (
    $number $i) {
          
    $User mysqli_result($result,$i,"User");
          
    $Password mysqli_result($result,$i,"Password");
          
    $Nome mysqli_result($result,$i,"Nome");
          
    $Email mysqli_result($result,$i,"Email");
         
          echo 
    $User"<br/>";
          echo 
    $Password"<br/>";
          echo 
    $Nome"<br/>";
          echo 
    $Email"<br/>";
          
    $i++;
        }
      }
     }
     
    ?>
     
  20. MimmoFusco

    MimmoFusco Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    19
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Incredibile, proprio non riesco, continua a darmi solo i due valori User e Password e la query
    funziona perchè eliminando la sessione alla variabile mostra i dati nome e email ma non li associa
    all'utente logato ma legge semplicemente nome e email del primo utente registrato.

    Tuttavia questo mi dice che la query funziona infatti la associo ad un array che chiamo riga.

    Ma perché non mi riconosce gli altri dati?


    PHP:
    <?php
      session_start
    ();
       
      include 
    "config.php";
      
      if(isset(
    $_SESSION['User'])&& isset($_SESSION['Password'])) { 
       
       
    $sql "SELECT * FROM Utenti WHERE User = ".(int)$_SESSION['User'];
       
    $result mysqli_query($connessione$sql);
       
    $riga mysqli_fetch_array($result);
       
       
    $riga['User'] = $_SESSION['User'];
       
    $riga['Password'] = $_SESSION['Password'];
       
    $riga['Nome'] = $_SESSION['Nome'];
       
    $riga['Email'] = $_SESSION['Email'];
     
       echo 
    "User: " .$riga['User']. "<br/>";
       echo 
    "Password: " .$riga['Password']. "<br/>";
       echo 
    "Nome: "  .$riga['Nome']. "<br/>";
       echo 
    "Email: " .$riga['Email']. "<br/>";
     }
     
    ?>
     
Sto caricando...

Condividi questa Pagina