Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przewinięcie strony po odświeżeniu
gucio1
post 12.10.2017, 12:32:15
Post #1





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 30.04.2016

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


Witam,
mam listę ok 1000 wierszy na jednej stronie.
W każdym wierszu znajduje się input i button.
Jadę w dół scrolem wybieram wiersz nr 435 wysyłam wpisane dane w konkretnym wierszu strona się przeładowuje i chcę po odświeżeniu być w tym samym miejscu strony na wierszu 435.

Jakiej funkcji do tego użyć i w JS mam odwołać się do diva, klasy,id czy jakiejś sekcji?
Pozdr
Go to the top of the page
+Quote Post
trueblue
post 12.10.2017, 12:35:21
Post #2





Grupa: Zarejestrowani
Postów: 4 790
Pomógł: 1347
Dołączył: 11.03.2014

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


Jeśli sekcja ma id=sekcja400, to po zapisaniu przekierowujesz na adres: http://domena.pl/index.php#sekcja400
Go to the top of the page
+Quote Post
gucio1
post 12.10.2017, 12:40:20
Post #3





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 30.04.2016

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


A jeśli każdy wiersz to element tabeli?
Go to the top of the page
+Quote Post
viking
post 12.10.2017, 12:41:35
Post #4





Grupa: Zarejestrowani
Postów: 4 742
Pomógł: 795
Dołączył: 30.08.2006

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


id możesz dowolnemu elementowi przypisać. Chociaż trzeba się zastanowić czy nie lepiej wysyłać te zmiany dynamicznie ajaxem.


--------------------
Go to the top of the page
+Quote Post
gucio1
post 12.10.2017, 12:50:41
Post #5





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 30.04.2016

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


Aa czaje. Ok już mi przenosi na odpowiednie id po przekierowaniu na: adres#id.

Teraz kolejny problem. na górze mam pasek menu zawsze widoczny który zasłania jakieś 200px góry strony i wiersz do którego mnie przenosi jest zasłonięty.
Jest możliwość obniżyć wynik przeniesienia czy to już jest potrzebny skrypt w JS?
I za bardzo nie czaje Ajaxa. Nigdy nic w nim nie robiłem. Jak potrzebuje czegoś ruchomego zawsze robię w JS.
Go to the top of the page
+Quote Post
viking
post 12.10.2017, 12:55:05
Post #6





Grupa: Zarejestrowani
Postów: 4 742
Pomógł: 795
Dołączył: 30.08.2006

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


https://prophp.pl/advice/show/20/pierwsze_k..._i_czym_jest%3F


--------------------
Go to the top of the page
+Quote Post
gucio1
post 12.10.2017, 13:03:10
Post #7





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 30.04.2016

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


Dobra.. wink.gif

zaraz potestuje tego Ajaxa na prostym formularzu. Jeśli to takie proste jak w tym artykule to jestem głupi że do tej pory tego nie umiem smile.gif
Go to the top of the page
+Quote Post
viking
post 12.10.2017, 13:06:06
Post #8





Grupa: Zarejestrowani
Postów: 4 742
Pomógł: 795
Dołączył: 30.08.2006

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


To jest takie proste, ewentualnie jeszcze prostsze FetchAPI (+polyfill jeśli trzeba starsze wersje IE).


--------------------
Go to the top of the page
+Quote Post
gucio1
post 12.10.2017, 13:22:21
Post #9





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 30.04.2016

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


Czyli zamiast wysyłać coś przez formularz to wysyłam dane ajaxem i następuje dokładnie to samo co po przeładowaniu strony tylko bez przeładowania?

Mam wiersz w którym ma aktualną wartość produktu z bazy danych inputa i buttona.
Wpisuję nową wartość klikam buttona wysyłam to przez ajax do skryptu który aktualizuje cenę w bazie.
Wyświetla mi się nowa cena bez przeładowania strony?

Wartości inputa i buttona odbieram normalnie $_POSTem w drugim pliku php tylko nie robię przekierowania jak zazwyczaj?
Go to the top of the page
+Quote Post
trueblue
post 12.10.2017, 13:32:33
Post #10





Grupa: Zarejestrowani
Postów: 4 790
Pomógł: 1347
Dołączył: 11.03.2014

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


Cytat(gucio1 @ 12.10.2017, 13:50:41 ) *
Teraz kolejny problem. na górze mam pasek menu zawsze widoczny który zasłania jakieś 200px góry strony i wiersz do którego mnie przenosi jest zasłonięty.
Jest możliwość obniżyć wynik przeniesienia czy to już jest potrzebny skrypt w JS?

http://kawalekkodu.pl/post/masz-cela-jak-b...z-przesunieciem
Go to the top of the page
+Quote Post
viking
post 12.10.2017, 13:38:41
Post #11





Grupa: Zarejestrowani
Postów: 4 742
Pomógł: 795
Dołączył: 30.08.2006

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


Dokładnie tak, to jest tylko iny sposób przesłania danych. Na stronie jest też porada jak przygotować PHP do obsługi takich żądań.


--------------------
Go to the top of the page
+Quote Post
gucio1
post 12.10.2017, 18:00:50
Post #12





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 30.04.2016

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


Opanowałem wpisywanie do bazy bez przeładowania strony ale jak odświeżyć wyniki pobrane z bazy które mam na stronie z której wysyłam formularz?
Musze przykładowo za pomocą:
  1. echo json_encode([
  2. 'message' => sprintf($userId)
  3. ]);

przekazać daną do diva o id message?
Czyli na początku pobieram dana z bazy i wpisuje ją do do diva o id message i jak prześlę formularz przez ajaxa to za pomocą ww. instrukcji musze przekazać do tego diva nową wartość zmiennej?

Czy może jest jakaś instrukcja która zmieni wyświetlane dane kiedy zmienią się w bazie? Choć to już chyba nierealna koncepcja. smile.gif

Ten post edytował gucio1 12.10.2017, 18:07:54
Go to the top of the page
+Quote Post
viking
post 12.10.2017, 19:24:45
Post #13





Grupa: Zarejestrowani
Postów: 4 742
Pomógł: 795
Dołączył: 30.08.2006

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


$('#twoj_div').html(data.message);


--------------------
Go to the top of the page
+Quote Post
gucio1
post 13.10.2017, 11:37:35
Post #14





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 30.04.2016

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


Mam kolejny problem, chcę wyciągać kolejno wartości produktów z bazy danych i do każdy z osobna ma obsługiwać ajax. Czyli wszystkie ceny maja aktualizować się bez odświeżania.

To mój plik gdzie wywołuje formularze dla każdego produktu
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
  6. <script>
  7. $(function() {
  8. $('#userdelete').on('submit', function(event) {
  9. event.preventDefault();
  10.  
  11. $.ajax({
  12. url: "formularz3.php",
  13. method: "POST",
  14. data: $(this).serialize()
  15. })
  16. .done(function(data, textStatus, jqXHR) {
  17. var zm = data.idProduktu;
  18. $('#message'+zm).html(data.message);
  19. })
  20. .fail(function(jqXHR, textStatus, errorThrown) {
  21. $('#message'+zm).html(jqXHR.responseJSON.message);
  22. });
  23. });
  24. });
  25. </script>
  26. </head>
  27. <body>
  28. <?php
  29. require_once 'connectKlasa.php';
  30. $con = new Connect();
  31. $connect = new mysqli($con->host, $con->db_user, $con->db_password, $con->db_name);
  32. $down = $connect->query("SELECT * FROM shop WHERE liczbaZdj ='2'");
  33. while($row = $down->fetch_assoc()){
  34. echo '<div id="message'. $row['idProduktu'].'">'. $row['cena'].'</div>
  35. <form action="POST" id="changePrice">
  36. <input type="text" name="cena">
  37. <input type="hidden" name="idProduktu" value="'. $row['idProduktu'].'">
  38. <input type="submit">
  39. </form><br><br>';
  40. }
  41. ?>
  42. </body>
  43. </html>


Wysyłam id produktu oraz nową cenę
W drugim pliku:
  1. <?php
  2.  
  3. header("Content-Type: application/json;charset=utf-8");
  4.  
  5. $cena = $_POST['cena'];
  6. $idProduktu = $_POST['idProduktu'];
  7.  
  8. if (is_numeric($cena)) {
  9.  
  10. require_once 'connect.php';
  11. $con = new Connect();
  12. $connect = new mysqli($con->host, $con->db_user, $con->db_password, $con->db_name);
  13. $connect->query("UPDATE shop SET cena='$cena' WHERE idProduktu='$idProduktu'");
  14. echo json_encode([
  15. 'message' => sprintf($cena),
  16. 'idProduktu' => $idProduktu
  17. ]);
  18. } else {
  19. echo json_encode([
  20. 'message' => sprintf("Złe dane"),
  21. 'idProduktu' => $idProduktu
  22. ]);
  23. }


Aktualizuje cenę w bazie i chce zwrócić nowe ceny, problem w tym że pierwszy rekord działa jak należy a następne zwracają mi dane w adresie i tak jakby nie były odbierane przez drugi plik.
Wydaje mi się że muszę przekazać idProduktu na początku skryptu z pierwszego pliku i każdy formularz nazwać changePrice'.$idProduktu żeby skrypt wiedział do którego formularza się odwołać.
Jak to zrobić? Uruchamiać skrypt on clickiem w tym wypadku w ogóle jest taka możliwość? Pomożecie? smile.gif

Go to the top of the page
+Quote Post
viking
post 13.10.2017, 11:51:58
Post #15





Grupa: Zarejestrowani
Postów: 4 742
Pomógł: 795
Dołączył: 30.08.2006

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


Podpiąłeś pod konkretne id więc działa dla tego id. A id może być unikalne jedno na stronie. Poczytaj o delegacji zdarzeń.


--------------------
Go to the top of the page
+Quote Post
gucio1
post 13.10.2017, 12:11:03
Post #16





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 30.04.2016

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


Znaczy wydaje mi się że formularzem wysyłam za każdym razem inne id.
Drugi plik odbiera id produktu i wiadomość zwrotną wysyła na message'.$idProduktu.

Więc skoro mam message o konkretnym id skrypt nie znajduje go w pierwszym pliku a raczej dlatego że wszystkie formularze nazywają się changePrice już bez idProduktu z boku.

Wydaje mi się żę dodanie idProduktu do każdego formularza changePrice rozwiązało by problem. Tylko skrypt jeśli dobrze to rozumiem nasłuchuje kliknięć w konkretnym fomrularzu a powinien nasłuchiwać w dowolnym. Jeśli idę w złym kierunku to mnie naprostujcie smile.gif

Go to the top of the page
+Quote Post
viking
post 13.10.2017, 12:18:38
Post #17





Grupa: Zarejestrowani
Postów: 4 742
Pomógł: 795
Dołączył: 30.08.2006

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


Powtórzę jeszcze raz. Delegacja zdarzeń. Poczytaj co to jest bo to podstawy JS.


--------------------
Go to the top of the page
+Quote Post
gucio1
post 16.10.2017, 12:24:08
Post #18





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 30.04.2016

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


O masz wystarczyło odwoływać się do formularza o jakiejś klasie a nie o jakimś id..

Ok, mam drugi skrypt który pobiera statusy zamówień z dwóch tabel sortuje je według daty i wyświetla.

Chciałbym zmiany statusów też zrobić bez odświeżania. W takim razie po wysłaniu formularza ze statusem mam wywołać klase php która wyświetla posortowane statusy i dane na stronie dynamicznie się zaktualizują?
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 Wersja Lo-Fi Aktualny czas: 18.02.2018 - 03:51