Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]Formularz i problem ze zbudowaniem zapytania sql
northwest
post
Post #1





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


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

Ten post edytował northwest 3.01.2008, 12:22:27
Go to the top of the page
+Quote Post
aiv
post
Post #2





Grupa: Zarejestrowani
Postów: 93
Pomógł: 13
Dołączył: 7.09.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Mariusz Dalewski
Aiv's dev blog
Go to the top of the page
+Quote Post
drPayton
post
Post #3





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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!
Go to the top of the page
+Quote Post
northwest
post
Post #4





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


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

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

poprawiłem temat i post:)

Ten post edytował northwest 3.01.2008, 12:13:13
Go to the top of the page
+Quote Post
aiv
post
Post #5





Grupa: Zarejestrowani
Postów: 93
Pomógł: 13
Dołączył: 7.09.2006

Ostrzeżenie: (0%)
-----


Musisz zapisywać sobie filtry np w sesji, i przy stronicowaniu dodać kod który będzie doklejał do zapytania fragment odpowiedzialny za filtry.


--------------------
Mariusz Dalewski
Aiv's dev blog
Go to the top of the page
+Quote Post
drPayton
post
Post #6





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
northwest
post
Post #7





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


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' :/
Go to the top of the page
+Quote Post
drPayton
post
Post #8





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


1. Czyli dokładnie to o czym napisał @aiv
2. Ostatnie ostrzeżenie - popraw temat, bo go zamknę!
Go to the top of the page
+Quote Post
northwest
post
Post #9





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


a mógłbyś mi podać przykład jak to zrobić??winksmiley.jpg sorki,już zmieniam temat
Go to the top of the page
+Quote Post
drPayton
post
Post #10





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
northwest
post
Post #11





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


  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??
Go to the top of the page
+Quote Post
Cezar708
post
Post #12





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Cezar708 3.01.2008, 12:45:47
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 05:28