Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Ciclo blocca il pc

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    148

    Ciclo blocca il pc

    Ciao a tutti,
    ho due tabelle, una con i risultati, e una con i percorsi delle immagini dei risultati.
    la tabella delle immagini è collegata alla tabella dei risultati con un campo id.

    La query è questa:
    codice:
    SELECT Immobili.Tipo, Immobili.Comune, Immobili.Acquisto, Immobili.Prezzo, Immobili.Descrizione, Immobili.Data_ins, Immobili.Superficie, Immobili.Camere, Immobili.Giardino, Immobili.Terrazza, Immobili.ID, Immobili.Box, Immobili.Piano, Immobili.Cucina, Immobili.Riscaldamento, Immobili.Bagni, Immagini.Id_Immobili, Immagini.Percorso, Immagini.Flag FROM Immobili JOIN Immagini ON Immobili.ID = Immagini.Id_Immobili  WHERE Immobili.ID = '$id'
    Inizializzo il tutto con:
    Codice PHP:
    $risultato mysql_query($query) or die(mysql_error());
    $q_contatore "UPDATE Immobili SET Contatore=Contatore+1 WHERE ID='$id'";
    $ris_contatore mysql_query($q_contatore);
    $array_dettagli mysql_fetch_assoc($risultato); 
    Tutto bene, solo che devo visualizzare le immagini, e dato che per ogni record possono corrispondere più immagini ho fatto un ciclo:
    Codice PHP:
    while ($array_dettagli['Percorso']) {
                        echo 
    "<div class=\"box_thumb\">";
                        echo 
    "<a><img onmouseover=\"this.style.cursor='pointer'\" src=\"Img/thumb.php?im="$array_dettagli['Percorso'] ."&maxsize=120\" height=\"73\" alt=\"anteprima foto\" onclick='setCurrent(0)'/></a>";
                        echo 
    "</div>"
    Ma evidentemente è sbagliato, mi blocca il browser ed il pc.
    Come posso fare per visualizzare tutte le immagini?
    Grazie

  2. #2
    Ciao,
    il browser ti si blocca semplicamente perchè il ciclo while che hai creato non ha mai fine, questo perchè $array_dettagli['Percorso'] risulta sempre true.
    La funzione mysql_fetch_assoc restituisce un solo record per volta, quindi va valorizzato ogni volta, credo che con l'esempio seguente capirai.

    $risultato = mysql_query($query) or die(mysql_error());
    $q_contatore = "UPDATE Immobili SET Contatore=Contatore+1 WHERE ID='$id'";
    $ris_contatore = mysql_query($q_contatore);
    while ($array_dettagli = mysql_fetch_assoc($risultato)) {
    echo "<div class=\"box_thumb\">";
    echo "<a><img onmouseover=\"this.style.cursor='pointer'\" src=\"Img/thumb.php?im=". $array_dettagli['Percorso'] ."&maxsize=120\" height=\"73\" alt=\"anteprima foto\" onclick='setCurrent(0)'/></a>";
    echo "</div>";
    }
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    148
    Ti ringrazio, in effetti avevo pensato a fare quello, però il "mysql_fetch_assoc" lo dichiaro prima perchè in mezzo ai pezzi di codice che ho postato ci sono degli echo dei risultati di quell'array, e non sapevo come costruire il ciclo, mi hai fatto notare infatti che fatto così risulta sempre vero e va in loop.
    Allora ho fatto così:
    Codice PHP:
    while ($array_foto mysql_fetch_assoc($risultato)) {
                        echo 
    "<div class=\"box_thumb\">";
                        echo 
    "<a><img onmouseover=\"this.style.cursor='pointer'\" src=\"Img/thumb.php?im="$array_foto['Percorso'] ."&maxsize=120\" height=\"73\" alt=\"anteprima foto\" onclick='setCurrent(0)'/></a>";
                        echo 
    "</div>";
                    } 
    soltanto che in questa maniera non mi prende la prima immagine, infatti se un record ne ha 2 me ne vede una, se ne ha una soltanto non me la vede.
    Però non capisco come mai....
    Ho risolto comunque con do...while , ma proprio non capisco per quale motivo devo dare un do while e non basta un semplice while come negli altri casi!

  4. #4
    Ciao,
    è ovvio che ti parte a stampare dal secondo record se tu dichiari prima l'array, ovvero:
    $array_foto = mysql_fetch_assoc($risultato);

    Per un corretto funzionamento, non lo devi dichiarare prima del while, altrimenti appena lo dichiari ti restituisce il primo record, poi nel while prendi il secondo record.

    Quindi ti basta il ciclo while:
    while ($array_foto = mysql_fetch_assoc($risultato)) {
    echo "<div class=\"box_thumb\">";
    echo "<a><img onmouseover=\"this.style.cursor='pointer'\" src=\"Img/thumb.php?im=". $array_foto['Percorso'] ."&maxsize=120\" height=\"73\" alt=\"anteprima foto\" onclick='setCurrent(0)'/></a>";
    echo "</div>";
    }

    Con il do...while funziona, perchè quando dichiari l'array, prendi il primo record, poi nel ciclo do..while lo stampi e poi viene preso il secondo record e lo stampi.

    Spero di essermi spiegato.
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    148
    Ti ringrazio per la precisazione, ma io creo due array diverse,
    dichiaro all'inizio "$array_dettagli = mysql_fetch_assoc($risultato);"
    in mezzo stampo alcuni risultati di quell'array,
    poi faccio il ciclo:
    Codice PHP:
    while ($array_foto mysql_fetch_assoc($risultato)) { 
                        echo 
    "<div class=\"box_thumb\">"
                        echo 
    "<a><img onmouseover=\"this.style.cursor='pointer'\" src=\"Img/thumb.php?im="$array_foto['Percorso'] ."&maxsize=120\" height=\"73\" alt=\"anteprima foto\" onclick='setCurrent(0)'/></a>"
                        echo 
    "</div>"
    che senza il do...while , non mi stampa il primo risultato.
    E' questo che non capisco...

  6. #6
    Non crei due array diversi, ogni volta che chiami mysql_fetch_assoc($risultato) ti viene restituita una riga della tua query (sotto forma di array): se lo usi una volta prima del ciclo, il ciclo partira' dalla seconda riga.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    148
    Ok, grazie mille per la info.

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