Pagina per raccolta adesioni

ilgiaguaro

Nuovo Utente
18 Ott 2010
6
0
0
Ciao a tutti, nono sono molto "esperto" di php ed è per questo che cerco aiuto.
Ho bisogno di fare una pagina per una raccolta adesioni che memorizzi i dati su un database sql.
Il database è costituito da una tabella con i seguenti campi:
id,nome,cognome,telefono,mail
Il campo id è INT auto_increment ed è proprio lì che ho bisogno di aiuto.
In pratica devo raccogliere adesioni ad un corso con posti limitati a 150, devo quindi effettuare un controllo sull'id.
if (id < 150) { permetti l'iscrizione e memorizza i dati}
else { messaggio di limite raggiunto}.

Codice:
<?php

// includiamo il file di connessione al database 

include ('configurazione.php');



// creiamo il nostro modulo di registrazione

?>


<TITLE>Iscrizione al Corso XYZ</TITLE>
<form action='?inviodati=ok' method='POST'>

  <h1 align="center">ISCRIZIONE AL CORSO XYZ</h1>
  <p align="center">&nbsp;</p>
  <p align="center"><b>Nome</b><br>
    <input type='text' name='nome'><br>
    
    <b>Cognome</b><br>
    <input type='text' name='cognome'><br>
    
    <b>Indirizzo E-mail</b><br>
    <input type='text' name='mail'><br>
    
    <b>Telefono</b><br>
    <input type='text' name='telefono'><br>
    <br>
    <input type='submit' value='Invia Registrazione'><br>
  </p>
</form>



<div align="center">
  <?php

// attraverso un if controlliamo che il form sia stato inviato 

if ( $_GET['inviodati'] == "ok" ) {



// recuperiamo i dati inviati con il form


$nome = $_POST['nome'];

$cognome = $_POST['cognome'];

$mail = $_POST['mail'];

$telefono = $_POST['telefono'];


// ora controlliamo che i campi siano stati tutti compilati

if ( $nome == TRUE && $mail == TRUE && $cognome == TRUE && $telefono == TRUE)  {


// controlliamo se il campo mail è stato scritto in maniera errata


$email = eregi("^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$",$mail); 

if ( $email == TRUE ) {



// controlliamo se l'mail è presente già nel database

$sql = mysql_query("SELECT * FROM tabella_registrati WHERE mail = '$mail'") or die ("L'indirizzo e-mail e' gia' presente nel database");

$num_rows = mysql_num_rows($sql); 

if ( $num_rows == 0 ) {

// ora controlliamo che le password inserite siano identiche




mysql_query("INSERT INTO tabella_registrati
             (id , cognome, nome , telefono , mail )
             VALUES 
             ('','$cognome', '$nome', '$telefono', '$mail' )") OR DIE(mysql_error());

// e inviamo una mail con la riuscita registazione


mail ($mail, "Avvenuta registrazione Corso XYZ", "Complimenti,la registrazione al corso e' avvenuta con successo", "From: [email protected]");

// messaggio da far visualizzare all'utente finale

echo "Complimenti registrazione effettuata con successo.";



} 

else {

echo "L'indirizzo e-mail e' gia' presente nel database";

}

} 

else {

echo "La tua mail non e' idonea per la registrazione.";

}


} 

else {

echo "Tutti i campi sono obbligatori.";

}
}

?>
</div>

Ecco il codice della pagina, adattato alle mie esigenze...

qualcuno saprebbe dirmi come implementare quanto detto sopra!??


Grazie mille!
 
non ti conviene effettuare il controllo sul numero degli id perché potrebbero essere non consecutivi a causa di cancellazioni, effettua invece il controllo sul numero dei record:

PHP:
if(mysql_num_rows($sql)<150){
// esegui l'insert
}else{
echo "Raggiunto il numero massimo di adesioni";
}
 
Ho inserito così...ma continua a farmi iscrivere senza limitazioni...

Codice:
$sql = mysql_query("SELECT * FROM tabella_registrati WHERE mail = '$mail'") or die ("L'indirizzo e-mail e' gia' presente nel database");

$num_rows = mysql_num_rows($sql); 

if ( $num_rows == 0 ) {

// ora controlliamo che le password inserite siano identiche

if(mysql_num_rows($sql)<6){
// esegui l'insert



mysql_query("INSERT INTO tabella_registrati
             (id , cognome, nome , telefono , mail )
             VALUES 
             ('','$cognome', '$nome', '$telefono', '$mail' )") OR DIE(mysql_error());

// e inviamo una mail con la riuscita registazione


mail ($mail, "Avvenuta registrazione Corso XYZ", "Complimenti,la registrazione al corso e' avvenuta con successo", "From: [email protected]");

// messaggio da far visualizzare all'utente finale

echo "Complimenti registrazione effettuata con successo.";



}else{
echo "Raggiunto il numero massimo di adesioni";
}
 
ciao
come fai tu il numero di record sarà sempre minore di 6, anzi sempre = a 1 in quanto la query che usi per verificare non cerca tutti i record, ma solo quelli che verificano la condizione mail = '$mail'
prova così
PHP:
<?php
$sql = mysql_query("SELECT * FROM tabella_registrati WHERE mail = '$mail'") or die ("L'indirizzo e-mail e' gia' presente nel database");
$num_rows = mysql_num_rows($sql); 
if ( $num_rows == 0 ) {
	// ora controlliamo che le password inserite siano identiche
	//ecc....
	//verifico quanti record ho in tutto
	$num_rows_is=mysql_num_rows(mysql_query("SELECT * FROM tabella_registrati"));
	if($num_rows_is<6){
		// esegui l'insert
		mysql_query("INSERT INTO tabella_registrati(id , cognome, nome , telefono , mail ) VALUES('','$cognome', '$nome', '$telefono', '$mail' )") OR DIE(mysql_error());
		// e inviamo una mail con la riuscita registazione
		mail ($mail, "Avvenuta registrazione Corso XYZ", "Complimenti,la registrazione al corso e' avvenuta con successo", "From: [email protected]");
		// messaggio da far visualizzare all'utente finale
		echo "Complimenti registrazione effettuata con successo.";
	}else{
		echo "Raggiunto il numero massimo di adesioni";
	}
}
?>
p.s.
usa il tag php e non quello di codice
 
Grazie mille per le risposte,ma via via che affino il codice mi sto trovando davanti altri piccoli problemini.
Mi spiego meglio:
Ho deciso di inserire un controllo della validità dell'e-mail e l'ho implementato creando un nuovo campo nella tabella che di default va a 0,al momento dell'iscrizione viene inviata una mail con un link che porta ad una pagina conferma.php che esegue un update sulla riga settando ad un il valore "attiva" che come detto di default va a 0.

Adesso per questioni di follie "mie" vorrei che la mail che arriva al cliente abbia la variabile "nascosta"...criptata tramite md5

Ecco il codice:

PHP:
// controlliamo se l'mail è presente già nel database

$sql = mysql_query("SELECT * FROM tabella_registrati WHERE mail = '$mail'") or die ("L'indirizzo e-mail e' gia' presente nel database"); 

$num_rows = mysql_num_rows($sql);  

if ( $num_rows == 0 ) {  // ora controlliamo che le password inserite siano identiche 


    
$num_rows_is=mysql_num_rows(mysql_query("SELECT * FROM tabella_registrati WHERE attiva='1'")); //verifico quanti record ho in tutto 
   
    if($num_rows_is<2){

// esegui l'insert



mysql_query("INSERT INTO tabella_registrati
             (id , cognome, nome , telefono , mail, attiva ) VALUES ('','$cognome', '$nome', '$telefono', '$mail','' )") OR DIE(mysql_error());

// e inviamo una mail con la riuscita registazione

$mail_md5=md5($mail);

mail ($mail, "Avvenuta registrazione Corso XYZ", "Complimenti,la registrazione al corso e' avvenuta con successo   
http://www.xxx.it/registrazione/conferma.php?cod=$mail_md5", "From: [email protected]");

// messaggio da far visualizzare all'utente finale

echo "Complimenti registrazione effettuata con successo.";



}
else{
echo "Raggiunto il numero massimo di adesioni";
}

Arriva così la mail con l'indirizzo email nel link di conferma criptata...

Ecco il codice della pagina conferma.php

PHP:
<?php

include ('configurazione.php');

$mail=$_GET[$mail_md5];
$mail_md5=$_GET['cod'];


$num_rows_is=mysql_num_rows(mysql_query("SELECT * FROM tabella_registrati WHERE attiva='1'")); //verifico quanti record ho in tutto 
   
    if($num_rows_is<2){

mysql($db_name,"UPDATE tabella_registrati SET attiva='1' WHERE mail='$mail'") or die ("Errore durante la connessione");

echo "Iscrizione avvenuta con successo";

}
else{ echo "I posti sono esauriti";
}

?>

Ho reso così,ma forse sbaglio nel settare le variabili poichè nel database il campo "attiva" non viene updatato dalla query presente nella pagina conferma.php


Cosa sbaglio?!

Grazie mille!!
 
ciao
probabilmente, se non ho capito male, nel campo mail hai l'indirizzo in chiaro (es. [email protected]) e lo confronti con un valore modificato (md5), quindi non lo trova.
non so se è possibile decodificare, cioè dal valore mdcinquato ritornare al valore in chiaro, se non è così dovresti farti un altro campo es email_md5 e salvarvi il valore codificato e poi fare la WHERE su quello
.... WHERE email_md5='$mail_md5'....
 
Le operazioni matematiche necessarie per decodificare una stringa codificata in MD5 sono talmente complesse da essere definite impossibili. In altre parole non si può fare. Hai bisogno di salvare nel database l'indirizzo codificato in MD5, in modo da poterlo confrontare con quello inserito.
 
ciao
@alex: era quello che pensavo io.
comunque io farei due campi, uno con l'email in chiaro e uno mndcinquato, in chiaro puo servirmi se devo spedire un'email allutente, mdcinquato per mettere nel get di cancellazione
 
Ora che ci penso basta anche solo un campo contenente l'email dell'utente. Tanto l'hash MD5 corrispondente sarà sempre lo stesso. Per cercare all'interno del database basta fare una cosa del genere:
Codice:
SELECT * FROM tabella WHERE MD5(email) = 'md5_inserito_da_utente'
 

Discussioni simili