Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 14 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97
Príspevok NapísalOffline : 22.08.2010 11:49

Nazdarek. Snazim sa urobit si script na kontrolu input formulara pomocou Ajaxu. data by mali byt odoslane cez POST. Môj script vyzera nejako takto:

html:
Kód:
<script type="text/javascript">
function showHint(str)
{
if (str.length==0)
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {

var XMLRes = xmlhttp.responseXML;

         //čtu dokument, jelikož je vše ok :-) 

        xmlRoot = XMLRes.documentElement; 
 
         stav = xmlRoot.getElementsByTagName("stav").firstChild.data; 
       
 

    document.getElementById("txtHint").innerHTML= stav;
    }
  }


xmlhttp.open("POST","zpracuj.php",true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send();
}
</script>


<h3>Start typing a name in the input field below:</h3>
<form action="#" method="post">
Meno: <input type="text" id="txt1" onkeyup="showHint(this.value)" />
</form>
<p>Odpoveď: <span id="txtHint"></span></p>

zpracuj.php
Kód:
<?php

$q=$_POST["q"];

//lookup all hints from array if length of q>0
if (strlen($q) < 5)
  {

 $hodnota1="Zadali ste malo pismen";
 
}

elseif (strlen($q) > 10)
  {

 $hodnota1="Zadali ste Veľa pismen";
 
}
 else
  {

 $hodnota1="Meno je v poriadku";   
}

 header("Content-Type: text/xml"); 

 $xml = new DOMDocument("1.0","utf-8"); 

 $validace = $xml->createElement("validace"); 
 $xml->appendChild($validace); 
 $vysledek = $xml->createElement("vysledek"); 

 $stav = $xml->createElement("stav"); 
 $stavData = $xml->createTextNode($hodnota1); 
 $stav->appendChild($stavData); 

 $vysledek->appendChild($stav);   
 $validace->appendChild($vysledek);     
 //uložím XML výstup 
 $vystup= $xml->saveXML(); 
 //zobrazím 
 echo $vystup;       
?>

Lenze ono mi to nefunguje. Nevypise mi to ziadnu odpoved..Prosim Vas, kde mam chybu, alebo ako to ma byt spravne zapisane??


Offline

Čestný člen
Čestný člen
Nefunguje script pre input formulara

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34
Bydlisko: Brno
Príspevok NapísalOffline : 22.08.2010 11:53

Kód:
stav = xmlRoot.getElementsByTagName("stav").firstChild.data;
getElementsByTagName vracia kolekciu elementov, nie jeden konkretny element. Preto nemozes vybrat z kolekcie elementov firstChild.
Kód:
stav = xmlRoot.getElementsByTagName("stav")[0].firstChild.data;

Nabuduce skus poslat aj odkaz na zivu ukazku.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97
Príspevok Napísal autor témyOffline : 22.08.2010 12:22

Ďuri.. Ja som to takto mal..Takyto tvar ako si napisal.. Lenze ono je to problem v tom, ze ak mam takyto zapis, tak mi to stale vypise len prvu hlasku/odpoved..Cize v mojom pripade:
Kód:
 $hodnota1="Zadali ste malo pismen";

Bez ohladu na to, ci je tvar Mena spravny alebo nie. Na stranke mam iba ten script, co je tu.. Nic ine... Ja som vychadzal totiz z tohto clanku:
ajax-7-lekce


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97
Príspevok Napísal autor témyOffline : 22.08.2010 14:41

Uz som to vyriesil. Ja som "zabudol" zadat parametre do xmlhttp.send();
Cize to malo vyzerat nejako takto:
Kód:
function showHint(str)
{
var params="pokus="+encodeURI(document.getElementById("meno").value);

... pokracovanie kodu ...

xmlhttp.send(params);
}

Tak ale mam este jednu otazku. Totiz..Vsade kde citam nejaky tutorial k Ajaxu, tak je napisane, ze treba mat na zreteli to, ze uzivatel môze mat vypnuty JS. A preto treba mat osetreny script tak, aby sa vykonal aj ked je JS vypnuty. Ale nikde som sa nestretol s nejakou konkretnou ukazkou, resp. s prikladom, kde by to bolo nejako dobre rozpisane. Preto ma zaujima ako napr. osetrit registr. formular. Napr. vyvolanie Ajaxovej funkcie po stlaceni tlacitka (submit) pri zapnutom JS a v pripade vypnuteho JS spracovanie cez PHP? A ten Submit mam riesit nejakou podmienkou? alebo ako na to ?


Offline

Čestný člen
Čestný člen
Nefunguje script pre input formulara

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34
Bydlisko: Brno
Príspevok NapísalOffline : 22.08.2010 14:56

Vytvoris najprv stranku bez Javascriptu, formular sa bude klasicky odosielat. Potom das formularu
Kód:
onsubmit="spracovanie_celeho_odoslania_ajaxom(); return false;"
Tym return false zabezpecis, aby sa formular neodosielal.
Ta praca s Ajaxom sa samozrejme nemusi viazat len na submit formulara.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97
Príspevok Napísal autor témyOffline : 22.08.2010 18:22

Takze ak som to spravne pochopil, tak budem vlastne vytvarat 2x script?? Tzn. V jednom scripte formular. php (v tom kde mam formular) ho spracujem klasicky cez php a potom si este vytvorim druhy script spracuj.php, kde bude spracovany pomocou Ajaxu?? Spravne to chapem?? Cize v podstate to iste, len "vystup" bude vyzerat trocha inac??

A este dalsia otazka. Ako zabezpecit formular pred "podvrhnutim falosneho formulara" v pripade pouzitia Ajaxu?? Totiz pri klasickom PHP pouziti to vyriesim pomocou tokenu. A na zaciatku overim podmienku ci sa tokeny zhoduju. Ale ako overit token z formulara s tokenom v externom scripte(ak token bude pri kazdom reolade stranky iny), ktory bude spracovavat Ajax??


Offline

Čestný člen
Čestný člen
Nefunguje script pre input formulara

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34
Bydlisko: Brno
Príspevok NapísalOffline : 22.08.2010 18:38

A nemozes Ajaxom volat tiez formular.php?
Zabezpecenie bude presne take iste. Teda, neviem ako presne to riesis, ale vsak princip je ten isty pri odoslani formulara aj pri Ajaxe - vytvori sa POST request, ktorym sa odosielaju nejake data, server spracuje PHP skript a vrati nejaky vystup (pri odoslani formulara je to obsah nacitanej stranky, pri Ajaxe responseText).


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97
Príspevok Napísal autor témyOffline : 22.08.2010 19:02

No to by som rad takto riesil..Ale neviem ako presne to zapisat. Teda to "Ajaxove volanie" na ten isty script. Teraz môj script vyzera nejako takto:

formular.php:
Kód:
<script type="text/javascript">
function showHint(str)
{

var params = "meno=" + encodeURI(document.getElementById("meno").value)+
   "&heslo=" + encodeURI(document.getElementById("heslo").value);


if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {

var XMLRes = xmlhttp.responseXML;

        xmlRoot = XMLRes.documentElement; 
   
         menoP = xmlRoot.getElementsByTagName("menoE")[0].firstChild.data;       
         hesloP = xmlRoot.getElementsByTagName("hesloE")[0].firstChild.data;
           
    document.getElementById("menoSprava").innerHTML= "<span class='echoForm'>" + menoP + "</span>";
     
    document.getElementById("hesloSprava").innerHTML= "<span class='echoForm'>" + hesloP + "</span>";

    }
  }
xmlhttp.open("POST","zpracuj.php",true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(params);
}
</script>

<style>

.echoForm {
font-size: 11px; font-weight: bold; color: #dd0000;
}

</style>

<?
   $session_ft=$_SESSION['ft2'];
   $token = md5(rand()*rand());
   $_SESSION['ft2'] = $token;
?>

<h3>Formulár:</h3>
<form action="?site=vyberHodnotu" method="POST" onsubmit="showHint(this.form); return false;">
<input type="hidden" name="ft" value="<?echo $token; ?>" >
<p>
Meno: <input type="text" id="meno"  /> <span id="menoSprava"></span>

</p>

<p>
Heslo: <input type="text" id="heslo"  /> <span id="hesloSprava"></span>

</p>

<p>
<input type="submit" value="Odoslať">

</p>
</form>


zpracuj.php
Kód:
<?php

$menoForm=$_POST["meno"];
$hesloForm=$_POST["heslo"];

// Kontrola Mena

if (strlen($menoForm) < 5)
  {

 $hodnota1="Meno je kratke";
}

elseif (strlen($menoForm) > 15)
  {

 $hodnota1="Meno je dlhe";
}
 else
  {

 $hodnota1="";
}

// Kontrola Hesla

if (strlen($hesloForm) < 5)
  {

 $hodnota2="Heslo je kratke";
}

elseif (strlen($hesloForm) > 15)
  {

 $hodnota2="Heslo je dlhe";
}
 else
  {

 $hodnota2="";
}


 header("Content-Type: text/xml"); 
//vytvorim novy XML 

 $xml = new DOMDocument("1.0","utf-8");   

 $validace = $xml->createElement("validace"); 
 $xml->appendChild($validace); 
 $vysledok = $xml->createElement("vysledok"); 

 //vytvorim element menoE a vložím do něj data 

 $menoE = $xml->createElement("menoE"); 
 $menoEData = $xml->createTextNode($hodnota1); 
 $menoE->appendChild($menoEData); 

 //vytvorim element hesloE a vložím do něj data 

 $hesloE = $xml->createElement("hesloE"); 
 $hesloEData = $xml->createTextNode($hodnota2); 
 $hesloE->appendChild($hesloEData); 
 
 $vysledok->appendChild($menoE); 
  $vysledok->appendChild($hesloE);
 $validace->appendChild($vysledok); 
   
 //uložím XML výstup 

 $vystup= $xml->saveXML(); 
 //zobrazím 

 echo $vystup;       
?>


