Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] gdzie leży błąd?
Forum PHP.pl > Forum > Przedszkole
shpaque
Witam serdecznie, mam mały błąd, którego nie potrafię namierzyć. Chodzi mi konkretnie o warunek IF, jeśli jest true (tam gdzie wyświetla alerta) to alert mi się wyświetla, ale chwilę jeszcze przeglądarka czyta czyta i staje na białym polu zamiast zatrzymać skrypt tak, żeby można było po kliknięciu OK w alercie wrócić do stanu sprzed wciśnięcia submita...

  1. <?
  2. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  3. {
  4. $action = isset($_POST['action']) ? $_POST['action'] : '';
  5. $success_page = './potwierdzenie.php';
  6. $model = $_POST['model'];
  7. $wielkosc = $_POST['wielkosc'];
  8. $price = $_POST['price'];
  9.  
  10. if ($action == 'zamow')
  11. {
  12. $ipaddress = $_SERVER['REMOTE_ADDR'];
  13. $logtime = date("Y-m-d");
  14.  
  15. if ($price == "<h2>BRAK AUTOMATU - wybierz inny model</h2>")
  16. {
  17. echo "<script>alert('Brak automatu $model dla rozmiaru $wielkosc')</script>";
  18. break;
  19. }
  20.  
  21. else
  22. {
  23. $_SESSION['kolor'] = $_POST['kolor'];
  24. $_SESSION['wielkosc'] = $_POST['wielkosc'];
  25. $_SESSION['model'] = $_POST['model'];
  26. $_SESSION['cena'] = $price;
  27. $_SESSION['odbior'] = $_POST['odbior'];
  28. $_SESSION['platnosc'] = $_POST['platnosc'];
  29.  
  30. $_SESSION['k-imie'] = $_POST['k-imie'];
  31. $_SESSION['k-tel'] = $_POST['k-tel'];
  32. $_SESSION['k-email'] = $_POST['k-email'];
  33.  
  34. $_SESSION['preview'] = $_POST['preview'];
  35. $_SESSION['preview1b'] = $_POST['preview1b'];
  36. $_SESSION['preview2'] = $_POST['preview2'];
  37. $_SESSION['preview3'] = $_POST['preview3'];
  38. $_SESSION['preview4'] = $_POST['preview4'];
  39. $_SESSION['preview5'] = $_POST['preview5'];
  40. $_SESSION['preview6'] = $_POST['preview6'];
  41. $_SESSION['preview7'] = $_POST['preview7'];
  42.  
  43. header('Location: '.$success_page);
  44. }
  45. }
  46. }
  47. ?>
semafor1985
nie rozumiem, chcesz wrócić do stanu sprzed wciśnięcia 'submit' po tym jak wysyłasz formularz i sprawdzasz tablice POST?
Damonsson
Ja tam nic nie widzę za alertem, żeby się miało wyświetlać, więc co byś chciał mieć zamiast białej strony? Kosmitów?
shpaque
za alertem jest break; - nie powinien on zatrzymać?

@semafor1985
co chcę zrobić? chcę, żeby skrypt się nie wykonał i zatrzymał, jeśli
  1. if ($price == "<h2>BRAK AUTOMATU - wybierz inny model</h2>")
nospor
przeczytaes chociaz co robi BREAK? Zajrzyj do manuala, tam to jest wyjasnione :/

A jak chcesz zatrzymac skrypt, to uzywa sie EXIT
shpaque
jak zamienię break; na exit; - jest to samo...
semafor1985
daj return. Ale i tak nie wrocisz do stanu sprzed naciśnięcia 'submit' tylko będziesz miał pustą stronę
nospor
Sam napisales, ze chcesz przerwac skrypt. Exit to wlasnie robi. Jak chcesz cos innego, to napisz w koncu co chcesz.
shpaque
czyli jedyna opcja, to zrobić box z $error_message i w tym momencie zamiast alerta - wyświetlić komunikat na error message i zatrzymać? Nie da się z wyskakującym okienkiem?

