Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> filtorwanie danych w wyszukiwarce
peklo
post 9.04.2014, 11:55:39
Post #1





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

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


Korzystając z przykładowego skryptu nospor dot. wykonania wyszukiwarki stanąłem w jednym miejscu a mianowicie bindowania przesyłanych danych. Mam coś takiego i nie wiem co i jak wstawić żeby te dane zostały przefiltorwane

  1. if (!empty($_POST['nazwa_ogloszenia']))
  2. {
  3. $wh[] = "nazwa_ogloszenia LIKE '%$nazwa_ogloszenia%'";
  4. }
  5. if (!empty($_POST['id_kategoria']))
  6. {
  7. $wh[] = 'id_kategoria = '.'"'.$_POST['id_kategoria'].'"';
  8. }
  9.  
  10. if (!empty($wh))
  11. {
  12. $where = 'WHERE '.implode(' and ', $wh);
  13. $stmt = $pdo -> prepare("SELECT nazwa_ogloszenia,id_kategoria,aktywne FROM ogloszenia ".$where." and aktywne=:aktywne");
  14. $stmt -> bindValue(':aktywne', 1, PDO::PARAM_INT);
  15.  
  16. //i tutaj chodzi mi jak wykonać bindValue dla tego id_kategoria i nazwa_ogloszenia
  17.  
  18. $stmt -> execute();
  19. }
Go to the top of the page
+Quote Post
fizzlebubble
post 9.04.2014, 11:58:25
Post #2





Grupa: Zarejestrowani
Postów: 272
Pomógł: 28
Dołączył: 13.02.2011

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


Cytat
aktywne=:aktywne");


Od kiedy to w PHP są symbole?


--------------------
Nie obrażę się, jeśli za udzieloną pomoc odwdzięczysz się klikając w "Pomógł" :).
Go to the top of the page
+Quote Post
peklo
post 9.04.2014, 11:59:50
Post #3





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

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


to jak mam to napisać? bez:?

Ten post edytował peklo 9.04.2014, 12:00:10
Go to the top of the page
+Quote Post
fizzlebubble
post 9.04.2014, 12:00:52
Post #4





Grupa: Zarejestrowani
Postów: 272
Pomógł: 28
Dołączył: 13.02.2011

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


Spróbuj bez : w obu przypadkach, jednakże nie sądzę, aby to rozwiązało ten konkretny problem.

Ten post edytował fizzlebubble 9.04.2014, 12:01:40


--------------------
Nie obrażę się, jeśli za udzieloną pomoc odwdzięczysz się klikając w "Pomógł" :).
Go to the top of the page
+Quote Post
peklo
post 9.04.2014, 12:05:37
Post #5





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

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


ale ja pytałem o co innego. jak przefiltorwać nazwa_ogloszenia i id_ogloszenia

a poza tym ten zapis aktywne=:aktywne jest wg mnie jak najbardziej prawidłowy
Go to the top of the page
+Quote Post
IProSoft
post 9.04.2014, 12:18:09
Post #6





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


  1. $bind = array(
  2. ':aktywne' => 1
  3. );
  4.  
  5. $where = array(
  6. 'aktywne=:aktywne'
  7. );
  8.  
  9. if ( !empty( $_POST['nazwa_ogloszenia'] ) )
  10. {
  11. $where[] = "nazwa_ogloszenia LIKE '%:nazwa_ogloszenia%'";
  12. $bind[':nazwa_ogloszenia'] = $_POST['nazwa_ogloszenia'];
  13. }
  14.  
  15. if ( !empty( $_POST['id_kategoria'] ) )
  16. {
  17. $where[] = "id_kategoria = '%:id_kategoria%'";
  18. $bind[':id_kategoria'] = $_POST['id_kategoria'];
  19. }
  20.  
  21. if ( count( $where ) > 1 )
  22. {
  23. $stmt = $pdo->prepare("SELECT nazwa_ogloszenia,id_kategoria,aktywne FROM ogloszenia WHERE ". implode( ' AND ', $where ) );
  24. $stmt->execute( $bind );
  25. }


Nie sprawdzone, tylko pokazuję przykładowe rozwiązanie.

Ten post edytował IProSoft 9.04.2014, 12:19:24


--------------------
Manual prawdę Ci powie.
Go to the top of the page
+Quote Post
peklo
post 9.04.2014, 12:22:19
Post #7





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

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


acha myslwłem że to sprawdzenie mozna wrzucic tutaj

$stmt -> bindValue(nazwa_ogloszenia itd..);
Go to the top of the page
+Quote Post
Turson
post 9.04.2014, 12:38:37
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Cytat(fizzlebubble @ 9.04.2014, 12:58:25 ) *
Od kiedy to w PHP są symbole?

To PDO tongue.gif


Generalnie jak chcesz przebindować dane w tablicy, można to zrobić też pętlą.
Go to the top of the page
+Quote Post
nospor
post 9.04.2014, 13:25:33
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




nie:
$where[] = "nazwa_ogloszenia LIKE '%:nazwa_ogloszenia%'";
$bind[':nazwa_ogloszenia'] = $_POST['nazwa_ogloszenia'];

a:
$where[] = "nazwa_ogloszenia LIKE :nazwa_ogloszenia";
$bind[':nazwa_ogloszenia'] = '%'.$_POST['nazwa_ogloszenia'].'%';

ANalogicznie reszta.
Jesli nadal jeszcze nie dziala, to napisz czym sie objawia niedzialanie i jakie sa bledy


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
peklo
post 9.04.2014, 13:46:43
Post #10





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

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


po wlaczeniu bledów mam tylko to
Notice: Undefined variable: stmt in ... (tu link do pliku stony) on line 116

Fatal error: Call to a member function fetch() on a non-object in ... (tu link do pliku stony) on line 116


za tym
  1. $stmt->execute($bind);
  2. }
  3. //mam
  4.  
  5. while($ogloszenia = $stmt -> fetch())
  6. {
  7.  
  8. //wyniki na stronie
  9. }


Ten post edytował peklo 9.04.2014, 13:47:48
Go to the top of the page
+Quote Post
Turson
post 9.04.2014, 13:56:55
Post #11





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


$a = $stmt->execute($bind);

while($ogloszenia = $a -> fetch())
Go to the top of the page
+Quote Post
peklo
post 9.04.2014, 14:11:53
Post #12





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

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


kurde nadal nie działa:(
A nie da się tego w jakiś prostrzy sposób dostosować do tego skryptu który podałem na poczatku.
id_kategoria chyba może być bez like bo to int wybierany z pola select
Go to the top of the page
+Quote Post
nospor
post 9.04.2014, 14:14:08
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A czymze znowu objawia sie to nie dzialanie??

I tak, jesli cos jest liczba to logicze ze nie uzywasz LIKE.....


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
peklo
post 9.04.2014, 14:22:40
Post #14





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

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


nospor to niedziałanie objawia się tym że niedziała smile.gif)
Pewnie coś niee tak z tym warunkiem WHERE.
Wkleiłem to
error_reporting(E_ALL); ini_set('display_errors','1');
i wyskoczyły mi błędy takie jak wkleiłem
Wiem że ty wiesz jak to można dostosować w prosty sposób do skryptu który przykleiłem na początku smile.gifsmile.gif
Go to the top of the page
+Quote Post
nospor
post 9.04.2014, 14:25:56
Post #15





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Czyli nadal masz ten blad?
Notice: Undefined variable: stmt in ... (tu link do pliku stony) on line 116
Toz wyraznie napisane, ze uzyuwasz zmiennej, ktorej nie ma :/


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
peklo
post 9.04.2014, 14:30:00
Post #16





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

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


wiem że chodzi o zmienną której nie ma. Ok idę po dziecko.
a nie da się tego wrzucić jakoś w to:

$stmt -> bindValue(':nazwa_ogloszenia', $where, PDO::PARAM_STR);

$stmt -> bindValue(':id_kategoria', $where, PDO::PARAM_STR);


questionmark.gif?

Ten post edytował peklo 9.04.2014, 14:30:26
Go to the top of the page
+Quote Post
Turson
post 9.04.2014, 14:37:36
Post #17





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Pokaż cały ten kod to łatwiej będzie
Go to the top of the page
+Quote Post
peklo
post 9.04.2014, 18:15:51
Post #18





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

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


