shpaque
11.02.2014, 09:24:51
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...
<?
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$action = isset($_POST['action']) ?
$_POST['action'] : ''; $success_page = './potwierdzenie.php';
$model = $_POST['model'];
$wielkosc = $_POST['wielkosc'];
$price = $_POST['price'];
if ($action == 'zamow')
{
$ipaddress = $_SERVER['REMOTE_ADDR'];
$logtime = date("Y-m-d");
if ($price == "<h2>BRAK AUTOMATU - wybierz inny model</h2>")
{
echo "<script>alert('Brak automatu $model dla rozmiaru $wielkosc')</script>"; break;
}
else
{
$_SESSION['kolor'] = $_POST['kolor'];
$_SESSION['wielkosc'] = $_POST['wielkosc'];
$_SESSION['model'] = $_POST['model'];
$_SESSION['cena'] = $price;
$_SESSION['odbior'] = $_POST['odbior'];
$_SESSION['platnosc'] = $_POST['platnosc'];
$_SESSION['k-imie'] = $_POST['k-imie'];
$_SESSION['k-tel'] = $_POST['k-tel'];
$_SESSION['k-email'] = $_POST['k-email'];
$_SESSION['preview'] = $_POST['preview'];
$_SESSION['preview1b'] = $_POST['preview1b'];
$_SESSION['preview2'] = $_POST['preview2'];
$_SESSION['preview3'] = $_POST['preview3'];
$_SESSION['preview4'] = $_POST['preview4'];
$_SESSION['preview5'] = $_POST['preview5'];
$_SESSION['preview6'] = $_POST['preview6'];
$_SESSION['preview7'] = $_POST['preview7'];
header('Location: '.$success_page); }
}
}
?>
semafor1985
11.02.2014, 09:53:11
nie rozumiem, chcesz wrócić do stanu sprzed wciśnięcia 'submit' po tym jak wysyłasz formularz i sprawdzasz tablice POST?
Damonsson
11.02.2014, 09:53:25
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
11.02.2014, 10:05:43
za alertem jest break; - nie powinien on zatrzymać?
@semafor1985
co chcę zrobić? chcę, żeby skrypt się nie wykonał i zatrzymał, jeśli
if ($price == "<h2>BRAK AUTOMATU - wybierz inny model</h2>")
nospor
11.02.2014, 10:07:38
przeczytaes chociaz co robi BREAK? Zajrzyj do manuala, tam to jest wyjasnione :/
A jak chcesz zatrzymac skrypt, to uzywa sie EXIT
shpaque
11.02.2014, 10:10:03
jak zamienię break; na exit; - jest to samo...
semafor1985
11.02.2014, 10:10:12
daj return. Ale i tak nie wrocisz do stanu sprzed naciśnięcia 'submit' tylko będziesz miał pustą stronę
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.
shpaque
11.02.2014, 10:14:10
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
11.02.2014, 10:16:41
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
11.02.2014, 10:17:18
Moze wczesniej dales jakies headery przekierowujace. Skad mamy wiedziec co masz wczesniej....
shpaque
11.02.2014, 10:22:00
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?:
<form name="zamow" method="post" action="<?php echo basename(__FILE__); ?>" accept-charset="UTF-8" id="form">
nospor
11.02.2014, 10:52:24
Podaj kroki, jakie nalezy zrobic na Twojej stronie by dojsc do sytuacji o ktorej mowisz.
shpaque
11.02.2014, 13:49:39
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:
if ($action == 'zamow')
{
if ($price == "<h2>BRAK AUTOMATU - wybierz inny model</h2>")
{
echo "<script>alert('Brak automatu $model dla rozmiaru $wielkosc')</script>"; }
else
{
$_SESSION['kolor'] = $_POST['kolor'];
$_SESSION['wielkosc'] = $wielkosc;
$_SESSION['model'] = $model;
$_SESSION['cena'] = $price;
$_SESSION['
i po alercie strona jakby się przeladowuje - ale niestety pola są puste...
markonix
11.02.2014, 13:56:14
$price == "<h2>BRAK AUTOMATU - wybierz inny model</h2>"
Co to w ogóle ze dziwaczny warunek.
"Jeżeli cena jest równa HTML"?
shpaque
11.02.2014, 14:01:45
Cytat(markonix @ 11.02.2014, 13:56:14 )

$price == "<h2>BRAK AUTOMATU - wybierz inny model</h2>"
Co to w ogóle ze dziwaczny warunek.
"Jeżeli cena jest równa HTML"?

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

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
11.02.2014, 14:04:06
Cytat(nospor @ 11.02.2014, 14:01:55 )

@markonix bo autor takie dane wysyla postem

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
11.02.2014, 14:06:18
No robilem to i widze. Klikam ok, i pojaia sie na nowo formularz.
Jesli nie wypelnisz go danymi, to bedzie jaki jest - logiczne.
shpaque
11.02.2014, 14:08:26
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
11.02.2014, 14:10:38
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
11.02.2014, 14:18:03
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:
if ($action == 'zamow')
{
if ($price == "<h2>BRAK AUTOMATU - wybierz inny model</h2>")
{
$error = "Brak automatu $model dla rozmiaru $wielkosc";
}
{..
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
11.02.2014, 14:21:42
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
11.02.2014, 14:30:24
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.
<input type="text" id="error" style="position:absolute;line-" name="error" value="
<?php echo $error; ?>" readonly="readonly" autocomplete="off">
nospor
11.02.2014, 14:31:11
Nie mowie o polu error, tylko o inutach do danych kontaktowych. Zacznij wkoncu czytac uwazniej :/
shpaque
11.02.2014, 14:37:44
Cytat(nospor @ 11.02.2014, 14:31:11 )

Nie mowie o polu error, tylko o inutach do danych kontaktowych. Zacznij wkoncu czytac uwazniej :/
<input type="text" id="k-imie" name="k-imie" value="
<? echo $kimie; ?>" autocomplete="off" required="required" placeholder="Imię i nazwisko">
<input type="text" id="k-tel" name="k-tel" value="
<? echo $ktel; ?>" autocomplete="off" required="required" placeholder="Telefon kontaktowy">
<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
11.02.2014, 14:39:33
A gdzie kod, ktory pod zmienne $kimie itp przypisuje wartosci?
shpaque
11.02.2014, 14:40:23
Cytat(nospor @ 11.02.2014, 14:39:33 )

A gdzie kod, ktory pod zmienne $kimie itp przypisuje wartosci?
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$action = isset($_POST['action']) ?
$_POST['action'] : ''; $ipaddress = $_SERVER['REMOTE_ADDR'];
$logtime = date("Y-m-d"); $success_page = './potwierdzenie.php';
$model = $_POST['model'];
$wielkosc = $_POST['wielkosc'];
$price = $_POST['price'];
$kimie = $_POST['k-imie'];
$ktel = $_POST['k-tel'];
$kemail = $_POST['k-email'];
$error = $_POST['error'];
if ($action == 'zamow')
{
if ($price == "<h2>BRAK AUTOMATU - wybierz inny model</h2>")
{
$error = "Brak automatu $model dla rozmiaru $wielkosc";
}
{
$_SESSION['kolor'] = $_POST['kolor'];
$_SESSION['wielkosc'] = $wielkosc;
$_SESSION['model'] = $model;
$_SESSION['cena'] = $price;
$_SESSION['odbior'] = $_POST['odbior'];
$_SESSION['platnosc'] = $_POST['platnosc'];
$_SESSION['k-imie'] = $kimie;
$_SESSION['k-tel'] = $ktel;
$_SESSION['k-email'] = $kemail;
$_SESSION['preview'] = $_POST['preview'];
$_SESSION['preview1b'] = $_POST['preview1b'];
$_SESSION['preview2'] = $_POST['preview2'];
$_SESSION['preview3'] = $_POST['preview3'];
$_SESSION['preview4'] = $_POST['preview4'];
$_SESSION['preview5'] = $_POST['preview5'];
$_SESSION['preview6'] = $_POST['preview6'];
$_SESSION['preview7'] = $_POST['preview7'];
header('Location: '.$success_page); }
}
}
?>
nospor
11.02.2014, 14:40:28
Cytat
nie zmienia to faktu, że strona się przeładowuje
A niby czemu ma sie nie przeladowac? Wysylasz forma, to sie przeladowuje...
shpaque
11.02.2014, 14:41:53
to jak zrobić żeby się nie przeładowywał, a zatrzymał - jak zwykle JS?? :/
nospor
11.02.2014, 14:42:46
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
11.02.2014, 14:44:55
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
11.02.2014, 14:46:44
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
11.02.2014, 14:50:33
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...
var cenacalosc = automat + wysylka;
if (automat == "error") {fullcena.innerHTML = "<h2>BRAK AUTOMATU - wybierz inny model</h2>";}
else {fullcena.innerHTML = "Cena brutto: <b>" + cenacalosc + "</b> zł";}
$('input[name="price"]').val(fullcena.innerHTML);
markonix
11.02.2014, 14:56:25
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
11.02.2014, 16:41:54
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.