Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przekształcenia switcha na ifa
TetTheGod
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 23.12.2016

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


Witam, mam taki problem że chcę przekształcić switcha z kategoriami na ifa, tak abym mógł dodawac nowe kategorie z poziomu UI, bez grzebania w kodzie.
mam taki kod switcha:
  1.  
  2. switch($_POST['category'])
  3. {
  4. case'coins':
  5. $_SESSION['category'] = $_POST['category'];
  6. break;
  7. case'testy':
  8. $_SESSION['category'] = $_POST['category'];
  9. break;
  10. case'wszystko':
  11. $_SESSION['category'] = null;
  12. break;
  13. default:
  14. break;
  15. }



i zrobiłem zamiast tego takiego ifa, ale nie działa:
  1. if(isset($_POST['category']));
  2. {
  3. $_SESSION['category'] = $_POST['category'];
  4. }
  5. if($_SESSION['category'] == "wszystko")
  6. {
  7. $_SESSION['category'] = null;
  8. }


a cały kod tej funkcji wygląda tak:
  1. function search_product()
  2. {
  3. $limit = 8;
  4. $page = $_GET['p'];
  5. if($page==0 || $page==1)
  6. {
  7. $strona= 0;
  8. }else{
  9. $strona = ($page*$limit)-$limit;
  10. }
  11.  
  12. switch($_POST['category'])
  13. {
  14. case'coins':
  15. $_SESSION['category'] = $_POST['category'];
  16. break;
  17. case'testy':
  18. $_SESSION['category'] = $_POST['category'];
  19. break;
  20. case'wszystko':
  21. $_SESSION['category'] = null;
  22. break;
  23. default:
  24. break;
  25. }
  26.  
  27.  
  28. if(isset($_POST['category']));
  29. {
  30. $_SESSION['category'] = $_POST['category'];
  31. }
  32. if($_SESSION['category'] == "wszystko")
  33. {
  34. $_SESSION['category'] = null;
  35. }
  36.  
  37.  
  38. switch($_POST['filter'])
  39. {
  40. case'najmniejsza':
  41. if(isset($_SESSION['category']))
  42. {
  43. $phpro_category = filter_var($_SESSION['category'], FILTER_SANITIZE_STRING);
  44. $phpro_search_name = filter_var($_SESSION['product_search'], FILTER_SANITIZE_STRING);
  45. $stmt = getDBH()->prepare("SELECT * FROM products WHERE name LIKE :search_name AND category=:category ORDER BY price ASC LIMIT $strona,8");
  46. $stmt->bindValue(':search_name','%'.$phpro_search_name.'%');
  47. $stmt->bindParam(':category', $phpro_category, PDO::PARAM_STR);
  48. $stmt->execute();
  49. }else{
  50. $phpro_search_name = filter_var($_SESSION['product_search'], FILTER_SANITIZE_STRING);
  51. $stmt = getDBH()->prepare("SELECT * FROM products WHERE name LIKE :search_name ORDER BY price LIMIT $strona,8");
  52. $stmt->bindValue(':search_name','%'.$phpro_search_name.'%');
  53. $stmt->execute();
  54. }
  55. break;
  56. case'najwieksza':
  57. if(isset($_SESSION['category']))
  58. {
  59. $phpro_category = filter_var($_SESSION['category'], FILTER_SANITIZE_STRING);
  60. $phpro_search_name = filter_var($_SESSION['product_search'], FILTER_SANITIZE_STRING);
  61. $stmt = getDBH()->prepare("SELECT * FROM products WHERE name LIKE :search_name AND category=:category ORDER BY price DESC LIMIT $strona,8");
  62. $stmt->bindValue(':search_name','%'.$phpro_search_name.'%');
  63. $stmt->bindParam(':category', $phpro_category, PDO::PARAM_STR);
  64. $stmt->execute();
  65. }else{
  66. $phpro_search_name = filter_var($_SESSION['product_search'], FILTER_SANITIZE_STRING);
  67. $stmt = getDBH()->prepare("SELECT * FROM products WHERE name LIKE :search_name ORDER BY price DESC LIMIT $strona,8");
  68. $stmt->bindValue(':search_name','%'.$phpro_search_name.'%');
  69. $stmt->execute();
  70. }
  71. break;
  72. default:
  73. if(isset($_SESSION['category']))
  74. {
  75. $phpro_category = filter_var($_SESSION['category'], FILTER_SANITIZE_STRING);
  76. $phpro_search_name = filter_var($_SESSION['product_search'], FILTER_SANITIZE_STRING);
  77. $stmt = getDBH()->prepare("SELECT * FROM products WHERE name LIKE :search_name AND category=:category ORDER BY price ASC LIMIT $strona,8");
  78. $stmt->bindValue(':search_name','%'.$phpro_search_name.'%');
  79. $stmt->bindParam(':category', $phpro_category, PDO::PARAM_STR);
  80. $stmt->execute();
  81. }else{
  82. $phpro_search_name = filter_var($_SESSION['product_search'], FILTER_SANITIZE_STRING);
  83. $stmt = getDBH()->prepare("SELECT * FROM products WHERE name LIKE :search_name ORDER BY price LIMIT $strona,8");
  84. $stmt->bindValue(':search_name','%'.$phpro_search_name.'%');
  85. $stmt->execute();
  86. }
  87. break;
  88.  
  89. }
  90.  
  91. echo '<div class="text5">Wyniki wyszukiwania dla: &nbsp;'.$_SESSION['product_search'].'</div>';
  92. while ($r = $stmt->fetch(PDO::FETCH_ASSOC)) {
  93.  
  94. <div class="col-sm-6 col-md-3">
  95. <input type="hidden" name="id" value="'.$r['id'].'">
  96. <input type="hidden" name="price" value="'.$r['price'].'">
  97. <input type="hidden" name="count" value="'.$r['name'].'">
  98. <div class="thumbnail">
  99. <img src="../graph/'.$r['picture'].'" alt="" class="img-responsive">
  100. <div class="caption">
  101. <h3 class="text-left">'.$r['name'].'</h3>
  102. <p class="text-left">Cena: '.$r['price'].'zł</p>
  103. <div class="btn-toolbar text-center">
  104. <button type="submit" name="buy_product" class="btn btn-primary pull-right">Szczegoły</button>
  105. </div>
  106. </div>
  107. </div>
  108. </div>';
  109. }
  110. echo '</div>';
  111. }


Pomoże ktoś, jak zrobić tego ifa, żeby działał.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 19)
nospor
post
Post #2





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




Po co uzywasz sesji skoro twoje if/switche maja tylko zasieg lokalny? Totalnie bez sensu.

Co do problemu to wyswietl sobie co zawiera $_POST i $_SESSION przy pomocy var_dump() i wszystko bedzie jasne

ps: przenosze

Kolejna sprawa jest duplikacja calej masy kodu w zaleznosci od asc/desc. Kod powtarzasz az trzy razy a rozni sie jedynie asc/desc. Przeciez to mozna wstawic do zapytania jako zmienna i bedzie tylko raz w kodzie.


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

"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
Post #3





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

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


  1. if (isset($_POST['category']) && ($_POST['category'] == 'coins' || $_POST['category'] == 'testy')) {
  2. $_SESSION['category'] = $_POST['category'];
  3. } elseif (isset($_POST['category']) && $_POST['category'] == 'wszystko') {
  4. $_SESSION['category'] = null;
  5. }


albo

  1. $_SESSION['category'] = $_POST['category'] ?? null;


Tylko po co to przerabiać?

Ten post edytował viking 23.12.2016, 11:33:11


--------------------
Go to the top of the page
+Quote Post
TetTheGod
post
Post #4





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 23.12.2016

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


Nospor uzywam sesji bo po wybraniu nowej kategorii lub filtrowania strona się odświeża. Viking chcę to zmienić bo nie chcę mieć kategorii zapisanych sztywno w kodzie, tylko żeby były na stronę wczytywane z mysq'l
Go to the top of the page
+Quote Post
nospor
post
Post #5





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




NO dobrze, napisalem ci co zrobic. Zrobiles to?


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

"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
TetTheGod
post
Post #6





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 23.12.2016

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


Jeszcze z innego forum ktoś polecił mi jeden sposób i staram się go sprzwdzić.
Go to the top of the page
+Quote Post
viking
post
Post #7





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

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


To wystarczy warunek drugi który podałem. Zmieniasz tylko założenie że brak kategorii szczegółowej oznacza pobranie wszystkich. Później wyciągasz selecta z prepare do osobnej zmiennej i budujesz sobie to zapytanie ifami. Na takiej samej zasadzie też sortowanie.

Ten post edytował viking 23.12.2016, 14:29:43


--------------------
Go to the top of the page
+Quote Post
TetTheGod
post
Post #8





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 23.12.2016

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


Zrobiłem to tak i pojawia się wszystko
  1.  
  2. $_SESSION['category'] = $_POST['category'] == 'wszystko' ? "*" : $_POST['category'];
  3. $sort_type = $_POST['filter'] == 'najwieksza' ? 'DESC' : 'ASC';
  4.  
  5. if(isset($_SESSION['category']))
  6. {
  7. $phpro_search_name = filter_var($_SESSION['product_search'], FILTER_SANITIZE_STRING);
  8. $phpro_category = filter_var($_SESSION['category'], FILTER_SANITIZE_STRING);
  9. $stmt = getDBH()->prepare("SELECT * FROM products WHERE name LIKE :search_name AND category=:category ORDER BY price $sort_type LIMIT $strona,8");
  10. $stmt->bindValue(':search_name', '%' . $phpro_search_name . '%');
  11. $stmt->bindParam(':category', $phpro_category, PDO::PARAM_STR);
  12. $stmt->execute();
  13. }else{
  14. $phpro_search_name = filter_var($_SESSION['product_search'], FILTER_SANITIZE_STRING);
  15. $stmt = getDBH()->prepare("SELECT * FROM products WHERE name LIKE :search_name ORDER BY price $sort_type LIMIT $strona,8");
  16. $stmt->bindValue(':search_name', '%' . $phpro_search_name . '%');
  17. $stmt->execute();


ale gdy wybiorę kategorię wszystko, to nic się nie pojawia, a gdy daję filtorwanie od najniższej lub od najwyższej, to też nic się nie pojawia i dopiero po ponownym wybraniu kategorii w której znajdują się wyszukiwane produkty, pojawia się to co chcę.
Go to the top of the page
+Quote Post
nospor
post
Post #9





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




Nie "*"
a: null

przeciez robisz ISSET a ISSET na tekscie zawsze daje TRUE


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

"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
TetTheGod
post
Post #10





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 23.12.2016

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


No dobra to ogarnąłem, a co z filtrowaniem ceny ?
Go to the top of the page
+Quote Post
nospor
post
Post #11





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




To nie jest FILTROWANIE a SORTOWANIE.
Pokaz jak wysylasz dane POST


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

"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
TetTheGod
post
Post #12





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 23.12.2016

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


<?PHP error_show() ?>
<div class="container">
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<form method="post" action="">
<div class="" role="search">
<div class="input-group">
<input type="text" class="form-control" placeholder="Szukaj..." name="search_name">
<div class="input-group-btn">
<button class="btn btn-default btn-v2" type="submit" name="search"><i class="glyphicon glyphicon-search"></i></button>
</div>
</div>
<select class="form-control menus selectpicker" name="filter" onchange="this.form.submit();">
<option name="option">Filtrowanie</option>
<option name="option" value="najmniejsza">Od najniższej ceny</option>
<option name="option" value="najwieksza">Od najwyższej ceny</option>
</select>
<select class="form-control menus selectpicker" name="category" onchange="this.form.submit();">
<option name="option">Kategoria</option>
<option name="option" value="wszystko">Wszystko</option>
<option name="option" value="coins">Coinsy</option>
<option name="option" value="testy">Testy</option>
</select>
</form>
</div>
</div>
</div>
<div class="container thumbs">
<?php search_product() ?>
</div>
<ul class="pagination">
<?PHP search_products_pagination() ?>
</ul>
Go to the top of the page
+Quote Post
viking
post
Post #13





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

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


Wygląda dobrze. Wyświetl sobie co masz w $sort_type przed przekazaniem do zapytania.


--------------------
Go to the top of the page
+Quote Post
TetTheGod
post
Post #14





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 23.12.2016

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


zrobiłem
  1. echo "<p>".$sort_type."</p>";


i pokazuje się ASC lub DESC w zależności od tego co wybieram, ale nie pokazuje się żaden produkt
Go to the top of the page
+Quote Post
viking
post
Post #15





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

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


Może po prostu warunek nie jest spełniony. Wyświetl sobie http://php.net/manual/pl/class.pdostatemen...ops.querystring podstaw dane i wykonaj bezpośrednio na bazie.


--------------------
Go to the top of the page
+Quote Post
TetTheGod
post
Post #16





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 23.12.2016

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


Niby jaki warunek ma nie być spełniony skoro jeśli nie ma kategorii to poprostu pokazuje wszystko. Więc nie rozumiem co tu ma spełnianie warunku do tego że nic się nie wyświetla
Go to the top of the page
+Quote Post
viking
post
Post #17





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

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


WHERE name LIKE :search_name - ten warunek


--------------------
Go to the top of the page
+Quote Post
TetTheGod
post
Post #18





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 23.12.2016

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


Ale co zmiana sortowania ceny ma do tego bo nie za bardzo rozumiem
Go to the top of the page
+Quote Post
nospor
post
Post #19





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




To jaki jest aktualnie problem?
I pokaz w koncu jak wyglada $_POST po wyslaniiu


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

"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
TetTheGod
post
Post #20





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 23.12.2016

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


Problem rozwiązany, a kod finalnie wygląda tak:
  1. switch($_POST['category'])
  2. {
  3. case'wszystko':
  4. $_SESSION['category'] = null;
  5. break;
  6. case'':
  7. break;
  8. default:
  9. $_SESSION['category'] = $_POST['category'];
  10. break;
  11. }
  12.  
  13. switch($_POST['filter'])
  14. {
  15. case'najwieksza':
  16. $_SESSION['sort_type'] = "DESC";
  17. break;
  18. case'najmniejsza':
  19. $_SESSION['sort_type'] = "ASC";
  20. break;
  21. default:
  22. break;
  23. }
  24.  
  25. if(isset($_SESSION['category']))
  26. {
  27. $phpro_search_name = filter_var($_SESSION['product_search'], FILTER_SANITIZE_STRING);
  28. $phpro_category = filter_var($_SESSION['category'], FILTER_SANITIZE_STRING);
  29. $stmt = getDBH()->prepare("SELECT * FROM products WHERE name LIKE :search_name AND category=:category ORDER BY price {$_SESSION['sort_type']} LIMIT $strona,8");
  30. $stmt->bindValue(':search_name','%'.$phpro_search_name.'%');
  31. $stmt->bindParam(':category', $phpro_category, PDO::PARAM_STR);
  32. $stmt->execute();
  33. }else{
  34. $phpro_search_name = filter_var($_SESSION['product_search'], FILTER_SANITIZE_STRING);
  35. $stmt = getDBH()->prepare("SELECT * FROM products WHERE name LIKE :search_name ORDER BY price {$_SESSION['sort_type']} LIMIT $strona,8");
  36. $stmt->bindValue(':search_name','%'.$phpro_search_name.'%');
  37. $stmt->execute();
  38. }
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 Aktualny czas: 21.08.2025 - 05:53