Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Jak to zrobić
pleonazmo
post 24.04.2009, 08:41:40
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 19.04.2009

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


Witam wszystkich , prosze o rade w takiej sprawie

napisałem prosty skrypt w którym na pierwszej stronie wyświetla się lista wyboru z trzema opcjami.
używając metody <form action="plik.php" method="get> i w zależności od wyboru opcji wyswietla się "plik.php" a tam jest na przykład wydrukowana tresc opcji. I z tym nie mam problemów

Problem w tym jak mam zrobić tak ażeby w zależności od tego jaką opcję wybiorę z tej listy, przekierowało mnie do różnych plików, czyli jak wybiorę opcję1 to przechodzę do plik1.php a jak drugą to do plik2.php i tak dalej.

Bo za każdym razem jak używam <form action=...> to określam tylko jeden plik

Myślałem że to nic trudnego i użyłem funkcji
if (GET_['opcja'] == opcja2) {form action="opcja2.php"
a jeżeli
if (GET_['opcja'] == opcja3) {form action="opcja3.php"
ale nie działa...

Zdaję sobie sprawę że to dość banalny problem, jednakże nie mogę go rozwikłać.

Wiem też że najprościej było by użyć linku do odpowiednich plików ale ja bym wolał z opcjami rolleyes.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
slawny
post 24.04.2009, 08:55:43
Post #2





Grupa: Zarejestrowani
Postów: 214
Pomógł: 26
Dołączył: 7.11.2007
Skąd: Warszawa

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


  1. <?php
  2. if($_GET['opcja']==1)
  3. {
  4. header("Location: plik.php");
  5. }
  6. ?>

....

i tak dalej
Go to the top of the page
+Quote Post
freemp3
post 24.04.2009, 09:05:15
Post #3





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Chyba nie o to koledze chodziło.
Możesz to zrobić tak:
  1. <?php
  2. $opcja = $_GET['opcja'];
  3. $plik = false;
  4. switch($opcja)
  5. {
  6. case 1: $plik = "plik1.php"; break;
  7. case 2: $plik = "plik2.php"; break;
  8. case 3: $plik = "plik3.php"; break;
  9. }
  10. ?>

i później
  1. <form action = "<?php echo $plik; ?>">


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
Spawnm
post 24.04.2009, 09:10:34
Post #4





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




klik. czyli:
  1. <?php
  2. $pliki=glob('mojestrony/*.php');
  3. if(in_array('mojestrony/'.$_GET['inc'].'.php',$pliki)){//tak
  4. include('mojestrony/'.$_GET['inc'].'.php');
  5. }else{//nie
  6. echo 'taki plik nie istnieje!';
  7. }
  8. ?>


Ten post edytował Spawnm 24.04.2009, 09:10:50
Go to the top of the page
+Quote Post
phpion
post 24.04.2009, 09:48:26
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@Spawnm:
Jak już tak wszystkim dajesz za przykład swój kod to może zadbałbyś o jego poprawność. Twój kod rzuca Notice: Undefined index: inc w przypadku pierwszego wejścia na stronę (gdy nie ma indeksu inc w tablicy $_GET). Poza tym wątpliwą wydaje mi się kwestia wydajności przy użyciu glob... co jeśli w katalogu będziesz miał powiedzmy 1000 plików? W zupełności wystarczy przecież file_exists z odpowiednim zabezpieczeniem (np. basename).

Ten post edytował phpion 24.04.2009, 09:49:52
Go to the top of the page
+Quote Post
Spawnm
post 24.04.2009, 10:00:26
Post #6





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




założyłem że wcześniej zostanie sprawdzone czy get istnieje winksmiley.jpg

//Poza tym wątpliwą wydaje mi się kwestia wydajności przy użyciu glob... co jeśli w katalogu będziesz miał powiedzmy 1000 plików?

przy 1000 pewnie by poszło po wydajności, ale przy 20 nie, i jest to lepsze wyjście niż jakieś if czy case .
Go to the top of the page
+Quote Post
phpion
post 24.04.2009, 10:13:30
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(Spawnm @ 24.04.2009, 11:00:26 ) *
przy 1000 pewnie by poszło po wydajności, ale przy 20 nie, i jest to lepsze wyjście niż jakieś if czy case .

W czym jest to lepsze od konstrukcji (w skrócie - bez wspomnianych wczesniej zabezpieczeń) analogicznej do Twojej:
  1. <?php
  2. if (file_exists($plik)){//tak
  3.    include($plik);
  4. }
  5. else {//nie
  6.    echo 'taki plik nie istnieje!';
  7. }
  8. ?>
Go to the top of the page
+Quote Post
Spawnm
post 24.04.2009, 10:32:21
Post #8





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




w tym że sprawdza czy plik jest w folderze z którego chcemy includować ?
w kodzie który podałeś może ktoś dać ?inc=../cosinnego.php itp smile.gif
a mój kodzik porównuje geta z tablicą plików z konkretnego folderu gdzie są pliki przeznaczone do includowania w danym miejscu
Go to the top of the page
+Quote Post
phpion
post 24.04.2009, 10:38:42
Post #9





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(Spawnm @ 24.04.2009, 11:32:21 ) *
w kodzie który podałeś może ktoś dać ?inc=../cosinnego.php itp smile.gif

worriedsmiley.gif przecież napisałem, że kod nie ma wcześniej wspomnianych zabezpieczeń. Wystarczy skorzystać z basename lub (jeśli chcesz mieć różne poziomy zagłębień includowanych plików) ze zwykłego str_replace('../', '', $plik) i pozamiatane.
Go to the top of the page
+Quote Post
Spawnm
post 24.04.2009, 10:44:16
Post #10





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




hmmm co racja to racja , przetestuje smile.gif
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 23:36