sistema utenti con classi

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
43
Massa, Italy
Salve, sto studianto le classi e ho trovato questo articolo interessante:
https://www.mrw.it/php/articoli/php-oop-creare-sistema-registrazione-autenticazione-utenti_1290.html

però come faccio fare che ogni utente che si iscriva viene inviata la mail per confermare l'attivazione??

in php normale mi riusciva ora con le classi non so come fare.
ho aggiunto due campi al database uno ver varchar(50) e uno attivo= enum('0','1').

per il ver .. volevo usare semplicemente un rand(100,999999) se è possibile.

vi posto il codice del registrati:
PHP:
 # metodo per la registrazione 
  public function registra($nome_reale, $nome_utente, $password, $email) 
  {
    # cifratura della password
    $password = @sha1($password);
    # confronto degli input con i dati contenuti in tabella
    $query = @mysql_query("SELECT id_utente FROM iscritti WHERE nome_utente = '$nome_utente' OR email = '$email'") or die('Errore: ' . mysql_error());
    # controllo sulla presenza di corrispondenze prodotte dal confronto
    $conta = @mysql_num_rows($query);
    # se il confronto non genera corrispondenze..
    if ($conta == 0) 
    {
      # ..si procede con la registrazione..
      $risultato = @mysql_query("INSERT INTO iscritti(nome_utente, password, nome_reale, email) VALUES ('$nome_utente', '$password','$nome_reale','$email')") or die('Errore: ' .mysql_error());
      return $risultato;
    }else{
      # ..altrimenti l'esito della registrazione sarà negativo
      return FALSE;
    }
  }

mi date una mano ad capire come fare?

aspetto le vostre risposte.

grazie mille. e buona giornata.
a presto.
 
ho fatto.. ora come devo fare un'update per dire che devo settare attivo su 1 ?
questo quello che ho fatto io:
PHP:
<?php
# inclusione del file di funzione
@include_once 'inc.php';
# istanza della classe
$obj = new Iscrizioni();
# chiamata al metodo per la verifica della sessione
if ($obj->verifica_sessione())
{
  #redirect in caso di esito negativo
  @header("location:area_riservata.php");
}
# chiamata al metodo per la registrazione
if ($_SERVER["REQUEST_METHOD"] == "POST") 
{
if(empty($_POST["nome_reale"]) || empty($_POST["nome_utente"]) || empty($_POST["password"]) || empty($_POST["email"]))
{
 echo "non hai inserito i dati giusti";
}
else
{
  $activation = rand(0,9999);
  
  $registrato = $obj->registra(htmlentities($_POST['nome_reale'], ENT_QUOTES), htmlentities($_POST['nome_utente'], ENT_QUOTES), htmlentities($_POST['password'], ENT_QUOTES), htmlentities($_POST['email'], ENT_QUOTES), htmlentities(md5($activation), ENT_QUOTES));
  # controllo sull'esito del metodo
  if ($registrato) {
    # notifica in caso di esito positivo
		
		
		$mail_body="<p>Benvenuto nel nostro sito i tuoi dati per accedere sono i seguenti</p>";
		$mail_body.="<p>Username : ".$_POST['nome_utente']."</p>";
		$mail_body.="<p>Password : ".$_POST["password"]."</p>";
		$mail_body.="<p>------------------------------------------</p>";
		$mail_body.="<p>Clica qui sotto per attivare l'account</p>";
		$url_root = "http://localhost/game";
		$mail_body.="<a href=\"".$url_root."/membri/confirm.php?nick=".$_POST['nome_utente']."&key=".md5($activation)."\">Link attivazione</a>";

		$mail_to      = "".$_POST["email"]."";
		$mail_from    = "xxxxx@live.it";
		$mail_subject = "Iscrizione al gioco";
		

		// Specifico le intestazioni per il formato HTML 
		$mail_in_html  = "MIME-Version: 1.0\r\n";
		$mail_in_html .= "Content-type: text/html; charset=iso-8859-1\r\n";
		$mail_in_html .= "From: <$mail_from>";

		// Invio la mail
		if (mail($mail_to, $mail_subject, $mail_body, $mail_in_html))
		{
			echo 'Registrazione conclusa <a href="autenticazione.php">ora puoi loggarti</a>.';
		}
  }else{
    # notifica in caso di esito negativo
    echo 'Stai cercando di registrarti con dei dati gi&aacute; presenti nel database.';
  }
}
}
# form per l'iscrizione
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Pagina per la registrazione</title>
</head>
<body>
<div id="container">
  <div id="main-body">
  <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="form_registrazione" name="registrazione">
    <div class="head"><h1>Registrazione iscritti</h1></div>
    <label>Nome</label><br/>
    <input type="text" name="nome_reale" /><br/>
    <label>Nome utente</label><br/>
    <input type="text" name="nome_utente" /><br/>
    <label>Password</label><br/>
    <input type="password" name="password" /><br/>
    <label>Il tuo indirizzo di posta elettronica</label><br/>
    <input type="text" name="email" id="email" /><br/><br/>
    <input type="submit" name="registra" value="Registrami"/><br/><br/>
    <label><a href="autenticazione.php" title="Login">Se sei già registrato puoi loggarti da qui</a></label> 
  </form>
  </div>
</div>
</body>
</html>

e questa la modifica del codice sopra:

PHP:
# metodo per la registrazione 
  public function registra($nome_reale, $nome_utente, $password, $email,$ver) 
  {
    # cifratura della password
    $password = @sha1($password);
    # confronto degli input con i dati contenuti in tabella
    $query = @mysql_query("SELECT id_utente FROM iscritti WHERE nome_utente = '$nome_utente' OR email = '$email'") or die('Errore: ' . mysql_error());
    # controllo sulla presenza di corrispondenze prodotte dal confronto
    $conta = @mysql_num_rows($query);
    # se il confronto non genera corrispondenze..
    if ($conta == 0) 
    {
      # ..si procede con la registrazione..
      $risultato = @mysql_query("INSERT INTO iscritti(nome_utente, password, nome_reale, email,ver,attivo) VALUES ('$nome_utente', '$password','$nome_reale','$email','$ver','0')") or die('Errore: ' .mysql_error());
      return $risultato;
    }else{
      # ..altrimenti l'esito della registrazione sarà negativo
      return FALSE;
    }
  }

mi dite come devo fare per l'update?

grazie mille.. c'è qualcuno che mi può aiutarmi con queste classi?

grazie mille.
 
Ultima modifica:
è cosi per caso??:
PHP:
# metodo per la conferma
  public function conferma($nome_utente,$ver) 
  {
    # confronto degli input con i dati contenuti in tabella
    $query = @mysql_query("SELECT nome_utente,ver FROM iscritti WHERE nome_utente = '$nome_utente' OR ver = '$ver'") or die('Errore: ' . mysql_error());
    # controllo sulla presenza di corrispondenze prodotte dal confronto
    $conta = @mysql_num_rows($query);
    # se il confronto non genera corrispondenze..
    if ($conta == 0) 
    {
  
      $risultato = @mysql_query("UPDATE iscritti set attivo='1' where nome_utente='$nome_utente' and  ver='$ver'") or die('Errore: ' .mysql_error());
      return $risultato;
  }else{
    
      return FALSE;
    }
  	  
  }

mi dite se va bene??

grazie mille.
 
ciao,
questa non mi convince
PHP:
SELECT nome_utente,ver FROM iscritti WHERE nome_utente = '$nome_utente' OR ver = '$ver'"
se utente uguale a utente oppure ver = ? (Si o No?)
basta che in tutta la tabella ci sia un si o un no che ti restituirà comunque un risultato
dovrebbe essere al massimo
PHP:
SELECT nome_utente,ver FROM iscritti WHERE nome_utente = '$nome_utente' AND ver = '$ver'"
ma secondo me è un controllo inutile: anche se modifichi un campo con gli stessi valori la query non ti genera errori
 
grazie per avermi risposto..

ora il codice è cosi:
dici che va bene:
PHP:
  # metodo per la conferma
  public function conferma($nome_utente,$ver) 
  {
    # confronto degli input con i dati contenuti in tabella
    $query = @mysql_query("SELECT nome_utente,ver FROM iscritti WHERE nome_utente = '$nome_utente' and ver = '$ver'") or die('Errore: ' . mysql_error());
    # controllo sulla presenza di corrispondenze prodotte dal confronto
    $conta = @mysql_num_rows($query);
    # se il confronto non genera corrispondenze..
    if ($conta == 1) 
    {
       $risultato = @mysql_query("UPDATE iscritti set attivo='1' where nome_utente='$nome_utente' and  ver='$ver'") or die('Errore: ' .mysql_error());
      return $risultato;
  }else{
      # ..altrimenti l'esito della registrazione sarà negativo
      return FALSE;
    }
  	  
  }

ho dovuto fare if($conta == 1),
perché se no la query non funzionava..

te cosa dici va bene?

grazie mille.
 
