Controllo e update dati che non funziona con + di un insert

ho fatto un controllo che serve per inviare una nuova password all'utente che la richiede. Un primo pezzo fa un controllo nel db ora se c'è un solo utente registrato il controllo funziona benissimo se ci sono appena due utenti dice che la "Username inserita non esiste" quando in realtà c'è ed è corretta.

pezzo di codice che fa il controllo

else {
                         $query = "SELECT username FROM users WHERE username != '$username'";
                         $result = mysql_query($query, $link) or die("Errore nella query:".mysql_error());
                         
                         if(mysql_num_rows($result) > 0) {
                        
                            $errori[0] ="la Username inserita non esiste";
                         }

pezzo di funzione checkerror.php

case "forgotpassword":
                 $errori = CheckReg2();
                    if (count($errori) == 0) {
                        
                        $query = "SELECT username FROM users WHERE username='$username' AND email = '$email'";
                        
                        $result = mysql_query($query) or die("Errore nella query: " . mysql_error());
                        
                        $check = mysql_num_rows($result);

                        if($check == 1){

                        function new_pwd() {
                                  $chars = "abchefghjkmnpqrstuvwxyz0123456789";
                                  srand((double)microtime()*1000000);
                                  $i = 0;
                                  while ($i <= 7) {
                                                   $pwd = "gjpoe";
                                                   $num = rand() % 33;
                                                   $tmp = substr($chars, $num, 1);
                                                   $pwd = $pwd . $tmp . $num;
                                                   $i++;
                                                  }
                                            return $pwd;
                                            }
                                  $new_pwd = new_pwd();
                                  $password = md5($new_pwd);
                                  $sql = mysql_query("UPDATE users SET password='$password' WHERE email='$email'");

:'(

inviato 9 anni fa
myscript72
X 0 X
else {
                         $query = "SELECT username FROM users WHERE username != '$username'";
                         $result = mysql_query($query, $link) or die("Errore nella query:".mysql_error());
                         
                         if(mysql_num_rows($result) > 0) {
                        
                            $errori[0] ="la Username inserita non esiste";
                         }

Perchè hai messo != nella query? Non deve cercare la username uguale a $username?

 :bye:

risposto 9 anni fa
Marco Dario
modificato 9 anni fa
X 0 X

la prima query:

[tt]SELECT username FROM users WHERE username != $username[/tt]

cerca gli username diversi da quello inserito, è normale quindi che se ci sono 2 utenti nella tabella la query restituirà lo username dell'altro utente ed il controllo successivo ([tt]mysql_num_rows($result) > 0[/tt]) darà sicuramente esito positivo.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ciao ragazzi non va lo stesso... io cerco che l'utente sia presente nel db per inviargli la password nuova se cosi non è mi ritorno l'errore ma nulla non funge anche con

  $query = "SELECT username FROM users WHERE username = '$username'"

e non capisco perchè

risposto 9 anni fa
myscript72
X 0 X

Partiamo da zero: qual'è la sequenza di operazione che vorresti lanciare per effettuare il recupero della password?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Ciao gianni, ho risolto l'errore era qui

$query= "SELECT username FROM users WHERE username='$username'";
...
...

$errori = array();
$errori[] = (mysql_num_rows($result) == 0); //se $errori[0] è vera allora l'utente non è registrato

==0 e non >0

grazie

risposto 9 anni fa
myscript72
X 0 X

Niente Gianni, pensavo di aver risolto invece nulla o meglio... i controlli singolarmente funzionano il problema ora e che sevo fare in modo che la username deve coincidere con la email corretta altrimenti deve tirarmi fuori l'errore... ora succede che se metto una username corretta e una email corretta ma non coincidente con l'utente mi carica una pagina biaca

questo è il controllo completo sul recupero della password uno fatto sulla username e l'altro fatto sulla email

function CheckReg2() { 
                 $errori = array(); 

             include("db_vars.inc");

                 $username = trim($_POST["username"]);
            
             if ($username == "") 
                 {
                     $errori[0] = "La <b>Username</b> è obbligatoria";
                     } 
                else if (strlen($username) < 6) // controllo che la username inserita non sia < di 6 caratteri
                { 
                     $errori[0] = "Il <b>Username</b> non deve essere inferiore a sei caratteri";
                     } 
                else if (!eregi("^([a-zA-Z]{3})([a-zA-Z0-9]*)$", $username))//la username inizia per forza con tre lettere 
                { 
                     $errori[0] ="La <b>Username</b> utilizzata contiene caratteri invalidi";
                } 

                else if (eregi("^((root)|(bin)|(daemon)|(adm)|(lp)|(sync)|(shutdown)|(halt)|(mail)|(html)|(xhtml)| 
                                  (news)|(uucp)|(operator)|(games)|(mysql)|(httpd)|(nobody)|(dummy)|(fedora)|(linux)|
                                  (www)|(cvs)|(shell)|(ftp)|(irc)|(debian)|(ns)|(download))$", $nome_utente)) // controllo che l'utente non inserisca nomi riservati 
                     { 
                     $errori[0] ="La <b>Username</b> non può contenere nomi illegali"; 
                     } 
                                     
                else {
                      $query = "SELECT username FROM users WHERE username = '$username'";
                      $result = mysql_query($query, $link) or die("Errore nella query:".mysql_error());
                      if(mysql_num_rows($result) == 0) { 
                        $errori[0] ="la Username inserita non esiste";
                   }
               
                 }
                 
             $email = trim($_POST["email"]);

             if ($email == "")

                {
                     $errori[1] = "Il campo <b>E-mail</b> è vuoto";
                     }

                 else {
                      $query = "SELECT email FROM users WHERE email = '$email'";
                      $result = mysql_query($query, $link) or die("Errore nella query:".mysql_error());
                      if(mysql_num_rows($result) == 0) {
                        $errori[1] ="L'email inserita non appartiene ad un utente registrato";
                      } 
                      }

                 return $errori; 
                 }

  ???

risposto 9 anni fa
myscript72
X 0 X

Ma quando fai questa query: SELECT username FROM users WHERE username = '$username' non puoi fare semplicemente cosi:

SELECT username, email FROM users WHERE username = '$username'

Così quando controlli l'esistenza della username estrai anche l'email associata ad esso.

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

nulla non va mi carica lo stesso una pagina vuota  :'(

risposto 9 anni fa
myscript72
X 0 X

Prova a fare così:

/* quì tutto il codice come prima */

if(mysql_num_rows($result) == 0) 
{
      $errori[1] ="L'email inserita non appartiene ad un utente registrato";
} 
else
{
echo "eureka!";
}                

return $errori;         

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

nulla Maverikgoos ora funziona il controllo dell'email coincidente ma se coincide da lo stesso risultato..

credo di aver fatto giusto

$email = trim($_POST["email"]);

 if ($email == "")
                    {
                     $errori[1] = "Il campo <b>E-mail</b> è vuoto";
                     }

           else {
                $query = "SELECT email FROM users WHERE email = '$email'";
                $result = mysql_query($query, $link) or die("Errore nella query:".mysql_error());
                if(mysql_num_rows($result) == 0) {
                     $errori[1] ="L'email inserita non appartiene ad un utente registrato";
                      }else{ 
                        $errori[1] ="L'email inserita appartiene ad un utente diverso";
                      }    
                      }    

                 return $errori; 
                 }
risposto 9 anni fa
myscript72
X 0 X
ora funziona il controllo dell'email coincidente ma se coincide da lo stesso risultato.

Cioè? ???

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

funziona il controllo dell'email coincidente ma se l'email coincide da lo stesso risultato.. CIOè DICE CHE L'email inserita appartiene ad un utente diverso

risposto 9 anni fa
myscript72
modificato 9 anni fa
X 0 X

Non capisco perchè hai messo quel messaggio d'errore... ??? In quella parte di codice devi inserire la funzione che manda la password. Leggi il codice: "Quando l'email inserita esiste nella tabella users cosa devo fare?"

   

 $query = "SELECT email FROM users WHERE email = '$email'";
 $result = mysql_query($query, $link) or die("Errore nella query:".mysql_error());
 if(mysql_num_rows($result) == 0) {

$errori[1] ="L'email inserita non appartiene ad un utente registrato";

 }else{ 

$errori[1] ="L'email inserita appartiene ad un utente diverso";

 }

Questo è quello che fà quella parte di script.

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

ai... ho uno switch che carica le varie opzioni richieste...

per l'invio della password è questo

case "forgotpassword": 
                 $errori = CheckReg2(); 
               if (count($errori) == 0) {
                  
                  include("db_vars.inc");

                  $query = "SELECT username FROM users WHERE username='$username' AND email = '$email'";
                  
                  $result = mysql_query($query) or die("Errore nella query: " . mysql_error());
                  
                  $check = mysql_num_rows($result);

                  if($check == 1){

                  function new_pwd() {
                          $chars = "abchefghjkmnpqrstuvwxyz0123456789";
                          srand((double)microtime()*1000000);
                          $i = 0;
                          while ($i <= 7) {
                                       $pwd = "gjpoe";
                                       $num = rand() % 33;
                                       $tmp = substr($chars, $num, 1);
                                       $pwd = $pwd . $tmp . $num;
                                       $i++;
                                      }
                                 return $pwd;
                                 }
                          $new_pwd = new_pwd();
                          $password = md5($new_pwd);
                          $sql = mysql_query("UPDATE users SET password='$password' WHERE email='$email'");

                        
risposto 9 anni fa
myscript72
X 0 X

Se metti tutto questo nel ELSE di prima?

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

un po complicato.....

posto l'intero codice anche se qui non si legge bene

<?

/**********************************************************
function CheckReg1 permette di controllare i campi relativi 
alla pagina della registrazione utente
**********************************************************/    

$username= $_POST['username'];
$password= $_POST['password'];
$password2= $_POST['password2'];
$email= $_POST['email'];
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];

$pass_cript= md5($password);


function CheckReg1() {
                 $errori = array();

             include("db_vars.inc");

             $username = trim($_POST["username"]);
            
             if ($username == "") 
                 {
                     $errori[0] = "La <b>Username</b> è obbligatoria";
                     } 
                else if (strlen($username) < 6) // controllo che la username inserita non sia < di 6 caratteri
                { 
                     $errori[0] = "Il <b>Username</b> non deve essere inferiore a sei caratteri";
                     } 
                else if (!eregi("^([a-zA-Z]{3})([a-zA-Z0-9]*)$", $username))//la username inizia per forza con tre lettere 
                { 
                     $errori[0] ="La <b>Username</b> utilizzata contiene caratteri invalidi";
                } 

                else if (eregi("^((root)|(bin)|(daemon)|(adm)|(lp)|(sync)|(shutdown)|(halt)|(mail)|(html)|(xhtml)| 
                                  (news)|(uucp)|(operator)|(games)|(mysql)|(httpd)|(nobody)|(dummy)|(fedora)|(linux)|
                                  (www)|(cvs)|(shell)|(ftp)|(irc)|(debian)|(ns)|(download))$", $username)) // controllo che l'utente non inserisca nomi riservati 
                     { 
                     $errori[0] ="La <b>Username</b> non può contenere nomi illegali"; 
                     } 
                                     
                else {
                   $query = "SELECT username FROM users WHERE username = '$username'";
                   $result = mysql_query($query, $link) or die("Errore nella query:".mysql_error());
                      
                   if(mysql_num_rows($result) > 0) { 
                  
                     $errori[0] ="la Username è in uso";
                   }
               
             }
             
             $password = $_POST["password"]; 
                   if ($password == "") $errori[1] = "Il campo <b>password</b> è obbligatorio"; 
                  elseif (strlen(trim($password)) < 6) 
                     { 
                     $errori[1] = "La <b>password</b> non deve essere inferiore a sei caratteri"; 
                     } 
                  elseif (!eregi("^([a-z0-9]*)$", $password)) 
                     { 
                     $errori[1] ="Password con caratteri invalidi"; 
                     } 
                
             $password2 = $_POST["password2"]; 
                   if ($password2 == "") $errori[2] = "Il campo <b>ripeti Password</b> è obbligatorio"; 
                  
               if($password != $password2)   //controllo che le due password coincidano
                  { 
                        $errori[2] ="Password e ripeti Password non coincidono"; 
                        }
               
             $email = $_POST["email"]; 
                   if ($email == "" ) $errori[3] ="L'indirizzo <b>E-mail</b> è obbligatorio"; 
                  elseif (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) 
                     { 
                     $errori[3] ="<b>E-mail</b> inserita è invalida<br>"; 
                     } 
                  else {
                      $query = "SELECT email FROM users WHERE email = '$email'";
                      $result = mysql_query($query, $link) or die("Errore nella query:".mysql_error());
                      if(mysql_num_rows($result) > 0) {
                        $errori[3] ="L'email inserita appartiene ad un utente già registrato";
                      } 
                      }
                
             $nome = trim($_POST["nome"]);
            
             if ($nome == "") 
                 {
                     $errori[4] = "Il campo <b>Nome</b> è obbligatorio";
                     } 
                else if (eregi("^((root)|(bin)|(daemon)|(adm)|(lp)|(sync)|(shutdown)|(halt)|(mail)|(html)|(xhtml)| 
                                  (news)|(uucp)|(operator)|(games)|(mysql)|(httpd)|(nobody)|(dummy)|(fedora)|(linux)| 
                                  (www)|(cvs)|(shell)|(ftp)|(irc)|(debian)|(ns)|(download))$", $nome)) // controllo che l'utente non inserisca nomi riservati 
                     { 
                     $errori[4] ="Il campo <b>Nome</b> non può contenere valori illegali"; 
                     } 
             
             $cognome = trim($_POST["cognome"]);
            
             if ($cognome == "") 
                 {
                     $errori[5] = "Il campo <b>Cognome</b> è obbligatorio";
                     } 
                else if (eregi("^((root)|(bin)|(daemon)|(adm)|(lp)|(sync)|(shutdown)|(halt)|(mail)|(html)|(xhtml)| 
                                  (news)|(uucp)|(operator)|(games)|(mysql)|(httpd)|(nobody)|(dummy)|(fedora)|(linux)|
                                  (www)|(cvs)|(shell)|(ftp)|(irc)|(debian)|(ns)|(download))$", $cognome)) // controllo che l'utente non inserisca nomi riservati 
                     { 
                     $errori[5] ="Il campo <b>Cognome</b> non può contenere valori illegali"; 
                     }
            
      
      return $errori;       
}

/***********************************************************
  function CheckReg2 permette di controllare i campi relativi 
  al recupero della password persa
**********************************************************/  
                   
 function CheckReg2() { 
                 $errori = array(); 

             include("db_vars.inc");

                 $username = trim($_POST["username"]);
            
             if ($username == "") 
                 {
                     $errori[0] = "La <b>Username</b> è obbligatoria";
                     } 
                else if (strlen($username) < 6) // controllo che la username inserita non sia < di 6 caratteri
                { 
                     $errori[0] = "Il <b>Username</b> non deve essere inferiore a sei caratteri";
                     } 
                else if (!eregi("^([a-zA-Z]{3})([a-zA-Z0-9]*)$", $username))//la username inizia per forza con tre lettere 
                { 
                     $errori[0] ="La <b>Username</b> utilizzata contiene caratteri invalidi";
                } 

                else if (eregi("^((root)|(bin)|(daemon)|(adm)|(lp)|(sync)|(shutdown)|(halt)|(mail)|(html)|(xhtml)| 
                                  (news)|(uucp)|(operator)|(games)|(mysql)|(httpd)|(nobody)|(dummy)|(fedora)|(linux)|
                                  (www)|(cvs)|(shell)|(ftp)|(irc)|(debian)|(ns)|(download))$", $username)) // controllo che l'utente non inserisca nomi riservati 
                     { 
                     $errori[0] ="La <b>Username</b> non può contenere nomi illegali"; 
                     } 
                                     
                else {
                      $query = "SELECT username FROM users WHERE username = '$username'";
                      $result = mysql_query($query, $link) or die("Errore nella query:".mysql_error());
                      if(mysql_num_rows($result) == 0) { 
                        $errori[0] ="la Username inserita non esiste";
                   }
               
                 }
                 
             $email = trim($_POST["email"]);

             if ($email == "")

                {
                     $errori[1] = "Il campo <b>E-mail</b> è vuoto";
                     }

                 else {  
                       $query = "SELECT * FROM users WHERE username='$username' AND email = '$email'";
                      //$query = "SELECT email FROM users WHERE email = '$email'";
                      //$query = "select email from users where username = '".$username."' and email = '".$email."' "; 
                      $result = mysql_query($query, $link) or die("Errore nella query:".mysql_error());
                      if(mysql_num_rows($result) == 0) {
                        $errori[1] ="L'email inserita non appartiene ad un utente registrato";
                      }
                      }    

                 return $errori; 
                 } 
             

/***********************************************************
  azioni!!!
**********************************************************/ 
 
 switch ($_GET["action"]) { 

                 case "register": 
                 $errori = CheckReg1(); 
               if (count($errori) == 0) {
                  
                        include("db_vars.inc");

                  $query="INSERT INTO users (username, password, email, nome, cognome) VALUES ('$username', '$pass_cript', '$email', '$nome', '$cognome')";

                  $result = mysql_query($query) or die("Errore nella query: " . mysql_error());
                  
                  if($result)
                      {
                          $iduser = mysql_insert_id();
                         $activatepath = "activate.php?iduser=$iduser&code=$pass_cript";
                         $subject = "Richiesta di iscrizione a $sitename";
                         $messageadmin = "L'utente $username si è iscritto con i seguenti dati:
                         
                         username: $username
                         password: $password
                         email: $email
                         ";

                         $message = "Benvenuto, $login
             
                         Grazie per esserti registrato su $site

                         Per attivare il tuo account clicca sul seguente link! e procedi con il login: 
                         $sitepath$activatepath

                         Ricapitoliamo i tuoi dati che ti serviranno per accedere al sito:
   
                         username: $username
                         password: $password


                         Grazie!
                         Lo Staff
   
                         Questo è un messaggio automatico di risposta, non rispondere a questo messaggio!";

                         mail($email, $subject, $message, "From: $sitename <$adminemail>\nX-Mailer: PHP/" . phpversion());
                         
                         //echo "grazie";
                          require_once('ty.php');
                        } 
                   }else {
                        include ("register.php");
                  }   
                 break;

             case "forgotpassword": 
                 $errori = CheckReg2(); 
               if (count($errori) == 0) {
                  
                  include("db_vars.inc");

                  $query = "SELECT username FROM users WHERE username='$username' AND email = '$email'";
                  
                  $result = mysql_query($query) or die("Errore nella query: " . mysql_error());
                  
                  $check = mysql_num_rows($result);

                  if($check == 1){

                  function new_pwd() {
                          $chars = "abchefghjkmnpqrstuvwxyz0123456789";
                          srand((double)microtime()*1000000);
                          $i = 0;
                          while ($i <= 7) {
                                       $pwd = "gjpoe";
                                       $num = rand() % 33;
                                       $tmp = substr($chars, $num, 1);
                                       $pwd = $pwd . $tmp . $num;
                                       $i++;
                                      }
                                 return $pwd;
                                 }
                          $new_pwd = new_pwd();
                          $password = md5($new_pwd);
                          $sql = mysql_query("UPDATE users SET password='$password' WHERE email='$email'");

                          $subject = "Richiesta di iscrizione a $sitename";
                          $messageadmin = "L'utente $username ha richiesto una nuova password:
                         
                          Username: $username
                          Password: $new_pwd
                          Email: $email
                          ";
                         
                          $subject = "Richiesta nuova password";
                          $message = "

                          Ciao $username,

                          Hai ricevuto questa email perchè hai richiesto una nuova password per il tuo account sul sito $site

                          Riepilogo dei dati
                          --------------------------
                          Username: $username
                          Password: $new_pwd
                          --------------------------

                          Ora puoi fare il login su:
                          $site
 
                          --
                          Grazie!
                          Lo Staff di $site
                           
                          Questo è un messaggio automatico di risposta, non rispondere a questo messaggio!";

                          mail($email, $subject, $message, "From: $site <$adminemail>\nX-Mailer: PHP/" . phpversion());
                         
                          require_once('ty_forgotpw.php');
 
                         }
                   }else {
                        include ("forgotpw.php");
                  }   
                 break;
} 
?>



         
risposto 9 anni fa
myscript72
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda