PDA

Prikaži potpunu verziju : PHP, jedno pitanje...


Cortex
16.8.2008, 16:10
Siguran sam da ovo spada u najosnovnije stvari, ali rekoh ipak da pitam, ko pita ne skita shto kazhe nash narod. Dakle, zbog chega mi dole navedeni kod ne radi? Napominjem da je ovo primer iz jedne knjige u kojoj jel, bi sve trebalo da radi.

<html>
<head>
<title>Primer 3 :Prikaz i obrada forme unutar jednog dokumenta</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>
<body>
<h2>Primer 3 :Prikaz i obrada forme unutar jednog dokumenta</h2>
<hr>
<?
if ( ! $_POST["submituj"] ){
?>
<form name="primer3" method="post" action="<?=$PHP_SELF?>">
Unesi svoje ime :
<input name="ime" type="text" >
<br>
<input name="submituj" type="submit" value="Pošalji">
</form>
<?
} else {
echo "Pozdrav " . $_POST["ime"];
}
?>
</body>
</html>

Poruka koju dobijam je ovakva:

Notice: Undefined index: submituj in c:\program files\easyphp1-8\www\primeri ajax & php\php skripta\primerf3.php on line 10

a kad kliknem na dugme:

You don't have permission to access /Primeri AJAX & PHP/PHP skripta/<br /><b>Notice</b>: Undefined variable: PHP_SELF in <b>c:\program files\easyphp1-8\www\primeri ajax & php\php skripta\primerf3.php</b> on line <b>12</b><br /> on this server.

Koristim EasyPHP paket, ako je to od pomoci.

Hvala unapred na odgovoru/ima, i izvinjavam se ukoliko je ovo moglo da se nadje pretragom na ovom forumu koju ja, lenjivac, nisam iskoristio. :)

iMa_NeKo_PljUgU
16.8.2008, 16:54
Sam kod je ok, ali kod mene se javlja greska zato sto je ovo pisao neki retard koga mrzi da napise <?php

Moze i na njegov nacin ali nije svuda podrzan takav tag tj. treba da se ukljuci "short open tags"...

P.S. Probaj i da zamenis $PHP_SELF sa $_SERVER['PHP_SELF']

Cortex
16.8.2008, 18:48
Hvala druzhe, sad radi. Znao sam da je u pitanju neka glupost :)

A kako da ukljuchim te short tagove? Verovatno neshto u php.ini...?

iMa_NeKo_PljUgU
16.8.2008, 19:19
Jeste u php.ini fajlu se nalazi sledeca linija


short_open_tag = Off


Ti je zameni sa


short_open_tag = On

holodoc
16.8.2008, 20:54
Nemoj da se igraš uključivanjem "short tagova" u php.ini-ju čisto da bi ti mogao da ih koristiš u svom kodu jer je jedino oblik <?php ?> podržan na svim platformama. Prepravi kod da ti koristi klasične "duge" tagove.

Druga stvar... Nikada nemoj da koristiš čist $_SERVER['PHP_SELF'] kao što si to uradio u sledećoj liniji:
<form name="primer3" method="post" action="<?=$_SERVER['PHP_SELF']?>">zato što je ta linija široko otvorena za XSS napade!

Ukratko... Uvek koristi sledeći oblik kada pozivaš pomenutu liniju:
<form name="primer3" method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']) ?>">a detalji zbog čega je ovo XSS exploit evo recimo ovde (http://blog.phpdoc.info/archives/13-guid.html).

Cortex
17.8.2008, 16:45
Au choveche, veze nisam imao! :eek:

Hvala puno i jednom i drugom momci! :)

Cortex
25.8.2008, 19:31
Ljudi evo neko vreme nisam radio PHP i sad sam ponovo uzeo i odmah se zakucao i smorio, zashto ja nemam srece sa ovim jezikom???

Dakle, nishta zhivo nece da radi, koliko sam ja shvatio input kontrole kada im dodelim ime bivaju pod istim imenom(tj. njihov sadrzhaj) dostupne u php fajlu gde bivaju uslovno resheno "prenesene" ali to kod mene nece da radi.

Recimo:

<form method=post action="PROBA.php">
<input name="Unos" type=text>
<input type=submit>
</form>

pa u PROBA.php samo stavih echo "$Unos"; i nece da radi. Koji mogu biti uzroci ovoga, stvarno ne shvatam? Nadam se da nije neshto ochigledno a krajnje glupo(jer ima tako malo koda koji ne radi) a shto ja konstantno ne primecujem... :D

E da, dobijam undefined error za promenljivu Unos... ne razumem gde to treba da je definishem.

Hvala unapred!

PeTkO
25.8.2008, 19:51
Pa kako ocekujes da ti ispise php nesto sto nije ni preuzeo iz html-a :)

Moras pre echo da napises $Unos = $_POST['Unos']; :D

Kad to napises, e onda mozes ocekivati da ti ispise ono sto si uneo u input field

holodoc
25.8.2008, 20:31
Pa kako ocekujes da ti ispise php nesto sto nije ni preuzeo iz html-a :)

Moras pre echo da napises $Unos = $_POST['Unos']; :D

Kad to napises, e onda mozes ocekivati da ti ispise ono sto si uneo u input field
A otkud znaš da ne može da napiše
echo $Unos;u kodu? :)
Ako su globalne promenjljive uključene možeš da koristiš promenjljive pod istim imenom kako su navedene u HTML formi jer se nakon slanja stranice u globalnom scope-u prave kopije iz $_POST superniza. Situacija je drugačija ako je register_globals isključen i tada može da se pristupi samo korišćenjem $_POST ili $_REQUEST superpromenjljivih.

BTW, ova greška koja se javlja je zbog toga što je nivo prijavljivanja grešaka podignut na najviši nivo, E_ALL iliti podešen da prijavljuje sve poruke, od kritičnih grešaka do napomena. U ovom slučaju očigledno je da ipak moraš da koristiš $_POST['Unos'] u upitu ali da bi izbegao da ti se kasnije pojavljuju ova greška svaki put kada hoćeš da koristiš promenjljivu koju prethodno nisi delarisao i inicijalizovao na početku svojih skriptova možeš da staviš sledeći red
error_reporting(E_ALL ^ E_NOTICE);

Cortex
25.8.2008, 21:26
Ok ljudi hvala vam puno, a da bi koristio ovaj skraceni "nachin pisanja" jel samo treba da otvorim php.ini u Notepad-u na primer i da promenim ono u vezi global variables na ON?

:)

holodoc
25.8.2008, 21:57
Ok ljudi hvala vam puno, a da bi koristio ovaj skraceni "nachin pisanja" jel samo treba da otvorim php.ini u Notepad-u na primer i da promenim ono u vezi global variables na ON?

:)
Nemoj da se navikavaš na nešto što se smatra jednom od najvećih koncepcijskih grešaka PHP-a ikada napravljenih. register_globals i magic_quotes su dve stvari koje (hvala bogu) od verzije 6 PHP-a više ne postoje. Navikni se da svoje podatke prihvataš sa mesta odakle i očekuješ da ih primiš i da ih šalješ tamo gde se očekuje da ih šalješ. Zbog toga koristi isključivo superpromenjljive tipa $_GET, $_POST, $_SESSION itd.

Ako si baš rešio da potpišeš svoj PHP testament već na samom početku onda da... Treba samo da promeniš register_globals stavku da ima vrednost on.

Cortex
26.8.2008, 0:22
Ok, shvatam, i poslushacu tvoj savet, mada nije kao da nameravam da radim neke bankarske aplikacije :D , ali ko zna, u svakom sluchaju treba krenuti od zdravih osnova.

Hvala josh jednom na objashnjenju i savetu :)

Cortex
26.8.2008, 15:04
O moj Bozhe, ni sa chim do sad nisam imao ovoliko stalnih zakucavanja u uchenju kao sa ovim PHP-om! :) Dakle,

imamo jednu skriptu(sadrzhaj samo body tag-a):

<?php

echo "<FORM METHOD=POST ACTION='exam2.php'>";
$Student=array("Albert Einstein","Ivan The Terrible","Napoleon","Simon Bolivar","Isaac Newton");

while(list(,$Name)=each($Student)){

echo "What grade did $Name get in Math?";
echo"<BR><BR>";
echo "<SELECT NAME='Math[]'>
<OPTION>Grade A</OPTION>
<OPTION>Grade B</OPTION>
<OPTION>Grade C</OPTION>
<OPTION>Grade D</OPTION>
<OPTION>Grade E</OPTION>
</SELECT>";
echo"<BR><BR>";
echo "<INPUT TYPE=HIDDEN NAME='Student[]' VALUE='$Name'>";

}

echo "<INPUT TYPE=SUBMIT>";
echo "</FORM>";

?>

i drugu(exam2.php):

In Math the grades were in order:
<br>
<?php

$Math=$_POST('Math[]');
$Student=$_POST('Student[]');

while(list($Index,$Value)=each($Math)){

$GradeStudent[]=$Math[$Index].$Student[$Index];

}

asort($GradeStudent);

while(list($Index,$Value)=each($GradeStudent)){

echo "<br>$Student[$Index] - $Math[$Index]";

}

?>

...

U knjizi iz koje radim kazhu da to treba ovako, bez onog boldovanog dela. E sad ja sam prihvatio holodoc-ove iskusne i struchne savete i ubacio ovaj boldovani deo(a pretpostavljam da je netachan iako sam pored probao i sve ostale kombinacije) i dobijam sledece kao rezultat:

