- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Tutorial] Area privata
-
Eccola..
[php]
<?php
// Se il modulo viene inviato...
if(isset($_POST['registra']))
{// 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 '' $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default '' $residenza = (isset($_POST['province'])) ? trim($_POST['province']) : ''; // Metto nella variabile 'residenza' 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); $mail = addslashes($mail); $provincia = addslashes($residenza); } // Controllo il Nome Utente if(strlen($user) < 6 || strlen($user) > 12) die('Nome Utente troppo corto, o troppo lungo'); // Controllo la Password elseif(strlen($pass) < 6 || strlen($pass) > 12) die('Password troppo corta, o troppo lunga'); // Controllo l'email elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail)) die('Email non valida'); // Controllo il nome utente non sia già occupato elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1) die('Nome Utente non disponibile'); // Controllo l'indirizzo email non sia già registrato elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1) die('Questo indirizzo email risulta già registrato ad un altro utente'); // Registrazione dell'utente nel database else { // Crypt della password per garantire una miglior sicurezza $pass = md5($pass); // Genero una stringa casuale di Attivazione $attivazione = ''; for($x=1; $x<=32; $x++) $attivazione.=rand(0,9); $attivazione = md5($attivazione); $subject = "Attivazione al sito"; $message = 'Per attivare il Suo account deve visitare il seguente link:<br><a href="sito/attivazione.php?code='.$attivazione.'">Attiva account</a>'; // Header dell'email, per madnarla in formato html $headers = "From: NomeSito <miamail>\r\n"; $headers .= "Reply-To: miamail\r\n"; $headers .= "Return-Path: miamail\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; // Invio L'email mail($mail, $subject, $message, $headers); // Query per l'inserimento dell'utente nel database $strSQL = "INSERT INTO utenti (user,pass,mail,residenza,attivazione)"; $strSQL .= "VALUES('$user', '$pass', '$mail', '$provincia', '$attivazione')"; mysql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error()); // Reindirizzo l'utente ad una pagina di conferma della registrazione header('Location: registrato.php'); exit; }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<head>
<title>Registrazione</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="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /><br />
<select name="province">
<?php
$strQuery="select * from province";
$elenco=mysql_query($strQuery) or die(mysql_error());
while($row_province=mysql_fetch_array($elenco)){
$id=$row_province[id];
$nome=$row_province[nome];
echo '<option value="'.$id.'">'.$nome.'</option>';
}
?>
</select>
<input name="registra" type="submit" value="Registrati" /><br />
</form>
</body>
</html>
[/php]
-
Hai cambiato il nome una marea di volte...
Prova cosi:
[php]
<?php
// Se il modulo viene inviato...
if(isset($_POST['registra']))
{// 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 '' $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : ''; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default '' $provincia = (isset($_POST['province'])) ? trim($_POST['province']) : ''; // Metto nella variabile 'residenza' 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); $mail = addslashes($mail); $provincia = addslashes($residenza); } // Controllo il Nome Utente if(strlen($user) < 6 || strlen($user) > 12) die('Nome Utente troppo corto, o troppo lungo'); // Controllo la Password elseif(strlen($pass) < 6 || strlen($pass) > 12) die('Password troppo corta, o troppo lunga'); // Controllo l'email elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail)) die('Email non valida'); // Controllo il nome utente non sia già occupato elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1) die('Nome Utente non disponibile'); // Controllo l'indirizzo email non sia già registrato elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1) die('Questo indirizzo email risulta già registrato ad un altro utente'); // Registrazione dell'utente nel database else { // Crypt della password per garantire una miglior sicurezza $pass = md5($pass); // Genero una stringa casuale di Attivazione $attivazione = ''; for($x=1; $x<=32; $x++) $attivazione.=rand(0,9); $attivazione = md5($attivazione); $subject = "Attivazione al sito"; $message = 'Per attivare il Suo account deve visitare il seguente link:<br><a href="sito/attivazione.php?code='.$attivazione.'">Attiva account</a>'; // Header dell'email, per madnarla in formato html $headers = "From: NomeSito <miamail>\r\n"; $headers .= "Reply-To: miamail\r\n"; $headers .= "Return-Path: miamail\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; // Invio L'email mail($mail, $subject, $message, $headers); // Query per l'inserimento dell'utente nel database $strSQL = "INSERT INTO utenti (user,pass,mail,residenza,attivazione)"; $strSQL .= "VALUES('$user', '$pass', '$mail', '$provincia', '$attivazione')"; mysql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error()); // Reindirizzo l'utente ad una pagina di conferma della registrazione header('Location: registrato.php'); exit; }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<head>
<title>Registrazione</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="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /><br />
<select name="province">
<?php
$strQuery="select * from province";
$elenco=mysql_query($strQuery) or die(mysql_error());
while($row_province=mysql_fetch_array($elenco)){
$id=$row_province[id];
$nome=$row_province[nome];
echo '<option value="'.$id.'">'.$nome.'</option>';
}
?>
</select>
<input name="registra" type="submit" value="Registrati" /><br />
</form>
</body>
</html>
[/php]
-
Ora va, dipendeva tutto da un errore banale, facendo copia incolla vari mi sono perso il pezzo dove includo il file di configurazione, messo quello è tutto perfetto, è tornato anche il tasto registrati.. x
Alla prossima... cagnata
-
Salve!
Dilemma di oggi:
Nella pagina registrati.php, all'invio del form vengo rendirizzato alla pagina registrato.php, è possibile eliminare la pagina registato.php e scrivere un breve codice html direttamente nella pagina registrati.php che si vede dopo l'invio del form?
in pratica penso si dovrebbe sostituire il comando
header('Location: registrato.php');
Purtroppo ora non ho i miei file perchè sto su un altro pc e non posso fare prove.
Chiedo: Se metto al posto di header un echo ottengo quello che voglio fare? Se è sbagliato illuminatemi please..
-
Ciao Gigi991,
Devi sostuire
[php]
header('Location: registrato.php');
exit;
[/php]con
[php]
echo 'codice html 1';
exit;
[/php]Se il codice è breve puoi anche usare die, che è come la funzione exit, ma ti permette di inviare un output.
[php]
die('codice html 1');
[/php]
-
Ottimo, e senti nella pagina di attivazione nel body c'è:
<?=($attivato == 1) ? 'Account Attivato' : 'Errore, link non valido' ?>
se metto:
<?php =($attivato == 1) ? 'Account Attivato' : 'Errore, link non valido' ?>
è la stessa cosa?
Che cambia a mettere <? e <?php ? Qual'è meglio usare?
-
Ciao Giggi991,
La sintassi <?=$variabile?> è un abbreviativo di <?php echo $variabile; ?>
<? è uno short tag, però il file di configurazione di php(php.ini) potrebbe disabilitare gli short tag, e invece di essere elaborati te li ritrovi mostrati a schermo.
-
In questo caso quindi è così:
[php]<?php ($attivato == 1) ? echo 'Account Attivato' : echo 'Errore, link non valido' ?>[/php]
?
-
Ciao Gigi991,
No la sintassi corretta è la seguente:
[php]
<?php echo (($attivato == 1) ? 'Account Attivato' : 'Errore, link non valido') ?>
[/php]
-
Facendo modifche mi sa ch ho combinato qualche casino, ho sistemato spero tutti gli errori ma ne rimane uno alla pagina di login, in pratica inserendo user e password giusti, con l'account già attivato mi dice sempre: Userame o password errati..
Ho provato a rivedere passo passo il codice come in guida ma non trovo l'errore..Il codice:
[PHP]
<?php require('config.php'); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?php
if(isset($_POST['login'])) {
$user_name = (isset($_POST['user_name'])) ? trim($_POST['user_name']) : '';
$user_password = (isset($_POST['user_password'])) ? trim($_POST['user_password']) : '';
if(!get_magic_quotes_gpc()) {
$user_name = addslashes($user_name);
$user_password = addslashes($user_password);
}
$user_password = md5($user_password);
$query = mysql_query("SELECT user_id,user_active FROM users WHERE user_name = '$user_name' AND user_password = '$user_password' LIMIT 1");
if(mysql_num_rows($query) == 1) {
$login = mysql_fetch_array($query);
if($login['user_active'] == '') {
$_SESSION['login'] = $login['user_id'];
header('Location: profilo.php');
exit;
}
else {
die('<b>L'account non è ancora stato attivato</b><br>Per attivare l'account clicca sul link che ti è stato inviato tramite mail.<br>Se non ti è arrivata la mail, contatta l'amministratore.');
}
}
else die('Nome Utente o Password errati');
}
?>
<html>
<head>
<title>Login</title>
</head>
<body>
<table align="center" border="1" width="680">
<tr>
<td border="1" width="180" align="center" valign="top">
<b>Menu</b><br>
<a href="index.php">Homepage</a><br><a href="profilo.php">Profilo</a><br><a href="login.php">Login</a><br><a href="registrati.php">Registrati</a><br>
</td>
<td border="1" width="500" align="center" valign="top">
<form action="" method="post">
<input name="user_name" type="text" id="user_name" value="Username" onfocus="if(this.value=='Username') this.value='';"><br>
<input name="user_password" type="password" id="user_password" value="Password" onfocus="if(this.value=='Password') this.value='';"><br>
<input name="login" type="submit" value="Login"><br>
</form>
</td>
</tr>
</table>
</body>
</html>
[/PHP]Nome tabella: users
Campi: user_id, user_password, user_email, user_from, user_day, user_month, user_year, user_rank, user_avatar, user_activeContinuo a provare, se ci sono errori o pensate che dipende da un altra pagina scrivetemelo, grazie
-
Ciao Gigi991,
Non ho notato errori, sicuro che nella tabella sia presente l'utente con cui tenti di loggarti?
-
Neanche io trovavo errori, tant prima ho lasciato perdere prima di perderci la testa
Ho riegistrato anche 4-5 account, ogni volta li ho attivati con le varie email, ma niente dice sempre che username e password sono errati
E durante il log in comunque guardo nella tabella e i record ci sono..
-
Ciao gigi991,
Prova a stampare la query:
[php]
<?php require('config.php'); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?php
if(isset($_POST['login'])) {
$user_name = (isset($_POST['user_name'])) ? trim($_POST['user_name']) : '';
$user_password = (isset($_POST['user_password'])) ? trim($_POST['user_password']) : '';
if(!get_magic_quotes_gpc()) {
$user_name = addslashes($user_name);
$user_password = addslashes($user_password);
}
$user_password = md5($user_password);
echo "SELECT user_id,user_active FROM users WHERE user_name = '$user_name' AND user_password = '$user_password' LIMIT 1";
$query = mysql_query("SELECT user_id,user_active FROM users WHERE user_name = '$user_name' AND user_password = '$user_password' LIMIT 1");
if(mysql_num_rows($query) == 1) {
$login = mysql_fetch_array($query);
if($login['user_active'] == '') {
$_SESSION['login'] = $login['user_id'];
header('Location: profilo.php');
exit;
}
else {
die('<b>L'account non è ancora stato attivato</b><br>Per attivare l'account clicca sul link che ti è stato inviato tramite mail.<br>Se non ti è arrivata la mail, contatta l'amministratore.');
}
}
else die('Nome Utente o Password errati');
}
?>
<html>
<head>
<title>Login</title>
</head>
<body>
<table align="center" border="1" width="680">
<tr>
<td border="1" width="180" align="center" valign="top">
<b>Menu</b><br>
<a href="index.php">Homepage</a><br><a href="profilo.php">Profilo</a><br><a href="login.php">Login</a><br><a href="registrati.php">Registrati</a><br>
</td>
<td border="1" width="500" align="center" valign="top">
<form action="" method="post">
<input name="user_name" type="text" id="user_name" value="Username" onfocus="if(this.value=='Username') this.value='';"><br>
<input name="user_password" type="password" id="user_password" value="Password" onfocus="if(this.value=='Password') this.value='';"><br>
<input name="login" type="submit" value="Login"><br>
</form>
</td>
</tr>
</table>
</body>
</html>
[/php]
-
Niente.. mi esce:
SELECT user_id,user_active FROM users WHERE user_name = 'nomeregistrato' AND user_password = 'passwordregistrato' LIMIT 1Nome Utente o Password errati
L'errore sembra sempre quello, però stampa a video la query..
-
Ciao Gigi991,
Infatti serve proprio a stampare la query, ora, se lanci la query ottenuta dal phpmyadmin cosa ti restituisce?
-
Inserendo quella query penso me lo trova, perchè mettendonome e password a caso mi da 0 righe trovate, mentre con quelli giusti mi da:
Visualizzazione record 0 - 0 (1 Totali, La query ha impiegato 0.0003 sec)
SELECT user_id, user_active
FROM users
WHERE user_name = 'nomegiusto'
AND user_password = 'passgiusta'
LIMIT 1N.B. La password messa nella query è quella già criptata, presente nel database.
Se metto la password che digito nel form di login mi da:MySQL ha restituito un insieme vuoto (i.e. zero righe). ( La query ha impiegato 0.0002 sec )
SELECT user_id, user_active
FROM users
WHERE user_name = 'nomegiusto'
AND user_password = 'passnoncriptata'
LIMIT 1E' giusto se fa così?
-
Ciao Gigi991,
Se eseguendo la query stampata dal file php, ti viene restituito 1 record, il tuo script dovrebbe funzionare correttamente.
Se ti viene restituito un insieme vuoto significa che c'è qualche problema nella query.Se la query ti restituisce 1 record, mi sembra strano, se non impossibile, che il controllo restituisca false
-
Si mi fa abbatere sto php
Facciamo così, entro oggi o domani appena ho tempo provo a rifarlo tutto, e ad ogni modifica provo tutto lo script dalla registrazione all'attivazine fino a login e logout.. Così spero di vedere cos'è che può creare il problema..
Poi vi faccio sapere..
-
Salve, volevo chiedere, se non disturbo troppo, se è possibile avere un aiuto per creare due pagine riguardo questo ottimo script..la prima per modificare la password, e la seconda per eliminare l'account. E' possibile? Mi potete aiutare? Grazie mille in anticipo siete grandi
-
Ciao MimmoNapoli,
Posta pure ciò che sei riuscito a fare, e vedremo di aiutarti.