Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zakres daty OD ... DO do wyszukania
Forum PHP.pl > Forum > PHP
maniek22
Witam. Moze ktoś mi pomoże bo nie moge znalezc nigdzie jak zmodyfikowac moj skrypt zebym mogl wyszukiwac date z zakresu OD .. DO wpisanego w formularzu. Moze ktos wie jak zmienic skrypt.

Dzieki. smile.gif


  1. <?
  2. include_once("funkcje.php");
  3.  
  4. echo "<center><h2>Oto dane spełniajace kryteria wyszukiwania:</h2></center>";
  5.  
  6. $zapytanie = "select * from klienci";
  7. If ($Handlowiec<>""||$Data<>""||$Nr_umowy<>""||$Nazwisko<>""||$Miejscowosc<>""||$Towar<>""){
  8. $zapytanie=$zapytanie." where";
  9. if ($Handlowiec<>"") $zapytanie=$zapytanie." Handlowiec like '%$Handlowiec%' and";
  10. if ($Data<>"") $zapytanie=$zapytanie." Data like '%$Data%' and";
  11. if ($Nr_umowy<>"") $zapytanie=$zapytanie." Nr_umowy like '%$Nr_umowy%' and";
  12. if ($Nazwisko<>"") $zapytanie=$zapytanie." Nazwisko like '%$Nazwisko%' and";
  13. if ($Miejscowosc<>"") $zapytanie=$zapytanie." Miejscowosc='$Miejscowosc' and";
  14. if ($Towar<>"") $zapytanie=$zapytanie." Towar='$Towar' and";
  15. $zapytanie = substr($zapytanie, 0, -3);
  16. }
  17.  
  18. $zapytanie = $zapytanie." order by ID_Klienta";
  19.  
  20. wyswietl_klientow($zapytanie);
  21.  
  22. ?>
Cezar708
NIe napisales jaka baza danych.

jesli MySQL to zadziala na przyklad

  1. (...) WHERE DATA > '$data_od' AND DATA < '$data_do'


w PostgreSQL np:

  1. (...) WHERE DATA BETWEEN '$data_od' AND '$data_do'


PS:
  1. <?php
  2. if ($Data<>"") $zapytanie=$zapytanie." Data like '%$Data%' and";
  3. ?>


iLIKE do sprawdzania daty?? Czy kolumna `Data` jest chociaż typu Date?
maniek22
Tak baza jest na MySQL. Co do drugiego pytania to Kolumna z data jest typu Data.


Moze jakas podpowiedz jak zmodyfikowac ten skrypt, ew. co wyrzucic

Dzieki
Cezar708
No jeśli chodzi o datę to juz wiesz,
Zamiast
  1. <?php
  2. if ($Data<>"") $zapytanie=$zapytanie." Data like '%$Data%' and";
  3. ?>

Wstawiłbym
  1. <?php
  2. if ($Data<>"") $zapytanie=$zapytanie." Data = '$Data' and";
  3. ?>

lub jeśli masz przedział to:
  1. <?php
  2. $zapytanie=$zapytanie." Data > '$data_od' AND Data < '$data_do' and";
  3. ?>

najlepiej żeby kolumna handlowiec była typu integer i była kluczem obcym do tabeli `Handlowcy`
więc zmieniłbym:
  1. <?php
  2. if (is_numeric($Handlowiec)) $zapytanie=$zapytanie." Handlowiec='$Handlowiec' and";
  3. ?>

podobnie z kolumnami Miejscowość i Towar.

Chciaż szczerze mówiąc zastanawiam się do czego służy Ci tabela `klienci` może zamiast niej lepsza byłaby tabela `zamowienia` a w niej klucz obcy do tabeli `klienci`??
Void(Null)
Cytat(maniek22 @ 6.05.2007, 17:16:12 ) *
Tak baza jest na MySQL. Co do drugiego pytania to Kolumna z data jest typu Data.
Moze jakas podpowiedz jak zmodyfikowac ten skrypt, ew. co wyrzucic

Dzieki


  1. ...DATA LIKE '%$Data%'
- BTW: Metoda LIKE przy przeszukiwaniu dat to bardzo dobre rozwiązanie kiedy chcesz uzyskać rekordy z "częściowego" zakresu. Dla np. rekordów z Marca 2006 roku możesz do kwerendy przesłać ciąg 2006-03, dla samych "marców" -03-.

Pozdr
maniek22
Zmodyfikowałem tak jak radziłes skrypt ale niestety przy wpisywaniu zakresu od .. do w formularzu wyswietla mi wszystkie rekordy bez wzgledu na to co wpisalem w pola daty. Nie wiem co moze byc tego powodem.


  1. <?
  2. include_once("funkcje.php");
  3.  
  4. echo "<center><h2>Oto dane spełniajace kryteria wyszukiwania:</h2></center>";
  5.  
  6. $zapytanie = "select * from klienci";
  7. If ($Handlowiec<>""||$Data<>""||$Nr_umowy<>""||$Nazwisko<>""||$Miejscowosc<>""||$Towar<>""){
  8. $zapytanie=$zapytanie." where";
  9. if ($Handlowiec<>"") $zapytanie=$zapytanie." Handlowiec like '%$Handlowiec%' and";
  10. if ($Data<>"") $zapytanie=$zapytanie." Data > '$Data_od' AND Data < '$Data_do' and";
  11. if ($Nr_umowy<>"") $zapytanie=$zapytanie." Nr_umowy like '%$Nr_umowy%' and";
  12. if ($Nazwisko<>"") $zapytanie=$zapytanie." Nazwisko like '%$Nazwisko%' and";
  13. if ($Miejscowosc<>"") $zapytanie=$zapytanie." Miejscowosc='$Miejscowosc' and";
  14. if ($Towar<>"") $zapytanie=$zapytanie." Towar='$Towar' and";
  15. $zapytanie = substr($zapytanie, 0, -3);
  16. }
  17.  
  18. $zapytanie = $zapytanie." order by ID_Klienta";
  19.  
  20. wyswietl_klientow($zapytanie);
  21.  
  22. ?>



--
napisałeś dwa razy to samo - poprawiłem
~siemakuba
miska
... a co pozostanie z twojego zapytania gdy jedna ze zmiennych tj. $towar okaże sie pusta questionmark.gif ... baza się wywali ...
maniek22
Nie jeżeli nie wprowadze zadnej wartosci w formularzu to wyswietla mi wszystkie rekordy, mozna tez wpisac jedno kryterium , dwa lub wiecej. Tylko nie dziala mi nadal ten zakres daty od.. do i nie wiem co jest tego przczyczyna.
miska
Cytat(maniek22 @ 8.05.2007, 18:38:47 ) *
Nie jeżeli nie wprowadze zadnej wartosci w formularzu to wyswietla mi wszystkie rekordy, mozna tez wpisac jedno kryterium , dwa lub wiecej. Tylko nie dziala mi nadal ten zakres daty od.. do i nie wiem co jest tego przczyczyna.


  1. <?php
  2. $zapytanie = substr($zapytanie, 0, -3);
  3. }
  4. ?>
sorry nie zauważyłem tego winksmiley.jpg

a nie lepiej przenieść AND na początek każdej $zapytanie i masz jedna linijkę kodu mniej ?
Kicok
Cytat
a nie lepiej przenieść AND na początek każdej $zapytanie i masz jedna linijkę kodu mniej ?

Wtedy może wyjść zapytanie typu:
SELECT * FROM klienci WHERE AND towar = '$Towar'

Naprawienie tego zapytania to też jedna linijka kodu, w dodatku bardziej skomplikowana ;]
prond
A może zrzucać warunki do tablicy, a potem implode :
  1. <?php
  2. $arrConditions = array();
  3.  
  4. if ($Handlowiec<>"") $arrConditions[] = " Handlowiec like '%$Handlowiec%'";
  5. if ($Data<>"") $arrConditions[] = " Data > '$Data_od' AND Data < '$Data_do'";
  6. if ($Nr_umowy<>"") $arrConditions[] = " Nr_umowy like '%$Nr_umowy%'";
  7. if ($Nazwisko<>"") $arrConditions[] = " Nazwisko like '%$Nazwisko%'";
  8. if ($Miejscowosc<>"") $arrConditions[] = " Miejscowosc='$Miejscowosc'";
  9. if ($Towar<>"") $arrConditions[] = " Towar='$Towar'";
  10.  
  11. $strConditions = (empty($arrConditions)) ? '' : "where ".implode(' and ', $arrConditions);
  12. ?>
Sopnet
  1. <?php
  2. $zapytanie = "select * from klienci WHERE 1";
  3. if ($Handlowiec<>"") $zapytanie .= " AND Handlowiec like '%$Handlowiec%' ";
  4. if ($Data<>"") $zapytanie .= " AND Data > '$Data_od' AND Data < '$Data_do' ";
  5. ?>

itd smile.gif

Co do daty to nie wiem co zawieraja zmienne $Data. $Data_od i $Data_do

Ja bym sprawdzal datay. Czy np nie sa takie same, czy $Data_do nie jest mniejsza od $Data_od, itd. Moze sprobuj "Data BETWEEN $Data_od AND $Data_do.
maniek22
Zmodyfikowalem skypt tak jak radziles ale niestety dalej wyswietla mi wszystkie rekordy.

  1. <?
  2. include_once("funkcje.php");
  3.  
  4. echo "<center><h2>Oto dane spełniajace kryteria wyszukiwania:</h2></center>";
  5.  
  6. $zapytanie = "select * from klienci WHERE 1";
  7. if ($Handlowiec<>"") $zapytanie .= " AND Handlowiec like '%$Handlowiec%' ";
  8. if ($Data<>"") $zapytanie .= " Data BETWEEN '$Data_od' AND '$Data_do'";
  9. if ($Nr_umowy<>"") $zapytanie .= " AND Nr_umowy like '%$Nr_umowy%' ";
  10. if ($Nazwisko<>"") $zapytanie .= " AND Nazwisko like '%$Nazwisko%' ";
  11. if ($Miejscowosc<>"") $zapytanie .= " AND Miejscowosc like '%$Miejscowosc%' ";
  12. if ($Towar<>"") $zapytanie .= " AND Towar like '%$Towar%' ";
  13.  
  14.  
  15.  
  16. $zapytanie = $zapytanie." order by ID_Klienta";
  17.  
  18. wyswietl_klientow($zapytanie);
  19.  
  20. ?>


Moze dodam jeszcze jakie mam kolumny w mysql: Id_klienta, Handlowiec, Nr_umowy, Nazwisko, Imie, Miejscowosc, Adres, Telefon, Raty, Towar, Ilosc, Cena, Wartosc, Data

A formularz wyszukiwania ma takie pola: Handlowiec, Data_od, Data_do, Nr_umowy, Miejscowosc, Towar


Moze to troche rozjasni sytuacje i ktoś bedzie wiedział co zle mam napisane?
aguirre
Cytat
if ($Data<>"") $zapytanie .= " Data BETWEEN '$Data_od' AND '$Data_do'";


Jesli w formularzu masz Data_od i Data_do to nie wiem po co jest w ogole zmienna $Data.

Inne uwagi:

1. Byc moze sensownie byloby podzielic kazda z dat (Data_od i Data_do) na Data_od_rok, Data_od_ms, Data od_dzien, Data_do_rok, Data_do_ms, Data_do_dzien; dla kazdej stowrzyc osobe pole SELECT z domyslnie wybrana odpowiednio najstarasza i dzisiejsza data. Wtedy w ogole nie musialoby byc pogrubionego warunku bo obie (sklejone juz) daty nie moglyby byc puste.

2. Jesli jeden klient moze dostarczac wiecej niz jeden towar, pewnie sensowanie byloby stworzyc osobna tabele Towary z kluczem obcym Id_klienta.
maniek22
Probowałem juz różnych kombinacji ale niestety nie dzialaja. Moze ktos juz mial podobny problem i moglby sie podzielic rozwiazanie bo nie moge sobie poradzic.

Wielkie dzieki!

Widze ze moj temat chyba umarl.

Wykonując skrypt w mysql wszystko ladnie dziala i wyswietla mi daty z zadanego zakresu ale w php nie chce (wyswietla wszystkie daty), nie wiem co moze byc nie tak juz roznych mozliwosci probowalem.
Prosze o jakas pomoc.
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.