Autor Zpráva
Enko
Profil *
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
Enko:
Jsi si jistý, že době, kdy voláš document.redirect.submit(); je už kompletně sestavený DOM?
Enko
Profil *
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
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 *
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
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 *
JJ, děkuji.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: