operatori if else.

Salve, chiedo la gentilezza ad qualcuno che capisce come mai il codice che ho scritto non fa quello che vorrei..

In poche parole vorrei che quando uno scrive ?id=1&key=30303 ..

se manualmente cambia la chiave ed il sistema dice che non esiste nessuna chiave con la combinazione dell'id 1 ed inviceversa.. per questo non lo fa.

Vi metto il codice che ho scritto per ora .. uso la libreria MySQLI , ad semi-oggetti.

<?php
    require_once(dirname(__FILE__) . '/../inc.php');
    require_once(dirname(__FILE__) . "/../template/".$template_client."/header.php");
    
    
        $id = (int)$_GET["id"];
    
        $key = $_GET['key'];
        
        $query = $db->Query("SELECT * FROM utenti WHERE id = '".$id."' and pass_activationhash='".$key."'");
        
        if(empty($id)) {
            echo "ID non specificato";
    }elseif(empty($key))
    {
                echo "KEY non specificato";
    }
               
                   
    else
    {        $row=$query->fetch_assoc();
    
                if($row['temp_pass_active']==1){
                    $msg =   'La tua password  risulta gi&agrave; attivo.!<br>';
                }
               elseif($row['pass_activationhash']!=$key){
                    $msg ='Chiave di conferma non corrispondono!';
                }
                elseif($row['id']!=$id){
                    $msg ='ID  non corrisponde!';
                }
               else
               {
            
                
                    $db->query("UPDATE utenti SET pass='".$row["temp_pass"]."', temp_pass_active=1 WHERE id=".$id." and pass_activationhash='".$key."'")  or die($db->error);
                    $msg ='Congratulazione La tua passsword  &egrave; valida';
                  
                }
       }
        
        
        if ( isset ( $error ) )    { echo '            <p class="error">' . $error . '</p>' . "\n";    }    
        if ( isset ( $msg ) )    { echo '            <p class="msg">' . $msg . '</p>' . "\n";    } else {}
        
        require_once(dirname(__FILE__) . "/../template/".$template_client."/footer.php");
    ?>

c' qualcune che mi potrebbe darmi una mano che poi ho quasi finito il mio sito.. solo che lo voglio proteggere da attacchi.

inviato 4 anni fa
luigi
modificato 4 anni fa
Mario Santagiuliana
Conviene che il controllo delle variabili e i successivi errori da presentare li fai prima dell'esecuzione della query.Mario Santagiuliana 4 anni fa
X 0 X

Mi scuso se questa una domanda abbastanza vecchia ma mi sento in dovere di rispondere:

Probabilmente luigi sta utilizzando mysqli.

Il trucco sta nel leggere il valore

mysqli_result::$num_rows

che puoi ottenere semplicemente dopo aver eseguito la query.

Puoi quindi semplificare il codice utilizzando un if che ti dice se un determinato elemento esiste davvero nel database:

$num_righe = $query->num_rows;

if ($num_righe > 0){

   echo("Ecco l'elemento");

   $riga = $query->fetch_array();

//Stampo tutti gli attributi dell'elemento

}

else{

   echo("Elemento non presente nel database");

}

num_rows un attributo dell'oggetto mysqli_result.

Per altro dai un'occhiata qui.

risposto 4 anni fa
zeropingas
modificato 4 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda