Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem ze includowaniem i wykorzystaniem CASE, dużo includów, jak to zmiejszyc
Kreton
post
Post #1





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 20.02.2005

Ostrzeżenie: (0%)
-----


mam tu stronkę http://dobrepomysly.za.pl

I działy, dajmy na to dział 2.

No i tematy są inludowane w sposób :
  1. <?php
  2. if (!isset($_GET['dzial'])){
  3. echo
  4. <center><b>Szkoła podstawowa</b></center>
  5. <ul><li><a href="index.php?go=szkola&dzial=1"><b>Swobodna twórczość dziecięca</b></a></li>
  6. ";
  7. } else {
  8. switch ($_GET['dzial'])
  9. {
  10. case 1:
  11. include("1.html");
  12. break;
  13. case 2:
  14. include("2.html");
  15. break;
  16. <!-- i tak dalej az do 40-->
  17.  }
  18. }
  19. ?>


Jak to zrobic zeby nierobić tych bardzo żmudnych case x: include("blabla.html")
niebardzo wiem jak to zrobic przy użyciu np. pętli while czy cos takiego. Pomóżcie
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
zbig13
post
Post #2





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.04.2004
Skąd: Legionowo

Ostrzeżenie: (0%)
-----


Jeśli numery działów odpowiadają nazwom plików, to możesz zrobić po prostu tak:
  1. <?php
  2.  
  3. $dzial = $_GET['dzial'];
  4. include ('katalog/' . $dzial . '.html');
  5.  
  6. ?>
Go to the top of the page
+Quote Post
Spirit86
post
Post #3





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. $dzial = (int) $_GET['dzial'];
  4. if(file_exists('katalog/' . $dzial . '.html')) include ('katalog/' . $dzial . '.html');
  5.  
  6. ?>

może lepiej tak winksmiley.jpg

Ten post edytował Spirit86 24.09.2005, 19:31:44


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
M4chu
post
Post #4





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 28.09.2003
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


Jeśli to nie tylko liczby, to możesz na przykład zrobic tablicę elementów odpowiadająch możliwością, i sprawdzać za pomocją in_array(). Jednak wygląda, że to raczej będą numerki, więc rozwiązanie zbig13'a będzie lepsze, jednak z jednym dodatkiem - filtrowaniem tego $_GET['dzial'].
Go to the top of the page
+Quote Post
Spirit86
post
Post #5





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(M4chu @ 2005-09-24 19:17:20)
Jeśli to nie tylko liczby, to możesz na przykład zrobic tablicę elementów odpowiadająch możliwością, i sprawdzać za pomocją in_array(). Jednak wygląda, że to raczej będą numerki, więc rozwiązanie zbig13'a będzie lepsze, jednak z jednym dodatkiem - filtrowaniem tego $_GET['dzial'].

rozwiązanie zbig13 wcale nie jest lepsze.
Zastanów się lepiej :]


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
zbig13
post
Post #6





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.04.2004
Skąd: Legionowo

Ostrzeżenie: (0%)
-----


ja podsunąłem tylko propozycję jak można to zrobić krócej (zamiast switch) a z zabezpieczeniem tego kodu autor tematu powinien sobie poradzić biggrin.gif

@Spirit86 - do tego twojego kodu można zamiast (int) przed zmienną sprawdzić w warunku czy zmienna $dzial jest liczbą (funkcja is_numeric" title="Zobacz w manualu php" target="_manual). Jest to o tyle lepsze, że można kontrolować komunikat wyświetlany, gdy zmienna nie będzie miała wartości liczbowej.
Go to the top of the page
+Quote Post
Kreton
post
Post #7





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 20.02.2005

Ostrzeżenie: (0%)
-----


razej zmienna zawsze będzie miała wartość liczbową, chodzi o te pliki html.
Jest tego dużo i dużo latwiej mi się połąpać. A nieznam sie superowo na php

Cytat
ja podsunąłem tylko propozycję jak można to zrobić krócej (zamiast switch) a z zabezpieczeniem tego kodu autor tematu powinien sobie poradzić biggrin.gif

Niewiem co mam przez to rozumiec questionmark.gif W jaki sposób ten kod zabezpieczyc questionmark.gif

Ten post edytował Kreton 25.09.2005, 08:26:26
Go to the top of the page
+Quote Post
zbig13
post
Post #8





Grupa: Zarejestrowani
Postów: 214
Pomógł: 0
Dołączył: 3.04.2004
Skąd: Legionowo

Ostrzeżenie: (0%)
-----


Kod niezabezpieczony wygląda tak:

  1. <?php
  2.  
  3. include ($_GET['dzial'] . '.html');
  4.  
  5. ?>


Potencjalny włamywacz może napisać cos takiego:
http://twoja.strona.pl?dzial=http://strona.hakera.pl/1

i otworzył by się plik, który haknie ci stronę.

Aby zabezpieczyć stronę, trzeba zrobić cos takiego:

  1. <?php
  2.  
  3. if (is_numeric ( $_GET['dzial'] )) {
  4.  
  5. $dzial = (int) $_GET['dzial'];
  6. if (file_exists('./katalog/' . $dzial . 'html') { include ('./katalog/' . $dzial . '.html'); }
  7.  
  8. } else {
  9. echo 'Nieprawidłowe dane';
  10. }
  11.  
  12. ?>

czyli połączenie mojego kodu i kodu Spirit86 biggrin.gif

Edit:

@mike_mech Racja, to z pośpiechu winksmiley.jpg Już poprawiam

Ten post edytował zbig13 25.09.2005, 16:31:47
Go to the top of the page
+Quote Post
Ociu
post
Post #9





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




ja bym tak dał die" title="Zobacz w manualu php" target="_manual zamiast echo
Go to the top of the page
+Quote Post
Kreton
post
Post #10





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 20.02.2005

Ostrzeżenie: (0%)
-----


Mam gorącą prośbe, mogłbyś mi bardziej dogłębnie wytłumaczyc, jak mogłby hacknnąć tą stronkę questionmark.gif W jaki sposób ten kod napisany przez ciebie chroni przed włamem.

Nie chcę robić poźniej takiego błędu biggrin.gif
z góry THX biggrin.gif
Go to the top of the page
+Quote Post
mike
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(Kreton @ 2005-09-25 12:24:39)
Mam gorącą prośbe, mogłbyś mi bardziej dogłębnie wytłumaczyc, jak mogłby hacknnąć tą stronkę questionmark.gif W jaki sposób ten kod napisany przez ciebie chroni przed włamem.

Chodzi o to że bez kontroli dołanczasz jakiś plik, to wcale nie musi byc plik u Ciebie na serwerze tylko u kogoś. Kotś może Ci tak dołączyć plik, w którym kasuje wszystkie foldery w bierzącej lokalizacji a to już problem, nie :?:

Sprawdzenie polego na tym czy zmienna przychodząca z $_POST'a jest liczbą i czy u Ciebie na serwerze istnieje plik, który masz zamiar dołączyć (masz pewność że dołanczasz seoje pliki).
Mam tylko dwa ale:
1. Do sprawdzania czy dana jest liczbe użyłbym fukncji z rozszerzenia ctype.
2. @zbig13 ma błąd w kodzie: Sprawdza istnienie pliku na poziomie (folderów) gdzie jest index.php a dołancza plik z folderu niżej. Oczywiste jest że nigy takiego pliku nie będzie. Trzeba sprawdzać czy plik istnieje w folderze niżej.
Go to the top of the page
+Quote Post
Spirit86
post
Post #12





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(Ociu @ 2005-09-25 09:26:47)

a cóż to za różnica, jeżeli i tak udaremniliśmy próbę Code Injection. Teraz to i tak nie ma znaczenia, więc można wykonywac stronę dalej.


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
Kreton
post
Post #13





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 20.02.2005

Ostrzeżenie: (0%)
-----


  1. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
  2. <?php
  3. if (!isset($_GET['dzial'])){
  4. echo
  5.  
  6. <center><b>Szkoła podstawowa</b></center>
  7. <ul>
  8. <li><a href="index.php?go=efekty&dzial=1"><b>Egzamin w klasach trzecich</b></a></li>
  9. <li><a href="index.php?go=efekty&dzial=2"><b>Szkolny system diagnozowania.</b></a></li>
  10. <li><a href="index.php?go=efekty&dzial=7"><b>Świetlicowy Sejmik (spotkania społeczności świetlicowej)</b></a></li>
  11. <li><a href="index.php?go=efekty&dzial=10"><b>Kolorowy kraj „Ćwierćlandia” – impreza w ramach obchodów Dnia Matki i Dnia Dziecka w naszej szkole</b></a></li>
  12. </ul>
  13. <center><b>Gimnazjum</b></center>
  14. <ul>
  15. <li><a href="index.php?go=efekty&dzial=3"><b>„Wartość dodana” zamiast tabel lekkoatletycznych</b></a></li>
  16. <li><a href="index.php?go=efekty&dzial=5"><b>Zastosowanie minimum ze wszystkich przedmiotów w nauczaniu w gimnazjum</b></a></li>
  17. <li><a href="index.php?go=efekty&dzial=8"><b>Klasa partnerska</b></a></li>
  18. <li><a href="index.php?go=efekty&dzial=9"><b>„Miasto uczuć” – jakie uczucia wzbudza w nas nasza szkoła?</b></a></li>
  19. <li><a href="index.php?go=efekty&dzial=11"><b>Promowanie osiągnięć uczniów szkoły wśród Rodziców.</b></a></li>
  20. </ul>
  21. <center><b>Szkoła ponadgimnazjalna</b></center>
  22. <ul>
  23. <li><a href="index.php?go=efekty&dzial=4"><b>Zwiększanie efektywności uczenia się.</b></a></li>
  24. <li><a href="index.php?go=efekty&dzial=6"><b>Porównywanie wyników nauczania w poszczególnych klasach.</b></a></li>
  25. </ul>
  26. ";
  27. } else {
  28. if (is_numeric ( $_GET['dzial'] )) {
  29.  
  30. $dzial = (int) $_GET['dzial'];
  31. if (file_exists('./katalog/' . $dzial . 'html') { include ('./katalog/' . $dzial . '.html'); }
  32.  
  33. } else {
  34. echo 'Nieprawidłowe dane';
  35. }
  36.  
  37. ?>


i wyrzuca błąd
Kod
Parse error: syntax error, unexpected '{' in C:\Program Files\WebServ\httpd\Działy\I.Efekty\działy.php on line 31


A niemoge się tam doszukac jakiegoś błędnego nawiasu, co jest nie tak questionmark.gif HELP
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Na samyum koncu brakuje }. Czy to tak ciezko policzyc lkiczbe otwrtych, liczbe zmaknietych i sprobowac samemu znalexc?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kreton
post
Post #15





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 20.02.2005

Ostrzeżenie: (0%)
-----


dla ciebie wnikliwego programisty to moze i proste, ale dla mnie.

Moze jak jakbym ci zaczoł nawalać taktyki w Warcrafcie to dla ciebie niebyło by tak oczywiste jak dla mnie.

I tak nic to niedaje ...

Ten post edytował Kreton 26.09.2005, 16:34:56
Go to the top of the page
+Quote Post
kszychu
post
Post #16





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

Ostrzeżenie: (0%)
-----


Cytat(Kreton @ 2005-09-26 16:33:03)
dla ciebie wnikliwego programisty to moze i proste, ale dla mnie.

Moze jak jakbym ci zaczoł nawalać taktyki w Warcrafcie to dla ciebie niebyło by tak oczywiste jak dla mnie.

I tak nic to niedaje ...

Kolego, troszkę szacunku dla kogoś, kto próbuje Ci pomóc.
I zamiast tekstów "i tak nic to nie daje" lepiej powiedz, co jest jeszcze nie tak jak powinno być, czy wywala jakiś błąd?


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
Spirit86
post
Post #17





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


  1. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
  2. <?
  3. if (!isset($_GET['dzial']))
  4. {
  5.  
  6. <center><b>Szkoła podstawowa</b></center>
  7. <ul>
  8. <li><a href="index.php?go=efekty&dzial=1"><b>Egzamin w klasach trzecich</b></a></li>
  9. <li><a href="index.php?go=efekty&dzial=2"><b>Szkolny system diagnozowania.</b></a></li>
  10. <li><a href="index.php?go=efekty&dzial=7"><b>Świetlicowy Sejmik (spotkania społeczności świetlicowej)</b></a></li>
  11. <li><a href="index.php?go=efekty&dzial=10"><b>Kolorowy kraj „Ćwierćlandia” – impreza w ramach obchodów Dnia Matki i Dnia Dziecka w naszej szkole</b></a></li>
  12. </ul>
  13. <center><b>Gimnazjum</b></center>
  14. <ul>
  15. <li><a href="index.php?go=efekty&dzial=3"><b>„Wartość dodana” zamiast tabel lekkoatletycznych</b></a></li>
  16. <li><a href="index.php?go=efekty&dzial=5"><b>Zastosowanie minimum ze wszystkich przedmiotów w nauczaniu w gimnazjum</b></a></li>
  17. <li><a href="index.php?go=efekty&dzial=8"><b>Klasa partnerska</b></a></li>
  18. <li><a href="index.php?go=efekty&dzial=9"><b>„Miasto uczuć” – jakie uczucia wzbudza w nas nasza szkoła?</b></a></li>
  19. <li><a href="index.php?go=efekty&dzial=11"><b>Promowanie osiągnięć uczniów szkoły wśród Rodziców.</b></a></li>
  20. </ul>
  21. <center><b>Szkoła ponadgimnazjalna</b></center>
  22. <ul>
  23. <li><a href="index.php?go=efekty&dzial=4"><b>Zwiększanie efektywności uczenia się.</b></a></li>
  24. <li><a href="index.php?go=efekty&dzial=6"><b>Porównywanie wyników nauczania w poszczególnych klasach.</b></a></li>
  25. </ul>
  26. ";
  27. }
  28. else
  29. {
  30. if(is_numeric ( $_GET['dzial'] ))
  31. {
  32. $dzial = (int) $_GET['dzial'];
  33. if(file_exists('./katalog/' . $dzial . 'html'))
  34. {
  35. include ('./katalog/' . $dzial . '.html');
  36. }
  37. else
  38. {
  39. echo 'Nieprawidłowe dane';
  40. }
  41. }
  42. }
  43. ?>


Ten post edytował Spirit86 26.09.2005, 17:12:56


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
Kreton
post
Post #18





Grupa: Zarejestrowani
Postów: 345
Pomógł: 3
Dołączył: 20.02.2005

Ostrzeżenie: (0%)
-----


Mam bardzo duży szacunek do was, ale wy niemacie szacunku do mnie.
Bo niejestem dobrym programistą w php.

Ok działa.
Bardzo wam dziękuję za pomoc.

Aha, i mam pytanie, jeżeli mam tn działy.php i w tym samym katalogu te pliki 1.html itd.

To jak zamienić tą komendę include questionmark.gif bo próbuję coś tu zmieniać, i zawsze wyskakuje " nieprawidłowe dane " :/

Ten post edytował Kreton 26.09.2005, 17:52:41
Go to the top of the page
+Quote Post
kszychu
post
Post #19





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

Ostrzeżenie: (0%)
-----


Usuń /katalog/ z file_exists() i .....
ZACZNIJ MYŚLEĆ!!!


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
Berni
post
Post #20





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 8.10.2002

Ostrzeżenie: (0%)
-----


wrzuc sobie do tablicy nazwy dostepnych blokow z odpowiadajaca im nazwa plikow, potem wyciganij za pomoca foreach i porownaj z getem jesli blok bedzie dostepny to incuduj plik .... mniejwiecej tak:

  1. <?php
  2. $a_block = array('blok_1'=>'blok');
  3.  
  4. foreach($a_block as $block_k => $block_v){
  5.  
  6. if($_GET['block']==$block_k){
  7.  
  8.  include_once('".$block_v.".php');
  9.  
  10. }
  11.  
  12. }
  13. ?>


Ten post edytował Berni 28.09.2005, 00:17:38


--------------------
Masz zlecenie? Zapraszam programista php.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 03:17