Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    verificare una condizione su tutte le righe di un database

    Salve a tutti, sono nuovo del forum...

    Ho un piccolo problemino con l'uguaglianza tra due variabili in php.
    Allora, la situazione è questa:

    Ho un form di inserimento dati (username, password ed email) nel quale gli utenti immettono i loro dati in un database MySql. Prima pero' che l'operazione di scrittura dati vada a buon fine, effettuo dei controlli in php sui campi di testo, in particolare verifico che i campi user e password non siano vuoti e che il formato della email sia corretto (utilizzando la funzione eregi per le espressioni regolari...)

    ...Ma non è tutto, effettuo un ulteriore controllo sull'email, nel quale specifico che l'email inserita non deve essere gia' presente nel db, in caso contrario, restituisco un opportuno messaggio di errore.

    Riesco ad effettuare questo controllo in maniera corretta ma solo sulla prima riga della tabella del db, su tutte le altre no! Ho pensato di iterare il controllo con una while, ma non riesco a farla funzionare...

    Spiego brevemente come effettuo il controllo sulle mail presenti nel db...

    $query = "SELECT email FROM nome_tabella";
    $result_mail = mysql_query($query, $connessione);
    $row_mail = mysql_fetch_array($result_mail);
    //controllo
    if($e_mail == $row_mail[email]){
    istruzioni varie }
    ripeto che questo tipo di controllo funziona a dovere ma solo con il primo indirizzo email del db, con i successivi purtroppo no...

    La mia idea è quella di realizzare qualcosa del tipo:

    while($row_mail = mysql_fetch_array($result_mail)){
    //controllo
    if($e_mail == $row_mail[email]){
    istruzioni varie }
    }

    Ma ho gia' provato e non funge!!!

    HELP!

  2. #2
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    Non ti conviene estrarre tutti gli indirizzi email per fare la verifica, meglio contare se ne esiste uno uguale, ecco un esempio:
    Codice PHP:
    // controllo anti duplicati

    $result_conteggio =  mysql_query("
    SELECT COUNT(*) AS totale
    FROM   nome_tabella
    WHERE  email = '"
    .$email."'
    "
    ,$connessione_db) or die("Errore alla linea ".__LINE__.": ".mysql_error()) ;

    $conteggio mysql_fetch_array($result_conteggio) ;

    if ( 
    $conteggio['totale'] > ) {
         echo 
    "Indirizzo email già presente nel database" ;

    Errare humanum est, perseverare ovest

  3. #3

    Perfetto

    Perfetto!
    In effetti non ci avevo pensato ad una cosa di questo genere...

    Funziona molto bene, grazie mille...

  4. #4
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    o addirittura ( stesso risultato ma meno codice)
    Codice PHP:
    // controllo anti duplicati

    $result_conteggio =  mysql_query("
    SELECT email
    FROM   nome_tabella
    WHERE  email = '"
    .$email."'
    "
    ,$connessione_db) or die("Errore alla linea ".__LINE__.": ".mysql_error()) ;

    if (
    mysql_num_rows($result_conteggio) != ) {
         echo 
    "Indirizzo email già presente nel database" ;

    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  5. #5
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    Originariamente inviato da dottwatson
    stesso risultato ma meno codice
    Il risultato è lo stesso ma la query con COUNT è molto più veloce, una riga in più è giustificata
    Errare humanum est, perseverare ovest

  6. #6
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    Originariamente inviato da carlo2002
    Il risultato è lo stesso ma la query con COUNT è molto più veloce, una riga in più è giustificata
    non dovrebbero essere veloci entrambi dato che anche io ottengo come risultato un solo elemento?

    tu hai il totale, mentre io solo il campo email. ma il db deve sempre verificare riga per riga...
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  7. #7
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    Originariamente inviato da dottwatson
    non dovrebbero essere veloci entrambi dato che anche io ottengo come risultato un solo elemento?

    tu hai il totale, mentre io solo il campo email. ma il db deve sempre verificare riga per riga...
    Ho appena fatto dei test in merito e hai ragione

    ho provato anche aggiungendo LIMIT 1 e la cosa non cambia
    Errare humanum est, perseverare ovest

  8. #8
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    Originariamente inviato da carlo2002
    Ho appena fatto dei test in merito e hai ragione

    ho provato anche aggiungendo LIMIT 1 e la cosa non cambia
    ottimo!!

    ci siamo tolti il dubbio in 2

    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.