Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Niezdefiniowane indeksy w formularzu
Forum PHP.pl > Forum > Przedszkole
mlodygda
Witam, to mój pierwszy post na forum. Po zapoznaniu się z FAQ i przeszukaniu tematów stwierdziłem, że zadam pytanie bo nigdzie takiego nie znalazłem. Chodzi mianowicie o lepki formularz na stronie. Kod php wygląda następująco:

  1. if (isset($_POST['wyslij'])) {
  2. $problem=FALSE;
  3.  
  4. if (empty($_POST['uzytkownik'])){
  5. $problem=TRUE;
  6. print '<p>Wpisz nazwe uzytkownika</p>';
  7. }
  8.  
  9. if (empty($_POST['imie'])){
  10. $problem=TRUE;
  11. print '<p>Wpisz swoje imie.</p>';
  12. }
  13.  
  14. if (empty($_POST['email'])){
  15. $problem=TRUE;
  16. print '<p>Wpisz swojego emaila!</p>';
  17. }
  18.  
  19. if (empty($_POST['haslo1'])){
  20. $problem=TRUE;
  21. print '<p>Proszę podać hasło!</p>';
  22. }
  23.  
  24. if ($_POST['haslo1']!=$_POST['haslo2']){
  25. $problem=TRUE;
  26. print '<p>Twoje hasła się nie zgadzają.</p>';
  27. }
  28.  
  29. if (!$problem){
  30.  
  31. print '<p>zarejestrowales sie!</p>';
  32. } else {
  33. print 'Sprobuj jeszcze raz!';
  34. }
  35. }


Przy tym wyrzuca mi taki błąd:

  1. Notice: Undefined index: uzytkownik in C:\xampp\htdocs\mojestrony\strona2\rejestracja.php on line 56
  2.  
  3. Notice: Undefined index: imie in C:\xampp\htdocs\mojestrony\strona2\rejestracja.php on line 57
  4.  
  5. Notice: Undefined index: email in C:\xampp\htdocs\mojestrony\strona2\rejestracja.php on line 58


Pytanie jest raczej natury czysto upiększającej, bo poradziłem sobie z tym problemem na dwa sposoby, jednak nie wiem do końca jakie niosą ze sobą skutki. Pytanie do was który lepszy. A więc:

1. Zadeklarować zmienne na początku kodu jako puste miejsca
Problem: jeśli będzie dużo zmiennych to dużo..syzyfowej pracy.

2. error_reporting (E_ALL & ~E_NOTICE);
Problem: nie wiem co moge przegapić, jeśli nie będzie pokazywało błędów typu NOTICE.
nospor
Kod co tu pokazałeś nie odpowiada za te błędy.

Zanim dobierzesz się do indeksu tablicy, najpierw należy sprawdzić, czy ten indeks istnieje. Do tego używa się isset() lub !empty()

Cytat
2. error_reporting (E_ALL & ~E_NOTICE);
Problem: nie wiem co moge przegapić, jeśli nie będzie pokazywało błędów typu NOTICE.
Najgorsze co możesz zrobić. Tu wyjaśniam dlaczego:
http://nospor.pl/notice-wyswietlac-czy-nie.html
mlodygda
Cytat(nospor @ 22.08.2012, 12:30:35 ) *
Kod co tu pokazałeś nie odpowiada za te błędy.


aj, faktycznie. błedy wywala przy formularzu html.

Cytat(nospor @ 22.08.2012, 12:30:35 ) *
Zanim dobierzesz się do indeksu tablicy, najpierw należy sprawdzić, czy ten indeks istnieje. Do tego używa się isset() lub !empty()


rozumiem ze tu indeksami tablicy są moje zmienne (uzytkownik, imie i mail) ?

Cytat(nospor @ 22.08.2012, 12:30:35 ) *
Najgorsze co możesz zrobić. Tu wyjaśniam dlaczego:
http://nospor.pl/notice-wyswietlac-czy-nie.html


Dzięki. Czyli deklaracja ich na poczatku jako pustych miejsc jest...poprawnym rozwiązaniem?
nospor
Cytat
Czyli deklaracja ich na poczatku jako pustych miejsc jest...poprawnym rozwiązaniem?
Nie/tak (zależy od użycia).... Przecież wyraźnie napisałem:
Cytat
Zanim dobierzesz się do indeksu tablicy, najpierw należy sprawdzić, czy ten indeks istnieje. Do tego używa się isset() lub !empty()

Ewentualnie możesz pisać tak:
$zmienna = isset($_POST['zmienna']) ? $_POST['zmienna'] : '';
Wszystko zależy od sytuacji

Cytat
rozumiem ze tu indeksami tablicy są moje zmienne (uzytkownik, imie i mail) ?
To nie są zmienne, a indeksy tablicy.
To jest zmienna: $zmienna
To jest indeks tablicy: $tablica['indeks']
mlodygda
Kurde kombinuje i nie wychodzi. Nie wiem w jakim miejscu wrzucic tego if(isset()){}.
Wrzucałem za pierwszym ifssetem:

  1. if (isset($_POST['wyslij'])) {
  2. $problem=FALSE;
  3. if (isset($_POST['uzytkownik']{
  4. ....


I dalej ten sam błąd.

Próbowałem w miejscu gdzie jest formularz ale tam to trochę po omacku robiłem i dopiero jakieś dziwne błędy pokazało. Jakaś podpowiedź?
nospor
Ty pokaż lepiej zawartość pliku rejestracja.php (bez twoich obecnych zmian z tego tematu)
mlodygda
Prosze bardzo
(z jeszcze koślawym definiowaniem uzytkownika, imienia i maila na samym poczatku):

  1. <?php
  2.  
  3. ?>
  4.  
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
  6. <HTML>
  7. <HEAD>
  8. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  9.  
  10. <TITLE>Rejestracja</TITLE>
  11. </HEAD>
  12. <BODY>
  13. <?php
  14. $_POST['uzytkownik']=" ";
  15. $_POST['imie']=" ";
  16. $_POST['email']=" ";
  17.  
  18. require ('naglowek.php');
  19.  
  20. print '<div id="lewastrona">
  21. <h1>Rejestracja</h1>
  22. <p>Zarejestruj sie!</p>';
  23.  
  24. // <<<<----------- POCZĄTEK IF ---------->>> //
  25.  
  26. if (isset($_POST['wyslij'])) {
  27. $problem=FALSE;
  28.  
  29. if (empty($_POST['uzytkownik'])){
  30. $problem=TRUE;
  31. print '<p>Wpisz nazwe uzytkownika</p>';
  32. }
  33. if (empty($_POST['imie'])){
  34. $problem=TRUE;
  35. print '<p>Wpisz swoje imie.</p>';
  36. }
  37. if (empty($_POST['email'])){
  38. $problem=TRUE;
  39. print '<p>Wpisz swojego emaila!</p>';
  40. }
  41. if (empty($_POST['haslo1'])){
  42. $problem=TRUE;
  43. print '<p>Proszę podać hasło!</p>';
  44. }
  45. if ($_POST['haslo1']!=$_POST['haslo2']){
  46. $problem=TRUE;
  47. print '<p>Twoje hasła się nie zgadzają.</p>';
  48. }
  49. if (!$problem){
  50.  
  51. header('Location: witaj.php');
  52.  
  53.  
  54. } else {
  55. print 'Sprobuj jeszcze raz!';
  56. }
  57. }
  58.  
  59. // <<<-------- KONIEC IF ------------>>>> //
  60.  
  61. print '<form action="rejestracja.php" method="POST"><p>
  62. Nazwa uzytkownika:<input type="text" name="uzytkownik" size="20" value="'.$_POST['uzytkownik'] .'" /><br />
  63. Imie:<input type="text" name="imie" size="20" value="'.$_POST['imie'] .'" /><br />
  64. Email:<input type="text" name="email" size="20" value="'.$_POST['email'] .'" /><br />
  65. Haslo:<input type="password" name="haslo1" size="20" /><br />
  66. Powtorz haslo:<input type="password" name="haslo2" size="20" /><br />
  67. <input type="submit" name="wyslij" size="20" value="REJESTRUJ!" /></p>
  68. </form>';
  69. print '</div>';
  70.  
  71. require('stopka.php');
  72.  
  73. ?>
  74.  
  75.  
  76. </BODY>
  77. </HTML>
  78.  
  79. <?php
  80.  
  81. ?>
nospor
Chodzi o ten kod:
Kod
Nazwa uzytkownika:<input type="text" name="uzytkownik" size="20" value="'.$_POST['uzytkownik'] .'" /><br />

Imie:<input type="text" name="imie" size="20" value="'.$_POST['imie'] .'" /><br />

Email:<input type="text" name="email" size="20" value="'.$_POST['email'] .'" /><br />

Pisałem ci jak masz to pisać:
Kod
Nazwa uzytkownika:<input type="text" name="uzytkownik" size="20" value="'.(isset($_POST['uzytkownik']) ? $_POST['uzytkownik'] : '') .'" />

Analogicznie pozostałe pola
mlodygda
aj wej, a ja kombinowalem z "if" po przeczytaniu twojego artykułu. Dzieki bardzo za cierpliwość. Mam jeszcze pytanie czy byś mógł jakoś wytłumaczyć ten fragment bo po prostu nie rozumiem tej konstrukcji..
nospor
ternary operator
http://sg3.php.net/manual/pl/language.oper....comparison.php

Cytat
aj wej, a ja kombinowalem z "if" po przeczytaniu twojego artykułu.
Następnym razem patrz na numer linii błędu... po to one się wyświetlają...
ethann
  1. $_POST['uzytkownik']=" ";
  2. $_POST['imie']=" ";
  3. $_POST['email']=" ";


Ten fragment umieszczony na początku to Zuo! Jeśli zatwierdzisz formularz, wtedy wysłane przez niego wartości od razu nadpiszesz na puste już na samym początku.
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.