Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - controllo dati esistenti da get
Forum - PHP - controllo dati esistenti da get

Avatar
luigi7 (Normal User)
Pro


Messaggi: 83
Iscritto: 28/06/2011

Segnala al moderatore
Postato alle 21:37
Venerdì, 16/03/2012
Salve, ho questo codice che ho scritto per verificare se l'id e quello che esiste nel database e la key lo stesso solo che non fa quello che deve fare...

Esempio se io modifico manualmente la key=99090909090 ... mi dovrebbe dire chiave non esistente.. ed se io modifico id=30 deve dare ID non esiste.e viceversa..

però questo non fa come deve fare.. ed io non sono capace.

vi metto il codice un po scritto male perché sto provando e poi dopo lo faccio a modo.

Codice:PHP con MySQLi

Codice sorgente - presumibilmente Php

  1. <?php
  2.         require_once(dirname(__FILE__) . '/../inc.php');
  3.         require_once(dirname(__FILE__) . "/../template/".$template_client."/header.php");
  4.        
  5.        
  6.                 $id = (int)$_GET["id"];
  7.        
  8.                 $key = $_GET['key'];
  9.                
  10.                 $query = $db->Query("SELECT * FROM utenti WHERE id = '".$id."' and pass_activationhash='".$key."'");
  11.                
  12.                 if(empty($id)) {
  13.                         echo "ID non specificato";
  14.         }elseif(empty($key))
  15.         {
  16.                                 echo "KEY non specificato";
  17.         }
  18.                            
  19.                                    
  20.         else
  21.         {        $row=$query->fetch_assoc();
  22.        
  23.                                 if($row['temp_pass_active']==1){
  24.                                         $msg =   'La tua password  risulta già attivo.!<br>';
  25.                                 }
  26.                            elseif($row['pass_activationhash']!=$key){
  27.                                         $msg ='Chiave di conferma non corrispondono!';
  28.                                 }
  29.                                
  30.                            else
  31.                            {
  32.                        
  33.                                
  34.                                         $db->query("UPDATE utenti SET pass='".$row["temp_pass"]."', temp_pass_active=1 WHERE id=".$id." and pass_activationhash='".$key."'")  or die($db->error);
  35.                                         $msg ='Congratulazione La tua passsword  Ã¨ valida';
  36.                                  
  37.                                 }
  38.            }
  39.                  
  40.                
  41.                 if ( isset ( $error ) ) { echo '                        <p class="error">' . $error . '</p>' . "\n";    }      
  42.                 if ( isset ( $msg ) )   { echo '                        <p class="msg">' . $msg . '</p>' . "\n";        } else {}
  43.                
  44.                 require_once(dirname(__FILE__) . "/../template/".$template_client."/footer.php");
  45.         ?>


PM Quote
Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Segnala al moderatore
Postato alle 10:51
Sabato, 17/03/2012
Ma la key e l'id sono auto_increment all'interno del database?


Parte della disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.  [cit. Isaac Asimov]
PM Quote
Avatar
luigi7 (Normal User)
Pro


Messaggi: 83
Iscritto: 28/06/2011

Segnala al moderatore
Postato alle 11:41
Sabato, 17/03/2012
no l'autoincrement e solo la ID e la key è un varchar(255)..