Cytat(nospor @ 11.02.2014, 10:11:08 ) *
Sam napisales, ze chcesz przerwac skrypt. Exit to wlasnie robi. Jak chcesz cos innego, to napisz w koncu co chcesz.

no chcę, ale exit go nie zatrzymuje, tylko przez 2 sek. jeszcze po wyświetleniu alerta strona "coś robi" i pojawia się pusta strona - jakby odświeżona, ale biała - czysta...
semafor1985
ale po klikcięciu 'ok' w alercie strona nie jest odświeżana.
nie wiem czy dobrze Cie rozumiem ale chyba chcesz po spełnieniu warunku if i wyświetlenia komunikatu wyświetlić jeszcze raz formularz
wiec po alercie wstaw ten sam formularz
nospor
Moze wczesniej dales jakies headery przekierowujace. Skad mamy wiedziec co masz wczesniej....
shpaque
to jest początek strony - nie ma headerów przekierowujących. Jedyny jest ale dalej, kiedy skrypt puści dalej (czyli gdzie sesja się otwiera)

może akcja formularza samego powinna być inna?:
  1. <form name="zamow" method="post" action="<?php echo basename(__FILE__); ?>" accept-charset="UTF-8" id="form">
nospor
Podaj kroki, jakie nalezy zrobic na Twojej stronie by dojsc do sytuacji o ktorej mowisz.
shpaque
wystarczy zostawić tak jak jest (czyli zeby na dole zamiast ceny byl komunikat) wypelnic byle jak dane kontaktowe i zaakceptowac regulamin. teraz dalem bez exita, wygląda to tak:

  1. if ($action == 'zamow')
  2. {
  3. if ($price == "<h2>BRAK AUTOMATU - wybierz inny model</h2>")
  4. {
  5. echo "<script>alert('Brak automatu $model dla rozmiaru $wielkosc')</script>";
  6. }
  7.  
  8. else
  9. {
  10. $_SESSION['kolor'] = $_POST['kolor'];
  11. $_SESSION['wielkosc'] = $wielkosc;
  12. $_SESSION['model'] = $model;
  13. $_SESSION['cena'] = $price;
  14. $_SESSION['


i po alercie strona jakby się przeladowuje - ale niestety pola są puste...
markonix
  1. $price == "<h2>BRAK AUTOMATU - wybierz inny model</h2>"

Co to w ogóle ze dziwaczny warunek.
"Jeżeli cena jest równa HTML"? sciana.gif
shpaque
Cytat(markonix @ 11.02.2014, 13:56:14 ) *
  1. $price == "<h2>BRAK AUTOMATU - wybierz inny model</h2>"

Co to w ogóle ze dziwaczny warunek.
"Jeżeli cena jest równa HTML"? sciana.gif

Dziwny, nie dziwny - waliduje - działa bezbłędnie... Więc o co chodzi?
nospor
@markonix bo autor takie dane wysyla postem smile.gif

Cytat
i po alercie strona jakby się przeladowuje - ale niestety pola są puste...
No a wypelniasz pola danymi wyslanymi formem? Jak nie to nie ma co sie dziwic ze wszystko puste
shpaque
Cytat(nospor @ 11.02.2014, 14:01:55 ) *
@markonix bo autor takie dane wysyla postem smile.gif

No a wypelniasz pola danymi wyslanymi formem? Jak nie to nie ma co sie dziwic ze wszystko puste

wejdź i spróbuj wysłać niewypełniony formularz...
nospor
No robilem to i widze. Klikam ok, i pojaia sie na nowo formularz.
Jesli nie wypelnisz go danymi, to bedzie jaki jest - logiczne.
shpaque
a dane które MUSZĄ być wypełnione? (dane kontaktowe i check box regulaminu)? Też znikają, mimo że po alercie nic nie ma - a mi strona jakby się przeładowuje a pola w formularzu wracają do default...
nospor
Skup sie: Jesli ty generujac forma, nie wypelnisz go, to on bedzie wygenerowany pusty. Zrozum.

Jesli robisz tak:
echo '<input name="bla" />';
To pole to bedzie puste.

Jesli zrobisz tak:
echo '<input name="bla" value="'.$_POST['bla'].'"/>';
to pole to wypelni się daną z posta. Kapisz?
shpaque
no to kapisz kapisz, ale dajmy dla porównania przykład bez alerta - mam to samo, ale wcześniej w formularzu robie sobie input ktory wyświetla mi $error (na ten czas pusty)

po submicie daję ten sam warunek, ale oczywiście skrypt jest puszczany daje TYLKO jeśli $error jest epmty (bo jesli występuje ww komunikat skrypt stoi w miejscu), czyli na zasadzie:

  1. if ($action == 'zamow')
  2. {
  3. if ($price == "<h2>BRAK AUTOMATU - wybierz inny model</h2>")
  4. {
  5. $error = "Brak automatu $model dla rozmiaru $wielkosc";
  6. }
  7.  
  8. if (empty($error))
  9. {..


i w takim przypadku skrypt się zatrzymuje, error message się pojawia w danym polu input, a reszta wypełnionych pól <b>zostaje wypełniona!</b> - dlaczego więc z alertem tak nie jest?
nospor
Pokaz kod, ktorym generujesz inputy na dane kontaktowe, bo nie wierze, ze wypelniasz te pola w php.

Zas co do alertu to masz to schrzanione. Najpierw generujesz alert, a dopiero potem generujesz całą stronę.... No tak sie nie robi. ALert ma byc w stronie, a nie przed stroną. I ma sie wyswietlac gdy cala strona sie wygeneruje a nie w trakcie, bo w przeciwnym wypadku strona bedzie "wisiec" jak to ma miejsce teraz
shpaque
Cytat(nospor @ 11.02.2014, 14:21:42 ) *
Pokaz kod, ktorym generujesz inputy na dane kontaktowe, bo nie wierze, ze wypelniasz te pola w php.


  1. <input type="text" id="error" style="position:absolute;line-" name="error" value="<?php echo $error; ?>" readonly="readonly" autocomplete="off">
nospor
Nie mowie o polu error, tylko o inutach do danych kontaktowych. Zacznij wkoncu czytac uwazniej :/
shpaque
Cytat(nospor @ 11.02.2014, 14:31:11 ) *
Nie mowie o polu error, tylko o inutach do danych kontaktowych. Zacznij wkoncu czytac uwazniej :/



  1. <input type="text" id="k-imie" name="k-imie" value="<? echo $kimie; ?>" autocomplete="off" required="required" placeholder="Imię i nazwisko">
  2. <input type="text" id="k-tel" name="k-tel" value="<? echo $ktel; ?>" autocomplete="off" required="required" placeholder="Telefon kontaktowy">
  3. <input type="email" id="k-email" name="k-email" value="<? echo $kemail; ?>" autocomplete="off" required="required" placeholder="E-mail">


nie zmienia to faktu, że strona się przeładowuje (bo mam ją ściągniętą scrollem w dół podczas kliknięcia "zamów", po kliknięciu i error mam znów od góry
nospor
A gdzie kod, ktory pod zmienne $kimie itp przypisuje wartosci?
shpaque
Cytat(nospor @ 11.02.2014, 14:39:33 ) *
A gdzie kod, ktory pod zmienne $kimie itp przypisuje wartosci?


  1. <?php
  2. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  3. {
  4. $action = isset($_POST['action']) ? $_POST['action'] : '';
  5. $ipaddress = $_SERVER['REMOTE_ADDR'];
  6. $logtime = date("Y-m-d");
  7. $success_page = './potwierdzenie.php';
  8.  
  9. $model = $_POST['model'];
  10. $wielkosc = $_POST['wielkosc'];
  11. $price = $_POST['price'];
  12.  
  13. $kimie = $_POST['k-imie'];
  14. $ktel = $_POST['k-tel'];
  15. $kemail = $_POST['k-email'];
  16.  
  17. $error = $_POST['error'];
  18. if ($action == 'zamow')
  19. {
  20. if ($price == "<h2>BRAK AUTOMATU - wybierz inny model</h2>")
  21. {
  22. $error = "Brak automatu $model dla rozmiaru $wielkosc";
  23. }
  24.  
  25. if (empty($error))
  26. {
  27. $_SESSION['kolor'] = $_POST['kolor'];
  28. $_SESSION['wielkosc'] = $wielkosc;
  29. $_SESSION['model'] = $model;
  30. $_SESSION['cena'] = $price;
  31. $_SESSION['odbior'] = $_POST['odbior'];
  32. $_SESSION['platnosc'] = $_POST['platnosc'];
  33.  
  34. $_SESSION['k-imie'] = $kimie;
  35. $_SESSION['k-tel'] = $ktel;
  36. $_SESSION['k-email'] = $kemail;
  37.  
  38. $_SESSION['preview'] = $_POST['preview'];
  39. $_SESSION['preview1b'] = $_POST['preview1b'];
  40. $_SESSION['preview2'] = $_POST['preview2'];
  41. $_SESSION['preview3'] = $_POST['preview3'];
  42. $_SESSION['preview4'] = $_POST['preview4'];
  43. $_SESSION['preview5'] = $_POST['preview5'];
  44. $_SESSION['preview6'] = $_POST['preview6'];
  45. $_SESSION['preview7'] = $_POST['preview7'];
  46. header('Location: '.$success_page);
  47. }
  48. }
  49. }
  50. ?>
nospor
Cytat
nie zmienia to faktu, że strona się przeładowuje
A niby czemu ma sie nie przeladowac? Wysylasz forma, to sie przeladowuje...
shpaque
to jak zrobić żeby się nie przeładowywał, a zatrzymał - jak zwykle JS?? :/
nospor
No i git, pod warunkiem ze zmienne $kimie sa widoczne na etapie generowania inputa, to powinno byc wszystko ok.

A czemu ma sie zatrzymac? Robisz walidacje po stronie serwera, to musi sie przeladowac. Cos kombinujesz za bardzo...
shpaque
to jak to zrobić żeby działał automatycznie jak zwykły alert w przypadku zmianyy radio z "Płatność przy odbiorze" na "Przedpłata na konto" przed buttonem PAYU?

tak wyskoczy alert i strona stoi - czyli jedyna opcja to wrrócić do JS, a na buttonbie zrobić funkcjię onClick()? i tam sprawdzać wartość zmiennej i dopiero jeśli pusta - puszczać post??
markonix
Jeżeli chcesz zrobić walidację w JS bez odświeżania to musisz ją zrobić tylko w JS - porównaj przy submit wartość inputa $price (nadal nie rozumiem Twojej logiki tutaj) i wywal alert + return false (zatrzymie wysyłanie formularza).
Ale i tak to powinno być dodatkiem, główna walidacja w PHP zawsze musi być.
shpaque
Cytat(markonix @ 11.02.2014, 14:46:44 ) *
$price (nadal nie rozumiem Twojej logiki tutaj)


bo cały problem polega na tym, że zmienna price wywodzi się stąd...

  1. var cenacalosc = automat + wysylka;
  2. if (automat == "error") {fullcena.innerHTML = "<h2>BRAK AUTOMATU - wybierz inny model</h2>";}
  3. else {fullcena.innerHTML = "Cena brutto: <b>" + cenacalosc + "</b> zł";}
  4. $('input[name="price"]').val(fullcena.innerHTML);
markonix
No domyśliłem się, że wartość jest jakoś generowana, przecież sam ktoś takiego nie wpisze do inputa.

Skoro masz już w JS jakąś "walidację" to alert też tam wstaw.
shpaque
dzięki wielkie, już to mam. Zrobiłem w JS jak pisaliście (przy każdym nieprawidłowym wyborze - alert) i dodatkowo w php jeszcze raz walidacja czy jest ok...
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.