[Progetto Blog]Errore su un controllo

Salve a tutti ragazzi, io continuo a chiedere aiuto, se un gg ho rotto le pa**e basta che me lo dite e mi do una regolata, ma purtroppo ho un nuovo problema che mi assilla, sempre dal famigerato form da cui ritiro alcuni dati, devo controllare se e' stato settato il nome utente ed avevo pensato di utilizzare o la funzione isset() o is_string() che penso per l'utilizzo sia lo stesso, o almeno simile scusate lo stesso.

Il codice del controllo che avevo pensato e' questo:

   if(!is_string($username))
      {
         throw new Exception("Eccezione: l'username deve essere una stringa");
      }
      else
      {
         //se e' vero allora per prima cosa controllo che non ci siano altri utenti con lo stesso nome
         $query = "SELECT user FROM utenti";
         $result = $objMySQL->query($query);
         while($riga = $objMySQL->fetch_assoc($result))
         {
            if($username == $riga['user'])
               throw new Exception("Eccezione: il nome utente è giá stato inserito");
         }
      }

Purtroppo il controllo dell'if lo da sempre vero, quindi falso, e va ad eseguire il codice nell'else, Siccome ho inviato piu' volte il form con il campo dell'username vuoto, ma considera settata una variabile anche con una stringa vuota?

Dovrei dare come valore di default NULL per caso???

Grazie ancora in anticipo per le risposte!!

inviato 9 anni fa
Pr0v4
X 0 X

Stai facendo gli errori di chi brucia le tappe, ma non è un problema per noi....

Per vedere se una stringa è vuota devi prima eliminare tutti gli spazi presenti ai suoi estremi con la funzione trim(). Infatti la stringa "    " non è certo piena!

$username = trim($username);

Poi ti basta un if($username) che restituisce true se la stringa è composta da almeno un carattere. Il "miracolo" dell'IF è spiegato qui:

http://www.phpnews.it/corsi/corso-php-base/conversione-automatica-dei-tipi-il-cast/

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Allora ragazzi, io ci insisto, visto che purtroppo neanche utilizzando la funzione trim() mi da un risultato soddisfacente...

Per essere chiaro vi stampo il metodo completo in cui ritiro vari campi da un form e li invio a questo metodo con l'intero array passato come parametro, e dove effettuero' alcuni controlli che mi permetteranno il controllo sui campi obbligatori del form stesso.

public function control($objMySQL, $array)
   {
      //Imposto tutte le variabili 
      $username = $array['username'];
      $password = $array['password'];
      $conf_password = $array['conf_password'];
      $mail = $array['mail'];
      $conf_mail = $array['conf_mail'];
      $hp = $array['hp'];
      $compl = $array['compl'];
      $sesso = $array['sesso'];
      //Tolgo tutti i caratteri spazio dalla stringa username, password e mail, in modo che i controlli funzionino correttamente
      $username = trim($username);
      $username = htmlspecialchars($username);
      $password = trim($password);
      $conf_password = trim($conf_password);
      $mail = trim($mail);
      $conf_mail = trim($conf_mail);
      //Per prima cosa controllo che username sia una stringa
      if(!empty($username))
      {
         throw new Exception("Eccezione: l'username deve essere una stringa");
      }
      else
      {
         //se e' vero allora per prima cosa controllo che non ci siano altri utenti con lo stesso nome
         $query = "SELECT user FROM utenti";
         $result = $objMySQL->query($query);
         while($riga = $objMySQL->fetch_assoc($result))
         {
            if($username == $riga['user'])
               throw new Exception("Eccezione: il nome utente è giá stato inserito");
         }
      }
      //Controllo la password che sia lunga quanto basta, che corrisponda a conf_password 
      switch($password)
      {
            case strlen($password) < 6 : throw new Exception("La password e' troppo corta");
            case strlen($password) > 12 : throw new Exception("La password immessa e' troppo lunga");
            case mysql_real_escape_string($password) != mysql_real_escape_string($conf_password) : throw new Exception("Le due password non corrispondono");
      }
      //Siccome per le email e' sufficiente controllare che abbiano almeno il carattere @ presente nella stringa, cerchero' questo carattere
      if(preg_match('.@.', $mail) != 1)
         throw new Exception("La stringa non e' una stringa che identifica una email");
      //Dopodiche' controllo se le due mail passate sono uguali o meno...
      if($mail != $conf_mail)
         throw new Exception("Le due mail passate non sono uguali...");
      //Adesso non mi resta che controllare che le altre stringhe siano stringhe
      if(!is_string($hp))
         throw new Exception("Il campo homepage deve contenere una stringa che identifica un sito web");

Anche lasciando tutti i campi vuoti l'errore che mi restituisce che la password e' troppo lunga...

Non riesco a capire perche', e scusate se a volte faccio i passi da gigante, ma volevo imparare a programmare subito in oop, e siccome ho trovato alcune difficolta' seguendo diversi tutorial che si basavano prima dell'aggiornamento 5.1, mi sono deciso a portare avanti un progetto mio per apprendere :D

Vi ringrazio per il vostro costante aiuto!

PS: ragazzi qualsiasi suggerimento riguardo alla struttura del codice e' piu' che ben accetto!!

risposto 9 anni fa
Pr0v4
modificato 9 anni fa
X 0 X

La struttura di controllo switch non si usa in quel modo. Guarda qui:

http://www.phpnews.it/corsi/corso-php-base/if-e-switch-la-gestione-del-flusso/

 :bye:

P.S.: attento a non andare in OT

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Ragazzi scusatemi per gli errori, ma come detto precedentemente sono un dilettante che vuol diventare un pochetto piu' esperto.

Sinceramente facendomi suggerire qualcosa, nn volevo certamente uscire dal topic; e mi scuso anche per questo.

Per il ciclo switch, devo ammettere che e' stata una mossa avventata, ma comunque voglio precisare che sto seguendo sia il manuale che qualche guida, ma ovviamente qualche cosina sfugge sempre!

La mia volonta' e' cmq quella di portarmi sempre a migliorare!

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