Autor | Zpráva | ||
---|---|---|---|
Enko Profil * |
#1 · Zasláno: 27. 9. 2012, 19:43:33
Ahoj, řeším následující:
Z takovéhoto webového formu: <form name="redirect" action="http://hs.nekde.cz/neco/index.php" method="post"> <input type="hidden" name="identity" value="$(identity)"> <input type="submit" value="Continue"> </form> posílám automaticky přes JS document.redirect.submit(); Data sem: <?php //nastaveni promenych ziskanych o uzivateli if(isset($_POST["identity"])){$identity = mysql_real_escape_string($_POST["identity"]);} else {$identity == "unknow";} //ulozeni promenych na cele sezeni if(!isset($_SESSION["identity"])){$_SESSION["identity"] = $identity;} // a pak je takto ukládám if(mysql_query($sql)){ //data o uzivateli byla ulozena } //data se nepodarilo ulozit else{ // poslat oznameni o chybe emailem require("error_mailing.php"); } //presmerovat na stranku s automatickym presmerovanim ven header("Location: /neco/index.php?lang=cs&page=out]http://$_SERVER[SERVER_NAME]/neco/index.php?lang=cs&page=out", true, 303); exit; ?> Takto se zpracovává cca 1000 uživatelů denně, jenže se někdy stane, že se data z toho prvního formu prostě nepřenesou a nemůžu přijít na to proč. Můžete mě někdo prosím nakopnout jakým způsobem odhalit proč se data nepřenášejí? Nebo nevidíte někde nějakou chybu nebo lepší řešení? Jedná se v drtivé většině o data přenášení z mobilních zařízení tipu iPhone, Nokia, Android. Respektive se do MySQL neuloží vůbec nic, ani hodnota "unknow". Ví někdo, jak je to možné? Děkuji |
||
Jan Tvrdík Profil |
#2 · Zasláno: 28. 9. 2012, 10:53:04
Enko:
Jsi si jistý, že době, kdy voláš document.redirect.submit(); je už kompletně sestavený DOM?
|
||
Enko Profil * |
#3 · Zasláno: 28. 9. 2012, 11:31:44
Takto vypadá celá stránka, která přenáší POST hodnoty, tak myslím že ano.
<html> <head> <title>Neco | Přístupový bod -> Login</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/javascript" src="http://hs.neco.cz/neco/js/wan.js"></script> <script type="text/javascript"> function check_wan(){ try{ wan; document.write("$(if trial == no) <center> If you are not redirected in a few seconds, click \"Continue\" below.<br> Pokud nejste automaticky přesměrováni klikněte na tlačítko \"Continue\".<br> <form name=\"redirect\" action=\"http://hs.neco.cz/neco/index.php\" method=\"get\"> <input type=\"hidden\" name=\"page\" value=\"expiry\"> <input type=\"submit\" value=\"Continue\"> </form></center>"); document.redirect.submit(); document.write("$(else) <center> If you are not redirected in a few seconds, click \"Continue\" below.<br> Pokud nejste automaticky přesměrováni, klikněte na tlačítko \"Continue\".<br> <form name=\"redirect\" action=\"http://hs.neco.cz/neco/index.php\" method=\"post\"> <input type=\"hidden\" name=\"identity\" value=\"$(identity)\"> <input type=\"hidden\" name=\"mac\" value=\"$(mac)\"> <input type=\"hidden\" name=\"mac-esc\" value=\"$(mac-esc)\"> <input type=\"hidden\" name=\"ip\" value=\"$(ip)\"> <input type=\"hidden\" name=\"hostname\" value=\"$(hostname)\"> <input type=\"hidden\" name=\"link-orig\" value=\"$(link-orig)\"> <input type=\"hidden\" name=\"link-login-only\" value=\"$(link-login-only)\"> <input type=\"hidden\" name=\"link-orig-esc\" value=\"$(link-orig-esc)\"> <input type=\"hidden\" name=\"error\" value=\"$(error)\"> <input type=\"submit\" value=\"Continue\"></form></center>"); document.redirect.submit(); document.write("$(endif)"); } catch(e){ document.write("<p class=\"box\">The internet connection is propably unavailable for technical reasons. Please contact the staff restaurant.<br>Připojení k internetu pravděpodobně z technický důvodů nedostupné. Kontaktujte prosím personál restaurace.</p>"); } } </script> </head> <body> $(if chap-id) <noscript> <center><b>JavaScript required. Enable JavaScript to continue.</b></center> <center><b>Je vyžadován povolený JavaScript. Pro pokračování jej povolte.</b></center> </noscript> $(endif) <script> check_wan(); </script> </body> </html> |
||
nethor Profil |
#4 · Zasláno: 28. 9. 2012, 12:19:30
Typoval bych to na chybu v přenosu dat mezi klientem a serverem.
Používám moblní připojení O2 a občas se mi stává, že $_POST nedoletí. U mobilních zařízení je taková chyba, myslím, pravděpodobná. |
||
Enko Profil * |
#5 · Zasláno: 30. 9. 2012, 18:44:45
Toto je součást přihlašovací stránky k připojení k WIFI(hotspot), kde uživatel musí na něco kliknout, aby se mu povolil přístup k internetu. Funguje to následovně:
1. uživatel se připojí se svým zařízením na wifi, kde se mu ukáže, že pokud chce být připojen k internetu, je potřeba otevřít webový prohlížeč a něco udělat. 2. uživatel otevře prohlížeč a je automaticky přesměrován proxynou na stránku viz kód v posledním příspěvku, kde se do toho formu uloží data z proxyny. 3. Následně ho JS nebo on sám(pokud mý vypnutý JS) přesmeruje na stránku na internetu(PHP kód výše), kde musí kliknou na odkaz, pod kterým ukládám informace o něm do DB a hned na to je přesměrován s automaticky doplněnými údaji pro proxy server, který ho přesměruje na jím původně zadanou web stránku a povolí mu přístup do internetu. Jde mi jen o to, jestli vidíte někdo chybu v nějakém z těchto uvedených kódů nebo zda by šlo něco řešit líp :) Čiliže říkáte, že to je chyba v přenosu dat mezi klientem, proxynou anebo tou stránkou, která to zpracovává? Není mi ale jasné, proč když se nepřenesou POST data, proč se nenastaví ta hodnota jako "unknow". Jde to řešit nějakou lepší konstrukcí? |
||
nethor Profil |
#6 · Zasláno: 1. 10. 2012, 09:48:43
Napadají mě 2 věci:
1. klient může shodit prohlížeč, dřív, než se data odešlou (To by se ale projevilo jen v logu, ne jako chyba u klienta) 2. Nevím, kterou proměnnou zapisujete do databáze, pokud $_SESSION["identity"], může být zrada v podmínce if(!isset($_SESSION["identity"])) , doplnil bych if(!isset($_SESSION["identity"]) && $_SESSION["identity"] != "" ) ... nebo tak něco.
Případně zkuste logovat příkazy a chyby sql do souboru. To by mohlo napovědět více. |
||
Enko Profil * |
#7 · Zasláno: 1. 10. 2012, 10:23:21
JJ, děkuji.
|
||
Časová prodleva: 12 let
|
0