- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Tutorial] Area privata
-
LOGIN
[php]<?php
// Includo la connessione al database
require('config.php');// Se il modulo viene inviato...
if(isset($_POST['login']))
{// Dati Inviati dal modulo
$user = (isset($_POST['username'])) ? trim($_POST['username']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
$pass = (isset($_POST['password'])) ? trim($_POST['password']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''// Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
if (!get_magic_quotes_gpc()) {
$user = addslashes($user);
$pass = addslashes($pass);
}// Crypto la password e la confronto con quella nel database
$pass = md5($pass);// Controllo l'utente esiste
$query = mysql_query("SELECT idusers FROM users WHERE username = '$user' AND password = '$pass' LIMIT 1");
echo "SELECT idusers FROM users WHERE username = '$user' AND password = '$pass' LIMIT 1";// Se ha trovato un record
if(mysql_num_rows($query) == 1)
{
// prelevo l'id dal database
$login = mysql_fetch_array($query);// Creo una variabile di sessione
$_SESSION['login'] = $login['idusers'];// reindirizzo l'utente
header('Location: privata.php');
exit;
}
// se non esiste da l'errore
else
die('Nome Utente o Password errati');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ".w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns=".w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
</head>
<body>
<form action="" method="post">
<input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
<input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
<input name="login" type="submit" value="Login" /><br />
</form>
</body>
</html>[/php]
-
Prova cosi:
[php]
<?php
// Includo la connessione al database
require('config.php');// Se il modulo viene inviato...
if(isset($_POST['login']))
{// Dati Inviati dal modulo
$user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
$pass = (isset($_POST['password'])) ? trim($_POST['password']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''// Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
if (!get_magic_quotes_gpc()) {
$user = addslashes($user);
$pass = addslashes($pass);
}// Crypto la password e la confronto con quella nel database
$pass = md5($pass);// Controllo l'utente esiste
$query = mysql_query("SELECT idusers FROM users WHERE username = '$user' AND password = '$pass' LIMIT 1");// Se ha trovato un record
if(mysql_num_rows($query) == 1)
{
// prelevo l'id dal database
$login = mysql_fetch_array($query);// Creo una variabile di sessione
$_SESSION['login'] = $login['idusers'];// reindirizzo l'utente
header('Location: privata.php');
exit;
}
// se non esiste da l'errore
else
die('Nome Utente o Password errati');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ".w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns=".w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
</head>
<body>
<form action="" method="post">
<input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
<input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
<input name="login" type="submit" value="Login" /><br />
</form>
</body>
</html>
[/php]
-
Niente nome utente o pass errati, comunque non penso sia quello il problema perchè ti ripeto se al posto di $user $pass li cambio direttamente con dei valori presenti nel database lui esegue l'accesso automaticamente,mentre se li metto è come se i dati si perdessero da qualche altra parte. E comunque scusa, se io ho nel database presente una colonna username penso sia sbagliato mettere solo user, o no?
-
w w w.ecobrokerservices.it/db.jpg
l'immagine riassume il mio db
-
Pure il name della password lo hai messo sbagliato non ci avevo fatto caso:
[php]
<?php
// Includo la connessione al database
require('config.php');// Se il modulo viene inviato...
if(isset($_POST['login']))
{// Dati Inviati dal modulo
$user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
$pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''// Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
if (!get_magic_quotes_gpc()) {
$user = addslashes($user);
$pass = addslashes($pass);
}// Crypto la password e la confronto con quella nel database
$pass = md5($pass);// Controllo l'utente esiste
$query = mysql_query("SELECT idusers FROM users WHERE username = '$user' AND password = '$pass' LIMIT 1");// Se ha trovato un record
if(mysql_num_rows($query) == 1)
{
// prelevo l'id dal database
$login = mysql_fetch_array($query);// Creo una variabile di sessione
$_SESSION['login'] = $login['idusers'];// reindirizzo l'utente
header('Location: privata.php');
exit;
}
// se non esiste da l'errore
else
die('Nome Utente o Password errati');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ".w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns=".w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
</head>
<body>
<form action="" method="post">
<input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
<input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
<input name="login" type="submit" value="Login" /><br />
</form>
</body>
</html>
[/php]
Devi utilizzare user e non username perchè i campi di testo hanno quel name.
-
Quindi non si riferiscono alla tabella del database, comunque non va, che dici faccio prima ad andare a zappare la terra?
-
Non mi sembra di vedere errori, fai un echo e vediamo che fa:
[php]
<?php
// Includo la connessione al database
require('config.php');// Se il modulo viene inviato...
if(isset($_POST['login']))
{// Dati Inviati dal modulo
$user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
$pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''// Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
if (!get_magic_quotes_gpc()) {
$user = addslashes($user);
$pass = addslashes($pass);
}
echo "$user - $pass <br>"
// Crypto la password e la confronto con quella nel database
$pass = md5($pass);// Controllo l'utente esiste
$query = mysql_query("SELECT idusers FROM users WHERE username = '$user' AND password = '$pass' LIMIT 1") or die(mysql_error());
echo"SELECT idusers FROM users WHERE username = '$user' AND password = '$pass' LIMIT 1";// Se ha trovato un record
if(mysql_num_rows($query) == 1)
{
// prelevo l'id dal database
$login = mysql_fetch_array($query);// Creo una variabile di sessione
$_SESSION['login'] = $login['idusers'];// reindirizzo l'utente
//header('Location: privata.php');
exit;
}
// se non esiste da l'errore
else
die('Nome Utente o Password errati');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ".w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns=".w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
</head>
<body>
<form action="" method="post">
<input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
<input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
<input name="login" type="submit" value="Login" /><br />
</form>
</body>
</html>
[/php]
-
Posso far notare una cosa curiosa,ho modificato il form di registrazione, ho effettuato una registrazione con successo e successivamente il login, e funziona, come mai non va se invece inserisco i dati direttamente da database?
edit* forse ho capito, la password nel db non era codificata md5,quindi quando io facevo il login lui la cercava semplicemente così come io l'avevo inserita, giusto?
-
Si, la password nel database deve essere in hash md5.
-
Ehhhh è per quello che non mi effettuava il login, ne siamo usciti finalmente grazie per il supporto, altra domanda a questo punto, come inserisco direttamente una pass in md5?
-
Ti fai uno scriptino in locale per restituirti la password in md5, oppure una pagina di inserimento come la registrazione per inserirli.
-
Posso fare una domanda?
Ho adattato i script al mio caso,in pratica una volta effettuato il login, reindirizza ad una pagina di controllo in cui tramite query ogni utente accede solo ai propri file che gli sono stati assegnati tramite db.
Il mio problema sorge perchè mi sono accorto che avendo per esempio messo sull'host una cartella /bancadati/foto.jpg
e avendo assegnato questo file ad un cliente è tutto ok.
Nel momento in cui io vado sul sito e aggiungo bancadati/foto.jpg accedo comunque al file,c'è un modo di mascherare la cartella e di renderla accessibile solamente a chi effettua il login? Perchè come va adesso mi ritrovo che se qualcuno conosce il link di un file ci può accedere comunque bypassando lo script login. Grazie!
-
La pagina privata.php postata nel tutorial contiene già il controllo, ti basta utilizzare quello implementando gli altri controlli che hai detto di aver messo.
-
Ciao thedark! ti vorrei chiedere una cosa, io ho il tuo script di attivazione (ovviamnte lo modificato) ma come mai mai nella tabella utneti campo attivazione non vedo nessun codice? e poi perchè mi dà questo errore
Parse error: syntax error, unexpected T_VARIABLE in /membri/zomer/attivazione.php on line 47
SCRIPT:
h**p://zomer.altervista.org/attivazione.txt
-
Ciao Zomer,
l'errore sta nel pezzo:
[php]
<?=($attivato == 1) ? '
Abbiamo attivato il tuo account ora puoi entrare in Zomer!'
[/php]
che dovrebbe essere:
[php]
<?php if($attivato == 1) echo'
Abbiamo attivato il tuo account ora puoi entrare in Zomer!';
[/php]
-
Un saluto a tutti
a me il codice funzione benissimo e faccio i complimenti a Thedarkita
adesso dovrei adattarlo al mio caso e vi spiego.
Sto lavorando ad un sito e sono arrivato al punto che per inviare un messaggio devi prima effettuare il login, e con il codice che ho prelevato va bene, adesso però non riesco a sapere chi si è loggato in maniera da abbinare il messaggio all'username del loggato.
Insomma tipo quando scrivo in questo forum
Potete darmi una mano?
ciao da Danny1975
-
Ciao danny1975,
nella variabile di sessione $_SESSION['login'] c'è l'id dell'utente loggato, quindi puoi utilizzare quello.
-
Salve,
Ho un po' personalizzato questo script ed ho creato una paginetta che subito dopo il login preleva l'IP dell'utente e me lo mette nel database.[PHP]<?php
// Includo la connessione al database
require('config.php');// Se non è stata definita la variabile manda l'utente alla homepage
if(!isset($_SESSION['login']))
{
header('Location: index.php');
exit;
}else
{
//Metto l'ID del'utente in una variabile
$id_utente = $_SESSION['login'];
//Metto l'IP dell'utente in una variabile
$ip_utente = $_SERVER['REMOTE_ADDR'];//Prendo l'orario e o metto nella variabile $a=time(); $b=date('d M y - H:i:s', $a);
//Metto la query in una variabile
$query_ip = "INSERT INTO ip_utenti (id_utente, ip_utente, data) VALUES ('$id_utente', '$ip_utente', '$b')";
//Eseguo la query
mysql_query($query_ip) OR die("Query non eseguita correttamente. ".mysql_error());header('Location: privata.php');
exit;
}?>[/PHP]
In questo metodo però nel Database mostra l'id dell'utente, cosa piuttosto scomoda, come posso fare a mette il Nome Utente accanto all'IP?
-
Basta salvare l'username nel databse o dove salvi il messaggio...
-
Ciao RCayla,
solitamente è sempre consigliato mettere l'id e non il nome utente, il nome utente puoi ottenerlo dopo facendo un join nella query.