Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: $_POST
Forum PHP.pl > Forum > PHP
nieraczek
  1. <form name="formularz" method="post" >
  2. <table>
  3.  
  4. <?php
  5. print "<tr>";
  6. print "<td>Wpisz cos</td>";
  7. print "<td> <input type='text' name='tekst' size='30' maxlength='30' value='$_POST[tekst]' /></td>";
  8. print "</tr>";
  9. ?>
  10.  
  11. <tr>
  12. <td>
  13. <input type="submit" name="przeslij" value="Przeslij"/>
  14. </td>
  15. </tr>
  16. </table>
  17. </form>
  18.  
  19.  
  20. <?php
  21. if(isset($_POST['przeslij']))
  22. {
  23. head("location: index.php");
  24. }
  25. ?>


Chciałbym się zapytać czy ten kod jest poprawny. Tzn. chodzi mi o to, że ten kod jest umieszczony na stronie "index.php"; jak za pomocą przeglądarki wejdzie sie na ta strone to w polu "tekst" ma nic nie pisać. Natomiast jak się w tym polu coś wpisze i kliknie na przycisk "przeslij" to ponownie ma sie wyswietlic ta sama strona, ale w polu "tekst" ma sie pojawic napis taki jak wpisano poprzednio. I tak sie zastanawiam czy dobrze zrobiłem przypisujac polu "tekst" wartosc "value='$_POST[tekst]'", bo przeciez jak sie pierwszy raz wejdzie na strone to jeszcze $_POST[tekst] nie istnieje, wiec pole tekst przyjmuje wartosc "NULL" znaczy za pierwszym razem jest puste ? W w przegladarce firefox to działa prawidłowo. Ale czy miałem prawo tak zrobić, czy to jest poprawne ?
c0cr0ach
W zasadzie nie wiem do czego coś takiego jest Ci potrzebne. W każdym razie kod nie jest do końca poprawny. Poniżej zamieszczam działający po małych modyfikacjach.

  1. <form name="formularz" method="post" action="index.php">
  2. <table>
  3.  
  4. <?php
  5. print "<tr>";
  6. print "<td>Wpisz cos</td>";
  7. if (isset($_POST['tekst'])) {
  8. print "<td> <input type=\"text\" name=\"tekst\" size=\"30\" maxlength=\"30\" value=\"".$_POST['tekst']."\" /></td>";
  9. }
  10. else {
  11. print "<td> <input type=\"text\" name=\"tekst\" size=\"30\" maxlength=\"30\" value=\"\" /></td>";
  12. }
  13. print "</tr>";
  14. ?>
  15.  
  16. <tr>
  17. <td>
  18. <input type="submit" name="przeslij" value="Przeslij"/>
  19. </td>
  20. </tr>
  21. </table>
  22. </form>


PS. Nie istnieje taka funkcja, jak head.
Istalacar
Może z tego się wywiąże mała dyskusja, ale uważam że to skraca kod i jest przyjemniejsze dla oka, mianowicie:
  1. form name="formularz" method="post" action="index.php">
  2. <table>
  3.  
  4. <?php
  5. print "<tr>";
  6. print "<td>Wpisz cos</td>";
  7. print "<td> <input type=\"text\" name=\"tekst\" size=\"30\" maxlength=\"30\" value=\"".$_POST['tekst']."\" /></td>";
  8. print "</tr>";
  9. ?>
  10.  
  11. <tr>
  12. <td>
  13. <input type="submit" name="przeslij" value="Przeslij"/>
  14. </td>
  15. </tr>
  16. </table>
  17. </form>
c0cr0ach
Wszystko fajnie Istalacar, tyle że w przypadku, gdy zmienna $_POST['tekst'] nie będzie ustawiona/zdefiniowana, wyrzuci Ci coś w stylu:
Notice: Undefined index: tekst in... on line...
No chyba, że masz inne ustawienia...
nieraczek
hm........ czy jak rozumiem wg c0cr0ach ten mój sposób nie jest poprawny, a wg Istalacar jest poprawny. Kto ma racje ? smile.gif

A jest to potrzebne np. do tego, że gdy mamy formularz kontaktowy na stronie i ktoś wyłączył obsługę javascript lub po prostu formularz nie ma walidacji javascript a tylko walidację PHP to po kliknięciu na button "przeslij" jeśli podczas walidacji za pomocą PHP okaże się, że np. nie wypełniono wszystkich pól to formularz nie zostanie wysłany, osoba starająca się wysłać formularz będzie więc go musiała poprawić - jednak dostanie z powrotem pusty formularz i będzie musiała go na nowo wypełniac, a wg mojego sposobu otrzyma formularz - a właściwie tutaj jedno pole tekstowe z tym co wpisała wcześniej do poprawy.

Przetestowałem to w firefoxie i IE7 i nie było błędów.
c0cr0ach
@nieraczek ogólnie Twój sposób jest poprawny. Jedyne co rzuciło mi się w oczy i - że tak się wyrażę - nie spodobało, to fakt że sprawdzasz ustawienie wartości zmiennej $_POST['przeslij'], która zawsze będzie miała ustaloną wartość. No i o "funkcji" head już pisałem.

@Istalacar
Gwoli ścisłości, takie "cuda" wyskoczyłyby Ci w sytuacji, gdybyś w php.ini miał ustawione dyrektywy:
error_reporting = E_ALL, display_errors = On smile.gif
Gdybym wyłączył notices wszystko wyglądałoby niby pięknie, tak jak np. w Twoim przypadku winksmiley.jpg
Istalacar
Nieraczek, nic złego w Twoim skrypcie nie widzę, poza tym, że zawsze się IF na dole wypełni jak wyślesz formularz, a jeżeli funkcja head do której się odwołujesz ma za zadanie wywołać przekierowanie na stronę na której jest (np. przez header('Location: ')), wtedy się skasują zmienne post.

Edit:
c0cr0ach powiem szczerze, dopiero się uczę i sprawdzam konfigurację różnych serwerów, nie miałem jeszcze styczności z takim który wyrzuca taki błąd, ale dzięki za informację:).
Sedziwoj
Ja bym sugerował takie rozwiązanie:
  1. <form name="formularz" method="post" action="">
  2. <table>
  3. <?php
  4. if ( isset($_POST['tekst']) ){
  5. $strTekst = $_POST['tekst'];
  6. }else{
  7.  $strTekst = '';
  8. }
  9. echo '<tr>';
  10. echo '<td>Wpisz cos</td>';
  11. echo '<td> <input type="text" name="tekst" size="30" maxlength="30" value="' . $strTekst . '" /></td>';
  12. echo '</tr>';
  13. ?>
  14.  
  15. <tr>
  16. <td colspan="2">
  17. <input type="submit" name="przeslij" value="Przeslij"/>
  18. </td>
  19. </tr>
  20. </table>
  21. </form>

A dlaczego tak, bo masz swobodę skąd pochodzi wartość $strTekst, może to być przetworzona już wartość. A trzeba sprawdzać isset($_POST['tekst']), bo odwoływanie się do czegoś co nie zostało zainicjalizowane jet złe.
Istalacar
To w ramach jeszcze skrócenia kodu można jeszcze zrobić:
(wewnątrz value=")
  1. <?php echo (isset($_POST['tekst'])) ? $_POST['tekst'] : ''; ?>
Sedziwoj
@Istalacar
Chyba w ramach zmniejszenia czytelności. Do tego przy moim sposobie masz możliwość zrobienia coś jeszcze, co raczej zawsze się znajdzie. Do tego łatwiej debugować biggrin.gif
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.