tak na szybko znowu zmieniłem po nowemu i nic

  1. $username=$_SESSION['user'][4];
  2. $bind = array(
  3. ':aktywne' => 1,
  4. ':username' => $_SESSION['user'][4]
  5. );
  6.  
  7. $where = array(
  8. 'aktywne=:aktywne',
  9. 'username=:username'
  10. );
  11. if (!empty($_POST['nazwa_ogloszenia']))
  12. {
  13. $where[] = "nazwa_ogloszenia LIKE :nazwa_ogloszenia";
  14. $bind[':nazwa_ogloszenia'] = '%'.$_POST['nazwa_ogloszenia'].'%';
  15. }
  16. if (!empty($_POST['id_kategoria']))
  17. {
  18. $where[] = 'id_kategoria = '.'"'.$_POST['id_kategoria'].'"';
  19. $bind[':id_kategoria'] = $_POST['id_kategoria'];
  20. // tj wartośc int z pola select nie wiem czy bindować czy nie
  21. }
  22.  
  23. try
  24. {
  25. $pdo = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
  26. $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
  27. if ( count( $where ) > 1 )
  28. {
  29. $stmt = $pdo->prepare("SELECT nazwa_ogloszenia,id_kategoria,aktywne FROM ogloszenia WHERE ". implode( ' AND ', $where ) );
  30. $a = $stmt->execute($bind);
  31. }
  32. else
  33. {
  34. $stmt = $pdo->prepare("SELECT nazwa_ogloszenia,id_kategoria,aktywne FROM ogloszenia WHERE aktywne=:aktywne and username=:username");
  35. $stmt -> bindValue(':username', $username, PDO::PARAM_STR);
  36. $stmt -> bindValue(':aktywne', 1, PDO::PARAM_INT);
  37. $stmt -> execute();
  38. $a = $stmt->execute();
  39. }
  40. while($ogloszenia = $a -> fetch())
  41. {
  42.  
  43. //przykładowe dane
  44. echo $ogloszenia['nazwa_ogloszenia'];
  45. }
  46. $stmt -> closeCursor();
  47. }
  48. catch(PDOException $e)
  49. {
  50. echo 'Wystapił błąd.';
  51. }


a skoro mam skrypt wg starego schematu
  1. <input type='text' size='50' class='style7' maxlength='50' name="nazwa_ogloszenia" id="nazwa_ogloszenia">
  2.  
  3. <select name="id_kategoria" class="style7" id="id_kategoria">
  4. <option value=''>--wybierz--</option>
  5. <option value='1'>Dam pracę</option>
  6. //itd
  7. <option>
  8.  
  9. //i wyciagam to czego szukam z tego warunku
  10.  
  11. if (!empty($_POST['nazwa_ogloszenia']))
  12. {
  13. $wh[] = "nazwa_ogloszenia LIKE '%$nazwa_ogloszenia%'";
  14. }
  15. if (!empty($_POST['id_kategoria']))
  16. {
  17. $wh[] = 'id_kategoria = '.'"'.$_POST['id_kategoria'].'"';
  18. }
  19.  
  20. if (!empty($wh))
  21. {
  22. $where = 'WHERE '.implode(' and ', $wh);
  23. select from tabela ".$where."
  24. }
  25. else
  26. {
  27. select * from tabela
  28. }
  29.  
  30. //to nie mogę poprostu wpisać
  31. $stmt -> bindValue(':id_kategoria', $_POST['id_kategoria'], PDO::PARAM_STR);
  32. //itd


Ten post edytował peklo 9.04.2014, 18:16:27
Go to the top of the page
+Quote Post
IProSoft
post 9.04.2014, 18:59:03
Post #19





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


Wrzuć, odpal i napisz co się dzieje.

  1. $username = $_SESSION['user'][4];
  2.  
  3. $bind = array(
  4. ':aktywne' => 1,
  5. ':username' => $username
  6. );
  7.  
  8. $where = array(
  9. 'aktywne = :aktywne',
  10. 'username = :username'
  11. );
  12. if (!empty($_POST['nazwa_ogloszenia']))
  13. {
  14. $where[] = "nazwa_ogloszenia LIKE :nazwa_ogloszenia";
  15. $bind[':nazwa_ogloszenia'] = '%' . $_POST['nazwa_ogloszenia'] . '%';
  16. }
  17. if (!empty($_POST['id_kategoria']))
  18. {
  19. $where[] = 'id_kategoria = :id_kategoria';
  20. $bind[':id_kategoria'] = $_POST['id_kategoria'];
  21. }
  22.  
  23. try{
  24.  
  25. $pdo = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
  26. $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
  27.  
  28. $stmt = $pdo->prepare("SELECT nazwa_ogloszenia,id_kategoria,aktywne FROM ogloszenia WHERE ". implode( ' AND ', $where ) );
  29. $a = $stmt->execute( $bind );
  30.  
  31. while( $ogloszenia = $a->fetch() )
  32. {
  33. echo $ogloszenia['nazwa_ogloszenia'];
  34. }
  35. $stmt -> closeCursor();
  36. }
  37. catch(PDOException $e)
  38. {
  39. echo 'Wystapił błąd.';
  40. }


--------------------
Manual prawdę Ci powie.
Go to the top of the page
+Quote Post
peklo
post 9.04.2014, 19:14:20
Post #20





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

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


jest to samo co było
Call to a member function fetch() on a non-object in
A nie da sie tego zrobić jak pisałem wcześniej że wszystkie zmienne wrzucić bezpośrednio do bindvalue
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 10:31