ciao
da quello che ho capito tu vuoi che se l'utente esiste e se ha ver = 0 uppare per qull'utente ver =1,
se non esiste oppure ver è già a 1 non uppare
giusto?
se è così io farei la prima query
PHP:
$query = mysql_query("SELECT nome_utente,ver FROM iscritti WHERE nome_utente = '$nome_utente' and ver = '0'"
poi non usare i silent @, gli errori non vanno nascosti ma prevenuti e eliminati

p.s.
con le classi ho un'antipatia particolare
 
ciao
da quello che ho capito tu vuoi che se l'utente esiste e se ha ver = 0 uppare per qull'utente ver =1,
se non esiste oppure ver è già a 1 non uppare
giusto?
se è così io farei la prima query
PHP:
$query = mysql_query("SELECT nome_utente,ver FROM iscritti WHERE nome_utente = '$nome_utente' and ver = '0'"
poi non usare i silent @, gli errori non vanno nascosti ma prevenuti e eliminati

p.s.
con le classi ho un'antipatia particolare

ok, ho fatto... ti ringrazio molto..

per le @ non saprei perché io ho copiato il codice dell'articolo..

ora le ho tolte tutte.

se ho altro problema vi faccio sapere.
 
ora sto faccendo il modulo recupera password.. avviso che ho tolto md5 che tanto non mi interessa criptata.. basta che sia protetto il db..

ora vorrei sapere se c'è il modo invece di scrivere il rows nella classe si può inserire il rows nel file forgot.php??

vi posto il codice:
clsSystemArea.php
PHP:
   # metodo per recupera password
  public function recupera_password($email) 
  {
    # confronto degli input con i dati contenuti in tabella
    $query = mysql_query("SELECT * FROM users WHERE email = '" . mysql_real_escape_string ($email)."'") or die('Errore: ' . mysql_error());
    # controllo sulla presenza di corrispondenze prodotte dal confronto
    $conta = mysql_num_rows($query);
    # se il confronto non genera corrispondenze..
    if ($conta == 1) 
    { 
	$risultato = mysql_fetch_object($query);
    # stampa a video del nome reale dell'utente
    $password =  $risultato->password;
	$nome_utente = $risultato->nome_utente;
	
    
		$mail_body="<p>Recupero password</p>";
		$mail_body.="<p>Username : ".$nome_utente."</p>";
		$mail_body.="<p>Password : ".$password."</p>";
		$mail_body.="<p>------------------------------------------</p>";
	
		$mail_to      = "".$email."";
		$mail_from    = "tua@email.it";
		$mail_subject = "Recupero password";
		

		// Specifico le intestazioni per il formato HTML 
		$mail_in_html  = "MIME-Version: 1.0\r\n";
		$mail_in_html .= "Content-type: text/html; charset=iso-8859-1\r\n";
		$mail_in_html .= "From: $mail_from";

		// Invio la mail
		if (mail($mail_to, $mail_subject, $mail_body, $mail_in_html))
		{
			 echo 'Password inviata';
		}
		  return TRUE;
  }else{
      # ..altrimenti l'esito della registrazione sarà negativo
      return FALSE;
    }
  	  
  }

codice forgot.php: leggette dove c'è scritto: // vorrei scrivere qui l'echo del messaggio da inviare all'utente e i dati presi dal database..
PHP:
<?php
# inizializzazione della sessione
session_start();
# inclusione del file di funzione
include_once 'inc.php';
# istanza della classe
$obj = new clsSystemArea();
# chiamata al metodo per la verifica della sessione
if ($obj->verifica_sessione())
{
  # redirect in caso di esito positivo
  header("location:area_riservata.php");
}
# chiamata al metodo per l'autenticazione
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
  $recuperapassword = $obj->recupera_password(htmlentities($_POST['email'], ENT_QUOTES));
  # controllo sull'esito del metodo
    if ($recuperapassword) {
    # notifica in caso di esito positivo
		// vorrei scrivere qui l'echo del messaggio da inviare all'utente e i dati presi dal database..
		
  }else{
    # notifica in caso di esito negativo
    echo 'I dati non sono essatti per inviare la password..';
  }
}
# form per l'autenticazione
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Pagina per l'autenticazione</title>
</head>
<body>
<div id="container">
  <div id="main-body">
  <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="form_recupera" name="recupera">
  <div class="head"><h1></h1></div>
  <label>Inserisci l'email</label><br/>
  <input type="text" name="email" /><br/>
  <input type="submit" name="invio_dati" value="Invia"/><br/><br/>
  </form>
  </div>
</div>
</body>
</html>

si può fare ? questa cosa?

grazie mille e buona serata.
 
scusate.. ma ho risolto lascio cosi come è.che funziona normalmente..

e poi mi studio bene le classi..

grazie a presto potete chiudere.

ciao.
 

Discussioni simili