Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Undefined variable[/php]
Forum PHP.pl > Forum > Przedszkole
Maciejo_5
Witam, od wczoraj zacząłem bawić się php, zainstalowałem sobie wampa na windowsie, a na ubuntu zainstalowałem apache + php + mysql z phpmyadmin. Następnie znalazłem książkę i z niej się uczę. Podany przykład w kodzie html:
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <?php
  6. //utworz krotkie nazwy zmiennych
  7. $iloscopon = $_POST['iloscopon'];
  8. $iloscoleju = $_POST['iloscoleju'];
  9. $iloscswiec = $_POST['iloscswiec'];
  10. ?>
  11. <form action="action.php" method=post>
  12. <table border=0>
  13. <tr bgcolor=#cccccc>
  14. <td width="150">Produkt</td>
  15. <td width="15">Ilosc</td>
  16. </tr>
  17. <tr>
  18. <td>Opony</td>
  19. <td align="center"><input type="text" name="iloscopon" size="3" maxlenght="3"></td>
  20. </tr>
  21. <td>Oleje</td>
  22. <td align="center"><input type="text" name="iloscoleju" size="3" maxlenght="3"></td>
  23. </tr>
  24. <td>Swiece zaplonowe</td>
  25. <td align="center"><input type="text" name="iloscswiec" size="3" maxlenght="3"></td>
  26. </tr>
  27. <td colspan="2" align="center"><input type="submit" value="Zloz zamowienie"></td>
  28. </tr>
  29. </table>
  30. </form>
  31. </body>
  32. </html>


następnie kod z action.php

  1. <html>
  2. <head>
  3. <title>Czesci samochodowe Janka - wyniki zamowienia</title>
  4. </head>
  5. <body>
  6. <h1> Czesci samochodowe Janka</h1>
  7. <h2> Wyniki zamowienia</h2>
  8. <?php
  9. echo "<p>Zamowienie przyjete.</p>";
  10. echo '<p>Zamowienie Panstwa wyglada nastepujaco: </p>';
  11. echo $iloscopon.'opopn<br />';
  12. echo $iloscoleju.'butelek oleju<br />';
  13. echo $iloscswiec.'swiec zaplonowych<br />';
  14. ?>
  15. </body>
  16. </html>

na stronie wyskakuje komunikat:Notice: Undefined variable: iloscopon in D:\wamp\www\stronki\action.php on line 11
opopn.
Rozumiem że nie zdefiniowałem zmiennej z tym, że nigdzie nie ma w książce opisane jak to zrobićsmile.gif pozdrawiam i dzięki z góry za pomoc.
ps. przepraszam jak coś źle umieściłem w znacznikach nie wiem czy umieszczać kod html w znacznikach html jeśli chodzi mi o php głównie.
wookieb
W ten właśnie sposób
  1. //utworz krotkie nazwy zmiennych
  2. $iloscopon = $_POST['iloscopon'];
  3. $iloscoleju = $_POST['iloscoleju'];
  4. $iloscswiec = $_POST['iloscswiec'];
pedro84
  1. $iloscopon = $_POST['iloscopon'];
zelu
Zanim wyświetlisz zmienne musisz coś do nich przypisać. Obstawiam, że coś z $_POST.

Bo w tej chwili próbujesz wyświetlić coś, co w ogóle nie istnieje smile.gif Stąd ten Notice
Maciejo_5
To wiem że muszę przypisać tylko jak? Skoro w tym formularzu mam zmienną
  1. $iloscopon = $_POST['iloscopon'];
rozumiem że jest przypisana do
  1. <tr>
  2. <td>Opony</td>
  3. <td align="center"><input type="text" name="iloscopon" size="3" maxlenght="3"></td>
  4. </tr>

wiec w tym formularzu wpisuje odpowiednio 1,2,3 dla przykladu opony, olej i świece i wyskakuje niezdefiniowana zmienna dla wszystkich 3 wpisanych liczb.
dg2001
Tak te pola odnoszą się do pól w formularzu, lecz formularz wywołuje plik action="action.php" w w tym pliku musisz mieć zdefiniowane do jakich zmiennych ma przypisać wartości z pól z formularza.

