Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]input z pętli for, wartości z pętli foreach
Forum PHP.pl > Forum > Przedszkole
inomi13
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>
SmokAnalog
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.
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.