Visualizzazione risultati 1 fino 14 di 14

Discussione: [PHP + SQL] Caricare molteplici record intabellati su una riga...

  1. #1
    Guest

    Predefinito [PHP + SQL] Caricare molteplici record intabellati su una riga...

    Premetto che mi sento male, quindi non mi ritengo responsabile per tutto ciò che leggerete in questo topic e, soprattutto, nel codice PHP (e ci vuole un bel coraggio ^^).

    Sto creando una pagina che carichi dal database dei records, ovverosia i prodotto disponibili nel catalogo del sito. Per fare ciò mi sono servito di un ciclo while. Dopodiché il codice calcola il numero di record presenti nel database e si comporta di conseguenza suddividendo il catalogo in molteplici pagine mediante un semplice if.
    Il problema (almeno per il momento ) sta nel caricamento delle righe dal database.
    Ogni pagina del catalogo deve dare in output 25 prodotti, dividendoli secondo una tabella 5x5. Ovviamente in ogni cella deve inserire un diverso prodotto preso dal database. Invece, per ogni riga, mi da, mano a mano, tutti i risultati che trova nel database. Tanto per fare un esempio, se in database ho i prodotti "Occhiali da sole" e "Schiuma da barba", vedo sulla prima riga "Occhiali da sole" ripetuto 5 volte e sulla successiva "Schiuma da barba" con lo stesso giochino.
    Premetto anche che il sito è ancora in locale
    Qui di seguito posto il codice:

    Codice:
    if (!isset($start) OR $start < 0) {
      $start = 0;
      $step = 25;
    }
    
    $connect = mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die("Impossibile stabilire una connessione al database SQL");
    $database = mysql_select_db($mysql_data);
    $query = mysql_query("SELECT * FROM prodotti ORDER BY id ASC");
    echo "<table class=\"content\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\">\n";
    while ($riga = mysql_fetch_array($query, MYSQL_ASSOC)) {
      echo "<tr><td class=\"prodotto_menu\">";
      if ($start > 0) {
        $start_back = $start - $step;
        $query_tot = mysql_query("SELECT count(*) AS tot FROM prodotti");
        $row = mysql_fetch_array($query_tot);
        $pages = intval(($row[tot] - 1) / $step) + 1;
        for ($i = 0; $i < $pages AND $i < $step; $i++) {
    	  $start_page = $i * $step;
    	  echo "<a href=\"./prodotti.php?start=$start_page\">" . ($i + 1) . "</a> ";
    	}
      }
      echo "</td></tr>\n<tr>";
      for ($i = 0; $i < 5; $i++) {
        echo "<td class=\"prodotto_noid\"><table class=\"prodotto_noid\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\">\n<tr><td class=\"prodotto_noid_img\"><a href=\"./view.php?id=$riga[id]\"><img src=\"./images/prodotti/$riga[id].jpg\"class=\"prodotto_img_reduc\" title=\"$riga[prodotto]\" alt=\"$riga[prodotto]\" /></a><br /><a href=\"./prodotti.php?id=$riga[id]\" class=\"noid\">$riga[prodotto]</a></td></tr>\n<tr><td class=\"prodotto_noid_prezzo\">$riga[prezzo] &euro;</td></tr>\n<tr><td class=\"prodotto_noid_descbreve\">$riga[descbreve]</td></tr>\n</table></td>";
     }
     echo "</tr>\n<tr><td class=\"prodotto_menu\">";
     if ($start > 0) {
       $start_back = $start - $step;
       $query_tot = mysql_query("SELECT count(*) AS tot FROM prodotti");
       $row = mysql_fetch_array($query_tot);
       $pages = intval(($row[tot] - 1) / $step) + 1;
       for ($i = 0; $i < $pages AND $i < $step; $i++) {
         $start_page = $i * $step;
         echo "<a href=\"./prodotti.php?start=$start_page\">" . ($i + 1) . "</a>";
    	}
       echo "</td></tr>\n</table>";
     }
    }
    Magari la soluzione è semplicissima, sotto il naso, però, in tutta sincerità, non riesco proprio a capire dove infilare certe porzioni di codice (quello delle pagine l'ho adattato da quanto trovato su FreePHP.it...).

    Ringrazio anticipatamente
    Ciao!

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Provo a correggerti un po' il codice:
    Codice:
    if (!isset($start) OR $start < 0) {
      $start = 0;
      $step = 25;
    }
    
    // queste le hai impostate come variabili più sopra, vero?
    $connect = mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die("Impossibile stabilire una connessione al database SQL");
    $database = mysql_select_db($mysql_data);
    $query = mysql_query("SELECT * FROM prodotti ORDER BY id ASC");
    echo "<table class=\"content\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\">\n";
    while ($riga = mysql_fetch_array($query, MYSQL_ASSOC)) {
      echo "<tr><td class=\"prodotto_menu\">";
      if ($start > 0) {
        $start_back = $start - $step;
        $query_tot = mysql_query("SELECT count(*) AS tot FROM prodotti");
        $row = mysql_fetch_array($query_tot);
        $pages = intval(($row[tot] - 1) / $step) + 1;
        for ($i = 0; $i < $pages AND $i < $step; $i++) {
    	  $start_page = $i * $step;
    	  echo "<a href=\"./prodotti.php?start=$start_page\">" . ($i + 1) . "</a> ";
    	}
      }
      echo "</td></tr>\n<tr>";
      // questa proprio non l'ho capita: è qui che stampi 5 volte la stessa cosa!
      for ($i = 0; $i < 5; $i++) {
        echo "<td class=\"prodotto_noid\"><table class=\"prodotto_noid\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\">\n<tr><td class=\"prodotto_noid_img\"><a href=\"./view.php?id=$riga[id]\"><img src=\"./images/prodotti/$riga[id].jpg\"class=\"prodotto_img_reduc\" title=\"$riga[prodotto]\" alt=\"$riga[prodotto]\" /></a><br /><a href=\"./prodotti.php?id=$riga[id]\" class=\"noid\">$riga[prodotto]</a></td></tr>\n<tr><td class=\"prodotto_noid_prezzo\">$riga[prezzo] &euro;</td></tr>\n<tr><td class=\"prodotto_noid_descbreve\">$riga[descbreve]</td></tr>\n</table></td>";
     }
     echo "</tr>\n<tr><td class=\"prodotto_menu\">";
     if ($start > 0) {
       $start_back = $start - $step;
       $query_tot = mysql_query("SELECT count(*) AS tot FROM prodotti");
       $row = mysql_fetch_array($query_tot);
       $pages = intval(($row[tot] - 1) / $step) + 1;
       for ($i = 0; $i < $pages AND $i < $step; $i++) {
         $start_page = $i * $step;
         echo "<a href=\"./prodotti.php?start=$start_page\">" . ($i + 1) . "</a>";
    	}
       echo "</td></tr>\n</table>";
     }
    }
    Ti propongo questa soluzione, decisamente più snella nel codice e che fa quello che chiedi (così vedo se ho anche capito quello che la tua pagina dovrebbe fare):
    Codice PHP:
    // questa è l'unica query che dovrai eseguire
    $query = "SELECT * FROM prodotti ORDER BY id ASC";
    // eseguila...
    $result = mysql_query ($query, $connect);
    // per prima cosa, prepara i link alle altre pagine del catalogo...
    $nr = mysql_num_rows ($result);
    $pages = intval (($nr - 1) / $step) + 1;
    $linkCode = '<table class="content" align="center" cellspacing="0" cellpadding="0"><tr><td>Salta alla pagina:</td>';
    for (
    $i = 0; $i < $pages; $i++)
    $linkCode .= '<td><a href="prodotti.php?start=' . ($i * $step) . '">' . ($i + 1) . '</a></td>';
    $linkCode .= '</tr></table>';
    // ... e stampali la prima volta PRIMA dei prodotti
    echo ($linkCode);
    // questa qui serve per contare le nuove righe da generare... :-D
    $count = 0;
    // adesso preleva e stampa i dati dalla query, iniziando dal primo record
    // e finendo quando non c'è più niente da stampare o hai esaurito i (25) prodotti
    echo ('<table class="content" align="center" cellspacing="0" cellpadding="0">');
    // piccola modifica al codice precedente (really sorry... ;-( )
    for ($i = $start; $i < $start + $step && $i < $nr; $i++)
    {
    if (
    $count == 0)
    echo (
    '<tr>');
    echo (
    '<td class="prodotto_noid"><table class="prodotto_noid" align="center" cellspacing="0" cellpadding="0"><tr><td class="prodotto_noid_img"><a href="view.php?id=' . $result[$i]['id'] . '"><img src="images/prodotti/' . $result[$i]['id'] . '.jpg" class="prodotto_img_reduc" title="' . $result[$i]['prodotto'] . '" alt="' . $result[$i]['prodotto'] . '" /></a><br /><a href="prodotti.php?id=' . $result[$i]['id'] . '" class="noid">' . $result[$i]['prodotto']. '</a></td></tr><tr><td class="prodotto_noid_prezzo">' . $result[$i]['prezzo'] . ' &euro;</td></tr><tr><td class="prodotto_noid_descbreve">' . $result[$i]['descbreve'] . '</td></tr></table></td>');
    if (++
    $count == 5)
    {
    echo (
    '</tr>');
    $count = 0;
    }
    }
    if (
    $count != 0)
    echo (
    '</tr>');
    echo (
    '</table>');
    // ti ricordi il codice dei link di pagina? ora puoi stamparlo di nuovo...
    echo ($linkCode);
    Spero di averti chiarito le idee... Stammi bene...
    Ultima modifica di dementialsite : 09-03-2006 alle ore 10.54.37
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  3. #3
    Guest

    Predefinito

    Purtroppo non sono abituato a commentare il mio codice, perché sono solito tenere sempre a mente tutto ciò che ho scritto ^^ Mannaggia a me XD

    Le variabili per la connessione sono impostate, quindi perlomeno su quello non ci sono problemi
    Il ciclo for che ho scritto lì, l'ho preso da una discussione precedente qui su Altervista: prima di scrivere mi sono un po' documentato, ho provato questa funzione e mi ha fatto lo scherzetto.
    Tuttavia, ho provato il codice che mi hai postato (grazie mille ) e mi fa uno scherzetto un po' più grande: prova a guardare qui
    C'è qualcosa che non quadra

  4. #4
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Allora ho fatto un po' di correzioni qui sopra:

    - i file erano tutti uguali solo perché avevo dimenticato di incrementare la variabile $i che aveva il compito di contare i dati da inserire (maledetto ciclo while!!!). Adesso quel problema dovrebbe essersi risolto, spero...
    - per quanto riguarda i \n che comparivano, scopro adesso che le stringhe tra apici singoli non riescono ad interpretare nemmeno i codici di escape (quale è \n appunto): io sapevo che le strighe specificate ti consentissero di scrivere il simbolo del dollaro ($), in PHP usato per determinare variabili. Per me era più comodo così, così non devo stare lì a mettere backslash a destra e a manca per far digerire le virgolette doppie del codice HTML, ma appunto sorge questo problema: per questo, da sopra ho tolto questi escape, il codice che ne risulterà sarà più disordinato, ma, in fondo, non dovrebbe importarti più di tanto.

    Prova a vedere se così funziona... se mancano dei pezzi nel codice probabilmente bisogna aggiustare ancora un po' quella storia delle virgolette (quando si scambiano ripetutamente apici singoli e doppi è davvero facile incasinarsi...)

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  5. #5
    Guest

    Predefinito

    C'è qualcosa che continua a non quadrare...
    Ho provato ad assegnare un nome breve alle variabile indicizzate... che so, $id = $result[$i]["id"], sperando che avrei risolto...
    Invece, stavolta, si presenta un problema un po' assurdo...
    Sullo schermo mi appaiono i due campi, ma non c'è l'output di estrazione dal database! Oo

    Posto qui di seguito il codice, leggermente modificato per adattarlo alla situazione (senza far caso ai casini, perché è ancora in una fase di prova ^^)

    Codice:
    // questa è l'unica query che dovrai eseguire
    $query = "SELECT * FROM prodotti ORDER BY id ASC";
    // eseguila...
    $result = mysql_query ($query, $connect);
    // per prima cosa, prepara i link alle altre pagine del catalogo...
    $nr = mysql_num_rows ($result);
    $pages = intval (($nr - 1) / $step) + 1;
    $linkCode = "<table class=\"content\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\">\n<tr><td>Salta alla pagina:</td>";
    for ($i = 0; $i < $pages; $i++)
       $linkCode .= '<td><a href="prodotti.php?start=' . ($i * $step) . '">' . ($i + 1) . '</a></td>';
    $linkCode .= "</tr></table>\n";
    // ... e stampali la prima volta PRIMA dei prodotti
    echo ($linkCode);
    // questa qui serve per contare le nuove righe da generare... :-D
    $count = 0;
    // adesso preleva e stampa i dati dalla query, iniziando dal primo record
    // e finendo quando non c'è più niente da stampare o hai esaurito i (25) prodotti
    echo ('<table class="content" align="center" cellspacing="0" cellpadding="0">');
    // piccola modifica al codice precedente (really sorry... ;-( )
    for ($i = $start; $i < $start + $step && $i < $nr; $i++)
    {
       if ($count == 0)
       	  $id = $result[$i]["id"];
       	  $prodotto = $result[$i]["prodotto"];
       	  $descbreve = $result[$i]["descbreve"];
       	  $prezzo = $result[$i]["prezzo"];
          echo ('<tr>');
          echo "<td class=\"prodotto_noid\"><table class=\"prodotto_noid\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\">\n<tr><td class=\"prodotto_noid_img\"><a href=\"./view.php?id=$id\"><img src=\"./images/prodotti/$id.jpg\" class=\"prodotto_img_reduc\" title=\"$prodotto\" alt=\"$prodotto\" /></a><br /><a href=\"./view.php?id=$id\" class=\"noid\">$prodotto</a></td></tr>\n<tr><td class=\"prodotto_noid_prezzo\">$prezzo &euro;</td></tr>\n<tr><td class=\"prodotto_noid_descbreve\">$descbreve</td></tr></table></td>\n";   
    	  if (++$count == 5)
       {
          echo ('</tr>');
          $count = 0;
       }
    }
    if ($count != 0)
       echo ('</tr>');
    echo ("</table>\n");
    // ti ricordi il codice dei link di pagina? ora puoi stamparlo di nuovo...
    echo ($linkCode);
    Il database lo apre, vede che ci sono due records... però non c'è output. Mi scrive solo € che è inserito, ovviamente, nel codice di base
    Bye!

  6. #6
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Temo che tu abbia sbagliato qui:
    Codice:
    // questa è l'unica query che dovrai eseguire
    $query = "SELECT * FROM prodotti ORDER BY id ASC";
    // eseguila...
    $result = mysql_query ($query, $connect);
    // per prima cosa, prepara i link alle altre pagine del catalogo...
    $nr = mysql_num_rows ($result);
    $pages = intval (($nr - 1) / $step) + 1;
    $linkCode = "<table class=\"content\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\">\n<tr><td>Salta alla pagina:</td>";
    for ($i = 0; $i < $pages; $i++)
       $linkCode .= '<td><a href="prodotti.php?start=' . ($i * $step) . '">' . ($i + 1) . '</a></td>';
    $linkCode .= "</tr></table>\n";
    // ... e stampali la prima volta PRIMA dei prodotti
    echo ($linkCode);
    // questa qui serve per contare le nuove righe da generare... :-D
    $count = 0;
    // adesso preleva e stampa i dati dalla query, iniziando dal primo record
    // e finendo quando non c'è più niente da stampare o hai esaurito i (25) prodotti
    echo ('<table class="content" align="center" cellspacing="0" cellpadding="0">');
    // piccola modifica al codice precedente (really sorry... ;-( )
    for ($i = $start; $i < $start + $step && $i < $nr; $i++)
    {
       if ($count == 0)
       	  $id = $result[$i]["id"];
       	  $prodotto = $result[$i]["prodotto"];
       	  $descbreve = $result[$i]["descbreve"];
       	  $prezzo = $result[$i]["prezzo"];
          echo ('<tr>');
          echo "<td class=\"prodotto_noid\"><table class=\"prodotto_noid\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\">\n<tr><td class=\"prodotto_noid_img\"><a href=\"./view.php?id=$id\"><img src=\"./images/prodotti/$id.jpg\" class=\"prodotto_img_reduc\" title=\"$prodotto\" alt=\"$prodotto\" /></a><br /><a href=\"./view.php?id=$id\" class=\"noid\">$prodotto</a></td></tr>\n<tr><td class=\"prodotto_noid_prezzo\">$prezzo &euro;</td></tr>\n<tr><td class=\"prodotto_noid_descbreve\">$descbreve</td></tr></table></td>\n";   
    	  if (++$count == 5)
       {
          echo ('</tr>');
          $count = 0;
       }
    }
    if ($count != 0)
       echo ('</tr>');
    echo ("</table>\n");
    // ti ricordi il codice dei link di pagina? ora puoi stamparlo di nuovo...
    echo ($linkCode);
    La variabile $count serviva a determinare quand'era il caso di stampare una nuova riga della tabella (leggi: scrivere il tag <TR>). Così, invece, vai a pescare l'ID del prodotto solo quando $count è uguale a 0, e, cosa ancora più grave (dal punto di vista del codice) inizi nuove righe di tabelle "a vanvera" senza chiuderle.

    Si sistema abbastanza facilmente, basta spostare la riga in blu immediatamente sotto la prima di quelle in rosso...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  7. #7
    Guest

    Predefinito

    Sto sperimentando un'altra maniera, perché questo metodo delle 5 celle è logorante (senza contare che poteva distruggere completamente lo stile della pagina per via delle immagini).

    Seguendo la guida di FreePHP.it (che, devo dire, è veramente di grande aiuto, infatti non funziona niente) ho scritto questo codice. Impostando il limite sulla chiamata visualizzo giustappunto i primi record salvati e riesco anche a visualizzare una riga con i vari numeri di pagina. Avendo 15 record in database e una variabile $step impostata a 10, spuntano fuori pagina 1 e 2.
    Se provo ad aprire la seconda pagina, non accade niente di particolare. Ovvero, continua a mostrare gli stessi risultati, senza modificare il contenuto.
    Posto di seguito il codice (non far caso ad una seconda query, ho provato col tuo metodo, ma non riuscivo a farlo girare )

    Codice:
    $connect = mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die("Impossibile stabilire una connessione al database SQL");
    $database = mysql_select_db($mysql_data);
    
    // apro la tabella all'interno della cella dei contenuti
    echo "<table class=\"content\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\">\n";
    // dichiaro $start e $step
    if (!isset($start) OR $start < 0) {
      $start = "0";
    }
    $step = "10";
    
    // query principale
    $query = mysql_query("SELECT * FROM prodotti ORDER BY id ASC LIMIT $start,$step", $connect);
    // inutilissima query per contare il numero di righe e dargli un nome ancor più inutile
    $tot = mysql_query("SELECT count(*) AS tot FROM prodotti", $connect);
    
    $totale = mysql_fetch_array($tot);
    // preso da freephp.it
    $pages = intval(($totale["tot"] - 1) / $step) + 1;
    $links = "<td class=\"pages\">Pagine:<br />\n";
    for ($i = 0; $i < $pages AND $i < $step; $i++) {
      $start_page = ($i * $step);
      $links .= "<a href=\"./prodotti.php?start=$start_page\">" . ($i + 1) . "</a> ";
    }
    $links .= "</td></tr>\n";
    echo $links;
    $count = 0;
    
    // stampiamo le righe... e funziona!
    while ($riga = mysql_fetch_array($query, MYSQL_ASSOC)) {
      $id = $riga["id"];
      $prodotto = $riga["prodotto"];
      $descbreve = $riga["descbreve"];
      $prezzo = $riga["prezzo"];
      echo "<tr><td class=\"prodotto_noid\"><table class=\"prodotto_noid\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\">\n<tr><td class=\"prodotto_noid_img\" rowspan=\"3\"><a href=\"./view.php?id=$id\" class=\"noid\"><img src=\"./images/prodotti/$id.jpg\" class=\"prodotto_img_reduc\" title=\"$prodotto\" alt=\"$prodotto\" /></a></td>\n<td class=\"prodotto_noid_prod\"><a href=\"./view.php?id=$id\" class=\"noid\">$prodotto</a></td></tr>\n<tr><td class=\"prodotto_noid_descbreve\">$descbreve</td></tr>\n<tr><td class=\"prodotto_noid_prezzo\">$prezzo &euro;</td></tr></table></td></tr>\n";
    }
    
    // ristampo i links... thx 2 dementi4lsite!
    echo "$links</table>\n";
    Non so veramente più cosa fare! XD
    Ciao!

  8. #8
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Non so quasi più neanch'io cosa dirti, quello che resta da sistemare dovrebbe essere questo:
    - $start e $step sono numeri e non stringhe, quindi non è il caso di metterci le virgolette... d'accordo, sembra che PHP sia in grado di arrangiarsi con la conversione, ma meglio faciltarglielo il compito, non trovi?
    - altra cosa: quando stampi i link delle pagine, se hai più di 100 record potrai accedere soltanto ai primi 100 record, questo perché blocchi la stampa dei link quando la variabile contatore $i arriva ad eguagliare $step (perché?). Quindi togli la seconda condizione (AND $i < $step) dal ciclo.

    Se neanche così dovesse funzionare, prova ad eseguire così la query, almeno la prima:
    Codice PHP:
    $qstring = "SELECT * FROM prodotti ORDER BY id ASC LIMIT $start,$step";
    // questa riga la toglierai quando avrai sistemato le cose
    echo ($qstring);

    $query = mysql_query ($qstring, $connect);
    così puoi vedere se la query viene composta bene e come rimediare in caso di errori, anche se mi sembra non ce ne siano... Ricordati ovviamente di togliere l'echo quando avrai fatto la versione definitiva della pagina: non sta bene (credo soprattutto per te...) che si svelino dettagli del database quando non ci sono errori...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  9. #9
    Guest

    Predefinito

    Ho un'impressione...
    Potrebbe sussistere un problema sulla variabile $step?
    Giuro che non so più cosa devo combinare... ho provato a modificare un pochettino il codice, però non ho risultati... giusto per informazione lo riposto:
    Codice:
    $connect = mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die("Impossibile stabilire una connessione al database SQL");
    $database = mysql_select_db($mysql_data);
    
    echo "<table class=\"content\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\">\n";
    
    if (!isset($start) OR $start < 0)
    $start = 0;
    $step = 10;
    
    $prova = $start + $step;
    $text = "SELECT * FROM prodotti ORDER BY id ASC LIMIT $start, $prova";
    $query = mysql_query($text, $connect);
    //$query = mysql_query("SELECT * FROM prodotti ORDER BY id ASC LIMIT $start,$step", $connect);
    
    $tot = mysql_query("SELECT count(*) AS tot FROM prodotti", $connect);
    $totale = mysql_fetch_array($tot);
    $links = "<tr><td class=\"pages\">Pagine:<br />\n$text</td></tr>\n";
    $pages = intval(($totale["tot"] - 1) / $step) + 1;
    $links .= "<tr><td class=\"pages\">";
    for ($i = 0; $i < $pages AND $i < 20; $i++) {
    //  $start_page = ($i * $step);
      $start_page = ($i * $prova);
      $links .= "<a href=\"./prodotti.php?start=$start_page\">" . ($i + 1) . "</a> ";
    }
    $links .= "</td></tr>";
    echo $links;
    $count = 0;
    
    while ($riga = mysql_fetch_array($query, MYSQL_ASSOC)) {
      $id = $riga["id"];
      $prodotto = $riga["prodotto"];
      $descbreve = $riga["descbreve"];
      $prezzo = $riga["prezzo"];
      echo "<tr><td class=\"prodotto_noid\"><table class=\"prodotto_noid\" align=\"center\" cellspacing=\"0\" cellpadding=\"0\">\n<tr><td class=\"prodotto_noid_img\" rowspan=\"3\"><a href=\"./view.php?id=$id\" class=\"noid\"><img src=\"./images/prodotti/$id.jpg\" class=\"prodotto_img_reduc\" title=\"$prodotto\" alt=\"$prodotto\" /></a></td>\n<td class=\"prodotto_noid_prod\"><a href=\"./view.php?id=$id\" class=\"noid\">$prodotto</a></td></tr>\n<tr><td class=\"prodotto_noid_descbreve\">$descbreve</td></tr>\n<tr><td class=\"prodotto_noid_prezzo\">$prezzo &euro;</td></tr></table></td></tr>\n";
    }
    
    echo "$links</td></table>\n";
    Non è che ci sia molta differenza, però continua a non funzionare... nessuna soluzione decente?
    Per di più, qualunque valore abbia start, ho sempre lo stesso output: "SELECT * FROM prodotti ORDER BY id ASC LIMIT 0, 10"
    Boh!

  10. #10
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da Heartless482
    ... Per di più, qualunque valore abbia start, ho sempre lo stesso output: "SELECT * FROM prodotti ORDER BY id ASC LIMIT 0, 10"
    Boh!
    Vedi che, pero', cosi' il problema l'hai trovato? Vuol dire che per qualche motivo la variabile $start viene sempre impostata a 0, e questo succede solo all'interno del primo if: prova a sostituire la parola OR con il simbolo || (doppia barra verticale). A me risulta che che e' quest'ultimo il modo per fare un OR logico, mentre la parola OR serve ad eseguire un'istruzione alternativa qualora quella principale fallisse (esempio classico: mysql_connect (...) or die (...);)

    Altra cosa: mi pare che nella clausola LIMIT di MySQL quello che devi specificare e' inizio, offset e non inizio, fine: devi percio' inserire la variabile $step e non $prova sulla query...

    Funzionera' cosi'? Attendo la prossima puntata (sempre se avro' abbastanza tempo per tornare sul forum, visto che da oggi saro' preso per le bombe...)

    Stammi bene...
    Ultima modifica di dementialsite : 13-03-2006 alle ore 10.07.37
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  11. #11
    Guest

    Predefinito

    La variabile $prova, come dice il nome, era solo per provare se poteva cambiare qualcosa
    Ho provato ancora cambiando OR con || ma... nada... ho provato a spostare la query in ogni posto dove potesse ancora essere utilizzabile, ma niente nemmeno in questo caso... sto cominciando a pensare che il motore PHP ce l'abbia con me

  12. #12
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Ultimo tentativo: prova a vedere se riesci a cavartela così nel determinare le variabili di limite
    Codice PHP:
    if (!isset ($_GET['start']) || $_GET['start'] < 0)
    $start = 0;
    else
    $start = $_GET['start'];
    Se nemmeno così funziona, veramente non so più da che parte sbattermi...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  13. #13
    Guest

    Predefinito

    MA IO TI AAAAAAAAMOOOOOOO!!!!!
    (E scusate il maiuscolo!!!)
    Ma funziona tutto!!!!!! E anche benissimo!!!!!! Ma io ti amooooooooooooooooo!!!!!!!!!!!
    Ti giuro che non so come ringraziarti!!!!! Sono una Pasquaaaaa!!!!!!!
    GRAZIEEEEEEEEEEEEEEEEEEEEEEEEE!!!!!
    (vi prego, perdonate il maiuscolo, sono troppo felice!!!)

    Ah! Mi hai tolto un peso, davvero! :D
    Mai script fu più ostico, davvero!!!
    Grazie ancora per tutto l'aiuto e il supporto!
    Ciao!

  14. #14
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Visto che hai risolto. Chiudo.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •