Utente - Periodo di prova

Nickname

Utente Attivo
18 Set 2013
122
0
0
Salve a tutti, vorrei fare una domanda un pò 'strana'.
Praticamente ho creato un sito con un sistema di registrazione, quindi con una tabella 'utenti_temp' e 'utenti'.
Ora come posso fare in modo che un utente possa fare una registrazione di prova?
Mi spiego meglio:
Un utente si registra, cliccando su Registrazione di prova, e viene registrato per, ad esempio, 30 giorni; dopo questi 30 giorni l'utente non è più registrato.
Praticamente come fanno tanti programmi con la versione trial.
C'è un modo per farlo ?
Grazie a tutti.
 
Ciao,
per gli utenti di prova fai la query ogni giorno alla tabella 'utenti_temp' facendo un comtrollo sulla data di registrazione.Se il risultato è maggiora ai 30 scegli se eliminare il record oppure bloccare semplicemente laccesso.
 
Ciao,
per gli utenti di prova fai la query ogni giorno alla tabella 'utenti_temp' facendo un comtrollo sulla data di registrazione.Se il risultato è maggiora ai 30 scegli se eliminare il record oppure bloccare semplicemente laccesso.

Quindi devo fare il lavoro "manualmente" ?
Ovvero andare ogni giorno a eliminare gli utenti che superano i 30 giorni ?
 
Basta che fai il controllo quando l'utente si logga
 
dovresti impostare una query del genere ed in base al risultato metti le condizioni:
PHP:
//dal login prendi username e password
$username="username";
$password="password"
$query=mysqli_query("SELECT * FROM utenti_temp WHERE username='".$username."' AND password='".$password."'  AND(TO_DAYS(NOW()) - TO_DAYS(post_date) >= 30)",$conn);

if(mysqli_num_rows($query)>0)
{
  //blocchi l'utente o elimini
}
 
dovresti impostare una query del genere ed in base al risultato metti le condizioni:
PHP:
//dal login prendi username e password
$username="username";
$password="password"
$query=mysqli_query("SELECT * FROM utenti_temp WHERE username='".$username."' AND password='".$password."'  AND(TO_DAYS(NOW()) - TO_DAYS(post_date) >= 30)",$conn);

if(mysqli_num_rows($query)>0)
{
  //blocchi l'utente o elimini
}

Mh ok fino a qui ci sono, però come strutturo la tabella?
Cioè come faccio a fare in modo che quando l'utente si registra sia già presente nella tabella il numero 1 (ovvero il primo giorno da registrato) e che ogni giorno aumenti fino a 30 ?
 
Quando fai l'insermento dell'utente fai prima un controllo se l'username è gia' presente:
PHP:
$query=mysqli_query("SELECT username FROM utenti_temp WHERE username='$username'");
if(mysqli_num_rows($query)>0)
{
//username presente
}

Se tutto ok nell'inserimento inserisci la data di registrazione nella tabella oltre ai vari campi che ti occorrono (username,password,email,nome,etc) e ai prossimi accessi fai un cotrollo di qunati giorni sono passati dalla registrazione:
PHP:
$query=mysqli_query("SELECT * FROM utenti_temp WHERE username='".$username."' AND password='".$password."'  AND(TO_DAYS(NOW()) - TO_DAYS(data_inserimento) >= 30)",$conn);

if(mysqli_num_rows($query)>0)
{
  //blocchi l'utente o elimini
}
 
Ultima modifica:
Quando fai l'insermento dell'utente fai prima un controllo se l'username è gia' presente:
PHP:
$query=mysqli_query("SELECT username FROM utenti_temp WHERE username='$username'");
if(mysqli_num_rows($query)>0)
{
//username presente
}

Se tutto ok nell'inserimento inserisci la data di registrazione nella tabella oltre ai vari campi che ti occorrono (username,password,email,nome,etc) e ai prossimi accessi fai un cotrollo di qunati giorni sono passati dalla registrazione:
PHP:
$query=mysqli_query("SELECT * FROM utenti_temp WHERE username='".$username."' AND password='".$password."'  AND(TO_DAYS(NOW()) - TO_DAYS(data_inserimento) >= 30)",$conn);

if(mysqli_num_rows($query)>0)
{
  //blocchi l'utente o elimini
}

Mh mi puoi fare un esempio pratico di come fare la registrazione della data? Per tutto il resto non c'è problema.
Grazie mille comunque
 
Crea tra i vari campi che ti occorrono un campo "data_inserimento" di tipo DATE e fai la query di INSERT in questo modo
PHP:
 $querymysqli_query("INSERT INTO utenti_temp (username,password,data_inserimento) VALUES ('$username','$password',CURDATE()))";

CURDATE è è una funzione che ritorna la data in formato yyyy-mm-dd.

Ciao.
 
Crea tra i vari campi che ti occorrono un campo "data_inserimento" di tipo DATE e fai la query di INSERT in questo modo
PHP:
 $querymysqli_query("INSERT INTO utenti_temp (username,password,data_inserimento) VALUES ('$username','$password',CURDATE()))";

CURDATE è è una funzione che ritorna la data in formato yyyy-mm-dd.

Ciao.

Mh capito; però il campo data_inserimento dovrà inserirsi "da solo" perché ovviamente l'utente non può scegliere il giorno, ma deve essere il giorno attuale.
Come posso fare questo ?
 
appunto ,usando la funzione CURDATE() di mysql, che ritorna la data del giorno in cui si scrive il record nel db.

oppure puoi ricavare la data da php
PHP:
$data_inserimento=date("Y-m-d");
 
appunto ,usando la funzione CURDATE() di mysql, che ritorna la data del giorno in cui si scrive il record nel db.

oppure puoi ricavare la data da php
PHP:
$data_inserimento=date("Y-m-d");

Aah scusa non avevo capito bene; perfetto.

Quindi, ricapitolando, faccio il form con tutti i campi ecc. e uno per la data che dovrà essere di tipo DATE.
Poi nell'INSERT inserirò i soliti campi, solo che per la data dovrà esserci CURDATE() come valore.

Sbaglio in qualcosa?

Un'altra cosa, mi ricordo, se non sbaglio, che ci sono altri due tipi di insert oltre a date: datetime e datetime-local, quale pensi sia più adatto per il mio scopo ?
Grazie mille mi stai aiutando molto :D
 
Quindi, ricapitolando, faccio il form con tutti i campi ecc. e uno per la data che dovrà essere di tipo DATE.

Nel form il campo data non ti serve, sara' mysql ad inserirlo nel momento dell'inserimento dei dati tramite curdate()

Un'altra cosa, mi ricordo, se non sbaglio, che ci sono altri due tipi di insert oltre a date: datetime e datetime-local, quale pensi sia più adatto per il mio scopo ?

datetime ti permette anche di inserire ore,minuti e secondi del tipo:

2013-11-28 17:30:34

pero' se decidi di usare un campo di tipo datetime al posto di date, devi sostituire CURDATE() con NOW().
 
Nel form il campo data non ti serve, sara' mysql ad inserirlo nel momento dell'inserimento dei dati tramite curdate()



datetime ti permette anche di inserire ore,minuti e secondi del tipo:

2013-11-28 17:30:34

pero' se decidi di usare un campo di tipo datetime al posto di date, devi sostituire CURDATE() con NOW().

Cioè NON devo fare tipo così nel form?

HTML:
<form>
<input type="text" name="nome" id="nome" />
<input type="text" name="cognome" id="cognome" />
...

<input type="date" name="data" id="data" />
...


</form>
 
Quando fai:

INSERT INTO ....., dai il valore al campo data_inserimento con CURDATE.

Aallora, ho provato il tutto e va bene però c'è un problema.
Ovvero, quando un utente si registra va a finire inizialmente nella tabella 'utenti_temp' e gli arriva un'email di conferma all'indirizzo di posta, dopo che l'utente clicca sul codice nell'email va a finire nella tabella 'utenti' e il suo profilo è attivato (come in quasi tutti i siti insomma).
Il problema è che, quando l'utente si trova ancora nella tabella 'utenti_temp' la data è presente, quando invece dopo va a cliccare nell'email e attiva il suo account nella tabella non c'è più la data, non so perché, questo è lo script della pagina:

PHP:
<html>
<head>
<?php

	ob_start();
	include 'config.php';
	connect();
	session_start();
	
?>
</head>
<body>

<?php 

if(!isset($_GET['passkey'])){
		
if(!isset($_POST['invia'])){ ?>

			
            
<!-- QUI CI SONO TUTTI CAMPI DEL FORM -->


           
<?php	} else {

$codiceconferma = md5(uniqid(rand()));

$username = mysql_real_escape_string($_POST['username']);
$password1 = mysql_real_escape_string($_POST['password1']);
$password2 = mysql_real_escape_string($_POST['password2']);
$data = mysql_real_escape_string($_POST['data2']);
$email = mysql_real_escape_string($_POST['email']);
$nome = mysql_real_escape_string($_POST['nome']);
$cognome = mysql_real_escape_string($_POST['cognome']);
			

if($username == "" || $email == "" || $nome == "" || $cognome == ""){
echo "Devi riempire tutti i campi contrassegnati con *";
}elseif($password1 == "" || $password2 == ""){
echo "Devi riempire tutti i campi contrassegnati con *";
}elseif($password2 != $password1){
echo "Le password devono coincidere";
}else{

$recuperauseremail = mysql_query("SELECT id FROM utenti WHERE username='$username' OR email='$email'");	
$contausermail = mysql_num_rows($recuperauseremail);

if($contausermail > 0){

echo "Nome utente o email già disponibili";

} else {

$inviautentitemp = mysql_query("INSERT INTO utenti_temp (codiceconferma, username, password, data, email, nome, cognome) VALUES ('$codiceconferma', '$username', '$password2', CURDATE(), '$email', '$nome', '$cognome')");

if($inviautentitemp){

$to=$email;
$subject="Benvenuto";
$header = ini_set ("sendmail_from", "[email protected]");
$header .="From: MIO SITO <[email protected]> \r\n";
$headers .= "Reply-To: [email protected] \r\n";
$headers .= "Return-Path: [email protected] \r\n";
$thisphpversion = phpversion();
$header .= "X-Mailer: PHP/".$thisphpversion."\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: text/html; charset=\"iso-8859-1\"\r\n";
$header .= "Content-Transfer-Encoding: 7bit\n\n";

$message ="Benvenuto nel mio sito. \r\n";
$message.="Grazie per esserti registrato \r\n";
$message.="Clicca sul link qui sotto per confermare la registrazione di prova\r\n";
$message.="(Oppure copia il link e incollalo nella barra degli indirizzi del tuo browser. \r\n";
$message.="http://www.MIOSITO.it/attivazione.php?passkey=$codiceconferma";

$sentmail=mail($to,$subject,$message,$header, $headers);

if($sentmail){


echo "Per completare la registrazione di prova controlla la tua casella di posta elettronica (anche tra gli spam) e clicca sul link di attivazione.";

}else{

echo "Errore, link di attivazione non inviato.";

}
}
}
}

}
		
} else {
			
$passkey = $_GET['passkey'];
			
$sqlrecuperauser = "SELECT * FROM utenti_temp WHERE codiceconferma = '$passkey'";
$risultatouser = mysql_query($sqlrecuperauser);
			
if($risultatouser) {
			
$contauser = mysql_num_rows($risultatouser);

if($contauser == 1){

$rows = mysql_fetch_array($risultatouser);
$username = $rows['username'];
$email = $rows['email'];
$password = $rows ['password'];
$data = $rows ['data'];
$nome = $rows ['nome'];
$cognome = $rows ['cognome'];


$passwordcript = md5($password);

$sqlconfermauser = mysql_query("INSERT INTO utenti (username, password, data, email, nome, cognome) VALUES ('$username', '$passwordcript', '$data', '$email', '$nome', '$cognome')");

if ($sqlconfermauser) {

echo "<br>Il tuo account è stato attivato con successo";
$sqleliminadati = mysql_query("DELETE FROM utenti_temp WHERE codiceconferma = '$passkey'");

} else {

echo "Errore!";

}

}
			
			}
			
		}

	?>

</body>
</html>
 

Discussioni simili