Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074

    ciclo for che da problemi

    Ho due variabili: $over e $quant
    Nel caso in cui sto lavorando, i rispettivi valori sono 1 e 11. Di questo sono certo, perchè faccio un echo sulla pagina.
    Subito dopo, creo un ciclo for, così:
    Codice PHP:
    $strip "";
      
    $start 0;
      for (
    $i 1$i <= $quant$i++) {
      
    $strip .= "<div class=\"panel\">\n";
        
    $result mysql_query("SELECT * FROM `strip` WHERE `id` > '$start' AND `section` = '$section' ORDER BY `ord` ASC LIMIT 3");
        while (
    $row mysql_fetch_array($result)) {
            
    $start $row["id"]; 
            
    $strip .= "<img src=\"images/" $row["small"] . "\" width=\"220\" height=\"110\" />";
        }
        
    $strip .= "</div>\n";
      }
      echo 
    $strip;
    if (
    $over == 1) {
      echo 
    "<div class=\"panel\">\n<img src=\"images/vuoto.jpg\" width=\"220\" height=\"110\" /></div>";

    Il risultato è però totalmente sballato.
    Innanzitutto, vengono creati 12 div panel (non 11!...), e - benchè i record che corrispondono alle condizioni della query interna al ciclo for siano, nel caso specifico, 34 - con soltanto 15 immagini all'interno (3+3+3+3+2+1). Altra stranezza, non viene rispettato l'ordine di sequenza delle immagini, come impostato nella query, ed alcune immagini vengono ripetute più volte...
    Infine - e questo mi lascia stupefatto! - benchè la variabile $over sia uguale a 1, la condizione prevista dall'if relativo viene del tutto ignorata!
    Se, poi, modifico il ciclo for in questo modo:
    Codice PHP:
    for ($i 1$i == $quant$i++) { 
    ... 

    il ciclo stesso viene del tutto ignorato, mentre viene stampata la condizione prevista dall'if!!!
    Ma che succede, sono diventato cieco e stupido, che non vedo/non capisco qualcosa di un'evidenza assoluta???
    Perchè io proprio non riesco a venirne a capo!
    metatad
    graphic & web design

  2. #2
    guardando la query direi che hai un errore di forma su where ed order by su quanto vuoi ottenere:

    codice:
    WHERE `id` > '$start' 
    AND `section` = '$section' 
    ORDER BY `ord` ASC 
    LIMIT 3
    tu fai una ricerca su degli id > $start e quindi puoi trovare nn record con id superiori a $start.
    questi nn record li ordini secondo un campo ord con contenuto non conosciuto a chi legge.

    Quindi non e' detto che i record ricevuti con limit 3 siano ordinati anche come id. Poi tu trasferisci l'ultimo id della serie di tre ordinati secondo ord nella variabile $start che userai nella query successiva. Nulla vieta che l'ultimo id della serie ordinata secondo ord sia minore di uno o piu' id precedenti gia' estratti. In pratica dovresti ordinarli per id e non per ord se vuoi seguire la sequenza degli id.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Giusta osservazione!
    C'erano anche un'altra serie di problemi, come dicevo nel post, comunque alla fine ho risolto cambiando completamente soluzione...
    Grazie!
    metatad
    graphic & web design

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.