[PHP] Problemi con il riconoscimento login.

MimmoFusco

Nuovo Utente
3 Feb 2019
19
0
1
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:
Ciao, grazie per la risposta, in realtà accedo al file dopo una serie fitta di controlli javascript.
 
Ultima modifica:
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:
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/>";

 ?>
 
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
in realtà accedo al file dopo una serie fitta di controlli javascript
che non si leggono da nessuna parte
 
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:
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;
 
Ciao Daniele_Carrara, ti ringrazio tanto per la risposta celere.
Tuttavia non funziona, ma la tua logica è assolutamente esatta!
 
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 :)
 
:eek: Non stampa a video nessun risultato, è come se non calcolasse il codice se non lo user e la password della sezione aperta
 
// Recupero dal POST username e password
$GameTag= $_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);

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
 
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
 
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:
Ciao, grazie per la risposta, proverò a capire come adattare il tuo codice al mio script
 
Ultima modifica:
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) }
 
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++;
    }
  }
 }
 
?>
 
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/>";
 }
 
?>
 

Discussioni simili