Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak to zrobić
Forum PHP.pl > Forum > Przedszkole
pleonazmo
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
slawny
  1. <?php
  2. if($_GET['opcja']==1)
  3. {
  4. header("Location: plik.php");
  5. }
  6. ?>

....

i tak dalej
freemp3
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; ?>">
Spawnm
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. ?>
phpion
@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).
Spawnm
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 .
phpion
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. ?>
Spawnm
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
phpion
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.
Spawnm
hmmm co racja to racja , przetestuje smile.gif
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.