Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML] Zapamiętywanie pól formularza
Forum PHP.pl > Forum > Przedszkole
d4nny
Witam, mam prosty formularz, po nie wypełnieniu wszystkich pól skrypt przekierowuje z powrotem na stronę formularza, chcę aby to co wypełnił użytkownik widniało w polach formularza po przekierowaniu, może nie jasno napisałem ale jestem pewien, że po kodzie wszystko będzie widać.

oto kod całego formularza:

  1. <?php
  2.                                          
  3. // sprawdzamy, czy zmienna $submit jest pusta
  4. if (empty($_POST['submit'])) {
  5.  
  6.  
  7.   // wyświetlamy formularz
  8.   echo
  9.  
  10.   "<table border=\"0\"><form method=\"post\">
  11.  
  12.   <tr>
  13.        <td width=\"159\" align=\"right\"><font face=\"Verdana\" size=\"2\">Temat:</font></td>
  14.        <td><font size=\"2\" face=\"Verdana\">
  15.  
  16.            <select name=\"temat\" class=\"temat\">
  17.              <option value=\"temat\">Wybierz temat</option>
  18.              <option>1*</option>
  19.              <option>2**</option>
  20.              <option>3***</option>
  21.              <option>4****</option>
  22.                  
  23.                                    </select></font></td>
  24.  
  25.    </tr>
  26.    
  27. <tr>
  28. <td align=right>Treść wiadomości:</td>
  29. <td><textarea name=\"tresc\" class=\"tresc\"></textarea></td>
  30. </tr>
  31. <tr>
  32. <td align=right>Imię, nazwisko lub nick:</td>
  33. <td><input type=\"text\" name=\"imie\" class=\"imie\" style=\"width: 250px\"</input>
  34. </td>
  35. </tr>
  36. <tr>
  37. <td align=right>Adres e-mail:</td>
  38. <td<input type=\"text\" name=\"email\" class=\"email\" style=\"width: 250px\"</input></td>
  39. </tr>
  40. <tr>
  41. <td></td><br />
  42. <td><br /><input type=\"submit\" name=\"submit\" class=\"wyslij\" value=\"Wyślij\">
  43. <input type=\"reset\" class=\"wyczysc\" value=\"Wyczyść\"></td></form>
  44. </tr>
  45.  
  46. </table>";
  47. echo '<input name="imie" type="hidden" value="'.$_POST['imie'].'">';}
  48.  
  49. // sprawdzamy, czy zmienne przesłane z formularza nie są puste
  50. elseif (!empty($_POST['temat']) && !empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) {
  51.  
  52.   // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
  53.   // zmienna $message zawiera treść wiadomości
  54.   $message = "Wysłał: $_POST[imie]\ne-mail: $_POST[email]\n\nTemat: $_POST[temat]\nTreść wiadomości: $_POST[tresc]\n";
  55.   // zmienna $header zawiera przede wszystkim adres zwrotny
  56.  // $header = "From: $from\nReply-to: $from\nMIME-Version: 1.0\nContent-type: text/html; charset=iso-8859-2";
  57.   $header = "From: $_POST[imie] <$_POST[email]> ";
  58.   // funkcja mail() za pomocą której wiadomość zostanie wysłana
  59.   @mail("***@gmail.com","Wiadomosc z ***.PL","$message","$header")
  60.   or die('Nie udało się wysłać wiadomości');
  61.  
  62.  
  63.  
  64.   // wyświetlenie komunikatu w przypadku powodzenia
  65.   echo "<span style=\"color: #c0c0c0; text-align: center;\"><strong>Wiadomość została wysłana poprawnie!<br><br> za chwile zostaniesz przekierowany na strone główną</strong></span><script type=\"text/javascript\">
  66.                  window.setTimeout(\"window.location.replace('index.php');\",5000);
  67.               </script>";
  68.                
  69. }
  70. // lub w przypadku nie wypełnienia formularza do końca
  71. else echo "<span style=\"color: #FF0000; text-align: center;\">Wypełnij wszystkie pola formularza! <br><br> Za chwilę zostaniesz automatycznie przekierowany z powrotem do formularza</span> <script type=\"text/javascript\">
  72.                  window.setTimeout(\"window.location.replace('index.php?id=kontakt-formularz-kontaktowy');\",4500);
  73.               </script>";
  74.              
  75.                      
  76. ?>


oczywiście szukałem w necie jak zrobić taki aby pola były zapamiętywane, znalazłem taki kod, ale nie wiem jak to wykorzystać, będę wdzięczny za pomoc

  1. <?php
  2. echo '<input type="text" name="imie" value="'.$_POST['imie'].'">';
  3. ?>


mam jeszcze pytanko, jest możliwość aby za mocno nie przerabiać formularza i sprawić aby pomyślnie przechodził walidację XHTML 1.0 Transitional ?

chodzi o to, że jak usunie się slashe przed znaczkami (cudzysłów) to skrypt przechodzi walidację ale wtedy nie dziala sam skrypt, jest możliwość aby nie zmieniać działania formularza i rozwiązać ten problem? z góry dzięki
tmka
Twój problem można rozwiązać na różne sposoby, pytanie tylko czy te przekierowanie jest ci na prawdę potrzebne? Jeżeli nie to sprawa jest prosta, napisz funkcje np. showForm() która będzie po prostu wyświetlać echem kod formularz z tym że musisz to zrobić w sposób jaki podałeś niżej:
  1. <?php
  2. echo '<input type="text" name="imie" value="'.$_POST['imie'].'">';
  3. ?>

teraz zmiast robić przekierowanie użyj funkcji showForm(), dzięki temu informacje przesłane z formularza bedą widoczne w nim po jego przełądowaniu.
artur_dziocha
użyj sesji
d4nny
dzięki za odpowiedzi

tmka
jak napisać taką funkcję? w którym miejscu ją wkleić? chcialbym aby komunikat o niewypelnieniu wszystkich pol byl wyswietlany na osobnej stronie - tak jak jest teraz a potem przekierowanie do formularza i pola wypelnione jak przed proba wyslania?

artur_dziocha

nie ma szans abym rozwiazal to sesją a juz na pewno nie sam, bez pomocy


co macie do powiedzenia o walidacji XHTML 1.0 Transitional tego skryptu ?
artur_dziocha
przed headerem tworzysz sobie sesje, w ktorej przetrzymujesz wszystkie pola przesłane $_POST
później po przekierowaniu przy wsywietlaniu pól formularza sprawdzasz czy istnieje sesja, którą sobie jakoś nazwałes.
Chyba najlepsze rozwiązanie. Pokombinuj troszkę
d4nny
napisałem coś takiego (odrazu zaznaczam, że nie znam PHP ale trochę poczytałem o sesjach):

to kod pierwszy, przechowuje wartośc pól formularza:

  1. <?php
  2. $_SESSION['zapamietaj']='$_POST[temat], $_POST[tresc], $_POST[imie], $_POST[email],';
  3. ?>


to kod drugi, wywołuje te pola..

  1. <?php
  2. if(isset($_SESSION['zapamietaj'])){
  3. echo $_SESSION['zapamietaj'];
  4. ?>


wiem, że te kody nie mają dużo wspólnego z programowaniem... proszę o poprawę tych kodów
sadistic_son
No niech będzie, masz tu gotowca:

  1. <?php
  2.                                        
  3. // sprawdzamy, czy zmienna $submit jest pusta
  4. if (empty($_POST['submit']) || ( !empty($_POST['submit']) && (empty($_POST['temat']) || empty($_POST['tresc']) || empty($_POST['imie']) || empty($_POST['email'])))) {
  5.     $sel1="no";
  6.     $sel2="no";
  7.     $sel3="no";
  8.     $sel4="no";
  9.    switch ($_POST['temat']){
  10.        case 1:
  11.            $sel1="selected";
  12.        break;
  13.        case 2:
  14.            $sel2="selected";
  15.        break;
  16.        case 3:
  17.            $sel3="selected";
  18.        break;
  19.        case 4:
  20.            $sel4="selected";
  21.        break;            
  22.    }
  23.  // wyświetlamy formularz
  24.  echo
  25.  
  26.  '<table border="0"><form method="post">
  27.  
  28.  <tr>
  29.       <td width="159" align="right"><font face="Verdana" size="2">Temat:</font></td>
  30.       <td><font size="2" face="Verdana">
  31.  
  32.           <select name="temat" class="temat">
  33.             Wybierz temat
  34.             <option value="1" selected="'.$sel1.'">1*</option>
  35.             <option value="2" selected="'.$sel2.'">2**</option>
  36.             <option value="3" selected="'.$sel3.'">3***</option>
  37.             <option value="4" selected="'.$sel4.'">4****</option>
  38.                
  39.                                   </select></font></td>
  40.  
  41.   </tr>
  42.  
  43. <tr>
  44. <td align=right>Treść wiadomości:</td>
  45. <td><textarea name="tresc" class="tresc">'.$_POST['tresc'].'</textarea></td>
  46. </tr>
  47. <tr>
  48. <td align=right>Imię, nazwisko lub nick:</td>
  49. <td><input type="text" name="imie" class="imie" style="width: 250px" value="'.$_POST['imie'].'"/>
  50. </td>
  51. </tr>
  52. <tr>
  53. <td align=right>Adres e-mail:</td>
  54. <td<input type="text" name="email" class="email" style="width: 250px" value="'.$_POST['email'].'"/></td>
  55. </tr>
  56. <tr>
  57. <td></td><br />
  58. <td><br /><input type="submit" name="submit" class="wyslij" value="Wyślij">
  59. <input type="reset" class="wyczysc" value="Wyczyść" /></td></form>
  60. </tr>
  61.  
  62. </table>';
  63. echo '<input name="imie" type="hidden" value="'.$_POST['imie'].'">';}
  64.  
  65. // sprawdzamy, czy zmienne przesłane z formularza nie są puste
  66. elseif (!empty($_POST['temat']) && !empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) {
  67.  
  68.  // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
  69.  // zmienna $message zawiera treść wiadomości
  70.  $message = "Wysłał: $_POST[imie]\ne-mail: $_POST[email]\n\nTemat: $_POST[temat]\nTreść wiadomości: $_POST[tresc]\n";
  71.  // zmienna $header zawiera przede wszystkim adres zwrotny
  72. // $header = "From: $from\nReply-to: $from\nMIME-Version: 1.0\nContent-type: text/html; charset=iso-8859-2";
  73.  $header = "From: $_POST[imie] <$_POST[email]> ";
  74.  // funkcja mail() za pomocą której wiadomość zostanie wysłana
  75.  @mail("***@gmail.com","Wiadomosc z ***.PL","$message","$header")
  76.  or die('Nie udało się wysłać wiadomości');
  77.  
  78.  
  79.  
  80.  // wyświetlenie komunikatu w przypadku powodzenia
  81.  echo '<span style="color: #c0c0c0; text-align: center;"><strong>Wiadomość została wysłana poprawnie!<br><br> za chwile zostaniesz przekierowany na strone główną</strong></span><script type="text/javascript">
  82.                 window.setTimeout("window.location.replace('; echo"'index.php');"; echo'",5000);
  83.              </script>';
  84.              
  85. }
  86. // lub w przypadku nie wypełnienia formularza do końca
  87. else {echo '<span style="color: #FF0000; text-align: center;">Wypełnij wszystkie pola formularza! <br><br> Za chwilę zostaniesz automatycznie przekierowany z powrotem do formularza</span>'; echo '<script type="text/javascript">
  88.                 window.setTimeout("window.location.replace('; echo"'index.php?id=kontakt-formularz-kontaktowy');"; echo'",4500);
  89.              </script>;';
  90.            
  91. }              
  92. ?>


Napisz czy działa, jak nie to gdzieś mogłem literówke walnąć bo go nie sprawdzałem. Poza tym kolego tutaj było sporo błędów w samym htmlu, nie dziwię się że nie przeszło walidacji.
Np. linijka 34 z Twojego kodu:
  1. <input type="text" name="email" class="email" style="width: 250px"</input>
Widziałeś kiedyś aby <input> kończył się </input>?!

Panowie! Po co robić to sesjami czy pisać jakieś dodatkowe funkcje skoro wystarczy zmienić trochę pierwszy warunek plus pododawać do inputów value=$_POST['wartosc']. I gotowe guitar.gif
d4nny
nie za bardzo działa, nie chce wysyłać formularza (tylko jak sie nie uzupelni do konca) ani go czyścić..
sadistic_son
w <form> dodaj action="adres_do_stony.php"
A jesli chodzi o czyszczenie to u mnie dziala z DOKLADNIE tym kodem, wiec musisz miec cos spaprane u sibie, moze we fragmencie poprzedzajacym ten kod.

EDIT: Rzeczywiscie nie wysle wartosci pol spowrotem jesli nie zrezygnujesz z oddzielnego tekstu z autoprzekierowaniem. Nie wolisz zrobic tego tak aby w przypadku niewypelnienia pol pojawil sie od razu formularz z wypelnionymi tymi co zostaly wypelnione i pustymi a nad nim, lub pod komunikat aby wypelnic reszte?
d4nny
nie chce byc nieskromny ale:

nadal nie chce wysyłać..

nie uzupelniaj do konca formularza, sprobuj wyslac i sprobuj wyczyscic - nie idzie..
sadistic_son
hmmmm, rzeczywiscie, po wyslaniu juz czyscic nie chce:/ nie wiem czemu tak sie dzieje. Ale formularz wysyla i wyswietla to co zostalo wypelnione. Teraz w CSS mozna zrobic aby pola wczesniej pominiete przez usera robily sie czerwone itp. Nie sadzisz ze to bedzie atrakcyjniejsze rozwiazanie niz wyswietlenie samego tekstu i przekierowanie spowrotem?
d4nny
możeo soba wypełniająca formularz chcialaby zostac poinformowana dlaczego w przypadku nie wypelnienia wszystkich pól po kliknieciu na wyslij nic sie nie dzieje..
sadistic_son
  1. <?php
  2.                                      
  3. // sprawdzamy, czy zmienna $submit jest pusta
  4. if (empty($_POST['submit']) || ( !empty($_POST['submit']) && (empty($_POST['temat']) || empty($_POST['tresc']) || empty($_POST['imie']) || empty($_POST['email'])))) {
  5. //jesli nie wypelniono wszystkich pol  
  6.  if((isset($_POST['temat']) && $_POST['temat']=="") || (isset($_POST['tresc']) && $_POST['tresc']=="") || (isset($_POST['imie']) && $_POST['imie']=="") || (isset($_POST['email']) && $_POST['email']=="")){
  7.        echo '<span style="background:red;">Wypelnij wszystkie pola!</span>';
  8.    }
  9.    $sel1="no";
  10.    $sel2="no";
  11.    $sel3="no";
  12.    $sel4="no";
  13.   switch ($_POST['temat']){
  14.       case 1:
  15.           $sel1="selected";
  16.       break;
  17.       case 2:
  18.           $sel2="selected";
  19.       break;
  20.       case 3:
  21.           $sel3="selected";
  22.       break;
  23.       case 4:
  24.           $sel4="selected";
  25.       break;            
  26.   }
  27. // wyświetlamy formularz
  28.  
  29. '<table border="0"><form method="post">
  30.  
  31. <tr>
  32.      <td width="159" align="right"><font face="Verdana" size="2">Temat:</font></td>
  33.      <td><font size="2" face="Verdana">
  34.  
  35.          <select name="temat" class="temat">
  36.            Wybierz temat
  37.            <option value="1" selected="'.$sel1.'">1*</option>
  38.            <option value="2" selected="'.$sel2.'">2**</option>
  39.            <option value="3" selected="'.$sel3.'">3***</option>
  40.            <option value="4" selected="'.$sel4.'">4****</option>
  41.              
  42.                                  </select></font></td>
  43.  
  44.  </tr>
  45.  
  46. <tr>
  47. <td align=right>Treść wiadomości:</td>
  48. <td><textarea name="tresc" class="tresc">'.$_POST['tresc'].'</textarea></td>
  49. </tr>
  50. <tr>
  51. <td align=right>Imię, nazwisko lub nick:</td>
  52. <td><input type="text" name="imie" class="imie" style="width: 250px" value="'.$_POST['imie'].'"/>
  53. </td>
  54. </tr>
  55. <tr>
  56. <td align=right>Adres e-mail:</td>
  57. <td<input type="text" name="email" class="email" style="width: 250px" value="'.$_POST['email'].'"/></td>
  58. </tr>
  59. <tr>
  60. <td></td><br />
  61. <td><br /><input type="submit" name="submit" class="wyslij" value="Wyślij">
  62. <input type="reset" class="wyczysc" value="Wyczyść" /></td></form>
  63. </tr>
  64.  
  65. </table>';
  66. echo '<input name="imie" type="hidden" value="'.$_POST['imie'].'">';}
  67.  
  68. // sprawdzamy, czy zmienne przesłane z formularza nie są puste
  69. elseif (!empty($_POST['temat']) && !empty($_POST['tresc']) && !empty($_POST['imie']) && !empty($_POST['email'])) {
  70.  
  71. // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
  72. // zmienna $message zawiera treść wiadomości
  73. $message = "Wysłał: $_POST[imie]\ne-mail: $_POST[email]\n\nTemat: $_POST[temat]\nTreść wiadomości: $_POST[tresc]\n";
  74. // zmienna $header zawiera przede wszystkim adres zwrotny
  75. // $header = "From: $from\nReply-to: $from\nMIME-Version: 1.0\nContent-type: text/html; charset=iso-8859-2";
  76. $header = "From: $_POST[imie] <$_POST[email]> ";
  77. // funkcja mail() za pomocą której wiadomość zostanie wysłana
  78. @mail("***@gmail.com","Wiadomosc z ***.PL","$message","$header")
  79. or die('Nie udało się wysłać wiadomości');
  80.  
  81.  
  82.  
  83. // wyświetlenie komunikatu w przypadku powodzenia
  84. echo '<span style="color: #c0c0c0; text-align: center;"><strong>Wiadomość została wysłana poprawnie!<br><br> za chwile zostaniesz przekierowany na strone główną</strong></span><script type="text/javascript">
  85.                window.setTimeout("window.location.replace('; echo"'index.php');"; echo'",5000);
  86.             </script>';
  87.            
  88. }
  89.              
  90. ?>


Zadowolony?
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.