è cosi:
CREATE TABLE `utenti` (
  `id` bigint(8) unsigned auto_increment,
`temp_pass_active` int NOT NULL default '0',
  `pass_activationhash` varchar(255),

etc...

e l'id è auto increment come dici tu.


mi protesti dire come mai gli if ed else non fanno il suo dovere?

Grazie mille.

PM Quote
Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Segnala al moderatore
Postato alle 11:58
Sabato, 17/03/2012
Il perché è dato dalla conversione in intero dell'id.
La funzione empty()funziona solo con le stringhe e non con gli interi; per questo i controlli degli if non vanno.
Detto cio', modifica il tuo codice come segue:
Codice sorgente - presumibilmente Plain Text

  1. [b]$id = $_GET["id"]; // quindi è una stringa![/b]



Mentre per verificare l'esistenza dell'id, siccome sono interi, basta usare una query tipo questa:
Codice sorgente - presumibilmente Plain Text

  1. limit 1 ORDER BY id DESC


oppure
Codice sorgente - presumibilmente Plain Text

  1. max()


Così da ottenere l'ultimo id e confrontare se rientra nell'intervallo delle tuple presenti nel tuo database.
Qualora ti servisse il valore intero dell'id hai 2 metodi:
- o crei una nuova variabile a cui assegni il suo valore intero (righe di codice sprecate secondo me)
-oppure applichi la conversione in intero alla stessa variabile, cioè $id (consigliata da me) :rofl:

Detto questo spero tu abbia risolto :k:

Ultima modifica effettuata da bububs il 17/03/2012 alle 12:00


Parte della disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.  [cit. Isaac Asimov]
PM Quote
Avatar
luigi7 (Normal User)
Pro


Messaggi: 83
Iscritto: 28/06/2011

Segnala al moderatore
Postato alle 13:01
Sabato, 17/03/2012
si ho capito.. ed ho risolto..riscrivendo il codice:

per me non faceva l'if else if perché essendo che avevo già convalidato la
password e non faceva eseguire le altre if.. invertendo la posizione ora funziona.

dimmi se va bene.. (ps : sto imparando seriamente ad usare php/mysql)


Codice sorgente - presumibilmente PHP

  1. <?php
  2.         require_once(dirname(__FILE__) . '/../inc.php');
  3.         require_once(dirname(__FILE__) . "/../template/".$template_client."/header.php");
  4.        
  5.        
  6.                 $id = (int)$_GET["id"];
  7.        
  8.                 $key = $_GET['key'];
  9.                
  10.                 $query = $db->query("SELECT * FROM utenti WHERE id = '".$id."'");
  11.                
  12.                 if($row = $query->num_rows ==1)
  13.                 {
  14.                         $row=$query->fetch_assoc();
  15.                         if($row['pass_activationhash']!=$key)
  16.                         {
  17.                         $error = "La chiave per questo utente non coincide con la nostra nell'archivio dati";
  18.                         }
  19.                                        
  20.                         elseif($row['temp_pass_active']==1)
  21.                         {
  22.                                 $error = 'La password è stata convalidata';
  23.                         }
  24.                
  25.                         else
  26.                         {
  27. $db->query("UPDATE utenti SET pass='".$row["temp_pass"]."', temp_pass_active=1 WHERE id=".$id." and pass_activationhash='".$key."'")  or die($db->error);
  28.                                 $msg = 'Congratulazioni!!';
  29.                         }
  30.                 }
  31.                 else {
  32.                
  33.                         $error = 'User not found !';
  34.                
  35.                 }
  36.  
  37.                 if ( isset ( $error ) ) { echo '                        <p class="error">' . $error . '</p>' . "\n";    }      
  38.                 if ( isset ( $msg ) )   { echo '                        <p class="msg">' . $msg . '</p>' . "\n";        } else {}
  39.                
  40.                 require_once(dirname(__FILE__) . "/../template/".$template_client."/footer.php");
  41.         ?>



quindi per fare i controlli dei parametri vuoti come devo fare..

io usavo empty perché avevo letto che se non c'è nessun parametro facevo apparire un messaggio..

per caso l'id è is_numeric($id)?

grazie mille e buona giornata.

PM Quote
Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Segnala al moderatore
Postato alle 18:46
Sabato, 17/03/2012
Nel codice da te inserito c'è questa variabile di nome $error, giusto?
E alla fine vai a controllare se è stata settata. Ma si nota subito che in qualunque caso verrà settata tranne la sua unica eccezione, ovvero quando si fanno le cose correttamente. Anche perchè l'else vuoto è inutile perchè non serve a nulla.
Un'altra cosa, ho visto la documentazione ufficiale e ho potuto notare che riguardo al caso dell'empty, essa ritorna il valore booleano FALSE nei seguenti casi:

  -"" (stringa vuota)
  -0 (il valore 0 come intero)
  -0.0 (il valore 0 come float)
  -"0" (il valore 0 come stringa)
  -NULL
  -FALSE
  -array() (un array vuoto)
  -var $var; (una variabile dichiarata, ma senza alcun valore assegnato nella classe)

Perciò sistema il codice in questa maniera:
Codice sorgente - presumibilmente Php

  1. //crea la variabile stringa $msg all'inizio del codice con valore tra uno di  quelli proposti sopra. (ti consiglierei stringa vuota o null)
  2. //Userai questa come contenitore di tutti i tuoi messaggi riferiti all'utente per segnalare qualunque problema.
  3. $msg = "";
  4. .....
  5. if ( !empty( $error ) ) { echo '                        <p class="error">' . $error . '</p>' . "\n";    }      
  6. else   { echo '                        <p class="msg">CONGRATULAZIONI!!!</p>' . "\n";        }


Ultima modifica effettuata da bububs il 17/03/2012 alle 18:50


Parte della disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.  [cit. Isaac Asimov]
PM Quote