Visualizzazione risultati 1 fino 7 di 7

Discussione: Generare numeri casuali che non siano mai uguali

  1. #1
    Guest

    Predefinito Generare numeri casuali che non siano mai uguali

    Hola, durante un processo di upload di file ho la necessità di dare ad essi un nome di 16 numeri random e vorrei far in modo che non ci sia il problema che vengano generati gli stessi numeri già esistenti (ad esempio genero 115531232123123 (non ho contato le cifre) e carico un' immagine con quel nome, dopo ne carico un' altra e devo controllare che la stringa di numeri generati non sia uguale a quella già esistente scritta prima). Ok, è quasi impropabile che 16 numeri random capitino uguali, ma sempre meglio prevenire..

    Se creo uno script così:
    Codice PHP:
    $generato = random(1,15); // Esempio, non metto lo script per le 16 cifre
    if(mysql_num_rows(mysql_query("SELECT * FROM table WHERE generato='$generato'")) == 0) {
    // Le operazioni
    } else {
    $generato = random(1,15); // Esempio, non metto lo script per le 16 cifre
    }
    Il controllo avviene solo la prima volta, quindi se al rigeneramento dei numeri (dopo aver controllato che esista già) viene generata un' altra cifra già presente, non c'è il controllo..

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Devi usare un loop, in questo caso è più adatto un while:
    Codice PHP:
    $generato = random(1,15); // metti la funzione per le 16 cifre

    while(mysql_num_rows(mysql_query("SELECT * FROM table WHERE generato = $generato"))) { // genera un altro codice
    $generato = random(1,15); // metti la funzione per le 16 cifre
    }

    // il resto a te...

  3. #3
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,246

    Predefinito

    prova in questo modo:

    Codice PHP:
    <?php
    while(mysql_num_rows(mysql_query("SELECT * FROM table WHERE generato='".($generato = genera_numero())."'")) != 0);
    //puoi usare $generato
    ?>
    Ciao!

    EDIT: anticipato

  4. #4
    Guest

    Predefinito

    javascript non hai dimenticato != 0 nel while?

    Comunque grazie ad entrambi, ora però mi serve lo script per generare 16 cifre.. :S

    Conoscete un modo?

  5. #5
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da mybeatnews Visualizza messaggio
    javascript non hai dimenticato != 0 nel while?
    Dimenticato? No, non c'è bisogno.
    != 0/false e == 1/true (quest'ultimo è sottointeso quando lo si omette) sono la stessa cosa...

    Citazione Originalmente inviato da mybeatnews Visualizza messaggio
    Comunque grazie ad entrambi, ora però mi serve lo script per generare 16 cifre.. :S

    Conoscete un modo?
    Qualcosa di simile dovrebbe andare bene:
    Codice PHP:
    function codice() {
    $nums = '0123456789';
    // $len = 10; // = strlen($nums)
    $s = '';

    for(
    $i = 0; $i < 16; $i++) {
    $s .= $nums[rand() % 10]; // = rand() % $len
    }

    return
    $s;
    }

    $generato = codice(); // qui hai il codice di 16 cifre

  6. #6
    Guest

    Predefinito

    Ok grazie mille ^^

    Quindi il codice finale dovrebbe esser così?


    Codice PHP:
    function codice() {
    $nums = '0123456789';
    // $len = 10; // = strlen($nums)
    $s = '';

    for(
    $i = 0; $i < 16; $i++) {
    $s .= $nums[rand() % 10]; // = rand() % $len
    }

    return
    $s;
    }

    $generato = codice(); // qui hai il codice di 16 cifre
    $link_avatar = $generato.".jpg";

    while(
    mysql_num_rows(mysql_query("SELECT * FROM users WHERE avatar='$link_avatar'"))) { // genera un altro codice
    $generato = codice();
    $link_avatar = $generato.".jpg";
    }

    $estensioni = array('image/png','image/jpeg','image/jpg','image/gif');
    if(isset(
    $_POST['caricato'])) {
    if(isset(
    $_FILES['image']) && in_array($_FILES['image']['type'])) {
    define("UPLOAD_DIR", "./photos/");
    $file = $_FILES['image'];
    if(
    $file['error'] == UPLOAD_ERR_OK and is_uploaded_file($file['tmp_name'])) {
    move_uploaded_file($file['tmp_name'], UPLOAD_DIR.$link_avatar);
    mysql_query("UPDATE users SET avatar='$link_avatar' WHERE nome='$nome' AND cognome='$cognome'");

    echo
    '<span style="font-weight: bold;">Immagine caricata correttamente.</span><br /><br /><img src="images/loading.gif" /><meta http-equiv="refresh" content="3; URL=index.php" />';
    }
    } else {
    echo
    '<span style=" font-weight: bold;">Errore: File vuoto o estensione non valida.</span><br /><br /><img src="images/loading.gif" /><meta http-equiv="refresh" content="3; URL=index.php" />';
    }
    }
    Ultima modifica di mybeatnews : 31-07-2011 alle ore 17.14.23

  7. #7
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da mybeatnews Visualizza messaggio
    Ok grazie mille ^^

    Quindi il codice finale dovrebbe esser così?
    [...]
    Non mi sembra contenere errori. Provalo, se funziona vuol dire che dovrebbe esser così ;)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •