- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Tutorial] Area privata
-
ripeto....sugli altri computer funziona alla perfezione. Solo da server Win2003
se hai la possibilità prova tu stesso....
è un grosso bug!
-
Non ho la possibilità di provare, comunque il codice per me è scritto in modo corretto, forse hai sbagliato tu a implementare il codice nelle tue pagine...
-
l'ho provato anche creando nuove pagine interamente con i costri codici......
la cosa mi spaventa molto....
-
Salve!
Sto impazzendo per riuscire ad aggiungere allo script un attivazione tramite link inviata per email dopo la registrazione.
Sono partito aggiungendo alla tabella utenti un campo "attivazione" con VARCHAR(1), con questo appena si invia il modulo di registrazione il valore rimane 0, e nella email segnalata nell'iscrizionein automatico dovrebbe arrivare un messaggio con un lnk per l'attivazione, e magari anche un riepilogo dei dati inviati..Nel file registrati.php ho aggunto questo pezzo (quelli in neretto):
$strSQL = "INSERT INTO utenti (user,pass,mail,**attivazione**)"; $strSQL .= "VALUES('$user', '$pass', '$mail', **'0'**)";
Non riesco a trovare i modo per creare la mail che crea un link di attivazione che cambia il valore su attivazione da 0 ad 1.
-
Ciao Gigi991,
Benvenuto nel forum GT
Allora per far invaire un link di attivazione agiremo nel seguente modo: Creiamo un campo attivazione di tipo varchar come hai fatto tu, ma di lunghezza imposteremo 32 caratteri, in modo da generare un codice casuale che impsoteremo come valore del campo.
Nella pagina che avrà il compito di attivazione imposteremo il campo con valore "", quindi al login ci basterà controllare che il valore del campo sia uguale a "" se l'utente è stato attivato oppure no.Registrati.php
[php]
<?php
// Includo la connessione al database
require('config.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 '' // 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); } // Controllo il Nome Utente if(strlen($user) < 4 || strlen($user) > 12) die('Nome Utente troppo corto, o troppo lungo'); // Controllo la Password elseif(strlen($pass) < 4 || 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); $message = 'Per attivare il Suo account deve visitare il seguente link:<br><a href="http://www.sito.ext/attivazione.php?code='.$attivazione.'">Attiva account</a>'; // Header dell'email, per madnarla in formato html $headers = "From: NomeSito <[email protected]>\r\n"; $headers .= "Reply-To: [email protected]\r\n"; $headers .= "Return-Path: [email protected]\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; // Invio L'email mail($mail, 'Registrazione Tutorial TheDarkITA', $message, $headers); // Query per l'inserimento dell'utente nel database $strSQL = "INSERT INTO utenti (user,pass,mail,attivazione)"; $strSQL .= "VALUES('$user', '$pass', '$mail', '$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" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<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 />
<input name="registra" type="submit" value="Registrati" /><br />
</form>
</body>
</html>
[/php]
Attivazione.php
[php]
<?php
// Includo la connessione al database
require('config.php');// Dati Inviati dal modulo $code = (isset($_GET['code'])) ? trim($_GET['code']) : ''; // Metto nella variabile 'user' 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()) { $code = addslashes($code); }
// Controllo la validità del link
if(strlen($code) != 32)
die('Codice non valido');
// Aggiorno il record
$update = mysql_query("UPDATE utenti SET attivazione = '' WHERE attivazione = '$code' LIMIT 1");
// Quanti record ha aggiornato la query
$attivato = mysql_affected_rows($update);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Area privata</title>
</head><body>
<?=($attivato == 1) ? 'Account Attivato' : 'Errore, link non valido' ?><br />
<br />
<br />
<a href="index.php">Homepage</a><br />
</body>
</html>
[/php]Login.php
[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 id,attivazione FROM utenti WHERE user = '$user' AND pass = '$pass' LIMIT 1"); // Se ha trovato un record if(mysql_num_rows($query) == 1) { // prelevo l'id dal database $login = mysql_fetch_array($query); // L'account è attivo? if($login['attivazione'] == '') { // Creo una variabile di sessione $_SESSION['login'] = $login['id']; // reindirizzo l'utente header('Location: privata.php'); exit; } else { die('Attiva il tuo account!!!'); } } // se non esiste da l'errore else die('Nome Utente o Password errati');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.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]Non ho testato, facci sapere se funziona correttamente
-
Ho provato ora, mi inserisce l'utente nel database, blocca l'accesso alla pagina privata se l'account non è attivato però non invia la mail e quindi è impossibile attivarsi..
Ci sarà un prolema nel codice di invio mail..
-
Il codice di invio mi sembra corretto, non stampa alcun errore?
Hai controllato la posta indesiderata?
-
Ho ricontrolato ora in posta, non c'è manco tra le indesiderate..
Non da errori, finita la registrazione reindirizza in registrato.php, ma la mail non arriva, mentre al login funziona perchè mi dice che l'account non è stato ancora attivato..
-
Devi sostituire gli header, mettendo un email valida, altrimenti vengono cestinate automaticamente dalla maggior delle società...
Hai inserito un indirizzo email valido?
-
Si, facendo un esempio se la mia mail è pinco(a)pallino.it ho inseirito:
Dove (a) = @ (Se no non mi invia la risposta..)// Header dell'email, per madnarla in formato html
$headers = "From: NomeSito <pinco(a)pallino.it>\r\n";
$headers .= "Reply-To: pinco(a)pallino.it\r\n";
$headers .= "Return-Path: pinco(a)pallino.it\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";Provato anche a registrarmi con diversi domini di posta, ma non arriva
Però non sono sicuro su gli \r\n, non vorrei che li conta come indirizzo email, e lo vede come formato non valido.. E' giusto così o devo eliminare \r\n?
-
E' corretto cosi...
-
Niente, sono stato un'oretta sù, ho girato un po su google provando gli esempi in giro ma non riesco a farmela mandare, il risultato rimane lo stesso
-
Come non detto, lo spazio web dove ho hostato i file non ha attivao la funzione mail(), ora l'ho richiesta, e poi credo funzionerà.
Alla prossima!
-
Ok
-
Rieccomi, allora mi hanno attivato il mail(), ho provato lo script e mi è arrivata la mail, solo che cliccando sul link di attivazione mi da questo errore:
Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in /home/hosting/g/gianluigi/www/attivazione.php on line 17
Errore, link non validoCosa può essere?
-
Prova a sostituire questo:
[php]
$attivato = mysql_affected_rows($update);
[/php]
Con questo:
[php]
$attivato = mysql_affected_rows();
[/php]
-
Perfetto ora viualizza solo la scritta "Account Attivato" come dovrebbe.
Ora provo a farmi da solo un po di pagine, se ho bisogno ripasso più tardi
-
Bene
Buon Lavoro
-
Rieccomi!
Problema di oggi, ho fatto un pagina membri.php, dove appunto vedere la lista di tutti i membri in ordine di username, e (miracolo!) ci sono quasi riuscito, ho solo il problema che mi fa vedere tutte le informazioni visibili dal database, ad esempio anche la password (criptata, ma comunque non è bello da vedere e manco sicuro, penso).
Quindi chiedo come posso fare per visualizzare solo le voci che voglio io?
Il codice:
[php]<?php
// Includo la connessione al database
require('config.php');
$query="select * from utenti order by user";
$result= mysql_query($query);
$numfields = mysql_num_fields($result);
echo "<table>\n<tr>";
for ($i=0; $i < $numfields; $i++)
{
echo '<th>'.mysql_field_name($result, $i).'</th>';
}
echo "</tr>\n";while ($row = mysql_fetch_row($result))
{
echo '<tr><td>'.implode($row,'</td><td>')."</td></tr>\n";
}
echo "</table>\n";
?>
[/php]Inoltre, in questo modo se ho per esempio 10 utenti o 1000, mi mostra comunque la lista utenti su una pagina.. Come fare per dividere la lista in pezzi, per esempio 20 nomi per pagina?
Come sempre mi sa che chiedo poco , grazie a chi può rispondermi
-
Per stampare solo il nome utente puoi fare cosi:
[php]
<?php
// Includo la connessione al database
require('config.php');// Query per ottenre la lista utenti
$query="select * from utenti order by user";
$result= mysql_query($query);echo '<table>';
while($row = mysql_fetch_array($result))
{
echo '<tr><td>'.$row['username'].'</td></tr>';}
echo "</table>\n";
?>
[/php]