walidacja formualrza i wyświetlenie danych na innej stronie

0

Hej :) mój problem polega na tym że nie do końca wiem jak powinien działać formularz(metoda post) z polami np login i hasło, który po kliknięciu submit poddany zostanie walidacji (w php) i jeśli dane będą błędne "przekieruje" na tą samą stronę z napisem"błędne dane" pod formularzem, a jeśli będą dobre przekieruję na inną stronę na której zostaną one wyświetlone.

Dokładniej chodzi czy sama walidacja ma być w pliku z formularzem czy w tym 2 pliku. No bo skoro wyślę ten formularz do strony na którym jest formularz zostanie on pomyślnie zwalidowany to jak później przekierować do strony która ma te dane wyświetlić?

0
Foka napisał(a):

Hej :) mój problem polega na tym że nie do końca wiem jak powinien działać formularz(metoda post) z polami np login i hasło, który po kliknięciu submit poddany zostanie walidacji (w php) i jeśli dane będą błędne "przekieruje" na tą samą stronę z napisem"błędne dane" pod formularzem, a jeśli będą dobre przekieruję na inną stronę na której zostaną one wyświetlone.

Dokładniej chodzi czy sama walidacja ma być w pliku z formularzem czy w tym 2 pliku. No bo skoro wyślę ten formularz do strony na którym jest formularz zostanie on pomyślnie zwalidowany to jak później przekierować do strony która ma te dane wyświetlić?

A walidacja jest w php czy w javascripcie bo jak w php to w drugim pliku.

0

W php. No dobra czyli w walidacja w drugim pliku czyli muszę zmienić action w <form>. Ale jeśli walidacja się nie powiedzie np login będzie nie poprawny to jak przekierować z powrotem do formularza i wyświetlić napis że to login był błędny a nie hasło? (to ma tylko zadziałać nie realizować żadnej funkcjonalności więc przyjmijmy że będzie tylko sprawdzał czy login i hasło nie jest puste i powie co było puste)

no cóż kod źródłowy wygląda jak wygląda bo tak jak mówię mam problem z koncepcją jak to ma wgl działać.

<DOCTYPE HTML>
    <html lang="pl">
    <head>
        <meta charset="utf-8">
    </head>
    <body>

<form action="wyswietl.php" method="post"/>
    Nick: <br> <input type="text" name="nick"/><br/>
    E-mail: <br> <input type="email" name="email"/><br/>
    GG: <br> <input type="text" name="gg"/><br>
    Treść komentarza: <br> <input type="text" name="tresc"/><br/>
    <input type="submit" value="wyślij"/>
</form>
</body>
</html>

wyswietl.php

<!DOCTYPE HTML>
<html lang="pl">
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="style.css" type="text/css" />
</head>

<body>

<?php
    $nick = $_POST['nick'];
    $email = $_POST['email'];
    $gg = $_POST['gg'];
    $komentarz = $_POST['tresc'];
?>
<div id="rightcontent">
<?php
    echo $nick."<br>";
    echo $email."<br>";
    echo $gg."<br>";
    echo $komentarz."<br>";
    ?>
</div>
</body>
</html>

póki co mam tyle i nie wiem jak zrobić walidacje która zależnie od rezultatu przekieruje do wyświetl.php albo zostanie na stronie z formularzem i podpowie co było nie tak.

0

W praktyce, np. w jakimś frameworku wygląda to na przykład tak, że dane są przesyłane do oddzielnej akcji (w tym przypadku pliku), poddawane walidacji, i jeżeli walidacja się nie powiedzie, jest robiony redirect do tej samej strony, ale uprzednio wyniki walidacji są wpisywane do sesji, a następnie odczytywane w pliku, w którym jest wygenerowany formularz. Przy następnym odświeżeniu strony, dane z sesji są czyszczone (pusty formularz) albo przy wysłaniu kolejnego żądania nadpisywane. Ale do tego są napisane gotowe mechanizmy, które całą tą logikę obrabiają za Ciebie (np. w Symfony, Kohanie czy innych PHPowych frameworkach). Looknij np. jak to jest generowane w SF2 (https://knpuniversity.com/screencast/symfony2-ep2/flash-message)

Niektóre mechanizmy robią jednak inaczej - np. po błędnej walidacji przechodzą na stronę logowania (powrót) i dodają parametry do url'a określające w czym występuje błąd. Te są parsowane w pliku i wyświetlane w postaci informacji na stronie (looknj: https://stackoverflow.com/a/33191841/5497893). Jednakże, wadą tego rozwiązania jest fakt, że można ręcznie taki url wygenerować i "sztucznie" pokazać błędy na stronie które tak naprawdę nie istnieją.

Dlatego bardziej eleganckie jest rozwiązanie z wiadomościami w sesji - jeżeli nie operujesz na żadnym gotowym systemie, możesz poszukać takich bibliotek do zarządzania powiadomieniami np. coś takiego: https://github.com/plasticbrain/PhpFlashMessages

0

mógłbyś użyć mixa validate.js+phpmailer, wtedy te libki robią robotę za ciebie i nie są zbytnio ciężkie

0

js odpada, to ma być tylko php. tak jak mówię to ma tylko pokazać zasadę działania zrobienia tego tylko i wyłącznie w php. To nie ma być część żadnej aplikacji ani nic w tym stylu. Po prostu uczę się php i wymyśliłem że chciałbym zrobić formularz działający w ten sposób jak opisałem wyżej i nie wiem jak to zrobić. Ma pobrać info, zwalidować i albo wyświetlić na innej stronie albo pobrać je jeszcze raz z informacją które pole było puste.

0

A OOP ogarniasz (obiektówkę?). Mógłbyś wtedy napisać proste klasy do walidacji (looknij: http://www.codingcage.com/2015/04/php-login-and-registration-script-with.html), zrobić sobie ładną strukturkę podzieloną na widok i kontroler (w widoku dajesz sam kod HTML + ew. zmienne wygenerowane przez PHP a w kontrolerze obsługę akcji - klasy). Plus do tego jakąś bibliotekę do Flash Message i rozwiązanie masz gotowe.

0

Ludzie błagam was, stawiam pierwsze kroki w php a wy mówicie o frameworkach i technologiach pokroju mvc. Wiem że chcecie dobrze, ale ja uczę podstaw. Czysty php pisany w note++. Chcę żeby to jakoś zadziałało a nie od razu szukać najlepszego rozwiązania chcę poznać mechanikę php. Nawet nie wiem czy potrzeba do tego wykorzystywać sesji czy można się bez niej obejść. Dlatego jeśli ktoś mógłby podesłać kod który realizowałby to co napisałem wyżej będę ogromnie wdzięczny.

0

Tutaj przejrzyj kilka wyników i powinieneś znaleźć walidację nawet na prostych przykładach z warunkiem if, nic szczególnego ale powinno wystarczyć

0
Foka napisał(a):

Ludzie błagam was, stawiam pierwsze kroki w php a wy mówicie o frameworkach i technologiach pokroju mvc. Wiem że chcecie dobrze, ale ja uczę podstaw. Czysty php pisany w note++. Chcę żeby to jakoś zadziałało a nie od razu szukać najlepszego rozwiązania chcę poznać mechanikę php. Nawet nie wiem czy potrzeba do tego wykorzystywać sesji czy można się bez niej obejść. Dlatego jeśli ktoś mógłby podesłać kod który realizowałby to co napisałem wyżej będę ogromnie wdzięczny.

Ale tutaj nie ma żadnej bazy danych. Proszę przeczytajcie to bardzo uważnie bo wydaje mi się że bardzo wiele dopidujecię do tego wszystkiego. Ale to może też moja wina bo nie potrzebnie jako przykład pól formularza dałem login i hasło. Więc jeszcze raz od początku.

Chodzi mi o formularz który ma pola imię i nazwisko i przycisk submit. Chcę zrobić walidację czyli sprawdzić tylko i wyłącznie czy dane pola zostały wypełnione. Jeśli oba pola zostały wypełnione, po kliknięciu na submit chcę aby przekierowano mnie do innej strony np witaj.php na której zostanie wyświetlone "witaj $imie $nazwisko" (imie i nazwisko oczywiście wyciągnięte z $_POST albo Sesji jeśli koniecznie trzeba użyć sesji). Jeśli jakieś pole było puste chciałbym aby pod formularzem wyświetlił się komunikat które pole należy wypełnić.

0

Kiedy uda Ci się zrobić już działający skrypt, to zajmij się poznaniem wzorca projektowego MVC lub podobnych. W skrócie chodzi o to, aby oddzielić prezentację (HTML) od kodu PHP.

W uproszczeniu:
Model to dane (np. tabela w bazie danych) - odpowiada za zapis/odczyt danych,
Viewer to szablon HTML w którym kodu PHP powinno być minimum (najlepiej same zmienne do prezentacji),
Controller to kod PHP sterujący wszystkim - sprawdzający poprawność danych z formularza etc.

MVC - Model/Viewer/Controller

Osobiście, w skomplikowanych przypadkach, dokładam do tego jeszcze osobną warstwę która jest obiektem szablonu HTML, z którego później szablon korzysta.

0

To ja napiszę

<DOCTYPE HTML>
    <html lang="pl">
    <head>
        <meta charset="utf-8">
    </head>
    <body>

<form action="wyswietl.php" method="post"/>
    Nick: <br> <input type="text" name="nick"/><br/>
    E-mail: <br> <input type="email" name="email"/><br/>
    GG: <br> <input type="text" name="gg"/><br>
    Treść komentarza: <br> <input type="text" name="tresc"/><br/>
    <input type="submit" value="wyślij"/>
</form>
</body>
</html>

wyswietl.php

<!DOCTYPE HTML>
<html lang="pl">
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="style.css" type="text/css" />
</head>ra

<body>

<?php
    $nick = $_POST['nick'];
    $email = $_POST['email'];
    $gg = $_POST['gg'];
    $komentarz = $_POST['tresc'];
if  ($nick != "" and $email != "" and $gg != "") header("Location: dobra.php"); //tutaj przekieorwuje na dobra stron
else header("Location: zla.php"); //tutaj przekieorwuje na zła stronę
?>
<div id="rightcontent">
<?php
    echo $nick."<br>";
    echo $email."<br>";
    echo $gg."<br>";
    echo $komentarz."<br>";
    ?>
</div>
</body>
</html>
0
TomRZ napisał(a):

Kiedy uda Ci się zrobić już działający skrypt, to zajmij się poznaniem wzorca projektowego MVC lub podobnych. W skrócie chodzi o to, aby oddzielić prezentację (HTML) od kodu PHP.

W uproszczeniu:
Model to dane (np. tabela w bazie danych) - odpowiada za zapis/odczyt danych,
Viewer to szablon HTML w którym kodu PHP powinno być minimum (najlepiej same zmienne do prezentacji),
Controller to kod PHP sterujący wszystkim - sprawdzający poprawność danych z formularza etc.

MVC - Model/Viewer/Controller

Osobiście, w skomplikowanych przypadkach, dokładam do tego jeszcze osobną warstwę która jest obiektem szablonu HTML, z którego później szablon korzysta.

Znam założenia mvc ale nie o tym ten wątek. Właśnie problem w tym że nie wiem jak się zabrać stworzenie tego i gdybym zobaczył jak ktoś to rozwiązał mógłbym na tym eksperymentować pozmieniać to i tamto i zaobserwować różnice w działaniu, ale nie ma opcji żebym się nauczył jak rozwiązywać taki problem skoro nie mam co przestudiować. Albo jakieś wskazówki. bo do tej pory mam formularz(na stronie index.php) który wysyła wartości metodą post do strony witaj.php gdzie wyświetlane są te wartości jeśli pola formularza nie były puste. Ale nie mam pojęcia jak/przy pomocy czego mam wrócić z powrotem do index.php jeśli jakieś pole było puste a tym bardziej jeszcze pamiętać które z nich było puste.

0

W witaj/wyswietl.php musisz sprawdzić czy wszystkie wymagane pola są wypełnione, jeżeli nie to robisz redirect do strony index.php np. z parametrem blad=1. Redirect musi byćzrobiony przed wysłaniem jakichkolwiek danych do przeglądarki.

W index.php rozpoznajesz, że istnieje parametr GET blad=1, i wtedy wyświetlasz komunikat, że coś poszło nie tak.

Tylko to jest złe i prymitywne, czyste zło ;)

I teraz NAJWAŻNIEJSZE: od razu powinieneś się zabrać za MVC i frameworki, a nie kombinować i rzeźbić po swojemu, bo raz że stracisz czas, a dwa wyrobisz sobie złe nawyki.

Polecam CI bardzo poświęcić kilka godzin, zainstalować framework Symfony3 i poczytać dokumentację krok po kroku, ten czas wielokrotnie Ci się zwróci:

https://symfony.com/doc/current/index.html

0

Polecam CI bardzo poświęcić kilka godzin, zainstalować framework Symfony3

Zacząłbym od lzejszego FWK albo w ogóle od czystego obiektowego - SF3 to krowa jest, trzeba bardzo dobrze ogarniać OOP żeby się za to zabrać i mieć trochę dobrego doświadczenia.

Właśnie problem w tym że nie wiem jak się zabrać stworzenie tego i gdybym zobaczył jak ktoś to rozwiązał mógłbym na tym eksperymentować pozmieniać to i tamto i zaobserwować różnice w działaniu, ale nie ma opcji żebym się nauczył jak rozwiązywać taki problem skoro nie mam co przestudiować.

Moim zdaniem @Foka jeżeli byłbyś w stanie nauczyć się podstaw OOP+MVC to byłby krok w przód a nie w tył tak jak chcesz się uczyć Ty. Proponuję więc, abyś zostawił ten formularz na razie w spokoju i tak jak piszą koledzy - ogarnął prosty MVC (http://requiremind.com/a-most-simple-php-mvc-beginners-tutorial/) i dopiero zaczął tworzyć apki. Nie będzie to nauka frameworka ale dzięki temu zaczniesz nabierać dobrych wzorców, nauka będzie bardziej efektywna ;)

0
pol90 napisał(a):

To ja napiszę

<DOCTYPE HTML>
    <html lang="pl">
    <head>
        <meta charset="utf-8">
    </head>
    <body>

<form action="wyswietl.php" method="post"/>
    Nick: <br> <input type="text" name="nick"/><br/>
    E-mail: <br> <input type="email" name="email"/><br/>
    GG: <br> <input type="text" name="gg"/><br>
    Treść komentarza: <br> <input type="text" name="tresc"/><br/>
    <input type="submit" value="wyślij"/>
</form>
</body>
</html>

wyswietl.php

<!DOCTYPE HTML>
<html lang="pl">
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="style.css" type="text/css" />
</head>ra

<body>

<?php
    $nick = $_POST['nick'];
    $email = $_POST['email'];
    $gg = $_POST['gg'];
    $komentarz = $_POST['tresc'];
if  ($nick != "" and $email != "" and $gg != "") header("Location: dobra.php"); //tutaj przekieorwuje na dobra stron
else header("Location: zla.php"); //tutaj przekieorwuje na zła stronę
?>
<div id="rightcontent">
<?php
    echo $nick."<br>";
    echo $email."<br>";
    echo $gg."<br>";
    echo $komentarz."<br>";
    ?>
</div>
</body>
</html>

niemalże o to mi chodzi tylko aby przy przekierowaniu na złą stronę napisać które pole było puste. I nie wiem jak przekierować do strony jednocześnie z informacją które pole było puste, jakiś parametr/tablice stringów gdzie będą nazwy pustych pól coś w tym stylu. Jakieś wskazówki?

0

Najbardziej prymitywnie:

header('Location zla.php?login_error=1&password_error=1

I potem w PHP trzeba przechwycić poprzez

isset($_GET['login_error'])) { // dzialania

1 użytkowników online, w tym zalogowanych: 0, gości: 1