Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] przy reloadzie zmienne znikają
Dopler
post 6.02.2021, 13:39:57
Post #1





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 30.01.2008

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


Mam prośbę o poradę.
Na formularz dodawania rekordu do bazy wchodzę klikając w mapę. Zmienne są w adresie i mają postać
dodaj-punkt.php?lat=52.308853&lng=29.776051&zoom=6

Formularz prawidłowo je pobiera.

Jeśli ktoś prawidłowo wypełni pozostałe pola $nazwa i $opis wszystko jest w porządku

Jednak gdy nie wypełni któregoś z nich dostaje komunikat: Wypełnij wszystkie pola z sekcji 2 i 3. (czyli nazwa i opis)
Wówczas adres strony traci zmienne dodaj-punkt.php a pola lat lng i zoom otrzymują wartości domyślne.

Powinny jednak utrzymać wcześniej wprowadzone wartości. Co robię źle?
To mój kod


  1. <?php
  2. $getlat= isset($_GET['lat'])?$_GET['lat']:'52.42922';
  3. $getlng= isset($_GET['lng'])?$_GET['lng']:'19.42383';
  4. $getzoom= isset($_GET['zoom'])?$_GET['zoom']:'6';
  5.  
  6. if ($getlat!=''){
  7. echo '<script type="text/javascript">';
  8. echo "let startuplat = $getlat;";
  9. echo "let startuplng = $getlng;";
  10. echo "let startupzoom = $getzoom;";
  11. echo '</script>';
  12. }
  13. ?>
  14.  
  15. <?php
  16. if(isset($_POST['dodaj'])) {
  17. $r = str_pad(dechex(rand(0, 255)), 2, '0', STR_PAD_LEFT);
  18. $g = str_pad(dechex(rand(0, 255)), 2, '0', STR_PAD_LEFT);
  19. $b = str_pad(dechex(rand(0, 255)), 2, '0', STR_PAD_LEFT);
  20. $color = $r.$g.$b;
  21.  
  22. $date = date('Y-m-d H:i:s');
  23.  
  24. $lat = $_POST['lat'];
  25. $lng = $_POST['lng'];
  26. $zoom = $_POST['zoom'];
  27.  
  28. $nazwa = trim($_POST['nazwa']);
  29. $opis = trim($_POST['opis']);
  30. $slowa_kluczowe = trim($_POST['slowa_kluczowe']);
  31. $foto = $_POST['foto'];
  32. $forum = $_POST['forum'];
  33.  
  34. $opis = str_replace("\r", '<br/>', $opis);
  35. $opis = str_replace("\n", '', $opis);
  36.  
  37. if(!$lat || !$lng || !$zoom || !$nazwa || !$opis) {
  38. echo "<div class='error-box'><div class='content'><h4>Błąd</h4><p>Wypełnij wszystkie pola z sekcji 2 i 3.</p></div></div>";
  39. $opis = str_replace('<br/>', "\n", $opis);
  40. }else{
  41. if(strlen($nazwa) >= 3 && strlen($opis) >= 5) {
  42. mysql_query('INSERT INTO `miejsca-user` VALUES("", null, 0, 0, "'.$color.'", "'.$date.'", "'.$lat.'", "'.$lng.'", "'.$zoom.'", "'.$nazwa.'", "'.$opis.'", "'.$slowa_kluczowe.'", "'.$foto.'", "'.$forum.'")');
  43. echo "<div class='success-box'><div class='content'><h4>Sukces</h4><p>Miejsce zostało dodane. Oczekuje na akceptację przez administratora.</p></div></div>";
  44. }else{
  45. echo "<div class='error-box'><div class='content'><h4>Błąd</h4><p>Nazwa musi mieć minimum 3 znaki, a opis minimum 5 znaków.</p></div></div>";
  46. $opis = str_replace('<br/>', "\n", $opis);
  47. }
  48. }
  49. }
  50. ?>


--------------------
Genealogia Polaków
Go to the top of the page
+Quote Post
trueblue
post 6.02.2021, 14:44:33
Post #2





Grupa: Zarejestrowani
Postów: 6 799
Pomógł: 1827
Dołączył: 11.03.2014

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


W takim razie atrybut action formularza powinien mieć wartość: dodaj-punkt.php?lat=52.308853&lng=29.776051&zoom=6

Linia 6 w Twoim kodzie nie ma sensu.


--------------------
Go to the top of the page
+Quote Post
Dopler
post 6.02.2021, 18:16:39
Post #3





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 30.01.2008

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


Cytat(trueblue @ 6.02.2021, 14:44:33 ) *
W takim razie atrybut action formularza powinien mieć wartość: dodaj-punkt.php?lat=52.308853&lng=29.776051&zoom=6

Linia 6 w Twoim kodzie nie ma sensu.



Dzięki!

Dodałem w formularzu poniżej
  1. <?php
  2. echo "<form class='form' action='dodaj-punkt.php?lat=$getlat&lng=$getlng&zoom=$getzoom' method='POST'>";
  3. ?>


Jest 4/5 sukcesu.

ten if z szóstej linii jest mi potrzebny - bo mam w ramce mapę z której pobierana jest pozycja kursora. Gdy zmieniam pozycję kursora zmieniają się wartości w formularzu który potem jest wysyłany.

Jest jednak mały problem z którym sobie nie radzę

Wchodzę na stronę dodaj-punkt.php (pozycja kliknięcia w mapę jest pobierana i jest w linku dodaj-punkt.php?lat=23,4567....
1. W przypadku błędu wypełnienia pozostałych pól teraz formularz już wraca poprawnie - utrzymuje pozycję 23.4567
2. Jednak w przypadku gdy ktoś wpierw przesunie kursor (pozycja w okienku formularza zmieni się na 98.7654... ) i niewypełniwszy pola "opis" lub "nazwa" wyśle formularz - to następuje reload i kursor znowu jest na 23.4567...

Dałoby się tak zrobić bez reloadu przy każdym przesunięciu aby przesunięcie kursora zmieniało też wartość zmiennej?

Ten post edytował Dopler 6.02.2021, 18:18:36


--------------------
Genealogia Polaków
Go to the top of the page
+Quote Post
trueblue
post 6.02.2021, 19:13:20
Post #4





Grupa: Zarejestrowani
Postów: 6 799
Pomógł: 1827
Dołączył: 11.03.2014

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


if nie jest potrzebny, bo $getlat nigdy nie jest pusta, no chyba, że ktoś w linku usunie wartość, ale zachowa zmienną.

Pozbądź się zmiennych $_GET, a wszędzie używaj $_POST i Twój problem zostanie rozwiązany. Wtedy w atrybucie action formularza wystarczy samo dodaj-punkt.php.


--------------------
Go to the top of the page
+Quote Post
dublinka
post 6.02.2021, 21:00:08
Post #5





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Zawsze mozesz uzyc sesji.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 21.06.2025 - 23:43