Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: plangy 12 Ledna 2010, 21:11:20
-
Dobrý den,
co se týče PHP, tak jsem úplný začátečník. Podle návodu na wiki jsem zprovoznil apache a localhost běží. Chtěl jsem si cvičně vytvořit formulář podle tohoto návodu:
http://www.jakpsatweb.cz/php/moznosti-php.html
formular:
<body>
<form method="GET" action="zpracovani_formulare1.php" >
<p>Zadejte oblíbené jídlo:
<input type="text" name="jidlo" size="20">
<input type="submit" value="Odeslat"></p>
</form>
</body>
zpracovani formulare:
<body>
<H1>Zpracování formuláře</h1>
<p>Výborně! Zajdeme si někdy na čaj a k tomu si dáme
<? echo $jidlo ?>!
</body>
(ve svém souboru mám hlavičky, tak se nelekejte :) )
Bohužel formulář se zpracuje tak, že echo nenapíše to, co jsem zadal do formuláře. Nějak to nechápu. Nevíte v čem je problém nebo kde jsem udělal chybu? Další příklady, které jsem opsal z chytrých knížek bohužel také nefungují, tak bych si tipnul, že problém nutně nemusí být mezi monitorem a židlí. Všem děkuji za případné odpovědi.
-
to echo prepis na echo $_GET["jidlo"]
-
Super, úžo, funguje to. Můžu se ještě zeptat jakto? Proč všude v návodech nacházím tu "špatnou" variantu?
-
Problém je v nastavení Apache. Pokud je direktiva register_globals nastavena na off (což v defaultním nastavení je), tj nemáš povoleny globální proměnné, tak by ti echo v tomto případě nemělo vypsat nic.
Tato direktiva je v defaultu z bezpečnostních důvodů vypnutá, doporučuji ji tak ponechat. pokud bys skript napsal takto:
<body>
<H1>Zpracování formuláře</h1>
<p>Výborně! Zajdeme si někdy na čaj a k tomu si dáme
<? echo $_GET['jidlo'] ?>!
</body>
tak by ti to už mělo vypsat, co jsi zadal do formuláře.
Takže rekapitulace. Pokud data z formuláře odesíláš metodou GET, tak k hodnotě textového políčka <input type='text' name='jmeno_textoveho_pole'> se dostaneš v PHP přes proměnnou (resp přes pole) $_GET['jmeno_textoveho_pole'];
a podobně pokud odesíláš data metodou POST, tak se k datům ve skriptu dostaneš přes proměnnou (resp přes pole) $_POST['jmeno_textoveho_pole'];
Aktuální nastavení Apache uvidíš tak, že napíšeš skript:
<?php
echo phpinfo ();
?>
a spustíš ho.
Direktiva register_globals se dá povolit v konfiguráku php v /etc/php5/apache2/php.ini, ale nedoporučuji to povolovat, za prvé z bezpečnostního hlediska a za druhé hodně hostingů může mít tuto direktivu vypnutou, tak aby i na nich tvoje skripty bez úpravy běžely.
Edit: Ufaak byl rychlejší :)
-
Oběma moc děkuju za cenné rady :)