Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] Poprawność bindowania PDO
Darekxp
post 14.11.2012, 18:06:01
Post #1





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 13.05.2007

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


Witam!

Czy taki sposób bindowania jest poprawny/bezpieczny?

  1. <?php
  2. $thisPage = 'offer';
  3.  
  4. $categoryId = filter(isset($_GET['categoryId']));
  5. $itemId = filter(isset($_GET['itemId']));
  6.  
  7. ## DISPLAY PAGE ##
  8.  
  9. if($categoryId && $itemId)
  10. {
  11.  
  12. ## DATA ##
  13.  
  14.  
  15. $sql = $pdo->prepare('SELECT id, title_'.$_lang.', text_'.$_lang.', category, promotions, photo FROM '.$thisPage.' WHERE id=:id AND category=:category AND status="1" ');
  16. $sql->bindParam(':id', $itemId, PDO::PARAM_INT);
  17. $sql->bindParam(':category', $categoryId, PDO::PARAM_INT);
  18. $sql->execute();
  19. $data = $sql->fetchAll();
  20. $sql->closeCursor();
  21.  
  22. $smarty->assign('data',$data);
  23.  
  24. ## DISPLAY TEMPLATE ##
  25.  
  26. $smarty->display('templates/public/'.$thisPage.'_item.tpl');
  27. }
  28. else
  29. {
  30. //dalszy kod
  31. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
nospor
post 14.11.2012, 18:19:26
Post #2





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




Bindujesz dokładnie tak jak każą w manualu - wszystko ok. Czemu uważasz że może to byc niebezpieczne?


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

"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
viking
post 14.11.2012, 18:29:02
Post #3





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


Chyba że $_lang to jakiś $_REQUEST['lang'] wink.gif


--------------------
Go to the top of the page
+Quote Post
nospor
post 14.11.2012, 18:33:10
Post #4





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




No ale to już nie jest BINDOWANIE a autor wyraźnie się pyta o bindowanie wink.gif


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

"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
Darekxp
post 14.11.2012, 22:06:04
Post #5





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 13.05.2007

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


Od ok tygodnia uczę się OOP i jak mam jakieś wątpliwości to wole zapytać na forum, niż robić błędy.
Zmienna $_lang = filter($_GET['lang']);
Go to the top of the page
+Quote Post
zegarek84
post 14.11.2012, 22:23:11
Post #6





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


zapytanie select nie powinno być zależne od parametru get|post - na jego podstawie możesz ustalić/posklejać zapytanie ale nie na żywca, tak nie może być, reszta bindowania poprawnie i możesz tam wsadzać bindując nawet parametry z get i post...


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
Darekxp
post 15.11.2012, 14:15:58
Post #7





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 13.05.2007

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


Czyli lepiej zrobić to np tak: ?

  1. <?php
  2.  
  3. if($_lang == 'en')
  4. {
  5. $sql = $pdo->prepare('SELECT id, title_en, text_en, category, promotions, photo FROM '.$thisPage.' WHERE id=:id AND category=:category AND status="1" ');
  6. }
  7. else
  8. {
  9. $sql = $pdo->prepare('SELECT id, title_pl, text_pl, category, promotions, photo FROM '.$thisPage.' WHERE id=:id AND category=:category AND status="1" ');
  10. }
  11.  
  12.  
Go to the top of the page
+Quote Post
zegarek84
post 15.11.2012, 15:52:51
Post #8





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


tak, ale żeby kod był czytelniejszy to możesz określić sam $_lang na if'ach i potem go podpiąć, jeśli tych języków miałbyś masę, to mógłbyś sprawdzić, czy język z tego get'a znajduje się w tablicy, jeśli nie to jakiś defaultowy (w ten sposób także się ochronisz przed niechcianymi wartościami)
  1. $_lang = 'pl';
  2. $temp = isset($_GET['lang'])?strtolower($_GET['lang']):'';
  3.  
  4. if($temp === 'en')
  5. $_lang = $temp;
  6. $sql = $pdo->prepare('SELECT id, title_'.$_lang.', text_'.$_lang.', category, promotions, photo FROM '.$thisPage.' WHERE id=:id AND category=:category AND status="1" ');

po prostu popracuj jeszcze trochę nad czytelnością oraz byś łatwo mógł modyfikować kod w jak najmniejszej liczbie miejsc...

Ten post edytował zegarek84 15.11.2012, 16:05:04


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
Darekxp
post 17.11.2012, 18:56:08
Post #9





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 13.05.2007

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


Sprawdzanie języka mam zrobiony.
No ale chyba trochę odbiegamy od tematu, co chyba nie do końca jest wskazane ;p
Dzięki za pomoc:)


  1. $_lang = filter($_GET['lang']);
  2.  
  3. $_siteLang = array('pl','en');
  4.  
  5. if(!in_array($_lang,$_siteLang))
  6. {
  7. header('Location: /pl/');
  8. }
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 Wersja Lo-Fi Aktualny czas: 27.06.2025 - 22:34