• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Odświeżanie strony po zakończeniu rejestracji - PHP

Object Storage Arubacloud
0 głosów
765 wizyt
pytanie zadane 23 stycznia 2020 w PHP przez MAXIM7 Obywatel (1,990 p.)
edycja 24 stycznia 2020 przez MAXIM7

Cześć. Mam stronę, która posiada kilka podstron zawierających tą samą nawigację na górze strony. Na nawigacji znajduje się przycisk "Zarejestruj się", po którego kliknięciu otwiera się dodatkowy div z oknem rejestracji (po prostu w js podmieniam styl formularza rejestracji z display: none; na display: block;). Okno to można otworzyć na każdej z podstron. Po wypełnieniu formularza przez użytkownika i kliknięciu przycisku "Zarejestruj się" (chodzi o przycisk w oknie rejestracji, nie na nawigacji) wykonuje się kod znajdujący się wewnątrz pliku rejestracja.php (w tym pliku jest tylko kod php, który obsługuje rejestracje). Sprawdzam tam, czy wszystkie text inputy zostały poprawnie wypełnione. I teraz jest moje pytanie: co zrobić, aby po kliknięciu przycisku "zarejestruj się" i po wykonaniu kodu w pliku rejestracja.php, ponownie została załadowana podstrona, na której nacisnęliśmy przycisk "zarejestruj się".

Próbowałem używać funkcji: header('Location: '.$_SERVER['PHP_SELF']);. Przykładowo mam podstrony: home.html, a.html, b.html, c.html itd. Po rejestracji na stronie home.html powinna otworzyć się strona home.html. Z kolei po rejestracji na stronie a.html powinna otworzyć się strona a.html. Przy użyciu powyższej funkcji nie otwiera się aktualnie otwarta strona, tylko zatrzymuje się na pustej stronie rejestracja.php.

I rzeczywiście, gdy sprawdzam to za pomocą: echo $_SERVER['PHP_SELF']; to wyświetla się napis nazwa_folderu/rejestracja.php. Czyli działa ona aktualnie tak samo jak: header('Location: rejestracja.php');. A ja chciałbym, żeby działała ona dynamicznie, w zależności od aktualnej strony.

rejestracja.php:

<?php
session_start();
	
//sprawdzanie inputów

header('Location: home.php');
?>

formularz na każdej podstronie:

<form action="rejestracja.php" method="post">
//text inputy
<input type="submit" value="Zarejestruj się"/>
</form>

Kod szablonu: (używam twiga)

<!DOCTYPE html>
<html lang="pl">
	<head>
		<meta charset="utf-8"/>
		<meta http-equiv="UA-X-Compatible" content="IE=edge, chrome=1"/>
		<link rel="stylesheet" href="styles/main.css" type="text/css"/>

		{% block header %} {% endblock header %}
	</head>

	<body>
		{% include "logreg.html" %}
		{% include "nav.html" %}
		
		{% block content %} {% endblock content %}

		{% include "footer.html" %}
	</body>
</html>

 

3 odpowiedzi

0 głosów
odpowiedź 24 stycznia 2020 przez franz Gaduła (4,940 p.)
Ja na twoim miejscu zamiast podstron a.html , b.html , c.html itd. ,zrobił bym index.php i ze wszystkimi stałymi elementami jakie tam masz i do niego ładował do diva to co aktualnie ma się wyświetlić odwiedzającemu .

W ten sposób w pliku rejestracja.php , wystarczy dać header('Location:index.php") i w odpowiednim divie wyświetlić komunikat udana rejestracja czy tez jakie błędy popełnił .
0 głosów
odpowiedź 24 stycznia 2020 przez francus11 Gaduła (3,250 p.)

Spróbuj usunąć action i wstaw 

include_once "rejestracja.php";

po session_start().

Pewnie po zalogowaniu odsyła cię do index.php, który jest ustawiony po zalogowaniu się. Usuń w kodzie header z tym przekierowaniem. Jeśli nie działałoby od razu, to podeślij kod z rejestracja.php, bo możliwe, że będzie wymagać małej modyfikacji

komentarz 24 stycznia 2020 przez MAXIM7 Obywatel (1,990 p.)
Zapomniałem dodać, że używam Twiga i staram się oddzielać kod php od htmla, dlatego też użyłem action. (U góry dodałem kod mojego głównego szablonu)

Próbowałem dodawać zawartość pliku rejestracja.php w twigu za pomocą: {% include "rejestracja.php" %}, ale z tego co widzę to twig nie akceptuje includowania plików .php. :C
0 głosów
odpowiedź 24 stycznia 2020 przez Ehlert Ekspert (212,670 p.)
komentarz 24 stycznia 2020 przez MAXIM7 Obywatel (1,990 p.)
Myślę, że to by się sprawdziło, ale musiałbym napisać ten kod w każdym pliku php, każdej podstrony. Czy można to zoptymalizować i np. zaincludować plik z kodem php korzystając z twiga do głównego szablonu?
komentarz 24 stycznia 2020 przez Ehlert Ekspert (212,670 p.)
Niby tak, ale ogólnie takie operacje nie należą do zadań twiga. Mieszasz strasznie logikę aplikacji z szablonami. Prawidłowo jest tak, że aplikacja ma tylko jeden plik wejściowy np index.php. Tam dzieje się wszystko.
komentarz 15 lutego 2020 przez MAXIM7 Obywatel (1,990 p.)

U mnie wygląda to tak, że mam główny plik main.html. Tam mam swój główny wzór: 

<!DOCTYPE html>
<html lang="pl">
	<head>
		{% block header %} {% endblock header %}
	</head>

	<body>
		{% include "nav.html" %}
		
		{% block content %} {% endblock content %}

		{% include "footer.html" %}

		<script src="nav.js"></script>
	</body>
</html>

I do każdej podstrony mam po dwa pliki (.php i .html). Przykładowo home.php wygląda tak:

<?php
    require_once 'lib/Twig/Autoloader.php';
    Twig_Autoloader::register();

    $loader = new Twig_Loader_Filesystem('temp');
    $twig = new Twig_Environment($loader);

    echo $twig->render('home.html');
?>

i mniej więcej tak wygląda większość moich plików .php. 

A w pliku home.html mam zawarty kod html, który ma być w poszczególnych przedziałach w main.html.

Pierwsze moje pytanie to, czy to prawidłowy układ plików?

I kolejne: jak to powinno wyglądać dla jednego pliku index.php, o którym mówisz?

Podobne pytania

0 głosów
3 odpowiedzi 940 wizyt
pytanie zadane 30 sierpnia 2016 w PHP przez lalanablanalala Bywalec (2,090 p.)
+1 głos
1 odpowiedź 429 wizyt
pytanie zadane 6 kwietnia 2021 w HTML i CSS przez Nearr Obywatel (1,890 p.)
0 głosów
1 odpowiedź 374 wizyt
pytanie zadane 10 października 2020 w PHP przez KumberTwo Dyskutant (8,270 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...