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

Wyszukiwanie w bazie danych w czasie rzeczywistym

Object Storage Arubacloud
0 głosów
549 wizyt
pytanie zadane 1 września 2019 w PHP przez Sebastian Szyja Bywalec (2,810 p.)

Witam,

Mam taki problem zrobiłem inputa wyszukiwaniatabelę produktów z bazy danych, i chciałbym aby podczas wpisywania tekstu np. MA wyszukiwało w czasie rzeczywistym wszystkie pozycje, które maja w nazwie MA bądź zaczynają sie na MA. np. MAkaron, MAgnez, MAliny, prażynki o sMAku bekonowym. Nie mam pojęcia jak to zrobić PHP odpada, bo wymaga przeładowania strony ... Pomożcie?

PS. Nie wiedziałem do jakiej kategorii to przydzielić :/

3 odpowiedzi

0 głosów
odpowiedź 1 września 2019 przez BT101 Stary wyjadacz (12,540 p.)
PHP wcale nie odpada. Możesz zrobić endpoint, który wykona query na twojej DB z LIKE %n% i zwróci JSON. Na zmianę tego inputa robisz HTTP request na ten endpoint i przypisujesz response do jakiejś zmiennej, po której iterujesz i wyświetlasz wyniki.
komentarz 2 września 2019 przez BT101 Stary wyjadacz (12,540 p.)
Ok pokaż kod PHP jak wrócisz
komentarz 2 września 2019 przez Sebastian Szyja Bywalec (2,810 p.)

Wyślę go teraz bo mam dostęp do niego z telefonu

<?php

    header("Access-Control-Allow-Headers: Origin,Content-Type,Accept,Authorization");
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: *");
    header("Content-Type: application/json");
    header("Access-Control-Allow-Credentials: true");


    if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS')
    {
        http_response_code(200);
        die();
    }

    try
    {
        if(isset($_POST['name']) && !empty($_POST['name'])) {

            var_dump($_POST['name']);
            require_once "skrypty/config.php";
            $pdo = new PDO('mysql:host='.db_host.';dbname='.db_name.'', db_user, db_password);
            echo 'Połączenie nawiązane!';
            $search = $_POST['name'];
            $sql = "SELECT * FROM `uzytkownicy` WHERE login LIKE '%$search%' OR avatar LIKE '%$search%'";
            $wynik = $pdo->query($sql)->fetch();
            echo json_encode($wynik);
        } else {
            http_response_code(400);
        }
        
        
    }
    catch(PDOException $e)
    {
        echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
    }

?>

Myślę że go dobrze napisałem wink​​​​

komentarz 2 września 2019 przez BT101 Stary wyjadacz (12,540 p.)

Ta tylko nie bindujesz tego search więc nadal można użyć SQL injection, musisz zrobić coś takiego

$sql = "SELECT * FROM `uzytkownicy` WHERE login LIKE %?% OR avatar LIKE %?%";
$stmt = $pdo->conn->prepare($sql);
$stmt->bindparam(1, $search);
$return = $stmt->execute();

Ale nie wiem czy to zadziała bo ja robie API w Node.js i dawno już odpuściłem sobie PHP

komentarz 2 września 2019 przez Sebastian Szyja Bywalec (2,810 p.)

Niestety nie działa :///

IMGUR

komentarz 2 września 2019 przez Sebastian Szyja Bywalec (2,810 p.)

@BT101, Dodałem ' ' do %?% i otrzymałem coś takiego:

IMGUR - SS

Kod PHP:

<?php

    header("Access-Control-Allow-Headers: Origin,Content-Type,Accept,Authorization");
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: *");
    header("Content-Type: application/json");
    header("Access-Control-Allow-Credentials: true");


    if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS')
    {
        http_response_code(200);
        die();
    }

    try
    {
        if(isset($_POST['name']) && !empty($_POST['name'])) {

            var_dump($_POST['name']);
            require_once "skrypty/config.php";
            $pdo = new PDO('mysql:host='.db_host.';dbname='.db_name.'', db_user, db_password);
            $search = $_POST['name'];
            $sql = "SELECT * FROM `uzytkownicy` WHERE login LIKE '%?%' OR avatar LIKE '%?%'";
            $stmt = $pdo->prepare($sql);
            $stmt->bindparam(1, $search);
            $return = $stmt->execute();
            //$wynik = $pdo->query($sql)->fetch();
            echo json_encode($return);
        } else {
            http_response_code(400);
        }
        
        
    }
    catch(PDOException $e)
    {
        echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
    }

?>

 

0 głosów
odpowiedź 1 września 2019 przez JakSky Stary wyjadacz (14,770 p.)
Tu z pomocą przychodzi technika AJAX. Z PHP nie mam doświadczenia ale w C# i ASP.NET jest to proste do zrobienia. Zapewne też są poradnik do PHP z użyciem AJAX, więc warto zagłębić temat.
komentarz 1 września 2019 przez adrian17 Ekspert (344,860 p.)
Z punktu widzenia serwera w ogóle nie trzeba myśleć o AJAXie. Masz endpoint jak każdy inny który zwraca JSONa. To czy ktoś o to pyta wpisując url do przeglądarki, czy curlem, czy JSem AJAXem to dla serwera za bardzo nie ma znaczenia.
komentarz 1 września 2019 przez JakSky Stary wyjadacz (14,770 p.)

@JakSky, ale autorowi chyba chodzi też o warstwę wizualną. Domyślam się, że chodzi o stronę internetową a nie np o API np. pod aplikację mobilną. Dlatego wspomniałem o AJAX.

0 głosów
odpowiedź 2 września 2019 przez Tomek Sochacki Ekspert (227,510 p.)
ja w takich przypadkach używam na froncie rxjs, pozwala to w bardzo przyjemny sposób zapanować nad requestami, masz fajne operatory dla delay itp., co warto zrobić np. aby nie strzelać do api na każdy klawisz jeśli user szybko coś wpisuje. A w czym napiszesz endpoint to nie ma w zasadzie kompletnie znaczenia, może być  PHP, node, Javie itp. Frontu w ogóle nie powinno interesować to, w jakiej technologii jest API.

Podobne pytania

+1 głos
1 odpowiedź 157 wizyt
pytanie zadane 15 września 2018 w C# przez marcin99b Szeryf (82,080 p.)
0 głosów
2 odpowiedzi 837 wizyt
0 głosów
3 odpowiedzi 410 wizyt
pytanie zadane 29 kwietnia 2015 w PHP przez ReksetoDev Gaduła (4,530 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...