.htaccess i metoda POST

.htaccess i metoda POST
DR
  • Rejestracja:około 18 lat
  • Ostatnio:ponad 9 lat
0

Cześć,

Proszę o pomoc. Mam problem z metodą POST i plikiem .htaccess. Chcę, żeby po kliknięciu 'Submit' w formularzu na jednej stronie przeniesiono się do nowej strony wraz z danymi z formularza POST, jednak żeby link strony był 'Rewrite' przez .htaccess. Jak to zrobić?

Mój formularz:
<form action="portal" method="post" style="margin-left:0px; margin-top:30px;">

Mój .htaccess:

Kopiuj
RewriteEngine on
RewriteRule ^portal$ /index.php?start=portal
RewriteBase /

Dodam, że start=portal przenosi się metodą GET, to działa.

Z góry Dzięki!

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

Chyba coś przekombinowałeś.

Masz dwie opcje:

  1. FORM ACTION może zawierać adres jaki chcesz (np. innej strony niż tej na której jest formularz):

http://www.w3.org/TR/html401/interact/forms.html

  1. Po odebraniu danych możesz klienta przekierować przez header location:
Kopiuj
header( 'Location: http://www.przyklad.com/inna_strona.html' ) ;
Webowiec
co to znaczy 'po odebraniu danych'? masz na myśli wykonanie operacji na danych z $_POST-a ?
DR
  • Rejestracja:około 18 lat
  • Ostatnio:ponad 9 lat
0

vpiotr dzięki za odpowiedź. Być może to odpowiada na moje pytanie... jednak ja nie dostrzegłem rozwiązania problemu mojego :(

OK, to może jeszcze raz.

Formularz jest na stronie: www.mojastrona.pl/logowanie, czyli zgodnie z plikiem .htaccess ponizej na stronie www.mojastrona.pl/index.php?start=logowanie

Kopiuj
RewriteEngine on
RewriteRule ^logowanie$ /index.php?start=logowanie
RewriteRule ^portal$ /index.php?start=portal
RewriteBase /

Mam to tak zrobione, że jedną i drugą stronę obsługuje index.php bo wewnątrz mam IFRAME, jak poniżej:

Kopiuj
<?php
		$start=$_GET['start'];
		if($start=='logowanie'){
			echo '<iframe src="login.php" width="100%" frameborder="0" scrolling="no" id="iframe" onload=\'javascript:resizeIframe(this);\'></iframe>';
		}
		elseif($start=='portal'){
			        $login=$_POST['login'];
				$haslo=$_POST['haslo'];
				echo $login+' '+$haslo;
			echo '<iframe src="portal.php" width="100%" frameborder="0" scrolling="no" id="iframe" onload=\'javascript:resizeIframe(this);\'></iframe>';
		}
	?>

Ta część gdzie wyświetlam login i hasło jest na próbę, żeby zobaczyć czy działa POST, później w pliku portal.php, który jest źródłem dla IFRAME też to wyświetlam i też pojawia się jedynie '0'.

Podsumowując - problem polega na tym, że chce:

  1. Używać IFRAME, żeby tylko zmieniać środek strony a nie header i footer, który zawsze jest taki sam
  2. Żeby mimo używania IFRAME i cały czas jednego bazowego pliku index.php, żeby adres strony zmienił się z /logowanie na /portal
  3. Żeby dane po wysłaniu formularza w pliku login.php, który jest źródłem dla IFRAME przy adresie /logowanie przeszły metodą POST do pliku index.php z adresem /portal i ze źródłem dla IFRAME portal.php - zakładam, że jak dojdą do index.php z adresem /portal, to do portal.php, który jest cześcią IFRAME na pewno też.

Mam nadzieję, że to trochę rozjaśniło, choć wiem, że to zagmatwane. Jeśli Twoja odpowiedź już jest odpowiedzią na mój problem to może dzięki temu mojemu wyjaśnieniu będziesz w stanie dokładnie powiedzieć mi jak tej Twojej odpowiedzi użyć :)

dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Rzeszów
0

Daruj sobie te iframy i zrób to na ajaxie. Iframy to masa nowych problemów (np. ściśle określone wymiary)


DR
  • Rejestracja:około 18 lat
  • Ostatnio:ponad 9 lat
0

OK, a zakładając, że chcę użyć iframe'ów jednak? :)

DR
  • Rejestracja:około 18 lat
  • Ostatnio:ponad 9 lat
0

ok znalazłem rozwiązanie, przede wszystkim używałem + do łączenia stringów zamiast kropki.... no cóż, po długim czasie wracam do PHP.

Natomiast w głównym pliku index.php przyjmuję dane z formularza POST, a potem przekazuje je do portal.php metodą GET w adresie.

Dzięki!

PD
  • Rejestracja:ponad 10 lat
  • Ostatnio:19 dni
  • Postów:178
0

@drejas: Tu masz kod na to chciałeś w pierwszym poście:

Kopiuj
RewriteEngine on
RewriteBase /
RewriteRule ^(logowanie|portal)$ /index.php?start=$1 [NC,P]

Nie pomagam naPW.!.
DR
  • Rejestracja:około 18 lat
  • Ostatnio:ponad 9 lat
1

dziekuje!

MZ
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 8 lat
  • Postów:15
0

Myślę, że zamiast przekazywania danych między stronami przez GET powienienś użyć sesji. Jeżeli zmienna sesyjna jest pusta pokazujesz formularz. W skrypcie obsługującym formularz wpisujesz dane z formularza do zmiennych sesyjnych i później masz dostęp do tych danych na każdej stronie. I robisz jeszcze opcję czyszczenia zmiennych sesyjnych np. w przypadku wywołania www.mojastrona.pl/index.php?stop=1

Nie wiem czy powiniene tu to dodawać, ale tutaj jest genialny kurs www.youtube.com/watch?v=Aw28-krO7ZM&list=PL7A20112CF84B2229&index=1

Webowiec
Twoja metoda pewnie wymaga stworzenia osobnego pliku, tak jakby skrzyżowania, które przekierowuje (header) na pożądany moduł w zależności od wyboru. Moim zdaniem wystarczy mieć te moduły w osobnych plikach i include'ować po GET'ach. Zaletą tego co mówisz może być brak linku w pasku adresu, ciągle może być www.domena.pl. Aha i nie ogladałem filmu

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.