[PHP] Przekierowanie uzależnione wyborem


(Sebastianp88) #1

Witam wszystkich.

Mam mały problemik z skryptem. Wygląda on tak:

Co zrobić - jakie funkcje zastosować - aby przy wyborze przycisku "zakończ" załadowała się strona index.php a nie obecna? Będę wdzięczny za odpowiedź


(Damgora) #2

wpisz adres w atrybucie action elementu form

edit: ehh znowu nie doczytałem :confused:

oba przyciski mają wysyłać zapytanie, czy w wypadku zakończ nie ma to znaczenia?


(mario@) #3
echo '';

echo '';

(Sebastianp88) #4

Mario, twój kod nie pomógł. Nawet po kliknięciu przycisku dodaj przechodzę do index.php... Nie wiem co jest...

cayman3_11 nie mogę zrobić tak jak Ty radzisz, z uwagi na fakt że strona mi się nie zapętli przy wyborze dodaj.

W pierwszym poście może nie jasno się wyraziłem. Chodzi mi o funkcje w wywołaniu funkcji zakoncz().


(mario@) #5

np.

Podaj możliwą do głosowania opcję 








<?php


if(isset($_GET['czyn']))

{ 

	if ((int)$_GET['czyn'] === 1)

		echo 'a';

	else

		echo 'b';

}


?>

(Sebastianp88) #6

Mario pomysł dobry, ale nie do końca działa. Wywołanie funkcji jest ok. Tylko że funkcja zakończ nie ma nic w sobie zdefiniowanego... Chyba ze się nie rozumiemy :slight_smile:


(mario@) #7

Niezbyt, wytłumacz wszystko co i jak bo ja się już pogubiłem.


(Sebastianp88) #8

mam dwa pliki - receive.php oraz formularz.php

Plik receive generuje formularz z dwoma przyciskami - dodaj oraz zakończ. Po wpisaniu tekstu do formularza oraz kliknięciu przycisku dodaj dochodzi do przeładowania strony oraz uruchomienia skryptu który dodaje podany tekst do pliku. Czyni to tak długo jak długo użytkownik będzie dodawać opcje. W momencie kiedy wszystkie opcje zostaną dodane już użytkownik wciska przycisk zakończ; ten ma go przenieść do strony index.php. Poniżej kompletna zawartość pliku receive.php oraz formularz:

RECEIVE.PHP

<?php

        include 'formularz.php';

        if($_SESSION['x'] == 1)

        {

            formularz1();

            $_SESSION['x']++;

            echo $_SESSION['x'];

        }

        else

        {

            echo $_SESSION['x'];

        }


        echo '';

        echo "Podaj możliwą do głosowania opcję ";

        echo '';

        echo '';

        echo '';

        echo '';


        if($_GET["przycisk"] == "dodaj")

            formularz2();

        else

            // zakoncz();

            //co tutaj wpisać aby przejść do strony index.php?


    ?>

FORMULARZ.PHP

<?php

    include 'znaki.php';

    function formularz1()

    {

        //otwarcie folderu

        $folder = "dane";

        $fd = opendir("$folder");


        $tytul = $_GET['tytul'];

        $nazwaPliku = $tytul;

        $opis = $_GET['opis'];


        $nazwaPliku = zamien($tytul);

        $_SESSION['plik'] = $nazwaPliku;

        $dlugoscLancucha = strlen($nazwaPliku);

        for($i = 0; $i < $dlugoscLancucha; $i++)

            if($nazwaPliku[$i] == " ")

                $nazwaPliku[$i] = "_";


        $ff = fopen("$folder/$nazwaPliku.dat", 'a+');

        fwrite($ff, $tytul."\n");

        fwrite($ff, $opis);

        fclose($ff);

        closedir($fd);

    }


    function formularz2()

    {

        $folder = "dane";

        $fd = opendir("$folder");


        $opcja = $_GET['opcja'];

        $tmp = $_SESSION['plik'];

        $tmp = $tmp."wyniki";


        if($opcja != "")

        {

            $ff = fopen("$folder/$tmp.sta", 'a+');

            fwrite($ff, $opcja.";");

            fclose($ff);

            closedir($fd);

        }


    }


    function zakoncz()

    {


    }

?>

Dopiero się uczę php więc za "przekombinowanie" rozwiązań przepraszam :slight_smile: W/w opcje to możliwości na które będzie można oddać głos - piszę ankiete.


(Xds) #9

php

header('Location: index.php');

   exit;

W przypadku javascript należy wpiąć się w zdarzenie onSubmit formularza i w zależności od wybranego guzika, w tym przypadku "zakoncz", wykonać przekierowanienie i wrócić z funkcji podpiętej do zdarzenia onSubmit wartością false. W razie potrzeby służę kodem :).

//edit

Przekierowanie zadziała jeżeli nie wysłałeś jeszcze żadnych danych do przeglądarki. Jeżeli dane zostały już wysłane zostanie wyświetlone ostrzeżenie. Możesz pozbyć się tego komunikatu włączając na początku skryptu buforowanie funkcją ob_start();


(Sebastianp88) #10

Wstawiłem te 2 linijki kodu do funkcji zakoncz() w formularz.php. 11 linijka wskazuje rozpoczęcie skryptu php - <?php

Czy przy stosowaniu tej funkcji trzeba coś włączyć w php'ie - tak jak np sesje?

-- Dodane 14.11.2010 (N) 15:36 --

talee - ta strona jest 3 strona w kolejnosci. Niestety elementy bedą już wysłane do przeglądarki. Można jakoś temu zaradzić?


(Xds) #11

Nie wysłałeś danych w tracie aktualnego przetwarzania, czyli jeżeli za twój formularz odpowiada skrypt formularz.php wystarczy, że ob_start() zostanie wywołane w w skrypcie formularz.php zanim wyślesz w nim jakiekolwiek dane.

Najlepiej gdyby to była pierwsza instrukcja w twoim skrypcie.

<?php


ob_start();


...


?>

(Sebastianp88) #12

funkcja ob_start(); została umieszczona zaraz na samym początku pliku formularz.php. Niestety nic to nie dało i cały czas mam ostrzeżenie.


(Xds) #13

W twoim przypadku to skrypt receive.php odpowiada za przetwarzanie. Czytając odpowiedzi włącz myślenie (więcej się nauczysz). Nie należy traktować ich dosłownie. To są tylko wskazówki :slight_smile:


(Sebastianp88) #14

Mam odpowiedź. Jutro wrzucę wyjaśnienie.