Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: Problemi ciclo while

  1. #1

    Problemi ciclo while

    Sto uscendo pazzo.. davvero..
    sono due giorni che cerco di capire dove sia l'errore che ho commesso in una pagina.. ma non riesco a trovarlo..

    vi riporto qui il codice base:

    Codice PHP:
    <?php
    error_reporting
    (E_ALL);
    #dati del db
    $hostname="censured";
    $username="censured";
    $password="censured";
    $database="censured";
    #connessione al db
    $db_conn=@mysql_connect($hostname,$username,$password) OR die("Impossibile stabilire il collegamento!");
    $db_select=@mysql_select_db($database,$db_conn) OR die("Impossibile selezionare il database!");
    #query per selezionare i map.sql da importare
    $sql="SELECT * FROM `server` WHERE 1";
    $result=@mysql_query($sql) OR die("Impossibile selezionare i record dalla tabella [b]server[/b]");
    #ciclo while
    while ($row=mysql_fetch_assoc($result)) {
        
    #importazione del map.sql
        
    system("wget [url]http://[/url]{$row['indirizzo']}/map.sql -O maps/map.sql");
        
    #controllo sulla riuscita dell'operazione
        
    if (file_exists("maps/map.sql") AND filesize("maps/map.sql")) {
            
    #apertura del map.sql in lettura e scrittura
            
    $handle=fopen("maps/map.sql","r+");
            
    #lettura dei contenuti del map.sql
            
    $contents=fread($handle,filesize("maps/map.sql"));
            
    #modifica della tabella di destinazione
            
    $new=str_replace("INSERT INTO `x_world`","INSERT INTO `{$row['abbreviazione']}_world`",$contents);
            
    #chiusura del file
            
    fclose($handle);
            
    #cancellazione del file map.sql temporaneo
            
    unlink("maps/map.sql");
            
    #creazione del nuovo map.sql
            
    $handle=fopen("maps/map.sql","w+");
            
    fwrite($handle,$new);
            
    #chiusura del file
            
    fclose($handle);
            
    #svuotamento della tabella di destinazione
            
    $sql"TRUNCATE TABLE `{$row['abbreviazione']}_world`";
            
    $result=@mysql_query($sql) OR die("Impossibile svuotare la tabella!");
            
    #importazione del map.sql
            
    system("mysql --host=$hostname --user=$username --password=$password --default-character-set=utf8 $database < maps/map.sql");
            echo 
    "Aggiornamento del [b]{$row['indirizzo']}[/b] riuscito!";
        } else { 
            echo 
    "Il download è fallito, oppure il file map.sql era vuoto!";
        }
        if (
    file_exists("maps/map.sql")) {
            
    unlink("maps/map.sql");
        }
    }
    ?>
    Ho inserito tanti commenti per permettervi di capire a cosa serve lo script..
    ma ve lo spiego in breve qui..

    La prima parte è per la connessione al DB.
    Dopodiché c'è una query (SELECT * FROM `server` WHERE 1) che seleziona tutti i dati contenuti nella tabella server.. sono 4 righe di 3 colonne che hanno la seguente struttura:
    id|indirizzo|abbreviazione
    e.g.:
    1|s3.travian.it|it3

    Dopo trasferisco i record nel'array $row, ed inizio l'importazione del file richiesto (http://{$row['indirizzo']}/map.sql) tramite wget.
    Dopo aver effettuato il controllo (tramite if) sull'effettiva importazione del file procedo ad aprire lo stesso in modalità r (lettura), lo leggo tramite fread e ne trasferisco il contenuto nella variabile $contents. Effettuo uno str_replace sostituendo alla dicitura standard INSERT INTO `x_world`quella che mi serve, e cioè INSERT INTO `{$row['abbreviazione']}_world`.
    Chiudo il file, e lo cancello tramite unlink.
    Ora creo quel file che avevo precedentemente eliminato tramite fopen in modalità w (scrittura) e lo riempio con la variabile $new (contenente il risultato della str_replace precedente); poi chiudo il file.

    Ora tocca all'importazione di quei dati nel database. Essendo un aggiornamento devo svuotare la tabella di destinazione (TRUNCATE TABLE `{$row['abbreviazione']}_world`) dopodiché tramite la funzione system importo il map.sql nel database e stampo a video la stringa "Aggiornamento del {$row['indirizzo']} riuscito!".
    Finita l'importazione elimino il file, se esistente, tramite unlink.

    Ecco spiegato il funzionamento.. questo procedimento dovrebbe essere svolto tante volte quante quella delle righe presenti nella tabella server.. che sono 4..
    ma quando vado ad eseguire lo script mi esegue il ciclo solo una volta..

    p.s.: error_reporting settato a 6135 cosa fa? non l'avevo mai sentito impostato così.. :S

    Grazie mille per l'aiuto che spero mi darete..

  2. #2
    Codice PHP:
    <?php
    error_reporting
    (E_ALL);
    #dati del db
    $hostname="censured";
    $username="censured";
    $password="censured";
    $database="censured";
    #connessione al db
    $db_conn=@mysql_connect($hostname,$username,$password) OR die("Impossibile stabilire il collegamento!");
    $db_select=@mysql_select_db($database,$db_conn) OR die("Impossibile selezionare il database!");
    #query per selezionare i map.sql da importare
    $sql="SELECT * FROM `server` WHERE 1";
    $result=@mysql_query($sql) OR die("Impossibile selezionare i record dalla tabella [b]server[/b]");
    #ciclo while
    while ($row=mysql_fetch_assoc($result)) {
        
    #importazione del map.sql
        
        
    system("wget [url=".'http://'."][url]http://[/url][/url]{$row['indirizzo']}/map.sql -O maps/map.sql");
        
    #controllo sulla riuscita dell'operazione
        
    if (file_exists("maps/map.sql") AND filesize("maps/map.sql")) {
            
    #apertura del map.sql in lettura e scrittura
            
    $handle=fopen("maps/map.sql","r+");
            
    #lettura dei contenuti del map.sql
            
    $contents=fread($handle,filesize("maps/map.sql"));
            
    #modifica della tabella di destinazione
            
    $new=str_replace("INSERT INTO `x_world`","INSERT INTO `{$row['abbreviazione']}_world`",$contents);
            
    #chiusura del file
            
    fclose($handle);
            
    #cancellazione del file map.sql temporaneo
            
    unlink("maps/map.sql");
            
    #creazione del nuovo map.sql
            
    $handle=fopen("maps/map.sql","w+");
            
    fwrite($handle,$new);
            
    #chiusura del file
            
    fclose($handle);
            
    #svuotamento della tabella di destinazione
            
    $sql"TRUNCATE TABLE `{$row['abbreviazione']}_world`";
            
    $result=@mysql_query($sql) OR die("Impossibile svuotare la tabella!");
            
    #importazione del map.sql
            
    system("mysql --host=$hostname --user=$username --password=$password --default-character-set=utf8 $database < maps/map.sql");
            echo 
    "Aggiornamento del [b]{$row['indirizzo']}[/b] riuscito!";
        } else {
            echo 
    "Il download è fallito, oppure il file map.sql era vuoto!";
        }
        if (
    file_exists("maps/map.sql")) {
            
    unlink("maps/map.sql");
        }
    }
    ?>

  3. #3
    ma che c'entra? XD quello è stato il forum che ha formattato in quel modo barbaro quel link.. :P
    il problema non è il wget.. che ho detto già che FUNZIONA... :P

  4. #4
    ah ok scusa pensavo che era presente un errore di sintassi

  5. #5
    Originariamente inviato da tarakekko
    ah ok scusa pensavo che era presente un errore di sintassi
    No problem la sintassi è giusta ^^

  6. #6
    Così su 2 piedi io inizierei con un pò di debug del tipo
    Codice PHP:
    echo mysql_num_rows($result); 
    e poi eviterei, almeno nella fase di debug, di utilizzare lo stesso nome per il file .sql, non so aggiungici un contatore che incrementi ad ogni ciclo, evita di cancellare il file e così verifichi se sono stati importati x files quante sono le righe interessate.

    PS. WHERE 1 nella query a che ti serve?

  7. #7
    Originariamente inviato da cubalibre810
    Così su 2 piedi io inizierei con un pò di debug del tipo
    Codice PHP:
    echo mysql_num_rows($result); 
    nonh o scritto tutte le prove che ho fatto.. comunque ho già provato e mi dà il giusto valore: 4.

    e poi eviterei, almeno nella fase di debug, di utilizzare lo stesso nome per il file .sql, non so aggiungici un contatore che incrementi ad ogni ciclo, evita di cancellare il file e così verifichi se sono stati importati x files quante sono le righe interessate.
    ^_^ ok aggiugno $row['abbreviazione'] nel nome del file

    PS. WHERE 1 nella query a che ti serve?
    lo metto sempre quando non ho clausole WHERE da rispettare.. sapevo che era la sintassi giusta.. sbaglio?

  8. #8
    Che io sappia se non ti serve ottenere delle righe in particolare il WHERE non lo metti, non è obbligatorio

    The WHERE clause, if given, indicates the condition or conditions that rows must satisfy to be selected. where_condition is an expression that evaluates to true for each row to be selected. The statement selects all rows if there is no WHERE clause

  9. #9

  10. #10
    inizio illustrandovi la struttura della tabella server:

    1|s2.travian.it|it2
    2|s3.travian.it|it3
    3|s4.travian.it|it4
    4|s5.travian.it|it5

    comunque ho provato cambiando il nome del file..
    Codice PHP:
    <?php
    error_reporting
    (E_ALL);
    #dati del db
    $hostname="censured";
    $username="censured";
    $password="censured";
    $database="censured";
    #connessione al db
    $db_conn=@mysql_connect($hostname,$username,$password) OR die("Impossibile stabilire il collegamento!");
    $db_select=@mysql_select_db($database,$db_conn) OR die("Impossibile selezionare il database!");
    #query per selezionare i map.sql da importare
    $sql="SELECT * FROM `server`";
    $result=@mysql_query($sql) OR die("Impossibile selezionare i record dalla tabella [b]server[/b]");
    #ciclo while
    while ($row=mysql_fetch_assoc($result)) {
        
    #importazione del map.sql
        
    system("wget [url]http://[/url]{$row['indirizzo']}/map.sql -O maps/map.sql");
        
    #controllo sulla riuscita dell'operazione
        
    if (file_exists("maps/map.sql") AND filesize("maps/map.sql")) {
            
    #apertura del map.sql in lettura e scrittura
            
    $handle=fopen("maps/map.sql","r");
            
    #lettura dei contenuti del map.sql
            
    $contents=fread($handle,filesize("maps/map.sql"));
            
    #modifica della tabella di destinazione
            
    $new=str_replace("INSERT INTO `x_world`","INSERT INTO `{$row['abbreviazione']}_world`",$contents);
            
    #chiusura del file
            
    fclose($handle);
            
    #cancellazione del file map.sql temporaneo
            
    unlink("maps/map.sql");
            
    #creazione del nuovo map.sql
            
    $handle=fopen("maps/{$row['abbreviazione']}.sql","w");
            
    fwrite($handle,$new);
            
    #chiusura del file
            
    fclose($handle);
            
    #svuotamento della tabella di destinazione
            
    $sql"TRUNCATE TABLE `{$row['abbreviazione']}_world`";
            
    $result=@mysql_query($sql) OR die("Impossibile svuotare la tabella!");
            
    #importazione del map.sql
            
    system("mysql --host=$hostname --user=$username --password=$password --default-character-set=utf8 $database < maps/{$row['abbreviazione']}p.sql");
            echo 
    "Aggiornamento del [b]{$row['indirizzo']}[/b] riuscito!";
        } else { 
            echo 
    "Il download è fallito, oppure il file map.sql era vuoto!";
        }
    }
    ?>
    ma nella cartella maps c'è solamente it2.sql, a video viene stampato solo "Aggiornamento del s2.travian.it riuscito!" e nel database viene aggiornata solo la tabella it2_world

    quindi.. il ciclo viene eseguito una sola volta..
    se mi rispondete a questa domanda forse so il motivo per cui fa così..
    error_reporting settato su 6135 cosa comporta?

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.