In Math the grades were in order:

Notice: Array to string conversion in c:\program files\easyphp1-8\www\primeri ajax & php\php4 knjiga\exam2.php on line 9

Fatal error: Call to undefined function: array() in c:\program files\easyphp1-8\www\primeri ajax & php\php4 knjiga\exam2.php on line 9

Ne razumem gde to dolazi do array to string konverzije? Mislim, razumem ali zashto, kad u tom trenutku(u drugom skriptu jel?) se josh uvek ne znam kog je tipa $Math?

Shta da vam kazhem, sem HVALA! :D

PDarko
27.8.2008, 3:06
$_POST nije funkcija već je niz
$Math=$_POST('Math[]');
$Student=$_POST('Student[]');
treba da zameniš sa
$Math=$_POST['Math'];
$Student=$_POST['Student'];

Cortex
27.8.2008, 11:26
Hvala, prosto ne mogu da verujem kakvu sam debilnu greshku napravio... :paranoia:


:n_klanja:

Cortex
30.8.2008, 14:51
E ljudi stvarno cu poludeti, ovaj PHP bash nije za mene, trudim se, a on je tako losh prema meni... :D

Dakle evo novog problema:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type=text/javascript>

function AJAXHandler()
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
//document.getElementById("porukaOdServera").value=xmlHttp.responseText;
document.write(xmlHttp.responseText);
}
}

xmlHttp.open("GET","ajaxLogin.php?param1="+document.getElementById("param1").value+"&param2="+document.getElementById("param2").value+"&sid="+Math.random(),true);
xmlHttp.send(null);

}

</script>
</head>
<body>
<br>
<br>
<br>
<br>
<center><h2>Molimo vas unesite svoj username i password...</h2></center>
<hr>
<br>
<br>
<form name="MyForm">
<center>Username: <input type=text name="param1" id="param1" maxlength=50 onkeyup="AJAXHandler();"><center><br>
<center>Password: <input type=password name="param2" id="param2" maxlength=50 onkeyup="AJAXHandler();"><center><br>
<center><input type=button name="Idemo!" value="Idemo!" align=baseline></center>
</form>
<br><br>
<center><input type=text id="porukaOdServera"><center>
</body>
</html>

Ovo je prost fajl koji treba da implementira jednostavnu AJAX funkcionalnost ali ja nikako ponovo ne mogu da poshaljem vrednosti u PHP koji izgleda ovako:

<?php

header("Cache-Control: no-cache, must-revalidate");
// Date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

//error_reporting(E_ALL ^ E_NOTICE);

function proveriPodatke($param1,$param2){

if($param2=="cortex"){

return "Tachna shifra.";

}else{

return "Netachna shifra!";

}

}

$p1=$_GET['$param1'];
$p2=$_GET['$param2'];

$poruka=proveriPodatke($p1,$p2);

echo "$poruka";

?>

Molim vas pomagajte, i znam da je ovaj kod jadan i neprofesionalan ali bar nek proradi ono shto hocu, a to je da se shifra proverava dok neko kuca istu, nebitno koliko je to pametno dobro i sl. Samo nek proradi.

Hvala puno, ako neko mozhe nek odgovori shto pre, jer mi treba za ispit.

iMa_NeKo_PljUgU
30.8.2008, 15:40
Evo ti ovako... :)

23863

Cortex
30.8.2008, 15:43
Jao bre samo shto sam doshao da obrishem post jer je u medjuvremenu proradilo(naravno ponovo se radilo o debilnoj greshci tipa staviop sam "$" tamo gde ne treba :D )ali eto ti vec odgovorio. Hvala puno anyway! :)

I mnogo ti je cool lokacija, ternarni operatori su keva. :)

iMa_NeKo_PljUgU
30.8.2008, 15:46
Jao bre samo shto sam doshao da obrishem post jer je u medjuvremenu proradilo(naravno ponovo se radilo o debilnoj greshci tipa staviop sam "$" tamo gde ne treba :D )ali eto ti vec odgovorio. Hvala puno anyway! :)

Ma to sam odmah uočio, nego sam malo preradio da sad proverava i govori da li ti je tačan i username i password, zavisno od toga u kojem polju kucaš:)

I mnogo ti je cool lokacija, ternarni operatori su keva. :)
Thanks...:D

Cortex
30.8.2008, 21:06
Da daaaaaa...evo mene opet jachi (gluplji) nego ikad sa novim bezumnim pitanjem za chika P(epe)ljugu :D

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>

<script type=text/javascript>

var i;
var t;

function theFinalTransition(){

window.location.replace("indexPRVA.php");

}

function prebaci(){

clearInterval(i);
theFinalTransition();

}

function ispisuj(){

document.writeln("...");

}

</script>

</head>
<body>

<center>Dobrodoshli!</center>
<br>
<center>Upravo bivate prebacheni na nashu glavnu stranicu...</center>

<script type=text/javascript>

t=setTimeout("prebaci()",2000);
i=setInterval("ispisuj()",300);

</script>

</body>
</html>

Zashto ovo nece da radi? Znachi kao fora je da se ispisuju tri tachke na svakih pola sekunde a da to ukupno traje 2 sekunde kada se izvrshava navigacija na neku drugu stranu.

Hvala :D

iMa_NeKo_PljUgU
30.8.2008, 22:41
Ja sam uradio ovako... :D

Sa tačkama 23868

Sa slikom 23869

Cortex
31.8.2008, 2:13
E stvarno si kralj, hvala ti puno! :)

Aaaa... kazhi mi shta je bre ovo:

<span id="loading"></span>

i shto si bash u ovo "metao" sliku? :D

Neeeeego...imam ja josh pitanja :D

Kako da prebacim neku promenljivu sa strane na stranu? Znachi imam onu stranu login.htm i tu se dogadjaju one AJAX stvari i sl. ali kako da prenesem username sad na ovu stranu sa redirekcijom pa posle sa nje dalje na index.php(ili kako god, na stranu koja treba da bude prva i glavna tog sajta). A poJenta je kao da se na toj glavnoj strani pojavi alert "Dobrodoshli "+imeTogPosetiocaKojeJeVecUneoTamoNaLoginStrani :D

Mislim, mozhe preko cookie-a ali ne bih to, siguran sam da mozhe i drugachije. E sad, chitao sam malo o sesijama i tim stvarima i probao neshto i to ne ide. Naravno :D Eeeee, solidno programiram u Javi i C#-u i svashta drugo sam pomalo uchio ali brate ovaj PHP me ubi koliko mi je nekako nelogichan jezik. Totalno imam drugachiji mindset... ma who cares, kako da odradim ovo?

Hvala druzhe(pretpostavljam da cesh ponovo ti odgovoriti :) ), znachi mi ovo, inache bih se nervirao i lupao glavu...

:)

iMa_NeKo_PljUgU
31.8.2008, 13:17
E stvarno si kralj, hvala ti puno! :)

Aaaa... kazhi mi shta je bre ovo:

<span id="loading"></span>

i shto si bash u ovo "metao" sliku? :D

Tu sam se zeznuo, moglo je i direktno da se ispise HTML-om, a ne javascriptom...:D

Neeeeego...imam ja josh pitanja :D

Kako da prebacim neku promenljivu sa strane na stranu? Znachi imam onu stranu login.htm i tu se dogadjaju one AJAX stvari i sl. ali kako da prenesem username sad na ovu stranu sa redirekcijom pa posle sa nje dalje na index.php(ili kako god, na stranu koja treba da bude prva i glavna tog sajta). A poJenta je kao da se na toj glavnoj strani pojavi alert "Dobrodoshli "+imeTogPosetiocaKojeJeVecUneoTamoNaLoginStrani :D

Mislim, mozhe preko cookie-a ali ne bih to, siguran sam da mozhe i drugachije. E sad, chitao sam malo o sesijama i tim stvarima i probao neshto i to ne ide. Naravno :D Eeeee, solidno programiram u Javi i C#-u i svashta drugo sam pomalo uchio ali brate ovaj PHP me ubi koliko mi je nekako nelogichan jezik. Totalno imam drugachiji mindset... ma who cares, kako da odradim ovo?

Hvala druzhe(pretpostavljam da cesh ponovo ti odgovoriti :) ), znachi mi ovo, inache bih se nervirao i lupao glavu...

:)

Evo ti opet uradjeno i iskomentarisano :D pa pitaj sta ti nije jasno... inace da takve stvari se obicno prebacuju sa sesijom... 23879

Inace ovo ti je najprostija verzija busna kao sito ali radi...:D

Cortex
31.8.2008, 14:55
Hvala druzhe, how can I ever repay you grand master? :)

Cortex
31.8.2008, 18:13
Znaaaaaaam, oduzhicu se tako shto cu ti postaviti josh pitanja! :D

Dakle, evo u attachment-u je ono kako sam ja reshio, krajnje bedno, ali je proradilo, veze nemam kako :D Prokomentarishi molim te...

Ona linija header("Location: indexPRVA.php"); mi je radila i onda odjednom vishe nije htela da radi pa sam ubacio window.location.replace() funkciju. Koja je razlika izmedju nje i header nachina prelaza? Pretpostavljam da na ovaj drugi nachin mozhesh da napishesh u fazonu header("Location: indexPRVA.php?param=14"); i tako poshaljesh neshto? Jel mozhe to?

E, hvala ti puno stvarno! :)