Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przewinięcie strony po odświeżeniu
Forum PHP.pl > Forum > Po stronie przeglądarki
gucio1
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
trueblue
Jeśli sekcja ma id=sekcja400, to po zapisaniu przekierowujesz na adres: http://domena.pl/index.php#sekcja400
gucio1
A jeśli każdy wiersz to element tabeli?
viking
id możesz dowolnemu elementowi przypisać. Chociaż trzeba się zastanowić czy nie lepiej wysyłać te zmiany dynamicznie ajaxem.
gucio1
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.
gucio1
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
viking
To jest takie proste, ewentualnie jeszcze prostsze FetchAPI (+polyfill jeśli trzeba starsze wersje IE).
gucio1
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?
trueblue
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
viking
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ń.
gucio1
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
viking
$('#twoj_div').html(data.message);
gucio1
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

viking
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ń.
gucio1
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

viking
Powtórzę jeszcze raz. Delegacja zdarzeń. Poczytaj co to jest bo to podstawy JS.
gucio1
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ą?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.