Zdravím, mám dva jednoduché php súbory:
--login.php
<?php
session_start();
if (isset($_POST["send"])) Header("Location:main.php");
echo "<form action='login.php' method='POST'>\n";
echo "<input type='text' name='premenna'>\n";
echo "<input type='hidden' name='send' value='yes'>\n";
echo "<input type='submit' value='Odoslať'>\n";
echo "</form>";
?>
--main.php
<?php
session_start();
if (isset($_POST["premenna"])) echo $_POST["premenna"];
?>
Problém je v tom, že po odoslaní jednoduchého formulára a následnom presmerovaní na main.php sa neprenesie hodnota $_POST["premenna"]. Môžete poradiť, kde robím chybu? Celý jednoduchý príklad som napísal pre riešenie zložitejšej úlohy, ktorú robím na localhoste. Narazil som na tento problém, a nenapadá mi nič, čo robím nesprávne. Treba nastaviť nejaké direktívy týkajúce sa session v php.ini? A ak áno, tu na wz.cz aj tak nič nezmením. Je to onlajn: www.barguzin.wz.cz/session/login.php, stačí len vyplniť nejaký textový reťazec do inputu a odoslať. Ďakujem za rady.
A co kdyby sis obsah té proměnné uložil do session, kam patří? Ještě před voláním funkce header().
Ďakujem, pomohlo :-) Uložil som do $_SESSION[].
Mám však nový problém, a to ako zabezpečiť odovzdanie POST premenných z formulára do obslužného skriptu? Mám tri súbory:
1. index.php je súbor s formulárom - užívateľovi aplikácie je viditeľný
2. login.js je súbor s ajaxom - funkcia xxx()
3. login.php je skript volaný AJAXom
------------------
Fragment index.php:
<form action='POST' name='login'>
<input type='text' name='user' maxlength='25' size='25' class='txt'>
<input type='password' name='pass' maxlength='25' size='25' class='txt'>
<input type='button' value='Prihlásiť' name='send' onClick='xxx();'>
</form>
Odoslanie dát je teda nie submitom, ale javascriptovým tlačidlom.
----------
login.js:
Za pomoci návodu, ktorý som na internete našiel, som vytvoril nasledujúcu funkciu:
function xxx () {
var url="login.php;
var params="";// ?
var xmlhttp;
xmlhttp.open("POST", url, true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", params.length);
xmlhttp.setRequestHeader("Connection", "close");
if (window.XMLHttpRequest) xmlhttp=new XMLHttpRequest();
else xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4)
{
document.getElementById('msg').innerHTML=xmlhttp.responseText;
}
}
xmlhttp.send(params);
}
No a v tomto JavaScriptovom súbore mám otázku týkajúcu sa riadku s otáznikmi, pôvodne tam bolo v ukážke na internete: var params="lorem=ipsum&name=binny"; Ja odosielam zo svojho formulára hodnotu user a pass. Kým v tejto ukážke http://www.openjs.com/articles/ajax_xmlhttp_using_post.php je parameter odoslaný síce metódou POST, ale v premennej PARAMS zadaný priamo v JavaScripte, ja potrebujem získať hodnotu POST premenných z formulára index.php , ako $_POST["user"] a $_POST["pass"], teda ako to zakomponovať do toho JavaScriptu (riadok s otáznikmi)? V ukážkovom príklade sa totiž neriešilo prevzatie POST premenných z formulára, ukážka len demonštrovala použitie metódy POST v Ajaxe.
Doporucuji davat do formulare vzdy submit tlacitko. Prohlizece v tomto maji pak spoustu bugu a jeden napr poouzije nejblizsi input type=botton za odesilaci, druhy provadi autoodesilani formulare po zmacknuti enter klavesy, atd.
Nasledne se blokuje odeslani akci <form onsubmit=...>
K otazce
Najdi si priklady na javascript jquery formulare.
Ale samozrejme to muzes udelat rucne, pripis tam na zacatek kodu toto pro zjisteni hodnoty input policka. a dal uz si s tim poradis, asi.
var f = document['login'];
alert(f.user.value);
alert(f.pass.value);
alert(f.send.value);
pôvodne tam bolo v ukážke na internete: var params="lorem=ipsum&name=binny";
Takze musis vytvorit stejny retezec jako oni?
Muzes zkusit upravit toto.
http://peter-mlich.wz.cz/web/js/prjpw/ajax.html