Ajax, spracovanie scriptu v jednom subore

Programovacie jazyky, rady, poradňa...
newboy1
Novice
Novice
Príspevky: 5
Registrovaný: 27 aug 2010, 13:02

Ajax, spracovanie scriptu v jednom subore

Príspevok od používateľa newboy1 »

Nazdarek. Mam takyto script jednoduchy script:

formular.php:

Kód: Vybrať všetko

<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","spracuj.php",true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(params);
}
</script>

<h3>Registracia:</h3>
<form action="?site=spracuj" method="POST" onsubmit="showHint(this.form); return false;"> 
Meno: <input type="text" id="meno"  /> <span id="menoSprava"></span>
Heslo: <input type="text" id="heslo"  /> <span id="hesloSprava"></span>
<input type="submit" value="Odoslať">
</form>
Takze script sa mi spracuje vlastne v subore spracuj.php (klasicka validacia formulara cez php). No a ja by som potreboval vediet, ako to vyriesit tak, aby sa mi ta validacia vykonala v tom istom scripte /formular.php/ ako je formular. Tzn. ze vsetko budem mat v jednom subore. Lenze neviem ako ma vyzerat ten Ajaxovy zapis. Ta URL, alebo co presne by tam malo byt. Nejake podmienky, alebo ako by ta URL mala vyzerat .
Dakujem
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Ajax, spracovanie scriptu v jednom subore

Príspevok od používateľa audiotrack »

to nevieme ani my, keď nevieme čo je obsahom spracuj.php. Ale vo všeobecnosti by malo stačiť dať celý obsah toho súboru na začiatok tohto súboru, a nejak oddeliť podmienkou aby sa to nevykonávalo vždy, ale len keď sa tam pristupuje cez ten ajaxový požiadavok
newboy1
Novice
Novice
Príspevky: 5
Registrovaný: 27 aug 2010, 13:02

Re: Ajax, spracovanie scriptu v jednom subore

Príspevok od používateľa newboy1 »

No ja som to skusal s tou podmienkou..lenze nejako mi to nefungovalo..a neviem preco..Mozo ze som zle zapisoval tu podmienku..Nemohol by si mi to ukazat (aspon nejako jednoducho-od coho by som sa mohol odrazit), ako by zapis tej podmienky mohol vyzerat?? V subore spracuj.php mam toto (zjednodusene):
spracuj.php

Kód: Vybrať všetko

<?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="OK"; 
}

// Kontrola Hesla

if (strlen($hesloForm) < 5)
  {
 $hodnota2="Heslo je kratke";
}
elseif (strlen($hesloForm) > 15)
  {
 $hodnota2="Heslo je dlhe"; 
}
 else
  {
 $hodnota2="OK"; 
}

 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 data  

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

 //vytvorim element hesloE a vložím 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;	 	
?>
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Ajax, spracovanie scriptu v jednom subore

Príspevok od používateľa audiotrack »

Kód: Vybrať všetko

<?php
if(isset($_GET['ajax'])){
$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="OK";
}

// Kontrola Hesla

if (strlen($hesloForm) < 5)
  {
$hodnota2="Heslo je kratke";
}
elseif (strlen($hesloForm) > 15)
  {
$hodnota2="Heslo je dlhe";
}
else
  {
$hodnota2="OK";
}

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 data 

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

//vytvorim element hesloE a vložím 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;   
} else {    
?>

<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","spracuj.php?ajax=true",true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(params);
}
</script>

<h3>Registracia:</h3>
<form action="?site=spracuj" method="POST" onsubmit="showHint(this.form); return false;">
Meno: <input type="text" id="meno"  /> <span id="menoSprava"></span>
Heslo: <input type="text" id="heslo"  /> <span id="hesloSprava"></span>
<input type="submit" value="Odoslať">
</form>
<?php } ?>
newboy1
Novice
Novice
Príspevky: 5
Registrovaný: 27 aug 2010, 13:02

Re: Ajax, spracovanie scriptu v jednom subore

Príspevok od používateľa newboy1 »

No skusal som to..lenze nefunguje to.. :nono: Nevyhodi mi to ziadny vysledok..Ani pri zapnutom ani pri vypnutom Javascripte..
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Ajax, spracovanie scriptu v jednom subore

Príspevok od používateľa audiotrack »

to už je chyba toho tvojho spracuj.php. Pýtal si sa ako sklbiť ten ajax do jedného súboru. Ty tam ale máš problém, že tie chyby (heslo je krátke, ok..) nevypisuješ ale dávaš do premenných ($hodnota1, ..) ktoré tiež nikde nevypíšeš (a bolo by dobre ich dať potom ešte do podmienky, nech sa to xml nevytvára ak nie súv poriadku)
newboy1
Novice
Novice
Príspevky: 5
Registrovaný: 27 aug 2010, 13:02

Re: Ajax, spracovanie scriptu v jednom subore

Príspevok od používateľa newboy1 »

Dobre..takze to funguje pre Ajax.. problem je, ze to nefunguje pre vypnuty JS. Totiz..Nech do toho scriptu napisem kdekolvek

Kód: Vybrať všetko

echo "Vypis hlasku: $hodnota1";
Tak mi to aj tak nevypise pri vypnutom JS nic.. A navyse mi prestane fungovat aj ak je JS zapnuty.. A uz som z toho fakt zufaly :cry:
Ja sa potrebujem dopracovat k tomu aby mi to v pripade vypnuteho JS spracovalo ako klasicke php aj z chybovymi hlaskami, lenze ono to nejde.. A ja neviem prist na chybu.. :nono: A este jedna otazocka.. Preco:

Kód: Vybrať všetko

if(isset($_GET['ajax']))
a nie

Kód: Vybrať všetko

if(isset($_POST['ajax']))
Ak je formular odosielany cez POST a aj funkcia je cez POST??
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Ajax, spracovanie scriptu v jednom subore

Príspevok od používateľa audiotrack »

1) bez javascriptu ti to pochopiteľne nepôjde, ajax je predsa javascript. Ak chceš aby to išlo ajaxom, musí byť zapnutý javascript. Inak to nerob ajaxom (rozhodnúť či je zapnutý alebo nie, sa dá aj programovo, a podľa toho vygenerovať stránku tak aby bola/nebol cez ajax, len neviem či by si to zvládol)

2) lebo do tej url som pridal ?ajax=true aby som vedel či sa na tú stránku ide priamo, alebo sa volala tým ajaxovým requestom. Ak si dáš nejaký hidden input, tak to bude cez post. Sprav si to ako chceš, ja som ti iba ukazoval ako to spojiť
newboy1
Novice
Novice
Príspevky: 5
Registrovaný: 27 aug 2010, 13:02

Re: Ajax, spracovanie scriptu v jednom subore

Príspevok od používateľa newboy1 »

audiotrack dik za rady.. Ja sa Ajax este len ucim. Pytam sa na tieto veci z 3 dôvodov.
1. Vsade kde citam nejaky tutorial, tak narazim na upozornenie typu: treba mat na zreteli, ze uzivatel môze mat vypnuty JS a preto treba programovat tak, aby sa script spracoval aj pri vypnutom JS.
Ak by som to teda riesil stylom, ze formular by som nechal v index.php a samotne spracovanie scriptu napr. v subore spracuj.php, tak to az taky problem nieje.. Lenze:
2. Ako zabezpecit stranku pred podvrhnutim falosneho formulara?..Najschodnejsia cesta je token vo formulari. Ak by som mal vsetko v jednom subore tak je to ovela jednoduchsie. No a potom chybove hlasenia:
3. Ak je formular spracovany v "inom" subore tak chybove hlasenia sa vlastne zobrazia ale uz bez samotneho formulara..A to prave nechcem.. ak chcem zachovat nejaky "komfort" stranky..Mozno sa to da nejako riesit, ale Ja zial zatial taketo riesenie nepoznam.. :nono: Mozno sa ho casom naucim..
No ale aj tak mi tie rady pomohli, takze este raz dik..
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Ajax, spracovanie scriptu v jednom subore

Príspevok od používateľa audiotrack »

a čo tak funkcia include? (vloženie časti kodu z jedného súboru do iného)
Napísať odpoveď