Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak najwydajniej przenieść dalej dane POST?
Forum PHP.pl > Forum > Przedszkole
kajzur
  1. <?include("the_first/header.php");?>
  2. <center>
  3. Aby wyszukac intersujace Ciebie aukcje, prosze wpisz frazy w pole ponizej.<br /><br />
  4. <form action = "search.php?query=yes&start=0" method="post">
  5. Szukana fraza: <input type="text" align="CENTER" class="input" name="phrase" size="35"/><br />
  6. <input type="hidden" name="test" /><br />
  7. <input type="submit" value="Szukaj!" class="input" />
  8. </form>
  9.  
  10.  
  11.  
  12. <?
  13. // zaczynamyy.. mmazur.info!
  14. if($_GET['query'] == "yes" && isset($_POST['test']))
  15. {
  16.    //zmienne konfiguracyjne
  17.    $start = $_GET['start'];
  18.    $na_stronie = 15;
  19.    //zapytania mysql, pdo
  20.    $search = $pdo->query("Select `nazwa`, `id`, `ilosc` From `goods` Where `nazwa` Like '%{$_POST['phrase']}%' and `status` = 'activ' LIMIT $start, $na_stronie");
  21.    
  22.        $znaleziono = $pdo->query("Select `nazwa`, `id`, `ilosc` From `goods` Where `nazwa` Like '%{$_POST['phrase']}%' and `status` = 'activ'");
  23.    $znaleziono=$znaleziono->fetchAll();
  24.    //$search=$search->fetch(PDO::FETCH_NUM);
  25. echo'<table class = input>
  26. <tr>
  27.    <td>Aukcja</td>
  28.    <td>Ilosc przedmiotow</td>
  29. </tr>';
  30.    while($result = $search->fetch(PDO::FETCH_NUM))
  31.    {
  32.        
  33.  
  34. echo"<tr >
  35.    <td border = 1><a href= show.php?id=$result[1]>$result[0]</a></td>
  36.    <td border = 1>$result[2]</td>
  37. </tr>";
  38.  
  39.  
  40.        
  41.        
  42.    }
  43.    echo'</table>';
  44.        if(count($znaleziono)>$na_stronie) {
  45.        print '<center>Strona ';
  46.        
  47.    for($i=0; $i<ceil(count($znaleziono)/$na_stronie); $i++)
  48.      print '<a href="search.php?query=yes&start='.($i*$na_stronie).'">'.($i+1).'</a> | ';
  49.    }  
  50.    print '</center>';
  51.    
  52. }
  53.  
  54. ?>
  55.  
  56.  
  57.  
  58. </center>
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65. <?include("the_first/footer.php");?>


Mam sobie taki oto kod. I działa, do czasu kiedy przechodzę do drugiej strony stronnicowania, bo giną dane POST. Jak najwydajniej je przenieść dalej? Sesja? Serializacja? Pliki? Baza danych? Może przebudować kod jeszcze inaczej?
slawny
Wsadź tą frazę do linku stronnicowania
Pilsener
Przesyłanie danych w linku nie zawsze jest możliwe, wygodne czy praktyczne...

Ja bym Ci proponował zrobić tak:

1. Robisz tabelę w bazie, gdzie zapisujesz kryteria wyszukiwania (takie rzeczy i tak się przydają do statystyk, kto, czego szuka, jak często itp.) - ustawiasz to tak, żeby przechowywało np. 10.000 ostatnich kryteriów szukania

2. Potem pobierasz te kryteria na podstawie ich ID, linki wyglądają np. tak:

szukaj.php?id=1234&a=1
szukaj.php?id=1234&a=2
szukaj.php?id=1234&a=3 - strona 1,2,3 itd.

W ten sposób masz estetyczny adres i moim zdaniem lepiej przekazywać dane przez post - no i filtrujesz je tylko raz

Jeśli nie zależy Ci na statystykach, czego użytkownik szuka to możesz kryteria zapisać w tmp_file lub nawet sesji.
kajzur
  1. <?include("the_first/header.php");?>
  2. <center>
  3. Aby wyszukac intersujace Ciebie aukcje, prosze wpisz frazy w pole ponizej.<br /><br />
  4. <form action = "search.php?query=yes&start=0" method="post">
  5. Szukana fraza: <input type="text" align="CENTER" class="input" name="phrase" size="35"/><br />
  6. <input type="hidden" name="test" /><br />
  7. <input type="submit" value="Szukaj!" class="input" />
  8. </form>
  9.  
  10.  
  11.  
  12. <?
  13. // zaczynamyy.. mmazur.info!
  14. if($_GET['query'] == "yes" && isset($_POST['test']))
  15. {
  16.    //zmienne konfiguracyjne
  17.    $start = $_GET['start'];
  18.    $na_stronie = 20;
  19.    //zapytania mysql, pdo
  20.    $_SESSION['search'] = $_POST['phrase'];
  21.    echo "Szukasz: ".$_SESSION['search'];
  22.    $search = $pdo->query("Select `nazwa`, `id`, `ilosc` From `goods` Where `nazwa` Like '%{$_SESSION['search']}%' and `status` = 'activ' LIMIT $start, $na_stronie");
  23.    
  24.        $znaleziono = $pdo->query("Select `nazwa`, `id`, `ilosc` From `goods` Where `nazwa` Like '%{$_SESSION['search']}%' and `status` = 'activ'");
  25.    $znaleziono=$znaleziono->fetchAll();
  26.    //$search=$search->fetch(PDO::FETCH_NUM);
  27. echo'<table class = input>
  28. <tr>
  29.    <td>Aukcja</td>
  30.    <td>Ilosc przedmiotow</td>
  31. </tr>';
  32.    while($result = $search->fetch(PDO::FETCH_NUM))
  33.    {
  34.        
  35.  
  36. echo"<tr >
  37.    <td border = 1><a href= show.php?id=$result[1]>$result[0]</a></td>
  38.    <td border = 1>$result[2]</td>
  39. </tr>";
  40.  
  41.  
  42.        
  43.        
  44.    }
  45.    echo'</table>';
  46.        if(count($znaleziono)>$na_stronie) {
  47.        print '<center>Strona ';
  48.        
  49.    for($i=0; $i<ceil(count($znaleziono)/$na_stronie); $i++)
  50.      print '<a href="search.php?query=yes&start='.($i*$na_stronie).'">'.($i+1).'</a> | ';
  51.    }  
  52.    print '</center>';
  53.    
  54. }
  55.  
  56. ?>
  57.  
  58.  
  59.  
  60. </center>
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67. <?include("the_first/footer.php");?>


Hm, i po przejściu na następną stronę nie wyświetla reszty wyników.. session_start() jest dołaczane w pliku

Kod
include("the_first/header.php");
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.