Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: $_POST - %2C zamiast przecinka
Forum PHP.pl > Forum > PHP
Amakesh
Witam! Mam dwa skrypty pierwszy przesyła wartość wybraną przez użytkownika przy pomocy <select> a drugi na tej podstawie wczytuje dane z bazy. Problem jest w sytuacji gdy potrzebuję wyświetlić na raz np pokoje z balkonem i bez balkonu czyli i balcony=1 i balcony =0. Próbuję przesłać z pierwszego skryptu dwie wartości w jednej zmiennej i potem umieścić w zapytaniu jako "..balcony IN(1,0)".
Niestety zamiast przecinka przechodzi "%2C" i nijak nie udaje mi się tego podmienić. Próbowałam przesyłać coś innego zamiast przecinka i potem to na ten przecinek podmienić, ale - za każdym razem łapie tylko 1.

Skrypt 1: jQuery
[JAVASCRIPT] pobierz, plaintext
  1. function loadResources() {
  2. var balcony = "";
  3. var balc = jQuery("#filter2").val();
  4. if(balc == "all"){balcony = "1I0";}
  5. if(balc =="tak"){balcony = "1I1";}
  6. if(balc =="nie"){balcony = "0I0";}
  7. console.log(balcony);
  8. jQuery.post("/administrator/modules/mod_activate/backend_rooms.php",
  9. { type: jQuery("#filter").val().slice(1,-1),
  10. parent: jQuery("#owner").val(),
  11. balcony: balcony },
  12. function(data) {
  13. dp.resources = data;
  14. dp.update();
  15.  
  16. });
  17. }
[JAVASCRIPT] pobierz, plaintext



Skrypt 2: PHP

  1. $balcony = "";
  2. $balcony = str_replace("I", "," ,$_POST['balcony']);
  3.  
  4. $stmt = $db->prepare("SELECT * FROM jos_program_room WHERE owner = :parent AND balcony IN(:balcony) AND (type = :type OR :type = '0') ORDER BY room_nr");
  5. $stmt->bindParam(':type', $_POST['type']);
  6. $stmt->bindParam(':parent', $_POST['parent']);
  7. $stmt->bindParam(':balcony', $balcony );
  8. //echo '<script>console.log('.$db.');</script>';
  9. $stmt->execute();
  10. $rooms = $stmt->fetchAll();
  11.  
  12. class Room {}
  13.  
  14. $result = array();
  15.  
  16. foreach($rooms as $room) {
  17. $r = new Room();
  18. $r->id = $room['room_nr'];
  19. $r->type = $room['type'];
  20. $r->name = $room['room_nr'];
  21. $r->capacity = $room['capacity'];
  22. $r->status = $room['status'];
  23. $r->balkon = $room['balcony'];
  24. $result[] = $r;
  25.  
  26. }
  27.  
  28. header('Content-Type: application/json');
  29. echo json_encode($result);
  30.  
  31. ?>
Tomplus
Może w pierwszym rzucie spróbuj:

  1. urldecode ( $_POST['balcony'] );


Zdekoduje ci wartość do %2C do przecinku.


Ja nie, to spróbuj dodać do bindParam informację że jest to STRING.

  1. $sth->bindParam(':balcony', $_POST['balcony'], PDO::PARAM_STR, 12); //oczywiście bez strparsera 1,0


w trzecim rzucie, zobacz co masz pod _POST. Może nie przesyłasz tego co należy. Wtedy zobaczysz co masz źle.

  1. print_r($_POST);



Amakesh
1. Nie działa

2. j.w

3. Przesyłam to co należy - jeśli spróbuję odebrać do zwykłej zmiennej, łapie wszystko łącznie z przecinkiem.
  1. $balcony = $_POST['balcony'];
ale jeśli potem spróbuję z tą zmienną:

  1. $stmt->bindParam(':balcony', urldecode($balcony), PDO::PARAM_STR);
lub
  1. $stmt->bindParam(':balcony', $balcony);


dalej wyświetla z bazy tylko rekordy z balcony = 1.
Tomplus
Dobra, chyba już wiem w czym problem. Zrobiłem podobną operację na swojej bazie.

Będziesz musiał zrobić tak:

  1. $balcony = explode(',', $_POST['balcony']);
  2. $stmt = $db->prepare("SELECT * FROM jos_program_room WHERE owner = :parent AND balcony IN(:balcon1, :balcon2) AND (type = :type OR :type = '0') ORDER BY room_nr");
  3. $stmt->bindParam(':balcon1', $balcony[0]);
  4. $stmt->bindParam(':balcon2', $balcony[1]);


Dlaczego tak? Bo przygotowując zapytanie, umieszczasz w IN string, a nie wartości integer oddzielone przecinkami czyli kod wygląda jak: '1,0' zamiast 1,0, albo '1','0'. I tutaj, gdy dałem:
IN ('1,0') -> miałem tylko wartości z 1.
IN (1,0) -> otrzymałem wartości z 0 i 1
IN ('1','0') -> j.w.

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.