Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    14

    aiuto per paginazione dati

    Ciao a tutti, mi sono appena iscritta a questo meraviglioso forum ed ho gia' bisogno del vostro aiuto.
    Sto' ristrutturando un sito fatto da altri in php e riscontro il seguente problema che mi sta' facendo impazzire da giorni:

    quando eseguo la query funziona tutto bene ma se poi clicco sul link per andare alla pagina successiva i risultati che ottengo sono quelli totali, cioè non tiene conto della query. riporto di seguito il codice della query e della paginazione. Spero possiate aiutarmi non so' piu' cosa provare, GRAZIE.

    Codice PHP:
    <?php
    $currentPage 
    $_SERVER["PHP_SELF"];
    $maxRows_RSgarage2 2;
    $pageNum_RSgarage2 0;
    if (isset(
    $_GET['pageNum_RSgarage2'])) {
      
    $pageNum_RSgarage2 $_GET['pageNum_RSgarage2'];
    }
    $startRow_RSgarage2 $pageNum_RSgarage2 $maxRows_RSgarage2;

    mysql_select_db($database_garage2$garage2);
    $query_RSgarage2 "SELECT * FROM regione WHERE provincia LIKE '%$_POST[provincia]%'";
    $query_limit_RSgarage2 sprintf("%s LIMIT %d, %d"$query_RSgarage2$startRow_RSgarage2$maxRows_RSgarage2);
    $RSgarage2 mysql_query($query_limit_RSgarage2$garage2) or die(mysql_error());
    $row_RSgarage2 mysql_fetch_assoc($RSgarage2);

    if (isset(
    $_GET['totalRows_RSgarage2'])) {
      
    $totalRows_RSgarage2 $_GET['totalRows_RSgarage2'];
    } else {
      
    $all_RSgarage2 mysql_query($query_RSgarage2);
      
    $totalRows_RSgarage2 mysql_num_rows($all_RSgarage2);
    }
    $totalPages_RSgarage2 ceil($totalRows_RSgarage2/$maxRows_RSgarage2)-1;

    ?>

    LINK per spostarsi alle pag. successive

    [url="<?php printf("]">Pagina successiva[/url]

  2. #2
    prova a sostituire:

    $query_RSgarage2 = "SELECT * FROM regione WHERE provincia LIKE '%$_POST[provincia]%'";

    con

    $query_RSgarage2 = "SELECT * FROM regione WHERE provincia LIKE '%".$_POST['provincia']."%'";

    Altra cosa, stai anche attenta che se ti arriva uno zero ti farà la divisione per zero, non essendoci nessun controllo:

    $totalPages_RSgarage2 = ceil($totalRows_RSgarage2/$maxRows_RSgarage2)-1;

    Facci sapere ^^
    ...::: DESIDERARE E' UMANO :::...
    ...::: POSSEDERE E' DIVINO :::...
    ...::: HAVE A NICE DAY :::...
    (¯`·.¸¸.->ĐĮ ĦΞŁŁ<-.¸¸.·`¯)
    http://www.djhellclub.com

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    14
    Grazie innanzitutto per l'interesse.
    ho provato come mi hai suggerito ma il problema persiste.

    Riposto interamente il codice perchè nel copia/incolla ne era saltato una parte, Scusatemi.

    Codice PHP:
    <?php
    $currentPage 
    $_SERVER["PHP_SELF"];

    $maxRows_RSgarage2 2;
    $pageNum_RSgarage2 0;
    if (isset(
    $_GET['pageNum_RSgarage2'])) {
      
    $pageNum_RSgarage2 $_GET['pageNum_RSgarage2'];
    }
    $startRow_RSgarage2 $pageNum_RSgarage2 $maxRows_RSgarage2;

    mysql_select_db($database_garage2$garage2);
    $query_RSgarage2 "SELECT * FROM regione WHERE provincia LIKE '%$_POST[provincia]%'";
    $query_limit_RSgarage2 sprintf("%s LIMIT %d, %d"$query_RSgarage2$startRow_RSgarage2$maxRows_RSgarage2);
    $RSgarage2 mysql_query($query_limit_RSgarage2$garage2) or die(mysql_error());
    $row_RSgarage2 mysql_fetch_assoc($RSgarage2);

    if (isset(
    $_GET['totalRows_RSgarage2'])) {
      
    $totalRows_RSgarage2 $_GET['totalRows_RSgarage2'];
    } else {
      
    $all_RSgarage2 mysql_query($query_RSgarage2);
      
    $totalRows_RSgarage2 mysql_num_rows($all_RSgarage2);
    }
    $totalPages_RSgarage2 ceil($totalRows_RSgarage2/$maxRows_RSgarage2)-1;
    $queryString_RSgarage2 "";
    if (!empty(
    $_SERVER['QUERY_STRING'])) {
      
    $params explode("&"$_SERVER['QUERY_STRING']);
      
    $newParams = array();
      foreach (
    $params as $param) {
        if (
    stristr($param"pageNum_RSgarage2") == false && 
            
    stristr($param"totalRows_RSgarage2") == false) {
          
    array_push($newParams$param);
        }
      }
      if (
    count($newParams) != 0) {
        
    $queryString_RSgarage2 "&" htmlentities(implode("&"$newParams));
      }
    }
    $queryString_RSgarage2 sprintf("&totalRows_RSgarage2=%d%s"$totalRows_RSgarage2$queryString_RSgarage2);
    ?>

    LINK pagina successiva
    [url="<?php printf("]">Pagina avanti[/url]
    Pendo sempre dalle vostre labbra ....ops dita.

  4. #4
    a occhio mi pare ci siano 2 errori, ovvero:
    Codice PHP:
    $startRow_RSgarage2 $pageNum_RSgarage2 $maxRows_RSgarage2
    Qua dici da dove partire il count... Però così leggi un elemento 2 volte:

    Pagina 1:

    0 -- 10

    pagina 2

    10 -- 20

    pagina 3:

    20 --

    Secondo me dovresti mettere un +1 alla fine..

    Ecco anche perchè vedi sempre lo stesso record... Perchè questa riga;:

    Codice PHP:
    $row_RSgarage2 mysql_fetch_assoc($RSgarage2); 
    Ti restituisce SOLO una riga dal DB. DOvresti fare una cosa tipo:

    Codice PHP:
    while ($row_RSgarage2 mysql_fetch_assoc($RSgarage2))
    {
    //controlli sulla $row_RS.... 
    Quindi già con la prima "correzione" vedrai un record diverso nella pagina 2.. Poi in base a quanti record vorrai visualizzare in una pagina (se + d'uno), dovrai correggere anche la seconda cosa...

    Spero di aver azzeccato il problema, ma dopo averlo riletto accuratamente penso di poter anche essere sicuro che risolvi

    Fammi sapere
    ...::: DESIDERARE E' UMANO :::...
    ...::: POSSEDERE E' DIVINO :::...
    ...::: HAVE A NICE DAY :::...
    (¯`·.¸¸.->ĐĮ ĦΞŁŁ<-.¸¸.·`¯)
    http://www.djhellclub.com

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    14
    Non credo il problema sia quello perchè se metto +1 mi inizia a visualizzare i dati dalla seconda pagina in poi, per quanto riguarda il resto il ciclo while lo faccio in seguito quando stampo i risultati. Tra l'altro il mio problema non è che vedo sempre gli stessi dati ma il seguente:
    invio i dati da form e visualizzo la prima pagina dei risultati fin qui tutto ok, quando clicco sul link per andare alla seconda pagina la visualizzo comunque ma i dati non sono filtrati come da condizione WHERE, quindi secondo me sbaglio qualcosa nella query anche perchè ho fatto una prova sostituendo
    Codice PHP:
    $query_RSgarage2 "SELECT * FROM regione WHERE provincia LIKE '%$_POST[provincia]%'";

    CON

    $query_RSgarage2 
    "SELECT * FROM regione WHERE provincia 'roma'"
    ... e funziona alla perfezione.

    Grazie cmq per il tempo che mi stai dedicando.

  6. #6
    No problem per il tempo , anzi, ho pure malinteso il problema :P

    Piuttosto, a me non convince questo:

    $_POST[provincia]

    se lo mandi in output con un echo ti esce il valore che ti aspetti?

    ps:
    Con il like così (%PAROLA%) se inserisci come provincia:

    ROMA, ammettendo che esista una provincia che si chiama PIROMANE, ti uscirebbe anche quella...

    pps:
    Che valore ti arriva dal post["provincia"] ?
    ...::: DESIDERARE E' UMANO :::...
    ...::: POSSEDERE E' DIVINO :::...
    ...::: HAVE A NICE DAY :::...
    (¯`·.¸¸.->ĐĮ ĦΞŁŁ<-.¸¸.·`¯)
    http://www.djhellclub.com

  7. #7
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    non ti conviene usare il comando limit nella query a sto punto ???

    A patto che la var in post sia passata correttamente

    la query che usi e'

    "SELECT * FROM regione WHERE provincia LIKE '%$_POST[provincia]%'";

    trasformala innanzitutto come gia' consigliato da djhell in

    "SELECT * FROM regione WHERE provincia LIKE '%".$_POST[provincia]."%'";

    poi quota il nome tra le quadre
    "SELECT * FROM regione WHERE provincia LIKE '%".$_POST['provincia']."%'";

    inoltre per gestire il num dei ris la sol migliore e' sempre usare LIMIT.

    "SELECT * FROM regione WHERE provincia LIKE '%".$_POST[provincia]."%' limit 0,10";
    questo ti da i risultati delle prime 10 righe.
    Bene a sto punto ti basta inserire una var che tiene traccia del limit precedente.

    $last_limit = $_GET|POST[last_limit]

    "SELECT * FROM regione WHERE provincia LIKE '%".$_POST[provincia]."%' limit ".($last_limit+10).",10";

    cosi' facendo salti di 10 in 10 e ti liberi dai milioni di cicli di controllo.

    Anche perche' poi nel tuo codice c'e' una serie di istruzioni che gesticono i limit e ti consiglio di farti delle stampe dei val che assumono quelle var.
    Poi ti modifichi la query come sopra e con moooolto meno codice ti gestisci tto.
    infatti :
    $query_limit_RSgarage2 = sprintf("%s LIMIT %d, %d", $query_RSgarage2, $startRow_RSgarage2, $maxRows_RSgarage2);
    E' una sol un poco macchinosa basata sul retaggio C di chi ha programmato sta pagina.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    14
    OK ragazzi, Vi ringrazio infinitamente siete stati gentilissimi e chiarissimi, infatti mi sono resa conto che è meglio demolire il tutto e ricostruire da capo anchè perchè sicuramente incapperò in tante altre situazioni del genere.
    Se avrò bisogno nuovamente (spero di no) mi rifarò viva.
    Grazie ancora
    Saluti

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.