Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: $_REQUEST problem
Forum PHP.pl > Forum > PHP
paulinedi
witaj...
mój problem polega na tym, ze skrypt php nie wyświetla mi wartości zmiennych, tylko zostawia te miejsca puste, tak jakby zmienne były puste...
podaje skrypt i html'a może ktoś coś zauważy. Doczytałem też, że może być to problem php (mam wersję 5.2.6) poradzcie coś bo moja dalsza nauka stoi na tym jednym kroku :/

html:
CODE

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Czysty skrypt php</title>
</head>
<body>
<?php

# Skrypt 1.6 - predefiniowanie.php

<form action="obsluz_formularz.php" method="post">
<fieldset><legend>Wprowadz do ponizszego formularza swoje dane: </legend>
<p><b>Nazwisko:</b> <input type="text" name="name" size="20" maxlength="40" /></p>
<p><b>Adres email: </b> <input typer="text" name="email" size="40" maxlength="50" /></p>
<p><b>Plec:</b> <input type="radio" name="gender" value="M" /> Mezczyzna <input type="radio" name="gender" value="F" /> Kobieta</p>
<p><b>Wiek: </b>
<select name="age">
<option value="0-30">Ponizej 30</option>
<option value="30-60"> Miedzy 30 a 60 </option>
<option value="60+"> Powyzej 60 </option>
</select>
</p>
<p><b>Uwagi:</b><textarea name="comments" rows="3" cols="50"></textarea></p>
</fieldset>
<div align="center"><input type="submit" name="submit" value="wyslij dane" />
</div>
</form>

</body>
</html>



skrypt php
CODE

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Czysty skrypt php</title>
</head>
<body>
<?php

# Skrypt 1.6 - obsluz_formularz.php
$name = $_REQUEST['name'];
$email = $_REQUEST['email'];
$comments = $_REQUEST['comments'];
echo "<p>Dziekuje Ci, <b>$name</b>,za Twoje uwagi: <br />
<tt>$comments</tt></p>
<p>Odpowiedz przesle na adres <i>$email</i></p>\n";

?>
</body>
</html>

moze dodam jeszcze ze kożystam z Dreamwera w wersji 8
z góry dzięki za pomoc. Pozdrawiam!
likemandrake
Przede wszystkim nie używamy tablicy $_REQUEST bynajmniej w Twoim wypadku. Jeśli atrybut 'method' formularza ustawiasz na 'get', to przesłane dane po stronie PHP leżą w tablicy $_GET, jeżeli natomiast 'post', to zmienne te siedzą w tablicy $_POST. Aby wyświetlić sobie całą zawartość tablicy, wykonujesz taki kodzik:

  1. <?php
  2. echo '<pre>' . print_r($_POST, true) . '<pre>'
  3. ?>


Pozdrawiam
paulinedi
Zastosowałem sie do udzielonych mi wskazówek, ale niestety to nie pomogło.
Wklepałem kodzik aby wyświetlił mi zawartość tablicy, ale i to mi się nie chce pokazać...
Być może sam coś źle wpisałem bo jestem pierwszakiem w php tak wiec znów zamieszcze to co zrobiłem...


CODE

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Czysty skrypt php</title>
</head>
<body>
<?php

# Skrypt 1.6 - predefiniowanie.php

<form action="obsluz_formularz.php" method="get">
<fieldset><legend>Wprowadz do ponizszego formularza swoje dane: </legend>
<p><b>Nazwisko:</b> <input type="text" name="name" size="20" maxlength="40" /></p>
<p><b>Adres email: </b> <input typer="text" name="email" size="40" maxlength="50" /></p>
<p><b>Plec:</b> <input type="radio" name="gender" value="M" /> Mezczyzna <input type="radio" name="gender" value="F" /> Kobieta</p>
<p><b>Wiek: </b>
<select name="age">
<option value="0-30">Ponizej 30</option>
<option value="30-60"> Miedzy 30 a 60 </option>
<option value="60+"> Powyzej 60 </option>
</select>
</p>
<p><b>Uwagi:</b><textarea name="comments" rows="3" cols="50"></textarea></p>
</fieldset>
<div align="center"><input type="submit" name="submit" value="wyslij dane" />
</div>
</form>

</body>
</html>


CODE

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Czysty skrypt php</title>
</head>
<body>
<?php
echo '<pre>' . print_r($_GET, true) . '<pre>'
$name = 'name';
$email = 'email';
$comments = 'comments';
echo "<p>Dziekuje Ci, <b>$name</b>,za Twoje uwagi: <br />
<tt>$comments</tt></p>
<p>Odpowiedz przesle na adres <i>$email</i></p>\n";

?>
</body>
</html>
likemandrake
Zastanawiam się, czy serwer na którym uruchamiasz skrypt nie ma przypadkiem wyłączonej opcji wyświetlania błędów, bo Twój skrypt ma błędy.

Jeśli chodzi o pierwszy skrypt, to przede wszystkim wywal '<?php', bo i tak widzę, że nie masz tam ani skrawka kodu PHP, a po za tym nie widzę zamknięcia '?>', po drugie sprawdź atrybuty elementów html, gdzie niegdzie wypatrzyłem 'typer', zamiast 'type'.

Co do drugiego skryptu...
Linijkę "echo '<pre>' . print_r($_GET, true) . '<pre>'" nie zakończyłeś średnikiem. Owszem ja też tego nie zrobiłem, ale w moim wypadku nie powinno wywalić błędu, ponieważ zaraz za tą linijką występuje koniec kodu PHP, a u Ciebie dalsza część skryptu, stąd napewno wywala Ci błąd.
Dalej, jeśli chcesz pobrać jakieś dane z przesłanego formularza, to w zależności czy użyłeś get, czy post, z takiej tablicy w PHP pobierasz zmienne. U Ciebie następuje zwykłe przypisanie ciągu tekstowego do zmiennej, a powinieneś wpisać, dla method="get":

$name = $_GET['name'];

Pozdrawiam
decha-design
znów żle ... moze tak? ...

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5. <title>Czysty skrypt php</title>
  6. </head>
  7. <body>
  8. <?php
  9. $name = $_GET['name'];
  10. $email = $_GET['email'];
  11. $comments = $_GET['comments'];
  12. echo "<p>Dziekuje Ci, <b>$name</b>,za Twoje uwagi: <br />
  13. <tt>$comments</tt></p>
  14. <p>Odpowiedz przesle na adres <i>$email</i></p>\n";
  15.  
  16. ?>
  17. </body>
  18. </html>
paulinedi
no i kiszka po poprawkach wciąż nie działa. W PHP włączyłem wyświetlanie błędów ale również nic z tego!
likemandrake
Zróbmy taki test smile.gif

Wklep taki kodzik i przetestuj:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  3. <head>
  4. <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
  5. <title>Formularz kontaktowy</title>
  6. </head>
  7. <body>
  8. <?php
  9. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  10. echo '<pre>' . print_r($_POST, true) . '</pre>';
  11. } else {
  12. echo <<< HTML
  13. <form action="" method="post">
  14. <p>
  15. <label for="first_name">Imi&#281;:</label>
  16. <input type="text" name="first_name" id="first_name" value="" />
  17. </p>
  18. <p>
  19. <label for="last_name">Nazwisko:</label>
  20. <input type="text" name="last_name" id="last_name" value="" />
  21. </p>
  22. <p>
  23. <label for="">Akcje:</label>
  24. <button type="submit" name="action" value="send">Wy&#347;lij</button>
  25. </p>
  26. </form>
  27. HTML;
  28. }
  29. ?>
  30. </body>
  31. </html>
paulinedi
no wiec po przetestowaniu tego kodu otrzmałem:

Kod
Formularz kontaktowy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30  31
Array (    
[first_name] => Jan      
[last_name] => Kowalski    
[action] => Wyślij )


mam nadzieje ze jest dobrze, z tym ze troszeczke nie o to mi chodziło...
w moje książce z której się uczę jest napisame:
"...Jeśli skrypt PHP wyświetli puste miejsca zamiast wartości zmiennych,
to znaczy, że zmienne nie posiadają wartości. Do typowych przyczyn takiej sytuacji należą:
niewprowadzenie wartości do formularza; błąd w nazwie zmiennej; brak zmiennej $_REQUEST w starszych wersjach PHP..."
i od razu zaznacze, że kilkakrotnie sprawdzałem nazwy zmiennych - zgadzają się,
mam najnowsze php
a czy te zmienne posiadają jakiekolwiek wartości nie mam pojęcia...
likemandrake
Proszę, wykonałem za Ciebie robotę:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  4. <title>Czysty skrypt php</title>
  5. </head>
  6. <form action="obsluz_formularz.php" method="get">
  7. <legend>Wprowadz do ponizszego formularza swoje dane: </legend>
  8. <p>
  9. <b>Nazwisko:</b>
  10. <input type="text" name="name" size="20" maxlength="40" />
  11. </p>
  12. <p>
  13. <b>Adres email: </b>
  14. <input typer="text" name="email" size="40" maxlength="50" />
  15. </p>
  16. <p>
  17. <b>Plec:</b>
  18. <input type="radio" name="gender" value="M" /> Mezczyzna
  19. <input type="radio" name="gender" value="F" /> Kobieta
  20. </p>
  21. <p>
  22. <b>Wiek: </b>
  23. <select name="age">
  24. <option value="0-30">Ponizej 30</option>
  25. <option value="30-60"> Miedzy 30 a 60 </option>
  26. <option value="60+"> Powyzej 60 </option>
  27. </select>
  28. </p>
  29. <p>
  30. <b>Uwagi:</b>
  31. <textarea name="comments" rows="3" cols="50"></textarea>
  32. </p>
  33. <div align="center">
  34. <input type="submit" name="submit" value="wyslij dane" />
  35. </div>
  36. </form>
  37. </body>
  38. </html>

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5. <title>Czysty skrypt php</title>
  6. </head>
  7. <body>
  8. <?php
  9. $name = $_GET['name'];
  10. $email = $_GET['email'];
  11. $comments = $_GET['comments'];
  12. echo <<< HTML
  13. <p>
  14. Dziekuje Ci, <b>$name</b>, za Twoje uwagi: <br />
  15. <tt>$comments</tt>
  16. </p>
  17. <p>
  18. Odpowiedz przesle na adres <i>$email</i>
  19. </p>
  20. HTML;
  21. ?>
  22. </body>
  23. </html>


U mnie śmiga. Zastanawia mnie tylko skąd te liczby, które podałeś w wyniku działania mojego skryptu.
paulinedi
no nie wiem skąd te liczby tak mi wywaliła przeglądarka!! Szczerze powiedziawszy to jestem zielony jeszcze z tego wiec ni jak Ci na to pytanie nie odpowiem, mało tego musze z przykrością przyznać, że to wszystko ciągle nie działa...domyślam się że może problem jest gdzieś indziej...może coś z ustawieniami serwera lub php! lub też robię jeszcze jakiś inny błąd o którym nie wiem!
Czy w takim razie mugłby ktoś napisać mi krok po proku jak np. usrawić optymalnie php5 i w jaki sposób odpalać te skrypty, bo być może "źle" to robię! (a robię to w ten sposób, że uruchamiam plik html i jednocześnie skrypt php; wpisuje w html'u dane (Imię, Nazwisko, płeć...) i przechodze do stronki ze skryptem php gdzie klikam odswierz by zobaczyć rezultaty) czy coś w tym co robię jest nie tak??
Być może, jednak tak kieruje mnie książka którą zakupiłem...
pomóżcie!!!
likemandrake
Jeśli chodzi o serwer, to zainteresuj się XAMPP (LAMPP pod Linuksem), tam masz już wszystko co potrzebne i skonfigurowane jak należy.

Jeśli chodzi o Twoje testowanie skryptu, to uruchamiasz plik z formularzem, wpisujesz dane i klikasz na wyślij. Wtedy uruchomi Ci sie skrypt, który jest opisany w formularzu, w atrybucie 'action'.

Jeśli dobrze zrozumiałem to wklepujesz dane do formularza i nic po za tym z tym formularzem nie robisz, potem przechodzisz do innej zakladki, gdzie czeka skrypt PHP i odswiezasz z nadzieja, ze pojawia sie jakies dane, ktorych w ogole nie wyslales! Przeciez jak uzupelnisz formularz, to te dane musisz gdzies wyslac, wszedzie tak jest, nawet na poczcie. Nie wystarczy wypelnic listu, nalezy go jeszcze wyslac, zeby trafil do adresata. Ty wysylajac formularz, zobaczysz efekt dzialania skryptu PHP, bo takim adresatem jest skrypt 'obsluz_formularz.php'. Zeby wrocic potem do formularza musisz kliknac na przycisk "Wstecz" przegladarki...
paulinedi
no więc napisałem wszystko jeszcze raz od początku i działa!!!


CODE

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Formularz HTML</title>
</head>

<body>
<! -- Ksrypt 2.1 formularz.html -->
<form action="ob_fo.php" method="post">
<fieldset><legend>Wprowadz dane</legend>
<p><b>Nazwisko: </b><input type="text" name="name" size="20" maxlength="40"/> </p>
<p><b>e-mail </b><input type="text" name="email" size="40" maxlength="60"/> </p>
<p><b>Plec:</b>
<input type="radio" name="gender" value="M" /> Mezczyzna
<input type="radio" name="gender" value="F" /> Kobieta
</p>
<p><b>Wiek:</b>
<select name="age">
<option value="0-30"> Ponizej 30</option>
</select>
</p>

</fieldset>
<div align="center"><input type="submit" name="submit" value="Wyslij dane" />
</div>
</form>
</body>
</html>

CODE

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<body>
<?php

$name = $_REQUEST['name'];
$email = $_REQUEST['email'];

echo "<p> Dziękuję Ci, <b>$name</b> odpowiem Ci na adres <b>$email</b> </p>";
?>
</body>
</html>


Trochę to skruciłem bo zostały tylko 3 zmienne, ale działa exclamation.gif! Dzięki z wszelakie chęci pomocy!
Dzięki likemandrake zainstalowałem XAMPP'a jest dużo przyjemniejszy od Apache - miłej niedzieli yahoo.gif
likemandrake
Możliwe, że wczoraj gdy zainstalowałeś XAMPPa, to jeszcze działał Twój stary Apache, stąd nadal nie działało to jak należy. Apropos, XAMPP, jest to tylko zestaw Apache + PHP i wiele innych usług. Spróbój jeszcze raz w miejsce tablicy $_REQUEST użyć $_GET lub $_POST. Widzę, że w formularzu masz ustawione 'post', więc zamień tablicę na $_POST.
michaJlS
troche OT
Cytat(likemandrake @ 31.08.2008, 09:36:36 ) *
Spróbój jeszcze raz w miejsce tablicy $_REQUEST użyć $_GET lub $_POST. Widzę, że w formularzu masz ustawione 'post', więc zamień tablicę na $_POST.

Po co? Co to zmieni? Z jakiego powodu tak powinien zrobić?
likemandrake
Bo wtedy masz pewnosc, ze pozyskane zmienne z tablicy sa stad skad powinny byc pozyskane. Stosujac $_REQUEST nie masz pewnosci czy zmienna jest z $_COOKIE, czy z $_ENV, czy z $_POST, itd. A jesli zdarzy Ci sie uzyc w formularzu nazwy zmiennej, ktora to istnieje rowniez w $_ENV? Problemy sie rodza, od co...
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.