Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] przy reloadzie zmienne znikają
Forum PHP.pl > Forum > Przedszkole
Dopler
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. ?>
trueblue
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.
Dopler
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?
trueblue
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.
dublinka
Zawsze mozesz uzyc sesji.
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.