Czyli masz nazwę pola w formularzu ILOSCOPON to w pliku action.php musisz mieć albo zrobione tak że do zmiennej $iloscopon przypisze ci wartość pola $_POST['iloscopon'] albo przy wyświetlaniu tej wartości tak jak masz echo $iloscopon.'......'; wpiszesz po prostu $_POST['iloscopno'].'.....';
Maciejo_5
Cóż dzięki za pomoc doszedłem przykład jest dobry zmienne zdeklarowałem nie w tym pliku co trzeba:) Rookie mistake:) Jeszcze raz dziękuje za cierpliwość i szybką pomoc i przede wszystkim za wyrozumiałość dla nowicjusza, pozdrawiam.
lucky2011
Postanowiłem napisać tego posta bo miałem podobny problem z tej samej książki i odpowiedzi tutaj go nie rozwiązały.

Kod: $iloscopon = $_POST ['iloscopon']; rzeczywiście powinien być w pliku action.php ale to nie rozwiązało mojego problemu wieć poszukałem na google i znalazłem przyczynę.

Trzeba włączyć w serwerze php ustawienie "register globals", ma być ON co jest domyślnie wyłączone w wersiach od 4.2.0 w górę.

Innym sposobem można użyć zamiast $iloscopon styl średni $_POST['iloscopon'] od wersji PHP 4.1.0 i w górę.

$_POST ['iloscopon'] = $_POST ['iloscopon'];

http://lucky2011.strefa.pl
http://lucky.user.oak.pl
sadistic_son
Włączenie register_globals nie jest dobrym pomysłem. Ze względów bezpieczeństwa powinna być ta opcja wyłączona. Jeśli uczysz się na swoim localhoscie to nie ma problemu ale po co nabierać złych przyzwyczajeń?
lucky2011
Napewno masz rację.

Dziekuje.
webdice
Zasada jest prosta, z tablicy POST możesz korzystać tylko i wyłącznie gdy formularz został wysłany, w innym wypadku zostaniesz poinformowany powyższym ostrzeżeniem. Dodatkowo wszystkie klucze do których się odwołujesz (np. $_POST['ilosc']) muszą mieć swoje odpowiedniki w polach formularza.

Zapoznaj się z funkcją isset.
L300
[webdice]

W związku z tym, że miałem podobny problem z błędem indeksu NOTICE, który pojawił się gdy przepisałem kod z książki (raczej broszurki)

Komputer Świat Ekspert
Biblioteczka
Programowanie Krok Po Kroku
KURS PHP 02/2011.

Autor chyba miał wyłączone raportowanie błędów bo w jego przykładach (zrzutach obrazu w książce) nie widać błędu skryptu a u mnie tak.
Sporo się głowiłem dlaczego mam z tym problem a on nie i teraz mam wyjaśnienie.


Dodam dla przykładu jak w oryginale napisany jest przykład:
  1. <?php
  2. /*
  3. Listing 3.3. Przekazywanie danych do skryptu za pomocą formularza
  4. */
  5. ?>
  6. <form method="post" action="index.php">
  7. Nazwa wydawnictwa: <br />
  8. <input type="text" name="nazwa" />
  9. <br />
  10. <input type="submit" value="Przekaż do skryptu" />
  11. </form>
  12. <?php
  13. echo 'Nazwa wydawnictwa: '.$_POST['nazwa'];
  14. ?>


i w przeglądarce pojawiał się błąd
Notice: Undefined index: nazwa in C:\nauka\PHP\nr02\index.php on line 13

Poprawiłem wg Twojej rady na:
  1. <form method="post" action="index.php">
  2. Nazwa wydawnictwa:<br />
  3. <input type="text" name="nazwa" />
  4. <br />
  5. <input type="submit" value="Przekaż do skryptu" />
  6. </form>
  7. <?php
  8. if (isset($_POST['nazwa']))
  9. {
  10. echo 'Nazwa wydawnictwa: ' . $_POST['nazwa'];
  11. }
  12. ?>


Teraz to działa bombowo. Mogę przejść do dalszej nauki.

Dziękuję i pozdrawiam
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.