Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przekazanie parametrów do zapytania
Forum PHP.pl > Forum > PHP
beel
Mam stronkę na której są w tabeli wyświetlane dane z bazy psql i wszystko jest ok.
Teraz jednak chciałbym aby do dwóch pól można było wpisać datę OD i DO, a dalej użyć tych dat w zapytaniu SQL, czyli zmodyfikować wynik zapytania o te daty. Dalej klikamy WYKONAJ... Myślałem o JavaScript, ale onclick() dla buttona nie daje chyba takiej możliwości..
Jak to najlepiej rozwiązać?
DiH
JavaScript to jedno, ale PHP to drugie. Onclick wywołuje jakąś akcję - JavaScript, PHP natomiast wykonuje zapytanie do bazy. Żeby osiągnąć to, o czym myślisz stwórz sobie np. jakiś oddzielny plik, który będziesz miał zapytanie aktualizujące datę. Po kliknięciu na przycisk przejdziesz do strony, która wykona to zapytanie. Możesz tu użyć header("Location: <tu adres/plik>"); aby powrócić do poprzedniej strony.

Aby nie przechodzić do nowej strony po kliknięciu buttona masz do dyspozycji kilka opcji. Dwie z nich to albo prosty ajax (pogooglaj jquery ajax), albo umieścić na stronie iframe, który będzie to wykonywał. W przypadku ajaxu, masz możliwość zmiany zawartości strony zależnie od tego, co zwróciło zapytanie.

Mam nadzieję, że datę w bazie trzymasz w odpowiednim typie pola, choćby i DATE. Jeżeli będziesz chciał, aby przy każdej wykonanej akcji (kliknięcie twojego buttona) aktualizowana została data i/lub czas, to możesz użyć sqlowej funckji NOW()
$sql = "UPDATE tabela SET pole=NOW()".

Jeżeli nie ma to być automatyczna zmiana, to po prostu robisz update daty zmieniając NOW() z powyższego zapytania na '" .date("Y-m-d"). ". Jest jeszcze możliwość użycia TIMESTAMP, ale o tym doedukuje Cię już manual.
beel
Chcę wykorzystać na razie na banalnym przykładzie (podmiana treści diva) technologię AJAX.

Mam trzy pliki:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.  
  4. </head>
  5. <div id="pojemnik">
  6. <ol id="menu">
  7. <li><a href="#"
  8. onclick="wymienTresc('fragment-abba.html', 'content');">
  9. ABBA: Super Trouper
  10. </a></li>
  11. <li><a href="#"
  12. onclick="wymienTresc('fragment-bob_dylan.html', 'content');">
  13. Bob Dylan: Basement Tapes
  14. </a></li>
  15.  
  16. </ol>
  17. <div id="content"></div>
  18. </div>
  19.  
  20. <script type="text/javascript">
  21. var r;
  22. var e;
  23.  
  24. function odbierzDane()
  25. {
  26. if (r.readyState == 4) {
  27. if (r.status == 200 || r.status == 304) {
  28. e.innerHTML = r.responseText;
  29. }
  30. }
  31. }
  32.  
  33. function wymienTresc(adresurl, htmlid)
  34. {
  35. if (r = getXMLHttpRequest()) {
  36. e = document.getElementById(htmlid);
  37. r.open('GET', adresurl);
  38. r.onreadystatechange = odbierzDane;
  39. r.send(null);
  40. }
  41. }
  42. </body>
  43. </html>


  1. <h1>Bob Dylan</h1>
  2. <h2>Basement Tapes</h2>
  3. <h2>1975</h2>
  4. <tr>
  5. <th>lp.</th>
  6. <th>title</th>
  7. <th>czas</th>
  8. </tr>
  9.  
  10. <tr>
  11. <td>1.</td>
  12. <td>Odds and Ends</td>
  13. <td>1:46</td>
  14. </tr>
  15.  
  16. <tr>
  17. <td>2.</td>
  18. <td>Orange Juice Blues (Blues for Breakfast)</td>
  19. <td>3:37</td>
  20. </tr>
  21. ...
  22. </table>


  1. <h1>Bob Dylan</h1>
  2. <h2>Basement Tapes2222</h2>
  3. <h2>19752222</h2>
  4. <tr>
  5. <th>lp.</th>
  6. <th>title</th>
  7. <th>czas</th>
  8. </tr>
  9.  
  10. <tr>
  11. <td>1.</td>
  12. <td>Odds and Ends</td>
  13. <td>1:46</td>
  14. </tr>
  15.  
  16. <tr>
  17. <td>2.</td>
  18. <td>Orange Juice Blues (Blues for Breakfast)</td>
  19. <td>3:37</td>
  20. </tr>
  21. ...
  22. </table>


I jeśli na stronie głównej index.html kliknę w link nic się nie dzieje, w powinna się zmieniać wartość diva.
PS. Dwa pozostałe pliki nazywają się tak jak wskazuje na nie URL.
thek
Pytam teraz poważnie... Jaki sens ma podzielenie tego co robi AJAX na dwie funkcje? W ten sposób tylko sobie kłopoty gotujesz bo sie możesz pogubić z zasięgiem zmiennych. W tej chwili zmienne r i e są nagle z powietrza nie wiadomo czym. Weź zacznij używać jakiegoś debuggera JavaScript i zobacz czym pluje Ci konsola błedów.
beel
Może źle wyjaśniłem, ale chodziło mi o coś takiego: http://gajdaw.pl/ajax/ajax-php-wymiana-fragmentu-strony/
tehaha
tylko po co bawić się ajaxem, skoro w jQuery to jest 5 linijek kodu http://api.jquery.com/jQuery.ajax/

przykład z tej strony:
[JAVASCRIPT] pobierz, plaintext
  1. $.ajax({
  2. type: "POST",
  3. url: "some.php",
  4. data: "name=John&location=Boston",
  5. success: function(html){
  6. $("#results").append(html);
  7. }
  8. });
[JAVASCRIPT] pobierz, plaintext


przekazujesz parametry do skryptu metodą POST i w najprostszym przypadku zwracasz skryptem php całą nową listę html do podmiany w divie, lub możesz zwrócić dane w formacie json i wygenerować nową listę
thek
W sumie można jeszcze szybciej... load() wink.gif
Ten artykuł chyba wyjaśnia wszystko łopatologicznie aż do bólu... http://net.tutsplus.com/tutorials/javascri...ls-with-jquery/
beel
Cytat(tehaha @ 10.06.2011, 15:28:59 ) *
tylko po co bawić się ajaxem, skoro w jQuery to jest 5 linijek kodu http://api.jquery.com/jQuery.ajax/

przykład z tej strony:
[JAVASCRIPT] pobierz, plaintext
  1. $.ajax({
  2. type: "POST",
  3. url: "some.php",
  4. data: "name=John&location=Boston",
  5. success: function(html){
  6. $("#results").append(html);
  7. }
  8. });
[JAVASCRIPT] pobierz, plaintext


przekazujesz parametry do skryptu metodą POST i w najprostszym przypadku zwracasz skryptem php całą nową listę html do podmiany w divie, lub możesz zwrócić dane w formacie json i wygenerować nową listę

A ten przykładowy kod, który podałeś umieszczam w HTML'u czy PHP?
tehaha
do dokumentu html załączasz plik z biblioteką jQuery a w html dajesz coś takiego:

  1. <script type="text/javascript">
  2. $(document).ready(function()
  3. {
  4. $.ajax({
  5. type: "POST",
  6. url: "some.php",
  7. data: "name=John&location=Boston",
  8. success: function(html){
  9. $("#results").append(html);
  10. }
  11. });
  12. });


lub prościej z użyciem load() jak wspomniał @thek, oczywiście to jest nie działający przykład i musisz go dostosować do swoich potrzeb
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.