Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/cURL] Rejestracja, poprawianie danych jak w Allegro
Forum PHP.pl > Forum > PHP
Walian
Witam.

Piszę skrypt rejestracji i chcę uzyskać efekt podobny jak ma Allegro.
Czyli:

1. Plik "register.php" -> User wypełnia formularz i klika "Dalej >".
2. Następuje przekierowanie (przez formularz) do pliku "register_preview.php".
3. Skrypt ten wyświetla wprowadzone dane i prosi o ich zweryfikowanie.
4. Jeśli user chce poprawić lub uzupełnić dane może kliknąć przycisk "< Popraw dane" i zostanie przekierowany spowrotem do pliku "register.php", z tymże formularz ma zostać wypełniony danymi, które wcześniej wpisał. No i tu pojawia się problem bo formularz nie zostaje wypełniony danymi, w dodatku to, co jest przed (nad) formularzem (logo strony itd.) zostaje powielone, a w pasku adresu widnieje plik "register_preview.php" zamiast "register.php".

Gdyby ktoś nie kumał jaki efekt chcę uzyskać - niech wyłączy obsługę JavaScript i potestuje skrypty rejestracji w Allegro.

EDIT (Usunąłem moją zabawę z cURL-em):
Hmm... Widzę, że w Allegro jest dość dziwnie jedna rzecz zrobiona.
Mianowicie znalazłem taki oto fragment kodu odp. za kliknięcie w przycisk "< Popraw dane":
  1. <form action="new_user.php" method="post">
  2. <input type="submit" class="form-submit" value="< Popraw dane" />
  3. </form>

Więc jak to się dzieje, że bez użycia JavaScript-u do pliku new_user.php "lecą" dane POST z pliku "new_user_preview.php" ?
thek
To jak lecą, zależy czego używasz. Ja w Kohance w momencie gdy ktoś walnął babole, czyli nie przechodzą zmienne post walidacji, do zmiennych formularza przypisuję z powrotem zmienne post. Jest to rozwiązane więc w sposób:
a) przypisz do zmiennych formularza wartości domyślne,
cool.gif sprawdź czy jest ustawiona zmienna post
b1) jeśli tak, przetwarzaj dane i dalej rób co chcesz,
c) dopiero teraz wyświetl formularz.

Zwróć uwagę na punkt b1), bo to on jest dla Ciebie ważny... Możesz bowiem w "rób co chcesz" zrobić sobie dowolną rzecz i potem do zmiennych formularza przypisać to co masz w zmiennej post. W efekcie po przetworzeniu zmiennych wyświetlą się one w formularzu ponownie. To się przydaje podczas walidacji smile.gif User bowiem nie traci wtedy wcześniej wpisanych danych, a ja mogę mu przy polu dorzucić informację: "W tym polu masz błąd taki a taki... Popraw go.". Oczywiście ja mam to rozpisane w modelu MVC, ale miks wyglądałby mniej więcej jako:

  1. $db = new Model;
  2. $form = array( wartości_domyślne_pól );
  3. //przeleć zmienne by chronić przed XSS
  4. $post = $this->input->post();
  5. if($post) {
  6. if(array_key_exists('send', $post)) {
  7. //zwaliduj dane
  8. $post = new Validation($post);
  9. if($post->validate()) {
  10. $db->edytuj($post);
  11. //zmienna oznaczająca prawidłowy przebieg walidacji
  12. $errors['success'] = 1;
  13. } else {
  14. //zmienna z wypisanymi komunikatami błędów
  15. $post->errors('form_error_messages');
  16. //zmienna oznaczająca niepowodzenie
  17. $errors['success'] = 0;
  18. //zwróć post jako zmienne formularza
  19. $form = $post;
  20. }
  21. }
  22. //zmienna id=0 oznacza, że artykuł jest nowy i jest to wartość domyślna, id > 0 oznaczać może edycję już istniejących danych
  23. } elseif($id > 0) {
  24. $form = $db->pobierz_dane($id);
  25. }
  26. //wyślij do widoku błędy oraz zmienne formularza
  27. $view->errors = $errors;
  28. $view->form = $form;

Plik widoku wyświetli dane domyślne dla nowego usera. Ale jeśli nastąpiła edycja, był błąd walidacji lub powrót z momentu o jakim mówisz, to masz dane podane przez usera w polach lub pobrane z bazy.
Walian
Dopiero dziś zobaczyłem Twój post smile.gif
Na razie rozwiązałem to na sesjach, póki co działa dobrze.
A z tego co napisałeś, wnioskuję, że wszystko masz w jednym pliku, a ja właśnie nie - i na tym polega cały bajer smile.gif
Zwróć uwagę jak wygląda plik "preview" w Allegro - nie ma żadnych input-ów więc nie ma możliwości "normalnego" wysłania danych POST spowrotem do pliku z formularzem - stosują inną technikę, możliwe, że sesje.
thek
Może to się wydawać dziwne... Ale nie używam allegro i nie mam oraz nie miałem tam nigdy konta biggrin.gif Stąd gdy mowa o przesyłaniu ponownie wartości formularza mam mniej więcej pogląd jak opisałem. W stylu jaki dodałeś możliwe, że jest to faktycznie o sesje oparte gdzie "przepychamy" tylko zmienną POST dalej w łańcuchu smile.gif
Walian
Dokładniej mówiąc - mam dwa pliki:

register.php - plik z formularzem oraz register_preview.php - plik wyświetlający dane wprowadzone w pliku register.php.

działanie plików:

register.php
1.) Przypisanie zmiennym wartości zerowych/pustych.
2.) Sprawdzenie czy sesja zawiera dane - jeśli tak - skrypt je ustawia.
3.) Skrypt przypisuje wartości zmiennych do formularza.
Po kliknięciu przycisku lecą dane w $_POST do pliku register_preview.php

register_preview.php
1.) Sprawdzenie czy otrzymano dane w $_POST - jeśli tak - nastąpi ich filtracja/weryfikacja.
Jeśli brak danych - przekierowanie do register.php.
2.) Jeśli punkt 1 został spełniony to dane zostaną przypisane do $_SESSION.
3.) Dane zostaną wyświetlone z prośbą o ich "wzrokową" weryfikację.

Tak to działa. Prawda, że proste?

Chyba fajnie co? smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.