Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 31
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    61

    generare un numero casuale,confrontarlo sul database, rigenerarlo di nuovo

    ciao a tutti non riesco a venirne a capo

    allora devo :
    generare un numero;
    confrontarlo sul database;
    se non esiste lo scrivo;
    altrimenti rigenero un numero e cosi via

    stavo facendo cosi

    Codice PHP:
    $varrand(1100);

    $query mysql_query("SELECT code FROM tabella WHERE code='$var'");
    $lista mysql_num_rows($query); 
    if(
    $lista!=0){
    $varrand(1100);
    ####MA QUI SE HO GENERATO UN ALTRO NUMERO CHE GIà ESISTE DI NUOVO?????

    come potrei ovviare?


    dovrei fare tipo un ciclo che genera in automatico finchè la lista è = a 0....ma non saprei come strutturarlo

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Metti tutto dentro un ciclo while e termina il ciclo se viene effettuato l'inserimento nel db.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    61
    non ho mai fatto un ciclo while puoi farmi un esempio per favore?

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Aggiungo: per non rischiare di fare un'infinità di query fa una select prendendo tutti i numeri nel db e mettili in un array, il confronto tra il numero generato casualmente e quelli già estratti in precedenza lo fai controllando nell'array con la funzione in_array().

    Se devi scegliere fra tot numeri e nel db ne hai già una quasi tutti i numeri inseriti ci potrebbero volere un bel po' di cicli per tirare uno dei numeri mancanti.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    61
    neanche in_array conosco puoi farmi degli esempi pratici?
    Grazie

  6. #6
    dovresti creare una funzione ricorsiva... Nel tuo caso
    Codice PHP:
    function isset_number($number){
        
    $result mysql_query("SELECT code FROM tabella WHERE code='$var'");
        return (bool) 
    mysql_num_rows($result);
        }

    function 
    insert_new_number(){
        
    $number rand(1100);
        if(!
    isset_number($number))
            {
            
    // query insert
            
    }
        else{
            
    insert_new_number();
            }
        }

    insert_new_number() 
    però ATTENZIONE:
    rand(1, 100);
    ti va a generare un numero tra 1 e 100.
    Poniamo che hai 100 record e il campo "code" abbia già tutti i valori da 1-100 presenti.

    Di conseguenza la funzione ricorsiva andrebbe in loop: continuerà a cercare (potenzialmente all'infinito) un numero casuale tra 1 e 100 non presente nella tabella senza mai trovarlo!!

    Ti porgo una domanda: cosa devi fare in pratica?
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Codice PHP:
    $query "SELECT code FROM tabella";
    $result mysql_query($query); //ho preso tutti i numeri nella tabella

    $numeri = array(); //conterrà i numeri presenti nel db
    while($row mysql_fetch_assoc($result)) //finché ci sono record provenienti dalla query precedente
    {
        
    $numeri[] = $row['code']; //alla fine del ciclo, dentro $numeri ci saranno i numeri presenti nel db
    }

    $inserito false;
    while(!
    $inserito)
    {
        
    $numero rand(1,100);
        if(!
    in_array($numero,$numeri))
        {
            
    $query "INSERT INTO tabella (code) VALUES ($numero)";
            
    $mysql_query($query);
            
    $inserito true;
        }


  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ottima osservazione da parte di oly, puoi ovviare vedendo quanti risultati ti restituisce la mia prima query, ad esempio:

    Codice PHP:
    if(mysql_num_rows($result) < 100)
    {
        
    //il codice da $numeri = array() in poi
    }
    else
    {
        echo 
    "Nel db ci sono già tutti i valori possibili";


  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    61
    Originariamente inviato da oly1982

    Ti porgo una domanda: cosa devi fare in pratica?
    una specie di tombola online


    cmq ora provo le vostre soluzione

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    61
    ho provato sono due soluzioni molto utili, il problema e che devo verificare 3 numeri non uno.
    Scusate mi sono accorto ora dell'errore

    Cerco di spiegarmi meglio

    -Genero 3 numeri, $a , $b e $c;
    -Controllo sul database nel campo "numero1" e "numero2" e "numero3" che non sono già presenti nel rispettivo ordine;

    - se non ci sono li inserisco.


    col metodo di Alhazred ho provato a fare cosi:
    Codice PHP:
    <?php

     
    require_once('Connections/connessione.php');
     
    $query "SELECT numero1,numero2,numero3 FROM tabella"
    $result mysql_query($query); //ho preso tutti i numeri nella tabella 


        //il codice da $numeri = array() in poi 
        
        
    $numeri1= array();
    $numeri2 = array();
    $numeri3 = array(); //conterrà i numeri presenti nel db 
    while($row mysql_fetch_assoc($result)) //finché ci sono record provenienti dalla query precedente 

        
    $numeri1[] = $row['galassia']; 
        
    $numeri2[] = $row['sistema_solare'];
        
    $numeri3[] = $row['posizione'];  //alla fine del ciclo, dentro $numeri ci saranno i numeri presenti nel db 


    $inserito false
    while(!
    $inserito

        
    $numero_1 rand(1,10);
        
    $numero_2 rand(1,10); 
        
    $numero_3 rand(1,10);
        if((!
    in_array($numero_1,$numeri1))and(!in_array($numero_2,$numeri2))and(!in_array($numero_3,$numeri3)) ) 
        { 
        
            
    $query "INSERT INTO tabella(numero1,numero2,numero3) VALUES ('$numero_1,'$numero_2','$numero_3')"
            
    mysql_query($query); 
            
    $inserito true
                echo 
    "Inserito"
                
        } 
    }






    ?>
    mi inserisce i dati ma dopo un po' mi va in loop,
    mentre l'altro metodo di oly purtroppo non ho dimestichezza con le funzioni non so neanche dove inserirlo :-(

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.