Dynamiczne wyszukiwanie i wyświetlanie przepisów

0

Witam!
Robię projekt na uczelnię. Mam zrobić serwis kulinarny. Chcę zrobić coś ala przepisy.pl i tu mam pytanie, jak zrobić takie wyszukiwanie, że jak w wyszukiwarce wpiszę słowo szarlotka i kliknę button wyszukaj to strona się przeładuje i wyświetli mi tyle przepisów ile ma w nazwie w bazie danych string szarlotka. Czyli wyświetli mi "divy". Zakładam, że to jakoś w JS się robi.

0

Wydaję mi się, że chodzi ci o Ajax, WebSockets i tego typu technologie. Działa to asynchronicznie. Możesz to napisać w ten sposób, że jeśli naciśniesz klawisz, to wtedy odpalana jest funkcja, która sprawdza, czy słowo wpisane w input'a jest takie samo jak w bazie, jeśli jest takie samo to wyświetl coś tam.

0

chyba niepotrzebnie użyłem słowa "dynamicznie" bo nie chodzi mi to dynamiczny sprawdzanie w bazie danych tylko wyświetlanie czyli dopiero jak wpiszę te słowo "szarlotka" i wcisnę enter to strona się przeładuje i wyświetli mi wszystkie szarlotki

0

Taka technologia nazywa się AJAX.
Niedawno było to na forum - Wywołanie kodu php bez przeładowania strony

To, co napisałeś można też tak zrozumieć, że strona pobiera wszystkie przepisy z serwera i je ukrywa, a potem tylko (mając już lokalnie je w przeglądarce) po wpisaniu czegoś "pokazuje" wybrane div'y - ale mam nadzieję, że nie o takie coś Ci chodziło ;)

0
cerrato napisał(a):

Taka technologia nazywa się AJAX.
Niedawno było to na forum - Wywołanie kodu php bez przeładowania strony

To, co napisałeś można też tak zrozumieć, że strona pobiera wszystkie przepisy z serwera i je ukrywa, a potem tylko (mając już lokalnie je w przeglądarce) po wpisaniu czegoś "pokazuje" wybrane div'y - ale mam nadzieję, że nie o takie coś Ci chodziło ;)

No nie, mój błąd, źle to sformułowałem, już poprawiłem. Chodzi mi o coś prostego.

0

Jeżeli strona ma się przeładować, to temat jest mega prosty.

Po stronie serwera piszesz w PHP (oczywiście może to być coś innego, ale PHP jest chyba najprostsze na start) skrypt, który przeszukuje bazę z przepisami pod kątem zadanego kryterium i przesyła do przeglądarki stronę wypełnioną treścią.

Nie za bardzo rozumiem w czym jest problem oraz po co chcesz (jeśli nie ma to się dziać dynamicznie, ale działać w oparciu o przeładowywanie strony) do tego jeszcze JS wciskać?

0
cerrato napisał(a):

Jeżeli strona ma się przeładować, to temat jest mega prosty.

Po stronie serwera piszesz w PHP (oczywiście może to być coś innego, ale PHP jest chyba najprostsze na start) skrypt, który przeszukuje bazę z przepisami pod kątem zadanego kryterium i przesyła do przeglądarki stronę wypełnioną treścią.

Nie za bardzo rozumiem w czym jest problem oraz po co chcesz (jeśli nie ma to się dziać dynamicznie, ale działać w oparciu o przeładowywanie strony) do tego jeszcze JS wciskać?

To da się bez JS te "divy" samym PHP w jakiejś pętli czy czymś tam wygenerować?

0

Jeśli już chciałbyś użyć np. Ajax, to mogę polecić ten poradnik:
http://phpmajster.blogspot.com/2015/06/ajax-podstawy-ajax-i-obiekt.html#more
Jeśli się uprzesz i wykonasz to z przeładowaniem strony, to po prostu napisz select i powinno być po sprawie. Np. w bazie masz przepis na szarlotkę i jest tam napisane: 3 szklanki wody. Kiedy w input wpiszesz "wod" to z bazy danych powinieneś otrzymać np. taki link: Przepis na szarlotkę, po kliknięciu miałbyś, to czego szukasz. Select wyglądałby następująco: ```
"SELECT * FROM przepis where description like "$var"";

0

To da się bez JS te "divy" samym PHP w jakiejś pętli czy czymś tam wygenerować?

Tak działa PHP - oczywiście w dużym uproszczeniu :D
PHP jest przetwarzane po stronie serwera (w odróżnieniu od JS, który działa na poziomie klienta) i w wyniku działania skrypt PHP generuje stronę (lub inną treść - np. obrazek), które są przesyłane do przeglądarki.
Z punktu widzenia przeglądarki, taka strona "wypluta" przez PHP niczym się nie różni od strony, którą "ręcznie" stworzyłeś.
Po prostu - PHP przeszukuje bazę z przepisami, a potem generuje HTML'a, który trafia do przeglądarki.
To o co pytasz to są totalne podstawy PHP - więc może zapoznaj się najpierw z forumowym FAQ do PHP - trochę powinno Ci to wyjaśnić sprawę.

W każdym razie - podsumowując:

  • nie robimy niczego dynamicznie (do tego potrzebny jest AJAX, ale to troszkę wyższy poziom, więc na początek lepiej sobie odpuść)
  • JavaScript jest tutaj niepotrzebny
  • zapoznaj się z podstawami PHP
  • no i oczywiście musisz mieć jakiś serwer z obsługą PHP i SQL, żeby takie coś móc uruchomić ("zwykłe" strony możesz sobie trzymać lokalnie i oglądać wprost z pliku HTML, natomiast przy PHP musisz mieć działający serwer - swój albo jakiś hosting)
  • jeszcze jest kwestia treści bazy - trzeba ją zapełnić jakimiś przepisami (lub innymi danymi). Czy o tym już myślałeś? Bez tego żadne wyszukiwanie nie będzie działać.
0

ja najpierw chcę zrobić to najprościej jak się da, żeby było i działało wszystko co ma działać w tym całym projekcie, a potem się pobawić w przerabianie tego na dynamiczne itd. jak starczy czasu. Wiem, że to podwójna robota niby no ale co zdążę przerobić to przerobię co nie to trudno, ważne, żeby wszystkie założenia spełnić.

0

Przerobienie na wersję dynamiczną nie będzie wielkim problemem.
W takim razie - skoro masz pokazane w którym kierunku iść- zaczynaj czytać i do dzieła.
Nikt tego za Ciebie nie zrobi, ale jeśli będziesz podczas pracy miał jakiś konkretny problem - wrzuć tutaj, pomożemy :)

0
cerrato napisał(a):

Przerobienie na wersję dynamiczną nie będzie wielkim problemem.
W takim razie - skoro masz pokazane w którym kierunku iść- zaczynaj czytać i do dzieła.
Nikt tego za Ciebie nie zrobi, ale jeśli będziesz podczas pracy miał jakiś konkretny problem - wrzuć tutaj, pomożemy :)

Dobra, dzięki, nie chcę, żeby za mnie robiono, chcę sam to zrobić, żeby się nauczyć czegoś i zrozumieć tylko w tym wielkim świecie Internetu jest tyle technologi, że czasem nie wiem co do czego.

0

No to już wiesz od czego zacząć.
Najpierw podstawy PHP - jakieś proste zmienne, pętle itp. (nie musisz wchodzić bardzo w szczegóły - projekt jest prosty, a z tego co piszesz to potrzebujesz go na zaliczenie, więc raczej nie będziesz się wiązał z tą technologią zawodowo)

Potem dodaj komunikację SQL i będzie temat zamknięty :)

0

No dobra to jestem na etapie tworzenia wyszukiwania zaawansowanego tj. moje zapytanie wygląda tak:
title
i moje pytanie jest takie, czy da się jakoś to tak fajnie mądrze zrobić, że jeśli powiedzmy użytkownik nie poda kalorii to zapytanie to pominie? Czy trzeba nowe zapytanie tworzyć lub chamsko wstawiać te 0 i 99999999999...

0

A żeby przyspieszyć jeszcze wyszukiwanie przy dużym korpusie można zastosować trie + inverted index.

0

Chyba znowu potrzebuję pomocy, robię minutnik i chcę aby każdy krok w przepisie miał swój oddzielny, niezależny minutnik ale średnio mi to wychodzi. Czyli jak uruchomię jeden i uruchomię drugi to nie będą na siebie wpływać, jeśli np jeden zatrzymam to drugi będzie sobie dalej śmigał itp.

Tak wygląda js skrypt:

` <script>
var CCOUNT;
var displayid;
var audio = new Audio('audio/Goat.mp3');

        function setter(time, dispid) {
            CCOUNT = parseInt(time) * 60;
            displayid = String(dispid);
            cdreset();
        }


        function setter2(time2,dispid2) {

            displayid = String(dispid2);
            if(CCOUNT!=time2){
                CCOUNT=time2;                  
            }
            
        }


        var t, count;
        var mySoundObject;

        function cddisplay() {
            hours = Math.floor(count / 3600);
            minutes = Math.floor((count - hours * 3600) / 60);
            seconds = count - (hours * 3600 + minutes * 60);
            document.getElementById(displayid).innerHTML = hours + "h " +
                minutes + "m " + seconds + "s ";
        }

        function countdown() {

            // starts countdown
            cddisplay();
            if (count === 0) {
                // time is up

                audio.play();
            } else {

                count--;
                t = setTimeout(countdown, 1000);
            }
        }


        function cdpause() {
            // pauses countdown
            clearTimeout(t);
        }

        function cdreset() {

            // resets countdown
            cdpause();
            count = CCOUNT;
            cddisplay();
        }

    </script>`

tak sekcja w HTML:
`





<?php echo $row['name']; ?>


</p>
                            <?php if($numrows>0) {foreach($steps as $step) { ?>
                            <div>
                                <h4>Krok:
                                    <?php echo $step['step']; ?>
                                </h4>


                                <input type="button" value="Start" onclick="setter2(<?php echo $step['time']; ?>, <?php echo $step['id']; ?>);countdown(); ">

                                <input type="button" value="Pause" onclick="cdpause()">
                                <input type="button" value="Reset" onclick="cdreset()">
                                <span id="<?php echo $step['id']; ?>"></span>
                            </div>
                            <input onclick='responsiveVoice.speak("<?php echo $step[' description ']; ?>","Polish Female");' type='button' value='🔊 Play' />
                            <p class="wow fadeInLeft animated" data-wow-delay=".5s">

                                <?php echo $step['description']; ?>

                            </p>
                            <script type="text/javascript">
                                setter(<?php echo $step['time']; ?>, <?php echo $step['id']; ?>);

                            </script>

                            <?php }} ?>
                        </div>
                    </div>`

a efekt jest taki:

title

Póki co to minutniki nie działają niezależnie... Przede wszystkim mają wspólny czas gdy je uruchamiam i po uruchomieniu minutnika z pierwszego kroku zmienia się czas od razu na 5 minut, czyli na czas minutnika z drugiego kroku, w tym wypadku ostatniego.

0

No nie, nie udało mi się, zostawiłem to tak jak jest póki co i zająłem się innymi rzeczami

0

Dobra, udało mi się zrobić tak, że każdy minutnik sobie działa już niezależnie czyli ma swój czas i nim zarządza. Tylko teraz jak zrobić aby obydwa na raz mogły działać? Każdy działa korzystając z tej samej funkcji i jak uruchomię jeden, a potem drugi, to ten drugi zatrzymuje ten pierwszy.

0

http://jadłospis.com.pl/ <-- to co udało mi się do tej pory zrobić. Jak by ktoś chciał przeklikać i podzielić się znalezionymi błędmi, to będę wdzięczny :) sugestie również mile widzane

1 użytkowników online, w tym zalogowanych: 0, gości: 1