Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]input z pętli for, wartości z pętli foreach
inomi13
post 15.09.2020, 20:18:26
Post #1





Grupa: Zarejestrowani
Postów: 95
Pomógł: 0
Dołączył: 16.08.2017

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


Witam, mam poniższy kod który chciałbym aby działał w następujący sposób tzn. w input'ach osoba będzie wpisywała dane natomiast kiedy formularz będzie zawierał błędy walidacyjne to chciałbym aby wartości w polach były zapamiętywane. wiem jak to ogarnąć jednak problem pojawia się kiedy inputy będą generowane z pętli for. Proszę o jakąś sugestię ponieważ kombinowałem robić pętle w pętli jednak bez rezultatu.


  1. <?php
  2. if(isset($_POST['confirm']))
  3. {
  4. $name = $_POST['name'];
  5. if(isset($name))
  6. {
  7. foreach($name as $value)
  8. {
  9. $_SESSION['value'] = $value;
  10. }
  11.  
  12. }
  13. }
  14. ?>
  15. <html lang="pl">
  16. <head>
  17. <link rel="stylesheet" href="css/style.css" type="text/css">
  18. </head>
  19. <body>
  20. <div id="container">
  21. <form method="post">
  22. <?php
  23. for($i = 1; $i <= 3; $i++)
  24. {
  25. echo '<input type="text" name="name[]" placeholder="Imię i Nazwisko:" value='.$_SESSION['value'].'>';
  26. }
  27. ?><br>
  28. <input type="submit" value="Zatwierdź" name="confirm"/>
  29. </form>
  30. </div>
  31. </body>
  32. </html>


Przerobiłem kod, ale wydaje mi się że nie jest on estetyczny. Proszę znawców o sugestię.

  1.  
  2. <?php
  3. if(isset($_POST['confirm']))
  4. {
  5. $_SESSION['name']= $_POST['name'];
  6. }
  7. ?>
  8. <html lang="pl">
  9. <head>
  10. <link rel="stylesheet" href="css/style.css" type="text/css">
  11. </head>
  12. <body>
  13. <div id="container">
  14. <form method="post">
  15. <?php
  16. for($i = 1; $i <= 4; $i++)
  17. {
  18. if(!is_array($_SESSION['name']))
  19. {
  20. ?> <input type="text" name="name[]" placeholder="Imię i Nazwisko:" value=""><?php
  21. }}
  22. if(is_array($_SESSION['name']))
  23. {
  24. foreach($_SESSION['name'] as $value)
  25. {
  26. ?><input type="text" name="name[]" placeholder="Imię i Nazwisko:" value="<?php echo $value; ?>"><?php
  27. }
  28. }
  29. ?><br>
  30. <input type="submit" value="Zatwierdź" name="confirm"/>
  31. </form>
  32. </div>
  33. </body>
  34. </html>
Go to the top of the page
+Quote Post
SmokAnalog
post 15.09.2020, 21:33:13
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Dobrze Ci intuicja podpowiada, że coś jest nie tak. Nie warto powtarzać tak dużej porcji kodu, podczas gdy tylko jego fragment jest inny. Mam na myśli te inputy.

Jeśli używasz PHP 7, to najprościej tak:

  1. <?php
  2. if(isset($_POST['confirm'])) {
  3. $_SESSION['name']= $_POST['name'];
  4. }
  5. ?>
  6. <html lang="pl">
  7. <head>
  8. <link rel="stylesheet" href="css/style.css">
  9. </head>
  10. <body>
  11. <div id="container">
  12. <form method="post">
  13. <?php for($i = 0; $i < 4; $i++): ?>
  14. <input type="text"
  15. name="name[]"
  16. placeholder="Imię i Nazwisko:"
  17. value="<?= htmlspecialchars($_SESSION['name'][$i] questionmark.gif '', ENT_QUOTES) ?>">
  18. <?php endfor ?>
  19. <br>
  20. <input type="submit" value="Zatwierdź" name="confirm">
  21. </form>
  22. </div>
  23. </body>
  24. </html>


Zauważ, że HTML z inputami pojawia się tylko raz. Jako wartość podajemy odpowiednio zakodowane $_SESSION['name'][$i] lub, jeśli to nie istnieje, pusty string. Operator questionmark.gif pojawił się w PHP 7, dlatego jeśli używasz starszej wersji, to trzeba to trochę przerobić.

P.S. W miejsce questionmark.gif wstaw dwa znaki zapytania obok siebie, bo to forum nadal nie wie kiedy wstawiać emotki, a kiedy nie.

Ten post edytował SmokAnalog 15.09.2020, 21:41:47
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: 27.04.2024 - 09:00