No a to by som nejako potreboval upravit. Tak aby som to mohol spracovavat aj pri vypnutom JS a zaroven mohol "riesit" aj ten token.. A nejako neviem na to prist.. :(


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97
Príspevok Napísal autor témyOffline : 23.08.2010 11:42

Prosim Vas..ako sa da teda zapista ta URL v
Kód:
xmlhttp.open("POST","zpracuj.php",true);
ak chcem aby mi to odosielalo poziadavku, resp. aby Ajax spracovaval script v tom istom subore ako je formular?? Cize nahradit zpracuj.php na formular.php
Lebo nech skusam cokolvek, vzdy mi to vyhodi tuto hlasku:
Citácia:
Chybná analýza XML: nezhodný tag (nevhodne spojený tag). Očakávalo sa: </link>.
Umiestnenie: http://www.xxxxxx.sk/xxxx?site=formular
Riadok 19, stĺpec 3:

No a v mojom pripade Riadok 19 je tento:
Kód:
if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {


Offline

Čestný člen
Čestný člen
Nefunguje script pre input formulara

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34
Bydlisko: Brno
Príspevok NapísalOffline : 23.08.2010 12:16

Musis zabezpecit, ze ked volas formular.php Ajaxom (napriklad si pridaj parameter ajax=1), nech sa nevypisuje cely obsah stranky, ale len to, co potrebujes.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 23.08.2010 12:17

problem bude vtom ze sa ti vo formular.php generuje html content a ty si pytas xml content cez ajax. mal by si ajaxom nastavit http request tak ze mu parameter "User-Agent:" nastavis na napr "AJAX" a vo formular.php si otestujes ten parameter a ak tam bude "AJAX" tak odpoved vygenerujes ako XML , inak ako HTML


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97
Príspevok Napísal autor témyOffline : 23.08.2010 13:43

coldak nemohol by si mi napisat ako by to malo vyzerat? lebo pozeral som nieco k tomu User-Agent a jedine co som nasiel bolo vlastne zadefinovanie prehliadaca. Nieco take:
Kód:
User-Agent: Mozila/5.0 (Windows;0;Windows NT 5.1;en-US;ru:1.7.6)
alebo toto:
Kód:
requestHeaders: {"User-Agent":"Mozilla 5.0 (Linux; X11)"}

Mam to napisat nejako takto?:
Kód:
User-Agent: Ajax

A kam to mam presne vlozit?? A potom to samotne testovanie kde mam byt vykonane?? Vo funkcii Ajaxu, alebo este pred tym?? :(


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 23.08.2010 14:07

Kód:
xmlhttp.open("POST","zpracuj.php",true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("User-Agent", "AJAX");
xmlhttp.send(params);


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.03.07
Prihlásený: 04.07.14
Príspevky: 344
Témy: 97
Príspevok Napísal autor témyOffline : 23.08.2010 15:38

No tak som to skusal..S tym parametrom co mi poradil Ďuri..Lenze problem je v tom, ze to neviem vyriesot tak, aby som to vsetko (cely ten formular) spracovaval v jednom scripte. Totiz..pokial sa formular spracovava v scripte zpracuj.php:
Kód:
xmlhttp.open("POST","zpracuj.php",true);
, tak to funguje. Ale akonahle upravim header na
Kód:
xmlhttp.open("POST","formular.php",true);
,tak to nefunguje a vypise mi to hlasku:
Citácia:
Warning: Cannot modify header information - headers already sent by (output started at /xxxxx/xxxxxx/www_root/....chybove riadky..

Ako to mam teda zapisat aby mi to spracovavalo vsetko v jednom scripte?? Ako ma vyzerat ta header informacia??
Kód:
xmlhttp.open("POST","Co presne tu mam zapisat?",true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(params);


Odpovedať na tému [ Príspevkov: 14 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. nefunguje script

v JavaScript, VBScript, Ajax

4

449

06.04.2010 18:35

Ďuri Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. script nefunguje v IE

v JavaScript, VBScript, Ajax

12

946

11.10.2009 16:41

neopagan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nefunguje mi script na odosielanie mailu

v PHP, ASP

1

483

15.12.2009 15:56

Snacker Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nefunguje mi script na upload suborov

v PHP, ASP

9

718

22.02.2008 20:44

vl4kn0 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. script nefunguje po pridaní tagu <form>

v JavaScript, VBScript, Ajax

5

526

06.04.2011 16:07

1daemon1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Outlook - script pre nastavovanie účtu pre odosielanie

v JavaScript, VBScript, Ajax

4

562

20.07.2011 13:17

Strimer_SK Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. funkcia pre input v skrytom dive

v JavaScript, VBScript, Ajax

2

380

04.12.2010 12:15

DeeJay3 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. najst najblizsi input pre daným elementom

v JavaScript, VBScript, Ajax

21

1102

12.03.2011 18:40

DeeJay3 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. script pre registraciu

v PHP, ASP

8

563

08.04.2008 12:04

Tominator Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. upload script pre Mobil

v PHP, ASP

3

514

29.07.2011 0:50

Slappy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. python script pre gnuplot a apache

v Perl, Python, Ruby, CGI

0

427

19.12.2014 23:44

zeto750 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zháňam script pre registráciu na webe

v PHP, ASP

2

823

27.09.2009 11:58

Svolo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. JS script pre menenie obrazkov, poradte ako prerobit

v JavaScript, VBScript, Ajax

5

1602

23.08.2008 7:40

B.A.X.O Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Hladam zdatneho PHP/JS/AJAX... kodera pre komunikacny script

v Ponuka práce

1

1037

20.09.2008 18:53

Hack2er Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Port forward pre Vuze nefunguje

v Ostatné programy

3

460

22.07.2012 22:27

nBXXL Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ovládaci panel pre zvuk, nefunguje.

v Audio programy

1

505

02.09.2015 0:03

Bubo2306 Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra