Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Ripetere azione

  1. #1

    Ripetere azione

    ciao a tutti, ho un problema con una funzione (vorrei utilizzare il metodo ad oggetti):

    Codice PHP:
    public function check() {
            
                
    $exists =  mysql_query("SELECT * FROM _utente WHERE x = $this->x AND y = $this->y LIMIT 1");

                if ( 
    mysql_num_rows $exists ) == ) {
                    
                    return 
    true;
                
                } else {
                
                    return 
    false;
                }
            
            } 
    Ho pensato di usare un ciclo for. In brevi parole, vorrei che la funzione si ripetesse fino a quando la funzione check() non ritorni false. Ovviamente X e Y sono state dichiarate. Quindi ho cercato di fare così:

    Codice PHP:
    public function set() {
            
                for ( 
    $this->check(); $this->check() > 0$this->rand(910), $this->rand(910) ) {
                
                    echo 
    "È false

    "
    ;
                    break;
                
                }
                
            } 
    Il codice funzione ma il problema è che l'azione si ripete solo una volta, se check() = 0, se > 0 e non metto break, si ripete all'infinito, ovviamente.
    Quindi vorrei fare in modo che X e Y cambino ogni volta che check() ritorno true. C'è un modo alternativo? Ho cercato su google ma non trovo niente a riguardo

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,509
    Questo è il classico caso in cui si DEVE usare il while, non il for.
    Inoltre, alla funzione check() devi anche passargli il valore da controllare come argomento.

    Codice PHP:
    public function check($x,$y
    {
        
    $exists =  mysql_query("SELECT * FROM _utente WHERE x = $x AND y = $y LIMIT 1");

        if ( 
    mysql_num_rows $exists ) == )
        {
            return 
    true;
        } 
        else
        {
            return 
    false;
        }

    Codice PHP:
    public function set()
    {
        
    $this->rand(910);
        
    $this->rand(910);
        
        while ( 
    $this->check$this->x$this->) == TRUE )
        {
            
    $this->rand(910);
            
    $this->rand(910);
        }

        echo 
    "È false

    "
    ;

    Questo ovviamente va in loop se nel DB hai già tutte le combinazioni possibili (4 combinazioni con i valori che hai previsto per x ed y), ma per il resto dovrebbe funzionare.

    Altra cosa: i campi x ed y devono essere dichiarati come INT nel DB, altrimenti devi metterci gli apici attorno a $x ed $y

  3. #3
    Ho capito il codice, quindi while ripete il ciclo fino a che la condizione $this->check( $this->x, $this->y ) sia vera, ma per eseguire un codice quando il ciclo while è falso, devo scriverlo dentro il while oppure devo usare il ciclo do-while? grazie per l'aiuto!

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,509
    Per eseguire il ciclo finché è falso, basta mettere FALSE al posto di TRUE

  5. #5
    Non mi sono spiegato bene, scusa, io ho la funzione check() e vorrei portare questa funzione a false, perché mi indica che non esiste nessun utente con gli x y indicati in random. Ma mettiamo il caso che il random mi dia x=10 e y=10 e che ci sia già un utente con x=10 e y=10, utilizzo while per far diventare, per esempio, x=9 e y=10 (e verificare che questa condizione sia comunque false) quando ho raggiunto dei valori univoci, come faccio a passare i valori x y ad un'altra funzione oppure continuare con il codice, quando x e y sono univoci?

    grazie!

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,509
    Quando il codice esce dal while che ti ho scritto puoi usare i valori di $this->x e $this->y, saranno i valori che nel DB non ci sono.

  7. #7
    grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie grazie

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 © 2026 vBulletin Solutions, Inc. All rights reserved.