Visualizzazione risultati 1 fino 12 di 12

Discussione: php e una tabella mysql, non creare doppioni

  1. #1
    Guest

    Predefinito php e una tabella mysql, non creare doppioni

    Ciao a tutti... io ho una tabella mysql dove ho due colonne fondamentali: utenti, mail

    ho fatto uno script di registrazione, dove i dati vanno ad aggiungersi a questa tabella... ora domando, come faccio in modo che se viene inserito un nome utente e/o mail gia esistenta compaia un messaggio d'errore?

    ho buttato giu il seguente codice ma nn sembra funzionare (mi registra doppioni con lo stesso username o password)

    Codice PHP:
    /* server mySQL */
    $db = mysql_connect($db_host, $db_username, $db_password);
    if (
    $db == FALSE)
    die (
    "Errore nella connessione. Se questo errore dovesse ripetersi contattare l'assistenza");
    mysql_select_db($database_name, $db)
    or die (
    "Errore nella selezione del database. Se questo errore dovesse ripetersi contattare l'assistenza");

    $query = "SELECT username FROM fanta_users WHERE username = '$username'";
    $result = mysql_query ($query);
    $query_mail = "SELECT mail FROM fanta_users WHERE mail = '".$mail."'";
    if (
    mysql_num_rows($result) == 1)
    die(
    "Errore: Username ".$username." già utilizzato.");
    elseif(
    mysql_num_rows(mysql_query($query_mail)) == 1)
    die(
    "Errore: E-mail ".$mail." già utilizzata.");
    else {
    /***************/

  2. #2
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Hai provato ad eseguire la funzione mysql_num_rows() quando all'interno del database avevi già un duplicato?

    Se e cosi la funzione non viene eseguita proprio perché la funzione restituisce un numero maggiore di 1, in questo caso prova ha modificare la if cosi:
    Codice PHP:
    if (mysql_rows_num($query) >= 1)
    {
    // Altre operazione
    }
    ..

    Sevenjeak
    Software developer and much more

  3. #3
    Guest

    Predefinito

    ho provato ad adattarlo.. ora il campo USER va bene.. non inserisce doppioni , ma x quanto riguarda il campo mail si... posto qui il codice completo...

    Codice PHP:
    <?

    /*includo file */
    include('index.php');
    include(
    'registrazione.php');
    include(
    'config.php');
    /* *********** */


    $nome=$_POST['r_nome'];
    $cognome=$_POST['r_cognome'];
    $citta=$_POST['r_citta'];
    $datanascita=$_POST['r_datanascita'];
    $squadratif=$_POST['r_scuadratif'];
    $username=$_POST['r_username'];
    $password=$_POST['r_pass1'];
    $contrll_password=$_POST['r_pass2'];
    $mail=$_POST['r_mail'];

    /* qui sistemo i campi con errori vuoti e password diverse*/
    if ( ($nome == "") OR ($cognome == "") OR ($citta == "") OR ($datanascita == "") OR (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $mail)) OR ($squadratif == "") OR ($contrll_password == "") OR ($password != $contrll_password) OR ($username == "") OR ($mail == "") ) {
    echo
    "<b><p>Non hai compilato tutti i campi</b></p>";
    echo
    "<p> </p>";
    if (
    $nome == "") { echo "<p> * non hai completato il campo nome</p>" ; }
    if (
    $mail == "") { echo "<p> * non hai completato il campo mail</p>" ; }
    if (!
    eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $mail)) { echo "<p> * indirizzo mail errato</p>" ; }
    if (
    $username == "") { echo "<p> * non hai completato il campo username</p>" ; }
    if (
    $cognome == "") { echo "<p> * non hai completato il campo cognome</p>" ; }
    if (
    $password == "") { echo "<p> * non hai completato il campo password</p>" ; }
    if (
    $contrll_password == "") { echo "<p> * non hai completato il campo controllo password</p>" ; }
    if (
    $contrll_password != $password) { echo "<p> * hai inserito due password diverse</p>" ; }
    if (
    $citta == "") { echo "<p> * non hai completato il campo citta</p>" ; }
    if (
    $datanascita == "") { echo "<p> * non hai completato il campo data di nascita</p>" ; }
    if (
    $squadratif == "") { echo "<p> * non hai completato il campo squadra tifata</p>" ; }

    }




    /* se è tutto è ok */

    if ( ($password == $contrll_password) && (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $mail)) &&($nome!=null) && ($cognome!=null) && ($citta!=null) &&($datanascita!=null) && ($squadratif!=null) && ($username!=null) && ($password!=null) && ($contrll_password!=null) && ($mail!=null) ) {

    /*echo "<b><p>hai compilato correttamente tutti i campi</b></p>"; */

    /* server mySQL */
    $db = mysql_connect($db_host, $db_username, $db_password);
    if (
    $db == FALSE)
    die (
    "Errore nella connessione. Se questo errore dovesse ripetersi contattare l'assistenza");
    mysql_select_db($database_name, $db)
    or die (
    "Errore nella selezione del database. Se questo errore dovesse ripetersi contattare l'assistenza");

    $query_user = "SELECT username FROM fanta_users WHERE username = '$username'";
    $result_user = mysql_query ($query_user);
    $query_mail = "SELECT mail FROM fanta_users WHERE mail = '".$mail."'";



    if (
    mysql_num_rows($query_user) >= 1)
    die(
    "Errore: Username ".$username." già utilizzato.");
    elseif(
    mysql_num_rows(mysql_query($query_mail)) >= 1)
    die(
    "Errore: E-mail ".$mail." già utilizzata.");
    else {
    /***************/
    $mailcriptata=md5($mail);
    $passcriptata=md5("$password");
    $query = "INSERT INTO fanta_users (username, nome, cognome, citta, datanascita, squadratif, password, saldo, stato_utente, email, mail) VALUES ('".$username."', '".$nome."', '".$cognome."', '".$citta."', '".$datanascita."', '".$squadratif."', '$passcriptata', '500', '0','$token$mailcriptata','".$mail."')";

    if (
    mysql_query($query, $db) && mysql_query($queryxxx, $db)) {
    echo
    "Caricamento completato. Grazie";
    $destinatari="$mail";
    $oggetto="registrazione a $nome_sito";
    $messaggio="Benvenuto $nick
    Sei stato correttamente registrato sul sito
    $nome_sito


    Ti auguriomo buona permanentza. I tuoi dati sono:


    nome:
    $nome
    cognome:
    $cognome
    nick:
    $nick
    email:
    $mail
    password:
    $password

    per attivare il tuo account vai all'indirizzo:
    $urlsito/attivazione.php?user=$token$mailcriptata

    "
    ;


    if(!
    mail($destinatari, $oggetto, $messaggio, $intestazioni))
    die(
    "Errore durante linvio della mail");

    } else


    echo
    mysql_error();


    }



    }


    ?>

  4. #4
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Non so se è quello che penso io, ma perché per controllare la mail scrivi l'elseif con questa condizione:
    Codice PHP:
    mysql_num_rows(mysql_query($query_mail)) >= 1
    Invece di inserirlo cosi?
    Codice PHP:
    mysql_num_rows($query_mail) >= 1
    Ultima modifica di sevenjeak : 28-01-2010 alle ore 20.42.19

    Sevenjeak
    Software developer and much more

  5. #5
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Citazione Originalmente inviato da sevenjeak Visualizza messaggio
    Non so se è quello che penso io, ma perché per controllare la mail scrivi l'elseif con questa condizione:
    Codice PHP:
    mysql_num_rows(mysql_query($query_mail)) >= 1
    Invece di inserirlo cosi?
    Codice PHP:
    mysql_num_rows($query_mail) >= 1
    Perchè $query_mail è soltanto una stringa che contiene la query ancora non eseguita.

  6. #6
    Guest

    Predefinito

    quindi?

  7. #7
    Guest

    Predefinito

    Io penso che sia un problema del database. Prova a visualizzare eventuali errori restituiti da mysql_error() e a controllare se la struttura del database è corretta.

  8. #8
    Guest

    Predefinito

    ritiro quello che ho detto.. ho apportato le modifiche, x gli errori ora me li segnala giusti, ma non scrive piu nel database!!! non mi aggiunge i nuovi utenti...

    vi posto tutto il codice modificato

    Codice PHP:
    <?

    /*includo file */
    include('index.php');
    include(
    'registrazione.php');
    include(
    'config.php');
    /* *********** */


    $nome=$_POST['r_nome'];
    $cognome=$_POST['r_cognome'];
    $citta=$_POST['r_citta'];
    $datanascita=$_POST['r_datanascita'];
    $squadratif=$_POST['r_scuadratif'];
    $username=$_POST['r_username'];
    $password=$_POST['r_pass1'];
    $contrll_password=$_POST['r_pass2'];
    $mail=$_POST['r_mail'];

    /* qui sistemo i campi con errori vuoti e password diverse*/
    if ( ($nome == "") OR ($cognome == "") OR ($citta == "") OR ($datanascita == "") OR (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $mail)) OR ($squadratif == "") OR ($contrll_password == "") OR ($password != $contrll_password) OR ($username == "") OR ($mail == "") ) {
    echo
    "<b><p>Non hai compilato tutti i campi</b></p>";
    echo
    "<p> </p>";
    if (
    $nome == "") { echo "<p> * non hai completato il campo nome</p>" ; }
    if (
    $mail == "") { echo "<p> * non hai completato il campo mail</p>" ; }
    if (!
    eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $mail)) { echo "<p> * indirizzo mail errato</p>" ; }
    if (
    $username == "") { echo "<p> * non hai completato il campo username</p>" ; }
    if (
    $cognome == "") { echo "<p> * non hai completato il campo cognome</p>" ; }
    if (
    $password == "") { echo "<p> * non hai completato il campo password</p>" ; }
    if (
    $contrll_password == "") { echo "<p> * non hai completato il campo controllo password</p>" ; }
    if (
    $contrll_password != $password) { echo "<p> * hai inserito due password diverse</p>" ; }
    if (
    $citta == "") { echo "<p> * non hai completato il campo citta</p>" ; }
    if (
    $datanascita == "") { echo "<p> * non hai completato il campo data di nascita</p>" ; }
    if (
    $squadratif == "") { echo "<p> * non hai completato il campo squadra tifata</p>" ; }

    }




    /* se è tutto è ok */

    if ( ($password == $contrll_password) && (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $mail)) &&($nome!=null) && ($cognome!=null) && ($citta!=null) &&($datanascita!=null) && ($squadratif!=null) && ($username!=null) && ($password!=null) && ($contrll_password!=null) && ($mail!=null) ) {

    /*ora è tutto ok proseguo nel leggere il database */
    /*verifico esistenza di username e password*/
    $db = mysql_connect($db_host, $db_username, $db_password);
    if (
    $db == FALSE) die ("Errore nella connessione. Se questo errore dovesse ripetersi contattare l'assistenza");
    mysql_select_db($database_name, $db) or die ("Errore nella selezione del database. Se questo errore dovesse ripetersi contattare l'assistenza");

    $query_user = "SELECT username FROM fanta_users WHERE username = '$username'";
    $result_user = mysql_query ($query_user);
    $query_mail = "SELECT mail FROM fanta_users WHERE mail = '".$mail."'";



    if (
    mysql_num_rows($query_user) >= 1)
    die(
    "Errore: Username ".$username." già utilizzato.");
    elseif(
    mysql_num_rows(mysql_query($query_mail)) >= 1)
    die(
    "Errore: E-mail ".$mail." già utilizzata.");
    else {
    /*a questo punto user e password sono originali qundi proseguo nel criptare e inserire nel database*/


    $mailcriptata=md5($mail);
    $passcriptata=md5("$password");
    $query = "INSERT INTO fanta_users (username, nome, cognome, citta, datanascita, squadratif, password, saldo, stato_utente, email, mail) VALUES ('".$username."', '".$nome."', '".$cognome."', '".$citta."', '".$datanascita."', '".$squadratif."', '$passcriptata', '500', '0','$token$mailcriptata','".$mail."')";

    if (
    mysql_query($query_user, $db)) {
    echo
    "Caricamento completato. Grazie";
    $destinatari="$mail";
    $oggetto="registrazione a $nome_sito";
    $messaggio="Benvenuto $username
    Sei stato correttamente registrato sul sito
    $nome_sito


    Ti auguriomo buona permanentza. I tuoi dati sono:


    nome:
    $nome
    cognome:
    $cognome
    username:
    $username


    per attivare il tuo account vai all'indirizzo:
    $urlsito/attivazione.php?user=$token$mailcriptata

    "
    ;


    if(!
    mail($destinatari, $oggetto, $messaggio, $intestazioni))
    die(
    "Errore durante linvio della mail");

    } else


    echo
    mysql_error();


    }



    }


    ?>
    Vorrei aggiungere come opzione inoltre che la casella denominata "accetta_registrazione" dev'essere spuntata, come posso fare?
    grazie in anticipo
    Ultima modifica di linuxmx : 29-01-2010 alle ore 00.47.43

  9. #9
    Guest

    Predefinito

    per fare il "accetta registrazione" ti consiglio di andarci attraverso il lato client con javascirpt


    Codice HTML:
    <form name="modulo" onSubmit="return disabilita(this); return false">
    Nome: 
    <input name="nome" type="text" size="28">
    Accetta Registrazione 
    <textarea rows="5" cols="30" wrap=virtual>etc etc etc</textarea>
    <input name="chekka" type="checkbox" onClick="accetta(this)"><strong>Accetta i termini del contratto</strong>
    <input type="Submit" value="Invia!" disabled onClick ="document.modulo.submit()">
    </form>
    <script type="text/javascript" language="javascript">
    document.forms.modulo.chekka.checked=false </script>
    invece per vedere se i dati vengono inseriti prova a mettere una normale query all'interno dell'if quando è vero

    Codice PHP:

    mysql_query
    ("INSERT INTO fanta user
    (campo1 , campo2 , campo3 )
    VALUES
    ('
    $var1' , '$var2' , '$var3' )") OR DIE(mysql_error());
    spero di essere stato utile

  10. #10
    Guest

    Predefinito

    Usare il metodo lato client è sconsigliato perché è una tecnica facilmente aggirabile. Per vedere se un utente ha spuntato una checkbox basta controllare se $_POST['nomecampo'] è settato con isset.

  11. #11
    Guest

    Predefinito

    hai fini di legge, se x caso è stato aggirato un campo obbligatorio in una iscrizione online, è reato, punibile dalla legge.

    al di là , che sia facile o difficile da eludere.

    Comunque per vedere se un campo checkbox è settato a vero, è utile usare isset come ti ha consigliato alessandro1997

    ciao

  12. #12
    Guest

    Predefinito

    Non avevo mai sentito questa legge. Che articolo è?

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •