Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX][JavaScript][PHP]szybkosc strony
viamarimar
post
Post #1





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


Kod poniżej to kopia ze strony:
http://www.codexworld.com/autocomplete-tex...uery-php-mysql/
Tu demeo:
http://demos.codexworld.com/autocomplete-t...uery-php-mysql/

Nie to nie żadna reklama.
Mam pytanie. Chce zrobić coś takie że w bazie danych mam np 10000 składników. Teraz dodaje przepis do przepisu nie dodaje skladnikow standardowo w textarea tylko z wyboru z tych 10000. Chciałbym by było autopodpowiadanie jak powyżej. Moje pytanie brzmi czy przy tym układzie wszystkie te 10000 skladnikow musi byc umieszczone w kodzie, bo sql bedzie je zawsze pobieral do tablicy na ktorej operuje przykladowy skrypt? Czy jest jakieś inne rozwiazanie, tak by nie bylo tego w kodzie? Czy takie coś zwalnia stronę?( moim zdaniem, i z tego co wiem każda linia html zwalnia w jakim stropniu skrypt)

A teraz zalozmy ze takie pole wyszukujace jest jedno dla kazdego skladnika. Dynamicznie mozna dodac ich z 50(limit skladnikow w przepisie). Co znaczy, że takich tablic bylo by az 50? TO dramatycznie zwalnia strone, co z tym fantem zrobic?


  1. <?php
  2. //database configuration
  3. $dbHost = 'localhost';
  4. $dbUsername = 'root';
  5. $dbPassword = '';
  6. $dbName = 'codexworld';
  7.  
  8. //connect with the database
  9. $db = new mysqli($dbHost,$dbUsername,$dbPassword,$dbName);
  10.  
  11. //get search term
  12. $searchTerm = $_GET['term'];
  13.  
  14. //get matched data from skills table
  15. $query = $db->query("SELECT * FROM skills WHERE skill LIKE '%".$searchTerm."%' ORDER BY skill ASC");
  16. while ($row = $query->fetch_assoc()) {
  17. $data[] = $row['skill'];
  18. }
  19.  
  20. //return json data
  21. echo json_encode($data);
  22. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 19)
Puszy
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

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


Udźwignij to poprzez Ajaxa. Utwórz skrypt który będzie szukał produktów na podstawie szukanego ciągu, załóż że składnik musi składać się z minimum 3 znaków, po wpisaniu 3 znaków przez użytkownika uzyj Ajaxa aby odwołać się do serwera, przekaż suzkany ciąg, wyszukaj go w bazie i dynamicznie wyświetl podpowiadanie z wyborem. Polecam do tego Select2, link do przykładu który opisałem wyżej: https://select2.github.io/examples.html#data-ajax
Go to the top of the page
+Quote Post
viking
post
Post #3





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

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


Zamiast query użyj http://php.net/manual/en/mysqli.prepare.php Teraz masz jedną wielką dziurę podatną na SQL Injection.
Go to the top of the page
+Quote Post
viamarimar
post
Post #4





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


Tylko ja musze mieć jakiś działający przykład by ruszyć dalej. W sensie u siebie.

Pytanie, zrobilem cos takiego na localhoscie:

plik 1 (index.html)
  1. <html lang="en">
  2. <head>
  3. <title>Bootstrap Typeahead with Ajax Example</title>
  4. <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
  5. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
  6. <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-3-typeahead/4.0.1/bootstrap3-typeahead.min.js"></script>
  7. </head>
  8. <body>
  9.  
  10. <div class="row">
  11. <div class="col-md-12 text-center">
  12. <br/>
  13. <h1>Search Dynamic Autocomplete using Bootstrap Typeahead JS</h1>
  14. <input class="typeahead form-control" style="margin:0px auto;width:300px;" type="text">
  15. </div>
  16. </div>
  17.  
  18. <script type="text/javascript">
  19.  
  20. $('input.typeahead').typeahead({
  21. source: function (query, process) {
  22. return $.get('/ajaxpro.php', { query: query }, function (data) {
  23. console.log(data);
  24. data = $.parseJSON(data);
  25. return process(data);
  26. });
  27. }
  28. });
  29.  
  30. </script>
  31. </body>
  32. </html>


plik2 (ajaxpro.php)
  1. <?php
  2.  
  3. $db = "localhost";
  4. $db_user = "root";
  5. $db_pass = "";
  6. $db_name = "dump";
  7. $link = mysqli_connect($db, $db_user, $db_pass);
  8. if (!$link) {
  9. die("Not connected : " . mysqli_error());
  10. }
  11.  
  12. $db_select = mysqli_select_db($link,$db_name);
  13. if (!$db_select) {
  14. die ("Can't use".$db_name." : " . mysqli_error());
  15. }
  16.  
  17. if(isset($_GET['query'])) {
  18.  
  19. $sql = "SELECT city FROM zips WHERE city LIKE '%".$_GET['query']."%'
  20. LIMIT 10";
  21. $result= mysqli_query($link,$sql) or die(mysqli_error());
  22.  
  23.  
  24. $json = [];
  25. while($row = mysqli_fetch_assoc($result)){
  26. $json[] = $row['city'];
  27. }
  28.  
  29. echo json_encode($json);
  30. }
  31.  
  32.  


Coś działa.. coś nie działa heh..
Jest pole szukajki, w szukajke jak wpisuje to za każdym razem są zmiany w consoli pojawiaja sie przekierowania przykadowo:
Failed to load resource: the server responded with a status of 404 (Not Found)
http://localhost:8080/ajaxpro.php?query=al Failed to load resource: the server responded with a status of 404 (Not Found)
http://localhost:8080/ajaxpro.php?query=alf Failed to load resource: the server responded with a status of 404 (Not Found)
http://localhost:8080/ajaxpro.php?query=alfs Failed to load resource: the server responded with a status of 404 (Not Found)
http://localhost:8080/ajaxpro.php?query=alfss Failed to load resource: the server responded with a status of 404 (Not Found)
http://localhost:8080/ajaxpro.php?query=alfsss Failed to load resource: the server responded with a status of 404 (Not Found)
Problemem jest to że adres taki nie istnieje, tylko dlaczego skoro:

tu tak jakby ustawiam by tam kierowalo:
  1. return $.get('/ajaxpro.php', { query: query }, function (data) {

a tu sprawdzam jesli istnieje taki get to pobieraj itd..
  1. if(isset($_GET['query'])) {



Na początek chodzi o te przekierowania tylko. Jak się to ustawia by "ajax?" przesylal dane

Ten post edytował viamarimar 12.01.2017, 14:36:25
Go to the top of the page
+Quote Post
viking
post
Post #5





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

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


Masz wyraźnie 404 na ajaxpro.php. Jesli to jest gdzieś w folderze to jest różnica między /plik a plik (bez /)
Go to the top of the page
+Quote Post
viamarimar
post
Post #6





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


Serio chodziło o kreske, ale mógłbyś więcej w tym temacie.

I jak by to zapisać jak bym mial np link typu:

index.php&cos1=a&cos2=b&cos3=c

na podstawie powzyszego kodu.
Go to the top of the page
+Quote Post
viking
post
Post #7





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

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


Poczytaj o ścieżkach absolutnych i relatywnych. Znaczy co zapisać?
Go to the top of the page
+Quote Post
viamarimar
post
Post #8





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


Chodzi o to że robiłem to na localhoscie - gdy zadzialalo człowiek mysli o super wreszcie pojdzie z góki. Ta bójda..

Te same pliki wrzuciłem na server.

Sciezka:
/home/x/y/login/public_html/test/a/inc/inc_index/form

Ustawilem tak:
  1. return $.get('../a/inc/inc_index/ajaxpro.php', { query: query }, function (data) {

czyli tak jakby wszystko w tyl.

Co na konsoli sie pokrywa z rzeczywistoscia:

  1. GET <a href="http://www.bllblb.pl/~login/test/a/inc/inc_index/ajaxpro.php?query=a" target="_blank">http://www.bllblb.pl/~login/test/a/inc/inc...pro.php?query=a</a> 404 (Not Found)


Pomóżcie mi to rozwiązać i już nic nie truje więcej (IMG:style_emoticons/default/smile.gif)
To jednorazowo mi potrzebne.
Go to the top of the page
+Quote Post
viking
post
Post #9





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

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


../ oznacza katalog wyżej w stosunku do aktualnego. Skoro masz całą ścieżkę i widzisz do jakiego pliku jest 404, to dlaczego po prostu trochę nie pokombinujesz? Wielkość liter na linuksie też ma znaczenie.
Go to the top of the page
+Quote Post
viamarimar
post
Post #10





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


Ok, jest wporządku, tylko takie pytanie czemu gubią sie gdzieś pod drodze polskie znaki?

tzn w bazie jest np słowo nabiaŁ
po skorzystaniu z powyższego skryptu jest już nabia?

-w head ustaione utf
- w pliku jest kodowanie utf(bez bom)
- w bazie tez utf

do tej pory nie było z tym problemu
czy json trzeba jakos specjalnie konwertowac?
Go to the top of the page
+Quote Post
viking
post
Post #11





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

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


Nie widzę żebyś gdziekolwiek ustawial w tym pliku nagłówek nawet z informacją ze to json. Zbędna jest też cała pętla.
Go to the top of the page
+Quote Post
viamarimar
post
Post #12





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


Tylko jeśli wywale pętle to jest tak:

  1. [null]
  2. bootstrap3-typeahead.min.js:1 Uncaught TypeError: Cannot read property 'name' of null
  3. at b.displayText (bootstrap3-typeahead.min.js:1)
  4. at b.matcher (bootstrap3-typeahead.min.js:1)
  5. at bootstrap3-typeahead.min.js:1
  6. at Function.grep (jquery.js:753)
  7. at b.process (bootstrap3-typeahead.min.js:1)
  8. at proxy (jquery.js:818)
  9. at Object.success (index.php?s=test&a=add:595)
  10. at fire (jquery.js:1037)
  11. at Object.fireWith [as resolveWith] (jquery.js:1148)
  12. at done (jquery.js:8074)
Go to the top of the page
+Quote Post
viking
post
Post #13





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

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


Zamiast assoc http://php.net/manual/en/mysqli-result.fetch-all.php i od razu do json. I popraw query na prepare.
Go to the top of the page
+Quote Post
viamarimar
post
Post #14





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


To tylko przykład ale

1.Czy zamiast prepare nie mozna uzyc mysqli_real_escape_string?
2. pierwszy raz slysze o czym takim jak feach_all tak naprawde
czy chodzi o cos takiego:
  1. $resultArray = $result->fetch_all(MYSQLI_ASSOC);
  2. echo json_encode($resultArray);

Bo w ten desen to nie dziala.

Ten post edytował viamarimar 12.01.2017, 18:20:09
Go to the top of the page
+Quote Post
viking
post
Post #15





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

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


Stosujesz styl proceduralny zatem
  1. echo json_encode(mysqli_fetch_all($result, MYSQLI_ASSOC));


1. Nie, nie można.

Brakuje ci jeszcze http://php.net/manual/en/mysqli.set-charset.php

https://prophp.pl/advice/show/14/jak_czytac...mentacje_php%3F

Ten post edytował viking 12.01.2017, 19:10:05
Go to the top of the page
+Quote Post
viamarimar
post
Post #16





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----



Mam inputa korzystam z typeahed.js
  1. <input name="first0" type="text" class="typeahead0 form-control" >

jsonem przesylam tablice do
np:

wcześniej były same nazwy, ale przeciez pola konkretnego uzywamy po id
tablica jsona:
[{"name":"Banan","id":"8"},{"name":"banan","id":"365"},{"name":"banan suszony","id":"366"},{"name":"Banany","id":"1302"},{"name":"Baton banan-marchew-marakuja","id":"910"},{"name":"Kaszka o smaku bananowym","id":"1305"},{"name":"Mąka bananowa ","id":"831"},{"name":"Suszone Banany","id":"1303"}]

wiec pytanie czy mogę wyciagnac jakos ID dla danego name i przypisac w value inputa?
Go to the top of the page
+Quote Post
viking
post
Post #17





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

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


Inputy możesz tworzyć za pomocą each() + val(). Chociaż podejrzewam że tobie bardziej coś w stylu http://textextjs.com/manual/examples/autoc...-with-tags.html jest potrzebne.
Go to the top of the page
+Quote Post
viamarimar
post
Post #18





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


Wiem jak tworzyc inputy i calosciowo dziala.

problem jest w tym,że gdy mialem select to bylo cos na zasadzie:

  1. <select name="first0" id="select3-recipes" required>
  2.  
  3. while($row = mysqli_fetch_assoc($result)) {
  4. echo '<option value="'.$row['product_id'].'">'.$row['product_name'].'</option>';
  5. }
  6. ...


Teraz mam cos takiego:

  1. $sql = "
  2. SELECT ".$prefix."product.*
  3. FROM ".$prefix."product
  4. WHERE ".$prefix."product.product_name LIKE '%".$_GET['query']."%'
  5. AND ".$prefix."product.product_active = '1'
  6. ORDER BY product_name ASC LIMIT 10 " ;


  1. $json[] = array (
  2. 'name' => $row['product_name'],
  3. 'id' => $row['product_id'],
  4. );



  1. <input name="first0" type="text" class="typeahead0 form-control" >


ale w tym inpucie nie mam parametru value i chce osiagnac efekt :
wybierajc/wpisujac np banany w input zeby w value pokazywal sie jego id w tym przypadku np 8




Ten post edytował viamarimar 13.01.2017, 10:36:30
Go to the top of the page
+Quote Post
viking
post
Post #19





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

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


Na stronie projektu https://github.com/bassjobsen/Bootstrap-3-Typeahead masz przykład na dole z getActive.
Go to the top of the page
+Quote Post
viamarimar
post
Post #20





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


Nie bardzo wiem jak by to miało pomóc.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 22:52