• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przekierowanie po kliknięciu opcji z paska nav, do wyniku wyszukiwania produktów z bazie danych.

VPS Starter Arubacloud
+1 głos
121 wizyt
pytanie zadane 22 grudnia 2023 w PHP przez vog Początkujący (370 p.)

Witam serdecznie. Jestem świeży w PHP, bardziej ogarniam kwestie front-endowe, jednak obecnie zależy mi na  dokończeniu projektu sklepu internetowego w którym mam już ogarniętą wyszukiwarkę produktów. Wygląda to tak, iż wpisuję daną frazę w inputa (np 'koszule'), po czym na stronie products.php mam umieszczone odpowiednie zapytanie do którego wpada metodą $_POST zawartość zmiennej, i to działa bardzo fajnie. Gorzej jednak wygląda sprawa okodowania mojego panelu nawigacyjnego. W tym przypadku zrobiłem panel poziomy składający się z listy <ol> np kategorią jest<li>męskie</li> wewnątrz którego mam kolejną listę kilku dostępnych opcji tj koszule, bluzy, itd jako elementy <li>. W każdym takim <li> mam link, znacznik <a href="...">. Chciałbym aby uniknąć tworzenia jakichś powiedzmy dwudziestu plików .php gdzie w każdym byłoby inne zapytanie do bazy SQL, aby uzyskać pożądany dla danego typu produktu wynik wyszukiwania. Próbowałem w każdym takim linku umieścić sekcję php, a w niej przypisać do zmiennej $kategoria inną wartość, ale jak się pewnie domyślacie wynik był słaby. Po wyborze pierwszego takiego <li><a href="...">Bluzy</a></li> dochodzi do nadpisania wartości dla mojej zmiennej przez ten ostatni li. Nie mam pojęcia jakim sposobem mógłbym przekazać poprzez właśnie opcję paska nawigacji pożądaną przeze mnie frazę, tak aby jej użyć w zapytaniu SQL wewnątrz docelowego pliku. Poproszę o podpowiedzi. Tak wygląda każde z li:


<li><a href="#">Męskie</a>

                <ul>

                    <li>

                        <form action="products.php" method="post">

                            <a href="./products.php">

                                <?php

                            $category = 'męskie_bluzy';

                            $_SESSION['category'] = $category;

                            ?>

                            Bluzy</a>

                    </li>

                </form>

 

2 odpowiedzi

+2 głosów
odpowiedź 23 grudnia 2023 przez AnimaVillis Stary wyjadacz (12,290 p.)
wybrane 23 grudnia 2023 przez vog
 
Najlepsza

Do utworzenia menu skoro posiadasz plik odpowiedzialny za wyświetlanie produktów możesz użyć:
 

$_GET['category']

Następnie w pliku odpowiedzialnym za pobieranie ubrań weź sobie

$category = $_GET['category']

I teraz Twój link w li powinien wyglądać mniej więcej tak:
 

<li>
 <a href="products.php?category=bluzy">Bluzy</a>
 </li>

Jednak pamiętaj, że takie rozwiązanie nie jest do końca bezpieczne :)

komentarz 23 grudnia 2023 przez vog Początkujący (370 p.)
Faktycznie jest tak jak napisałeś. Teraz wszystko działa bez zarzutu. Baaardzo jestem Tobie wdzięczny, bardzo mi pomogłeś. Dziękuję serdecznie i wesołych Świąt życzę tak korzystając z okazji. ;)
komentarz 24 grudnia 2023 przez AnimaVillis Stary wyjadacz (12,290 p.)
Nie ma problemu, również wesołych i spokojnych życzę :)
0 głosów
odpowiedź 24 grudnia 2023 przez VBService Ekspert (255,440 p.)
edycja 24 grudnia 2023 przez VBService

IMO, albo używasz <form> i w kodzie php $_POST, albo <a> tag i w kodzie php $_GET (pomijam fakt, że kod w przykładzie jest nie do końca prawidłowo "zagnieżdżony")

<li><a href="#">Męskie</a>
 
                <ul>
 
                    <li>
 
                        <form action="products.php" method="post">
 
                            <a href="./products.php">
 
                                <?php
 
                            $category = 'męskie_bluzy';
 
                            $_SESSION['category'] = $category;
 
                            ?>
 
                            Bluzy</a>
 
                    </li>
 
                </form>

prawidłowe "ułożenie" tag-ów IMO

<ol>
  <li>
    <a href="#">Męskie</a>
    <ul>
      <li>
        <form action="products.php" method="post">
          <a href="./products.php">
<?php
  $category = 'męskie_bluzy';
  $_SESSION['category'] = $category;
?>
            Bluzy
          </a>
        </form>
      </li>
    </ul>
  </li>
</ol>

 

 

P.S z użyciem <form>  np.:

<?php

  $post = $_POST || null;
  if ($post) {
    var_dump($_POST); // dla demonstracji

    if (!empty($_POST['category'])) {
      $category = filter_input(INPUT_POST, 'category', FILTER_SANITIZE_STRING);      
      $_SESSION['category'] = $category = htmlspecialchars($category, ENT_QUOTES, 'UTF-8');

      var_dump($_POST['category'], $_SESSION['category'], $category); // dla demonstracji
    }
  }

  // tablica asocjacyjna - symulacja pobrania danych z bazy danych
  // do utworzenia menu
  $nawigacja = [
    'Kategoria1' => [
      'Podkategoria1.1' => 'link1_1',
      'Podkategoria1.2' => 'link1_2',
      'Podkategoria1.3' => 'link1_3',
    ],
    'Kategoria2' => [
      'Podkategoria2.1' => 'link2_1',
      'Podkategoria2.2' => 'link2_1',
    ],
    'Kategoria3' => [
      'Podkategoria3.1' => 'link3_1',
      'Podkategoria3.2' => 'link3_2',
      'Podkategoria3.3' => 'link3_3',
    ],
  ];   

  $menu = '<form action="products.php" method="post"><ol>';
  foreach ($nawigacja as $kategoria => $podkategorie) {
    $menu .= '<li>' . $kategoria;

      if (is_array($podkategorie)) {
        $menu .= '<ul>';
        foreach ($podkategorie as $podkategoria => $link) {
          $menu .= '<li><button type="submit" name="category" value="' . $link .'">' . $podkategoria . '</button></li>';
        }
        $menu .= '</ul>';
      }
    $menu .= '</li>';
  }
  $menu .= '</ol></form>';
?>

<style>
  /* dla demonstracji */
  button[type="submit"] {
    background: none;
    border: none;
    padding: 0;
    font: inherit;
    color: inherit;
    cursor: pointer;
    text-decoration: underline;
  }
</style>
<?php echo $menu; ?>

 

Podobne pytania

+1 głos
2 odpowiedzi 428 wizyt
0 głosów
1 odpowiedź 313 wizyt
0 głosów
1 odpowiedź 226 wizyt
pytanie zadane 6 sierpnia 2019 w HTML i CSS przez SAMI Użytkownik (530 p.)

92,840 zapytań

141,781 odpowiedzi

320,856 komentarzy

62,172 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...