Buongiorno a tutti,
è la prima volta che scrivo in questa sezione del forum, perchè è da poco tempo che mi sono buttato nella programmazione PHP e MySQL.
Premetto subito che il mio lavoro principale è la programmazione nell'ambito dell'automazione industriale (PLC, Azionamenti, motori, e pannelli operatori) quindi può essere che il mio metodo di programmazione sia differente da un puro programmatore Web Master.
Parto subito con la descrizione del problema che mi sta tenendo fermo da una settimana
Bene, il form di registrazione è funzionante, quindi passa in "Post" tutti i valori inseriti a se stessa, che provvede a fare tutti i controlli del caso ed infine salverà (momentaneamente) i dati in un file txt sul server, in attesa che l'utente confermi l'email.
Codice PHP:
// Verifica se ci sono stati errori nell'inserimento dei dati
if ($Errore == 0)
{
// Definisco il nome del file come l'MD5 del "nome utente"
$nome_file_Utente = md5($Nome_Utente);
$Password_crypt = md5($Password);
// Apertura del file in modalità scrittura
$file = fopen($nome_file_Utente .'.txt', 'w') or exit("Impossibile creare il file");
// Scrittura delle infomazione del file
fwrite($file, "$Nome\r\n$Cognome\r\n$Nome_Utente\r\n$Email\r\n$Password_crypt");
fclose($file);
echo "I dati sono stati salvati correttamente sul server.\r\n";
// Inizializzazione variabili per invio mail
$mittente = 'From: "Server"';
$destinatario = $Email;
$oggetto = "Conferma Registrazione";
// Composizione del corpo della mail
$messaggio = '';
$messaggio = $messaggio ."\n--- Conferma di registrazione di ".$Email." ---\n\n";
$messaggio = $messaggio ."Ciao ".$Nome." ".$Cognome."\n";
$messaggio = $messaggio ."grazie per esserti registrato al sito xxxx.\n\n";
$messaggio = $messaggio ."I dettagli del tuo Login sono :\n";
$messaggio = $messaggio ."Username: ".$Nome_Utente."\n";
$messaggio = $messaggio ."Password: ".$Password."\n\n";
$messaggio = $messaggio ."Per completare la fase di registrazione, utilizza il seguente link :\n";
$messaggio = $messaggio ."http://www.pippo.pluto/Registrati.php?y=2&z=".$nome_file_Utente ."\n\n";
$messaggio = $messaggio ."Grazie\n";
//Invio della mail
mail($destinatario, $oggetto, $messaggio, $mittente);
Exit;
}
A questo punto, quando l'utente aprirà il link inviato via mail, prenderò i valori salvati sul file txt e li salverò nel database.
Codice PHP:
//Verifica fase di attivazione account y=2
if ($y == 2)
{
$File_Name = $_GET["z"] .'.txt'; // Creazione della stringa con il percorso e nome del file
// Apertura del file in modalità lettura
$file = fopen($File_Name, "r") or exit("Impossibile aprire il file!");
// il metodo 'fgets' permette di leggere una singola riga alla volta
$name = fgets($file); // Nome
$surname = fgets($file); // Cognome
$user_name = addslashes(filter_var($user_name, FILTER_SANITIZE_STRING));
$aemail = fgets($file); // Email
$password = fgets($file); // Password
// Inserimento della tabella da utilizzare
$t = "Users";
// Inserimento dei valori
$v = array ($name,$surname,$aemail,$user_name,$password,"User",date("d-m-Y"));
// Campi di popolare nella tabella
$r = "name,surname,email,username_login,password_login,user_group,data_registrazione";
$data = new MysqlClass(); // istanza della classe
$data->connetti(); // chiamata alla funzione di connessione
$data->inserisci($t,$v,$r); // chiamata alla funzione per l'inserimento dei dati
echo "Utente registrato con successo.";
$data->disconnetti(); // disconnessione
fclose($file); // Chiusura del file
unlink($File_Name) // Eliminazione del file sul server
}
E fin qui tutto bene, se apro PHPmyAdmin i campi vengono popolati con tutti i dati prelevati dal file txt.
Ora possiamo passare alla fase di login.
Ed è proprio qui che sorge il problema, dopo aver controllato se il nome utente e la password sono stati inseriti, devo verificare se esiste quel nome utente con quella password (nel codice che riporterò ho tolto appositamente il controllo della password) tramite la query "SELECT", ed infine verificare quanti record esistono con quel filtro.
Codice PHP:
// validazione dei parametri tramite filtro per le stringhe
$password = md5($password);
$username = trim(filter_var($_POST['username'], FILTER_SANITIZE_STRING));
$password = trim(filter_var($_POST['password'], FILTER_SANITIZE_STRING));
// istanza della classe
$data = new MysqlClass();
// chiamata alla funzione di connessione
$data->connetti();
// interrogazione della tabella
$auth = $data->query("SELECT id_login FROM users WHERE username_login = '$username'");
$appoggio = mysql_num_rows($auth);
echo $appoggio;
// controllo sul risultato (deve essere 1)
if(mysql_num_rows($auth)==0)
{
// reindirizzamento alla homepage in caso di insuccesso
echo "nessuno user trovato";
}
else
{
// chiamata alla funzione per l'estrazione dei dati
$res = $data->estrai($auth);
// creazione del valore di sessione
$_SESSION['login'] = $res-> id_login;
// disconnessione da MySQL
$data->disconnetti();
// reindirizzamento alla pagina di amministrazione in caso di successo
echo "login eseguito";
}
Bene alla fine di tutto questo .... mi ritrovo sempre con la scritta : "nessuno user trovato"
Se invece inserisco manualmente l'utente da PHPmyAdmin, riesco a fare il login .... ma solo se ho inserito quell'utente da PHPmyAdmin.
Non riesco a capire dove diavolo sto sbagliando, ed è ormai una settimana che sto provando a fare di tutto.
Nel database i dati ci sono, vengono popolati dai dati letti sul file txt.
Ho anche creato un'altra pagina che mi stampa a video la colonna username_login della tabella "users", e ovviamente mi riporta tutti i dati in modo corretto .... boh .... non so più che fare .