Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    tag select in una echo per modificare una variabile php, come si fa?

    ciao a tutti...ennesimo problema cretino che posto ma non so come cercare la soluzione.
    in pratica vorrei sapere come far funzionare un tag select all'interno di una echo in modo che modifichi la variabile php che determina quanti record di una tabella mysql far visualizzare in ogni pagina. in pratica voglio creare il solito elenco che si vede alla fine delle pagine che contengono tanti articoli.
    lo so che è una cosa banale ma mi sembra un'impresa cercare in tutte le guide php o vari siti per un cosa così specifica.
    grazie a tutti
    ciao ciao

  2. #2
    Beh, in una query SQL c'è il comando finale chiamato LIMIT, che indica tra tutte le rige trovate, massimo quante tornarle, oppure di ritornarne solo a partire dalla tal numero.

    Ora, immagino tu stia creando una specie di form per la ricerca, che poi visualizza in una tabella i risultati.
    Io, semplicemente, quando passi i criteri di ricerca, li salverei nella sessione, così anche se, per qualche ragione, l'utente ricarica la pagina, avrà la sua query già impostata. A questo punto aggiungi una select con i valori:
    Codice PHP:
    <select name="returnedRows" onchange="submitMyQuery(this)">
       <
    option value="10">10</option>
       <
    option value="20">20</option>
       <
    option value="50">50</option>
       <
    option value="100">100</option>
       <
    option value="">Tutti</option>
    </
    select
    nella pagina, sotto la tabella (oppure sopra, come preferisci).

    submitMyQuery(sel) semplicemente chiama un window.location.href sullo script PHP che setta le variabili per la query, dove salverai nella sessione:

    $_SESSION['query_keys']['limit'] = valore passato

    Poi nella pagina della tabella quando esegui la query aggiungi:
    Codice PHP:
    $query//Metti che qui ci sia già la query completa di WHERE

    if($_SESSION['query_keys']['limit'])
    {
       
    $query .= " LIMIT 0,".$_SESSION['query_keys']['limit'];

    A questo punto, la seconda cosa da implementare è il range di righe da visualizzare (per esempio tu hai 100 record che vuoi visualizzare in gruppi da 20), usando la prima chiave di limit determini il gruppo:

    Quando generi la pagina fai anche un:
    Codice PHP:
    $query "SELECT COUNT(id) FROM Tua_tabella"
    con tutti filtri WHERE che l'utente ha chiesto, per avere il numero totale di righe.
    A questo punto, dividi il tot per il range che l'utente ha scelto per avere il numero di pagine di tabelle, e stampi un gruppo di link in fondo (o sopra) la pagina. (come quello in fondo a questo forum)
    ognuno di questi link richiama la pagina, con tutte le sue query nell'url, aggiungendo "&pag=Numero_del_link".

    a questo punto la query di sopra diverrà:
    Codice PHP:

    $pag 
    $_GET['pag'] ? $_GET['pag']  : 0;

    if(
    $_SESSION['query_keys']['limit'])
    {
       
    $query .= " LIMIT $pag,".$_SESSION['query_keys']['limit'];

    spero di esserti stato utile

  3. #3
    ciao, grazie per la tua generosa risposta ma già la maggior parte delle cose che hai postato le avevo già fatte più o meno alla stessa maniera...il mio problema era solo cosa scrivere nell' onchange del select e che codice php usare per modificare il limit in base all'opzione selezionata. credo di aver applicato bene quello che mi hai detto ma mi esce un errore nella zona dell'echo con il select.
    ora posto il codice php, spero che qualcuno possa consigliarmi come fare

    Codice PHP:
    <?
    // Creo una variabile dove imposto il numero di record 
    // da mostrare in ogni pagina
    $x_page 5;

    // Recupero il numero di pagina corrente.
    // Generalmente si utilizza una querystring
    $page $_GET['page'];

    // Controllo se $pag è valorizzato...
    // ...in caso contrario gli assegno valore 1
    if (!$page$page 1

    include(
    "xxxxxxxxxxxxxxxxxxxxdatabase.inc.php");

    mysql_connect($DBhost,$DBuser,$DBpass) or die("Impossibile collegarsi al server");

    @
    mysql_select_db("$DBName") or die("Impossibile connettersi al database $DBName"); 
    // Uso mysql_num_rows per contare le righe presenti
    // all'interno della tabella agenda
    $all_rows mysql_num_rows(mysql_query("SELECT * FROM Prodotti"));
    // Tramite una semplice operazione matematica definisco
    // il numero totale di pagine
    $all_pages ceil($all_rows $x_page);
    // Calcolo da quale record iniziare
    $first = ($page 1) * $x_page;

    // Recupero i record per la pagina corrente...
    // utilizzando LIMIT per partire da $first e contare fino a $x_pag
    $sqlquery mysql_query("SELECT * FROM Prodotti ORDER BY Data DESC");
    if(
    $_SESSION['query_keys']['limit'])
    {
       
    $sqlquery .= " LIMIT $first,".$_SESSION['query_keys']['limit'];
    }

    $nr mysql_num_rows($sqlquery);
    if (
    $nr != 0){
      for(
    $x 0$x $nr$x++){
        
    $row mysql_fetch_assoc($sqlquery);
        echo 
    "<tr class=\"obblig\"><th class=\"column1\" scope=\"row\" width=\"110\">
          <p class=\"obblig\" align=\"center\"><a class=\"obblig\" href=\"" 
    $row['Link Prodotto'] . "\"><img class=\"obblig\" height=\"142\" src=\"" $row['Link Immagine Prodotto'] . "\" border=\"0\"></p></th>
            <td class=\"obblig\">
          <p class=\"obblig\" align=\"left\"><font class=\"obblig\" size=\"2\"><font class=\"obblig\" color=\"#0000ff\"><a class=\"obblig\" href=\"" 
    $row['Link Prodotto'] . "\"><font class=\"obblig\" size=\"2\"><font class=\"obblig\" color=\"#0000ff\" size=\"3\"><strong class=\"obblig\">" $row['Nome Prodotto'] . "[/b]</font></a>

    <font class=\"obblig\" color=\"#000000\" size=\"2\">" 
    $row['Descrizione Prodotto'] . "</font></font></p></font></font></td></tr>";
          
    $row mysql_fetch_assoc($sqlquery++);
          
    $x++;
          if(
    $row['id']!=NULL){
            echo 
    "<tr class=\"odd\"><th class=\"column1\" scope=\"row\" width=\"110\">
              <p class=\"obblig\" align=\"center\"><a href=\"" 
    $row['Link Prodotto'] . "\"><img class=\"obblig\" height=\"142\" src=\"" $row['Link Immagine Prodotto'] . "\" border=\"0\"></p></th>
                <td class=\"obblig\">
              <p class=\"obblig\" align=\"left\"><font class=\"obblig\" size=\"2\"><font class=\"obblig\" color=\"#0000ff\"><a class=\"obblig\" href=\"" 
    $row['Link Prodotto'] . "\"><font class=\"obblig\" size=\"2\"><font class=\"obblig\" color=\"#0000ff\" size=\"3\"><strong class=\"obblig\">" $row['Nome Prodotto'] . "[/b]</font></a>

    <font class=\"obblig\" color=\"#000000\" size=\"2\">" 
    $row['Descrizione Prodotto'] . "</font></font></p></font></font></td></tr>";
           }
      }
    }else{
      echo 
    "Nessun record trovato!";
    }
    ?>
    </tr></tbody></table>
    <?
    if($page == 1) { // se siamo nella prima pagina
        
    $inizio "<< Inizio";
        
    $precedente "< Prec";
        
    $next_page = ($page 1);
        
    $successiva "<a href=\"?page=$next_page\" title=\"Vai alla pagina successiva\">Succ ></a>";
        
    $fine "<a href=\"?page=$all_pages\" title=\"Vai alla pagina precedente\"> Fine>></a>";

    else if(
    $page != $all_pages){ // se siamo in qualsiasi pagina eccetto prima e ultima
        
    $inizio "<a href=\"?page=1\" title=\"Vai alla pagina precedente\"><< Inizio>></a>";
        
    $previous_page = ($page 1);
        
    $precedente "<a href=\"?page=$previous_page\" title=\"Vai alla pagina precedente\">< Prec</a>";
        
    $next_page = ($page 1);
        
    $successiva "<a href=\"?page=$next_page\" title=\"Vai alla pagina successiva\">Succ ></a>";
        
    $fine "<a href=\"?page=$all_pages\" title=\"Vai alla pagina precedente\"> Fine>></a>";
    }
    else { 
    // se siamo nell'ultima pagina
        
    $inizio "<a href=\"?page=1\" title=\"Vai alla pagina precedente\"><< Inizio>></a>";
        
    $previous_page = ($page 1);
        
    $precedente "<a href=\"?page=$previous_page\" title=\"Vai alla pagina precedente\">< Prec</a>";
        
    $successiva "Succ >";
        
    $fine " Fine>>";
    }

    $paginazione "<div align=\"center\">$inizio $precedente [ ";
    for(
    $i 1$i <= $all_pages$i++) {
        if(
    $i == $page) {
            
    $paginazione .= $i " ";
        } 
        else {
            
    $paginazione .= "<a href=\"?page=$i\" title=\"Vai alla pagina $i\">$i</a>";
        }
    }
    $paginazione .= "]" $successiva $fine </div>";

    echo 
    "<div class=\"limit\">Mostra #<select onchange=\"submitMyQuery(this)\" size=\"1\" class=\"inputbox\" id=\"limit\" name=\"limit\"><option selected=\"selected\" value=\"5\">5</option><option value=\"10\">10</option><option value=\"15\">15</option><option value=\"20\">20</option><option value=\"25\">25</option><option value=\"30\">30</option><option value=\"50\">50</option><option value=\"100\">100</option><option value=\"\">tutti</option></select></div>"

    if($all_pages 1){
        echo 
    $paginazione;
        echo 
    "<div align=\"center\">Pagina " $page " di " $all_pages;
    }

    // Chiudo la connessione ad DB
    mysql_close($conn);
    ?>
    grazie a tutti anticipatamente per l'aiuto
    ciao

  4. #4
    beh, perché dopo che fai l'echo della select non c'è il ;

    Posso darti du consigli su questo tipo di codice?
    Quando conti il totale dei prodotti usa:
    $all_rows = mysql_num_rows(mysql_query("SELECT count(*) FROM Prodotti"));

    Questo ritorna SOLO il numero e non tutti i dati, se hai molti prodotti è un grande risparmio sulla memoria.

    Al posto di una echo per la select usa:

    Codice PHP:
    ?>
    <div class="limit">
    Mostra #
    <select onchange="submitMyQuery(this)" size="1" class="inputbox" id="limit" name="limit">
       <option <?=($_SESSION['query_keys']['limit'] == 5) ? 'selected="selected"' '' ?> value="5">5</option>
       <option <?=($_SESSION['query_keys']['limit'] == 10) ? 'selected="selected"' '' ?>  value="10">10</option>
       <option <?=($_SESSION['query_keys']['limit'] == 15) ? 'selected="selected"' '' ?>  value="15">15</option>
       <option <?=($_SESSION['query_keys']['limit'] == 20) ? 'selected="selected"' '' ?>  value="20">20</option>
       <option <?=($_SESSION['query_keys']['limit'] == 25) ? 'selected="selected"' '' ?>  value="25">25</option>
       <option <?=($_SESSION['query_keys']['limit'] == 30) ? 'selected="selected"' '' ?>  value="30">30</option>
       <option <?=($_SESSION['query_keys']['limit'] == 50) ? 'selected="selected"' '' ?>  value="50">50</option>
       <option <?=($_SESSION['query_keys']['limit'] == 100) ? 'selected="selected"' '' ?>  value="100">100</option>
       <option <?=($_SESSION['query_keys']['limit'] == '') ? 'selected="selected"' '' ?>  value="">tutti</option>
    </select>
    </div>"
    <?

  5. #5
    ciao artorius, grazie per la tua gentilezza e pazienza...ho fatto le correzioni che mi hai suggerito ma quando modifico dalla pagina web i valori del select non fa assolutamente niente, nessun caricamento. forse il codice per inviare il valore del select al php non è corretto, non so.
    fatemi sapere, se qualcuno capisce dove sta l'errore.
    grazie a tutti
    ciao

  6. #6
    ma tu fai tutto nella stessa pagina?

  7. #7
    beh..i dati del database e il codice css sono in altri 2 file...questo file php deve soltanto visualizzare una semplice tabella non credo si debba suddividere in altre pagine il codice, giusto?

  8. #8
    Beh, io avevo capito tu volessi anche inserire un filtro per i dati.
    Non è che il sito è raggiungibile dall'esterno? se è così mandami il link.
    In ogni caso, posta che il codice Javascript che usi all'onchange

  9. #9
    sì il sito è visibile dall'esterno ma ancora non voglio divulgare nessun link perchè è solo in fase di preparazione. comunque questo è il primo file php che faccio e pensavo che il codice che mi hai dato (if($_SESSION['query_keys']['limit']){ $query .= " LIMIT 0,".$_SESSION['query_keys']['limit'];}) bastasse e che non ci volesse anche codice javascript, quindi non ne ho nessuno.
    se è una cosa corta ti sarei immensamente grato se mi dicessi cosa fare..se è troppo lungo se almeno mi sai indicare un sito di preciso dove posso studiarmi il codice javascript per questa funzione ti sarei comunque grato.
    grazie ancora

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.