• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
900 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 (214,470 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 (214,470 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 1,146 wizyt
pytanie zadane 30 sierpnia 2016 w PHP przez lalanablanalala Bywalec (2,090 p.)
+1 głos
1 odpowiedź 571 wizyt
pytanie zadane 6 kwietnia 2021 w HTML i CSS przez Nearr Obywatel (1,890 p.)
0 głosów
1 odpowiedź 547 wizyt
pytanie zadane 10 października 2020 w PHP przez KumberTwo Dyskutant (8,270 p.)

93,164 zapytań

142,176 odpowiedzi

321,938 komentarzy

62,493 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 688p. - dia-Chann
  2. 676p. - CC PL
  3. 675p. - Łukasz Piwowar
  4. 664p. - Marcin Putra
  5. 662p. - Łukasz Eckert
  6. 649p. - Michal Drewniak
  7. 641p. - rucin93
  8. 641p. - rafalszastok
  9. 629p. - Piotr Aleksandrowicz
  10. 621p. - Dawid128
  11. 606p. - Mariusz Fornal
  12. 602p. - Michał Telesz
  13. 597p. - Hubert Chęciński
  14. 572p. - ssynowiec
  15. 527p. - Adrian Wieprzkowicz
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...