ragazzi potete aiutarmi a concepire un sistema di registrazione con conferma? già l'ho fatto altre volte ma non mi piace. Ecco il codice:
Sintassi SQL
codice:
create database if not exists db;
use db;
create table if not exists sessions (
sessionId varchar(32) not null primary key,
sessionTime integer not null,
sessionData text not null
);
create table if not exists registrations (
code varchar(32) not null primary key,
userName varchar(10) not null unique,
eMail varchar(255) not null unique,
time integer not null,
data mediumtext
);
create table if not exists accounts (
id integer unsigned not null auto_increment primary key,
userName varchar(10) not null unique,
eMail varchar(255) not null unique,
password varchar(32)
);
Modulo di registrazione
codice:
<?php
$registration=array(
"submitButton" => array(
"name" => "inviated",
"value" => "Invia i dati."
),
"mail" => array(
"subject" => "Conferma di iscrizione.",
"from" => "vincenza.tralice@tiscali.it",
)
);
// includes
include_once("../includes/databaseConfigurations.include.php");
include_once("../includes/databaseConnection.include.php");
include_once("../includes/tables.include.php");
// functions
include_once("../functions/errorMessage.function.php");
include_once("../functions/warningMessage.function.php");
include_once("../functions/deleteExpiredRegistrations.function.php");
// classes
include_once("../classes/session.class.php");
deleteExpiredRegistrations();
$obj_session=new session($databaseHandle);
if($obj_session->getVar("id")!=null) {
warningMessage("Sei già registrato.", "../index.php");
exit;
}
if($_POST[$registration["submitButton"]["name"]]==$registration["submitButton"]["value"]) {
$post=&$_POST;
// functions
include_once("../functions/parseUserName.function.php");
include_once("../functions/parse_eMail.function.php");
include_once("../functions/parsePassword.function.php");
include_once("../functions/exists_registration.function.php");
include_once("../functions/exists_account.function.php");
include_once("../functions/str_crypt.function.php");
// classes
include_once("../classes/sendMail.class.php");
if(!parseUserName($post["userName"])) {
errorMessage("L'userName digitato non è corretto.");
exit;
}
if(!parse_eMail($post["eMail"])) {
errorMessage("L'eMail digitata non è corretta.");
exit;
}
if(!parsePassword($post["password"])) {
errorMessage("La password digitata non è corretta.");
exit;
}
if(exists_registration($post["userName"], $post["eMail"])) {
errorMessage("L'utente specificato dall'userName o dall'eMail è in fase di registrazione.");
exit;
}
if(exists_account($post["userName"], $post["eMail"])) {
errorMessage("L'utente specificato dall'userName o dall'eMail è già registrato.");
exit;
}
$post["code"]=md5(microtime());
$post["time"]=time();
$post["data"]=array(
"password" => str_crypt($post["password"], $post["userName"])
);
$post["data"]=serialize($post["data"]);
$q_insertRegistration=mysql_query(
"insert into {$tables["registrations"]} set code='{$post["code"]}', userName='".addslashes($post["userName"])."', eMail='".addslashes($post["eMail"])."', time={$post["time"]}, data='".addslashes($post["data"])."'",
$databaseHandle
);
$eMailTextMessage=<<<EOD
Grazie per esserti registrato.
I TUOI DATI
- Username: {$post["userName"]}
- Password: {$post["password"]}
Per confermare l'iscrizione inserisci il codice e l'eMail
sottostante nel apposito modulo di conferma dell'iscrizione.
CODICI
- eMail: {$post["eMail"]}
- Codice: {$post["code"]}
Arrisentirci.
EOD;
$obj_sendMail=new sendMail($registration["mail"]["from"], $post["eMail"], $registration["mail"]["subject"]);
$obj_sendMail->setTextMessage($eMailTextMessage);
$obj_sendMail->send();
warningMessage("Un eMail di conferma è stata inviata alla tua casella di posta.", $_SERVER["PHP_SELF"]);
exit;
}
?>
<html>
<head>
<title>Registrazione.</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form method="post" action="<?php print($_SERVER["PHP_SELF"]) ?>">
<table width="100%">
<tr>
<td width="30%">userName</td>
<td><input type="text" name="userName"></td>
</tr>
<tr>
<td>eMail</td>
<td><input type="text" name="eMail"></td>
</tr>
<tr>
<td>password</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2">
<input type="reset" value="Resetta">,
<input type="submit" name="<?php print($registration["submitButton"]["name"]); ?>" value="<?php print($registration["submitButton"]["value"]); ?>">
</td>
</tr>
</table>
</form>
</body>
</html>
Modulo di conferma della registrazione
codice:
<?php
$confirmRegistration=array(
"submitButton" => array(
"name" => "inviated",
"value" => "Conferma la tua iscrizione."
)
);
// includes
include_once("../includes/databaseConfigurations.include.php");
include_once("../includes/databaseConnection.include.php");
include_once("../includes/tables.include.php");
// functions
include_once("../functions/errorMessage.function.php");
include_once("../functions/warningMessage.function.php");
// classes
include_once("../classes/session.class.php");
$obj_session=new session($databaseHandle);
if($obj_session->getVar("id")!=null) {
warningMessage("Sei già registrato.", "../index.php");
exit;
}
if($_POST[$confirmRegistration["submitButton"]["name"]]==$confirmRegistration["submitButton"]["value"]) {
$post=&$_POST;
// functions
include_once("../functions/parseCode.function.php");
include_once("../functions/parse_eMail.function.php");
if(!parseCode($post["code"])) {
errorMessage("Il codice digitato non è valido.");
exit;
}
if(!parse_eMail($post["eMail"])) {
errorMessage("L'eMail digitata non è corretta.");
exit;
}
$post["code"]=addslashes($post["code"]);
$post["eMail"]=addslashes($post["eMail"]);
$q_selectRegistration=mysql_query(
"select * from {$tables["registrations"]} where code='{$post["code"]}' and eMail='{$post["eMail"]}'",
$databaseHandle
);
if(mysql_num_rows($q_selectRegistration)!=1) {
errorMessage("La registrazione indicata dal codice e dall'eMail non esiste.");
exit;
}
$d_selectRegistration=mysql_fetch_array($q_selectRegistration, MYSQL_ASSOC);
$d_selectRegistration["data"]=unserialize(
stripslashes($d_selectRegistration["data"])
);
$q_insertAccount=mysql_query(
"insert into {$tables["accounts"]} set userName='{$d_selectRegistration["userName"]}', eMail='{$d_selectRegistration["eMail"]}', password='{$d_selectRegistration["data"]["password"]}'",
$databaseHandle
);
$q_deleteRegistration=mysql_query(
"delete from {$tables["registrations"]} where code='{$post["code"]}'",
$databaseHandle
);
warningMessage("Ti sei registrato con successo.", $_SERVER["PHP_SELF"]);
exit;
}
?>
<html>
<head>
<title>Conferma della registrazione.</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form method="post" action="<?php print($_SERVER["PHP_SELF"]); ?>">
<table width="100%">
<tr>
<td width="30%">code</td>
<td><input type="text" name="code"></td>
</tr>
<tr>
<td>eMail</td>
<td><input type="text" name="eMail"></td>
</tr>
<tr>
<td colspan="2">
<input type="reset" value="Resetta">
<input type="submit" name="<?php print($confirmRegistration["submitButton"]["name"]); ?>" value="<?php print($confirmRegistration["submitButton"]["value"]); ?>">
</td>
</tr>
</table>
</form>
</body>
</html>
La funzione deleteExpiredRegistrations
codice:
<?php
function deleteExpiredRegistrations($expire=3600) {
global $databaseHandle, $tables;
$q_deleteExpiredRegistrations=mysql_query(
"delete from {$tables["registrations"]} where time<".(time()-$expire),
$databaseHandle
);
}
?>