Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Formularz i problem ze zbudowaniem zapytania sql
Forum PHP.pl > Forum > Przedszkole
northwest
Witam,
Mam taki kod php:
  1. <?php
  2. define('ILOSC_WYNIKOW_NA_STRONIE', 1);
  3. echo"<u><center><b><big>Sortuj po:</big></u></b></center><br><br><TABLE border =0 align=center>
  4. <TR>
  5.  <TD><b>Data dodania:</b></TD>
  6.  <TD><b>Płeć:</b></TD>
  7.  <TD><b>Zarobki:</b></TD>
  8. <TD><b>Rodzaj pracy: </b></TD>
  9. </TR>
  10.  
  11. ...
  12. ...
  13. ...
  14.  
  15. $RES = mysql_query("SELECT COUNT(*) FROM baza_szukanie_pracy WHERE id<>'0' $a1 $a2 $a3 $a4 $a5 $a6");
  16. list($iloscWpisow) = mysql_fetch_row($RES);
  17. $teraz = date("Y-n-j");
  18. if ($_POST[times]=="dzisiaj"){ $a1="and datarejestracji ='$teraz'"; }
  19. $SQL = "SELECT * FROM baza_szukanie_pracy WHERE id<>'0' $a1 $a2 $a3 $a4 $a5 $a6 ORDER BY id ASC LIMIT ".mysql_escape_string((int)$_GET['key']*ILOSC_WYNIKOW_NA_STRONIE).",".ILOSC_WYNIKOW_NA_STRONIE;
  20.  echo"$SQL";
  21. $res = mysql_query($SQL);
  22. echo"<br><small><center>Strona: </small>";
  23. if($_GET['key']>0){
  24. echo '<a href="'.($url2).'/szukajacypracy/'.($_GET['key']-1).'/strona/moduly/inne/szukajacy_pracy.html"><small>Poprzednie</small></a> ';}
  25. for($i = 0;$i<=floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE);$i++){
  26. echo '<a href="'.($url2).'/szukajacypracy/'.($i).'/strona/moduly/inne/szukajacy_pracy.html"><small>'.($i+1).'&nbsp;</small>';}
  27. if($_GET['key']<floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE)){
  28. echo '<a href="'.($url2).'/szukajacypracy/'.($_GET['key']+1).'/strona/moduly/inne/szukajacy_pracy.html"><small>Następne</small></a>';}
  29. echo"<br><br>";
  30. ///////////
  31. echo("<table class='styl' border='0' width='580' cellpadding='2'>");
  32. echo("<tr style=&#092;"color: #fff; background: #bbb; font-weight: bold\"><td width=\"280 align=\"left\">Stanowisko</td><td width=\"90 align=\"left\">Data rejestracji</td></tr><td width=\"25align=\"left\"></td>\n");
  33. while ($query_data = mysql_fetch_array($res)){
  34. $kolor = 0;
  35. $kolor = $kolor+1;
  36. if ($kolor % 2 == 0) echo("<tr align='center' style=\"background: #fff\">"); else echo("<tr align='center' style=\"background: #ddd\">");
  37. echo("<td width=\"280\">");
  38.  
  39.  echo"$query_data[stanowisko] <br><a href='$url2/oglview2.php?id=$query_data[id]&print=nie' target='_popup''><small> [Podgląd]</a> &nbsp;&nbsp;&nbsp; <a href='$url2/oglview2.php?id=$query_data[id]&print=tak' target='_popup''><small> [Wydruk]</a></small>";
  40.  echo("</td>");
  41.  echo("<td align=\"center\">");
  42.  echo"$query_data[datarejestracji] ";
  43.  echo("</td>");
  44.  }
  45.  
  46.  echo"</tr></table>";
  47.  
  48. }
  49. ?>


to jest troszkę skrócony kod. Ogólnie mam problem z tym że po wybraniu jakiegoś filtrowania (wyżej jest data dodania) i kliknięciu guziczka filtruj jest okey, ale jak kliknę na "numerek" (stronnicowanie) to już mi się psuje zapytanie z "filtracją" :/ jak to zrobic żeby było okey/??

Z góry dzieki za pomoc,
Northwest
aiv
Co to znaczy "wali mi się zapytanie"? Możesz dać jakiś przykład?
Gdybyś dał url do tej strony w wersji działającej było by szybciej i prościej.
drPayton
1. Jaki masz komunikat błędu?
2. Popraw proszę temat na zgodny z zasadami forum przedszkole, w przeciwnym wypadku wątek zostanie zamknięty.

Pozdrawiam!
northwest
http://trif.superhost.pl/po
login i hasło: testerek

Wejdź w "Szukający pracy" - o ten formularz chodzi

poprawiłem temat i post:)
aiv
Musisz zapisywać sobie filtry np w sesji, i przy stronicowaniu dodać kod który będzie doklejał do zapytania fragment odpowiedzialny za filtry.
drPayton
1. Popraw temat!
2.
  1. <?php
  2. (...)WHERE id<>'0'(...)
  3. ?>

Po co tu ten apostrof?
3. Gdzie tu widzisz jakiś błąd? Może coś przegapiłem, ale nie widzę żadnych problemów. Wrzuć trochę więcej danych, bo przy jednej pozycji nie widać czy stronicowanie/filtrowanie działa jak należy.
northwest
tzn problem jest w tym że załóżmy że mam 10 postów zapisanych dzisiaj i 10 wczoraj.
Wybieram w formularzu że chce zobaczyć te z dzisiaj - jest okey, dane się wyświetlą poprawnie.
Ale jak wybiorę np. 2 z "cyferek stronnicowania" to zapytanie SQL wraca mi do wyjściowego
select * from baza_szukanie_pracy WHERE id<>'0' :/
drPayton
1. Czyli dokładnie to o czym napisał @aiv
2. Ostatnie ostrzeżenie - popraw temat, bo go zamknę!
northwest
a mógłbyś mi podać przykład jak to zrobić??winksmiley.jpg sorki,już zmieniam temat
drPayton
W momencie wykonywania sortowania zapisujesz do sesji, pod ustalonym kluczem (np $_SESSION['filter']) string zapytania odpowiedzialny za sortowanie (np datarejestracji ='2008-1-3'). W momencie wykonywania stronicowania sprawdzasz, czy pod tym ustalonym kluczem coś jest - jeśli tak, dopisujesz wartość pod nim do zapytania. To najprostszy i pewnie najgorszy sposób, ale wystarczy.
northwest
  1. <?php
  2. $RES = mysql_query("SELECT COUNT(*) FROM baza_szukanie_pracy WHERE id<>'0' $_SESSION[filter]");
  3. list($iloscWpisow) = mysql_fetch_row($RES);
  4. $teraz = date("Y-n-j");
  5. if ($_POST[times]=="dzisiaj"){ $a1="and datarejestracji ='$teraz'"; }
  6. $SQL = "SELECT * FROM baza_szukanie_pracy WHERE id<>'0' $_SESSION[filter] ORDER BY id ASC LIMIT ".mysql_escape_string((int)$_GET['key']*ILOSC_WYNIKOW_NA_STRONIE).",".ILOSC_WYNIKOW_NA_STRONIE;
  7.  echo"$SQL";
  8. $res = mysql_query($SQL);
  9. if ($a1!=""){
  10. $_SESSION['filter'] = "$a1 $a2 $a3 $a4 $a5 $a6"; ////////
  11. }
  12. ?>


czyli coś takiego??

ps. a jak zrobić żeby te comboboxy pamiętały wybrane wartości przy przeładowywaniu strony??
Cezar708
Cytat
  1. <?php
  2. $RES = mysql_query("SELECT COUNT(*) FROM baza_szukanie_pracy WHERE id<>'0' $_SESSION[filter]");
  3. ?>

to nie jest dobre rozwiązanie, bardzo nie bezpieczne i super podatne na SQLinjection. Jak już chcesz zapisywać coś w sesji i używać tego jako filtra to lepiej od razu sobie zdefiniować co w tym filtrze może być i TYLKO tego używać:

np:

  1. <?php
  2. $criteria = '1=1 ';
  3. foreach ( $_SESSION['filter'] as $fieldName => $value ){
  4. if ( strlen($value) ){
  5. $criteria .= " AND `$fieldName`='$value'";
  6. } 
  7. }
  8. $RES = mysql_query("SELECT COUNT(*) FROM baza_szukanie_pracy WHERE id<>'0' $criteria");
  9. ?>


Oczywiście nadal nie twierdzę, że jest to dobre rozwiązanie, ale zawsze lepsze od poprzedniego.
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.