• Super User

    Random password in database

    Ciao a tutti. Ecco il mio problema.
    Devo inserire in un campo del mio database una password random.
    Ho la classe per la creazione della password che voglio ma non riesco
    a farlo in modo che tutte siano diverse le une dalle altre.
    Ecco il codice che ho fatto:

    <?php
    function createRandomPassword() {
    
        $chars = "abcdefghijkmnopqrstuvwxyz023456789";
        srand((double)microtime()*1000000);
        $i = 0;
        $pass = '' ;
    
        while ($i <= 7) {
            $num = rand() % 33;
            $tmp = substr($chars, $num, 1);
            $pass = $pass . $tmp;
            $i++;
        }
    
        return $pass;
    
    }
    
    // Usage
    
    
    
    $sqlpg ="SELECT * FROM hotel1";
    $risultatipg = mysql_query($sqlpg) or die("Error #". mysql_errno() . ": " . mysql_error());
    while ($row = mysql_fetch_array($risultatipg))
    {
    $password = createRandomPassword();
    $random = mysql_query("UPDATE hotel1 SET code='$password'");
    
    if($random)
    {
    echo "ok<br>";
    }
    else
    {
    echo "no<br>";
    }
    
    }
    ?> 
    

    Al momento mi inserisce la password sono che sono tutte uguali.
    Vorrei averle una diversa dall'altra.
    Grazie a tutti chi mi volesse aiutare.


  • User Attivo

    Come generatore di password casuali puoi implementare 1 semplice funzione.

    [PHP]
    function MakePassword() {
    //Sostituire "..." con i caratteri compresi nella password
    $tutto = Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d",...,"z");

    //Sostituire "x" con la lunghezza dell'Array (Es. 15)
    //$a ... $f = Lunghezza della password
    $a = rand(1,x);
    $b = rand(1,x);
    $c = rand(1,x);
    $d = rand(1,x);
    $e = rand(1,x);
    $f = rand(1,x);

    $pass = $tutto[$a] . $tutto** . $tutto . $tutto[$d] . $tutto . $tutto;
    return $pass;
    }

    echo MakePassword();
    [/PHP]

    :ciauz:


  • Super User

    Ciao, scusatemi non mi sono spiegato bene.
    Ho già una classe per la creazione della password casuale, solo che
    avendo un database volevo creare un array per inserire queste password casuali in questi record.
    Grazie.


  • User Attivo

    Allora il tuo problema non è il PHP ma l'SQL.

    Se vuoi inserire una password casuale nel DB devi usare l'istruzione:

    INSERT INTO nome_tabella SET campo=valore;
    $random = mysql_query("INSERT INTO hotel1 SET code='$password'");

    L'espressione che utilizzi "UPDATE" se non seguita da un condizionale "WHERE" sovrascrive sempre lo stesso dato sulla stessa casella ad ogni iterazione.


  • Super User

    appunto. Io volevo capire come usare un array per inserire questa variabile (che cambia) per ogni campo.
    Grazie.


  • User Attivo

    Prego! 🙂 Ciao Ciao 😉


  • Super User

    Sups, potresti postarmi un codice da cui prendere spunto per fare quello che voglio io?


  • User Attivo

    Ecco un codice PHP, non l'ho provato, ma dovrebbe funzionare:

    [php]
    <?php

    //Variabili Globali
    $db_host = "localhost";
    $db_user = "root";
    $db_pass = "bo";
    $db_name = "my_db";

    //Funzioni
    function createRandomPassword() {

    $chars = "abcdefghijkmnopqrstuvwxyz023456789";
    srand((double)microtime()*1000000);
    $i = 0;
    $pass = '' ;
    
    while ($i <= 7) {
        $num = rand() % 33;
        $tmp = substr($chars, $num, 1);
        $pass = $pass . $tmp;
        $i++;
    }
    
    return $pass;
    

    }

    function ins_pass($pass) {

    $db_link = mysql_connect($db_host, $db_user, $db_pass)
        or die("Errore Durante la Connessione");
    
    if(($query_ret = mysql_select_db($db_name)) == FALSE) {
        echo "Impossibile Accedere al DataBase";
        exit();
    }
    
    $query_ret = mysql_query("INSERT INTO hotel1 SET code='$pass';";
    
    mysql_close($db_link);
    
    return $query_ret;
    

    }

    //Main
    $db_link = mysql_connect($db_host, $db_user, $db_pass)
    or die("Errore Durante la Connessione");

    if(($query_ret = mysql_select_db($db_name)) == FALSE) {
        echo "Impossibile Accedere al DataBase";
        exit();
    }
     
    $sqlpg ="SELECT * FROM hotel1";
     $risultatipg = mysql_query($sqlpg) or die("Error #". mysql_errno() . ": " . mysql_error());
    
     while ($row = mysql_fetch_array($risultatipg))
     {
          $password = createRandomPassword();
          $ret = ins_pass($password);
     }
    
    mysql_free_result($risultatipg);
    mysql_close($db_link);
    

    }
    ?>
    [/php]:ciauz:


  • User Attivo

    @Sups said:

    Ecco un codice PHP, non l'ho provato, ma dovrebbe funzionare:

    [php]
    <?php

    //Variabili Globali
    $db_host = "localhost";
    $db_user = "root";
    $db_pass = "bo";
    $db_name = "my_db";

    //Funzioni
    function createRandomPassword() {

    $chars = "abcdefghijkmnopqrstuvwxyz023456789";
    srand((double)microtime()*1000000);
    $i = 0;
    $pass = '' ;
    
    while ($i <= 7) {
        $num = rand() % 33;
        $tmp = substr($chars, $num, 1);
        $pass = $pass . $tmp;
        $i++;
    }
    
    return $pass;
    

    }

    function ins_pass($pass) {

    $db_link = mysql_connect($db_host, $db_user, $db_pass)
        or die("Errore Durante la Connessione");
    
    if(($query_ret = mysql_select_db($db_name)) == FALSE) {
        echo "Impossibile Accedere al DataBase";
        exit();
    }
    
    $query_ret = mysql_query("INSERT INTO hotel1 SET code='$pass';";
    
    mysql_close($db_link);
    
    return $query_ret;
    

    }

    //Main
    $db_link = mysql_connect($db_host, $db_user, $db_pass)
    or die("Errore Durante la Connessione");

    if(($query_ret = mysql_select_db($db_name)) == FALSE) {
        echo "Impossibile Accedere al DataBase";
        exit();
    }
     
    $sqlpg ="SELECT * FROM hotel1";
     $risultatipg = mysql_query($sqlpg) or die("Error #". mysql_errno() . ": " . mysql_error());
    
     while ($row = mysql_fetch_array($risultatipg))
     {
          $password = createRandomPassword();
          $ret = ins_pass($password);
     }
    
    mysql_free_result($risultatipg);
    mysql_close($db_link);
    

    }
    ?>
    [/php]:ciauz:

    Testato funziona tutto al perfezione :vaiii:


  • User Attivo

    Funzione bene, c ho messo 2 minuti per scriverlo e non ho avuto tempo di vederlo in azione, xò ero sicuro della sua correttezza lessicale e semantica 😄

    Grazie D-royal x i test :ciauz:


  • User Attivo

    @Sups said:

    Funzione bene, c ho messo 2 minuti per scriverlo e non ho avuto tempo di vederlo in azione, xò ero sicuro della sua correttezza lessicale e semantica 😄

    Grazie D-royal x i test :ciauz:

    Di niente Sups sempre disponibile per i test !!! :vai: