Diskuze: Vraceni hodnoty souctu v php scriptu zpet do formulare
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 29 zpráv z 29.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
PHP sa iba ucim aktulane, ale myslim si, ze do pole 3 by ti to nehodilo, nakolko pole aspon v tej prvej casti zaciatocnickej sa pouziva na vstup od uzivatela. Kedze vysledok nie je vstup od uzivatela, nebude ti ho moct zobrazit v 3 bunke.
Na rychlo splácané řešení... Určitě tu někdo přijde i s něčím lepším. Jednodušší by bylo, kdyby se ti ten součet provedl na té samé stránce a ne v dalším souboru, tam nastává problém s tím že musíš ten součet nějak předat zpátky...
Nuže tady se ti to pošle do soucet.php, kde se to sečte a uloží do tzv. superglobální proměnné, do které mají přístup všechny soubory. Pak se to pomocí funkce header('location) přesměruje zpět. Jakmile se vypíše/nevypíše hodnota do formuláře, session se zničí pomocí session_destroy, takže při příštím refreshi (f5) už bude smazaný.
<?php
session_start();
?>
<form method="post" action="soucet.php">
Cislo 1: <input type="text" name="cislo1"><br/>
Cislo 2: <input type="text" name="cislo2"><br/><br/>
<input type="submit"><br/><br/>
Soucet: <input type="text" name="soucet" <?php if(isset($_SESSION['soucet'])){echo "value='{$_SESSION['soucet']}'";}else{echo "";} ?><br/>
</form>
<?php
session_destroy();
?>
<?php
session_start();
$soucet = $_POST['cislo1'] + $_POST['cislo2'];
$_SESSION['soucet'] = $soucet;
echo $soucet;
header('location: form.php');
?>
No ok tak sa to da Len je to na mna zatial vela
Ahoj, musis si tu formuli na soucet dat do souboru s formularem a zrusit mu parametr action="soucet.php". Uplne na zacatku udelas test hodnot v $_POST, kdyz nebudou hodnoty cislo, tak zobrazis formular a kdyz bude, tak spocitas soucet a vytisknes misto formulare.
Můžeš použít něco takovýho
<?php
$soucet = '';
if (!empty($_POST['secti'])) {
$soucet = $_POST['cislo1'] + $_POST['cislo2'];
}
?>
<form method="post" action="<?=$_SERVER['QUERY_STRING'];?>">
Cislo 1: <input type="text" name="cislo1"><br/>
Cislo 2: <input type="text" name="cislo2"><br/><br/>
<input name="secti" type="submit"><br/><br/>
Soucet: <input type="text" name="soucet" value="<?=$soucet;?>"><br/>
</form>
V php jsem uplny zacatecnik, proto pro vas treba tak jednoduchy dotaz, ale...
Chtel jsem mit ten formular primo na html strance, pokud bych ho prendal cely do
php, tak nevim, jak bych ho pak ostyloval a umistil do stranky (na me moc
slozite, zatim), proto me zajimalo, jak ten vystup dostat zpet do formulare v
html...
To JF: Nepochopil jsem ted,co mam kde upravit, muzes to poslat v kodu ?
myslis tim cely ten kod v php souboru, nebo ta cast s formularem do html?
Uz jsem to prozkousel - funguje ale tak, ze to pocita na nove strance a opusti to puvodni formular (nevraci to vysledek zpatky)...
Pokud ten můj kód hodíš celý do jednoho souboru, zůstane to na formuláři
Ahoj, asi nerozumim, at delam co delam, opousti mi to puvodni formular a vytvori to v podstate novy ze souboru php, viz priloha form.jpg
Ahoj, zkousim, googlim, ale stejne nerozumim, jak bych mel tu tvoji variantu zapsat, mohl bys mi ten muj vzorek uplne nahore upravit abych to pochopil?
No jednak budeš mít asi špatně includované šablony, proto se ti formulář potom zobrazí bez grafického rozhraní. Takže u takového kódu
<link rel="stylesheet" type="text/css" href="sablona.css>
přidej na začátek cesty k CSS lomítko, tedy:
<link rel="stylesheet" type="text/css" href="/sablona.css>
Jinak, udělej mě ty screeny i s URL odkazem. Řádek kódu
<form method="post" action="<?=$_SERVER['QUERY_STRING'];?>">
by měl zajistit, že zůstaneš na stejné stránce
Ahoj, diky, funguje, jen to je tak, ze takto je ten formular soucasti php
stranky. Muj zamer byl mit formular na hlavni html strance (index.html); tam ho
uzivatel vyplni, data se odeslou do php scriptu a jeho vysledek se vrati zpet do
toho formulare na strance index.html.
Uz mi to castecne jde, jen jsem to musel napsat v javascripu. Myslel jsem, ze to
pres php bude snadne, ale asi neni... To ostylovani jsem jeste ani neresil, jde mi zatim jen o princip,
FR
Jestli je stránka s koncovkou *.html, nebo *.php je konečnému uživateli
šumák, protože to ve většině případů stejně ani nevidí. Spousta
běžných uživatelů ani neví, co která koncovka znamená a jaký je mezi
tím rozdíl, protože to jednoduše k životu vědět nepotřebují. Pro ně je
důležité, co a jak se zobrazí na stránce a ne jakou má stránka
koncovku...
V podstatě nevidím důvod, proč bys měl do PHPčka ještě montovat
statické html stránky, když to můžeš mít pohodlně celé v PHP...
Aha, to me vlastne vubec nenapadlo.... Jak to pak funguje kdyz uzivatel zada nazev stranky do prohlizece, musi tam byt index.html, nebo nemusi a automaticky se nacte treba index.php ?
Když lezeš na seznam, taky nepíšeš seznam.cz/index.html či co to tam je, ale píšeš jen seznam.cz... Ten "index" nebo "default" je jen název výchozí stránky na serveru... Dneska na těch stránkách v podstatě ty koncovky souborů ve většině případů vidět nejsou, je tam jen název stránky bez koncovky...
Jasne, s tim uz si nejak poradim, diky vsem, FR.
Není lepší poslat ten výsledek přes $_GET? něco jako
<form method="post" action="soucet.php">
Cislo 1: <input type="text" name="cislo1"><br/>
Cislo 2: <input type="text" name="cislo2"><br/><br/>
<input type="submit"><br/><br/>
Soucet: <input type="text" name="soucet" value="<?php if(isset($_GET['soucet'])){ echo $_GET['soucet'] }"><br/>
</form>
A php
$soucet = $_POST['cislo1'] + $_POST['cislo2'];
$_GET['soucet'] = $soucet;
header('Location: form.php');
exit;
Já jsem párek
Nový řešení
<form method="post" action="soucet.php">
Cislo 1: <input type="text" name="cislo1"><br/>
Cislo 2: <input type="text" name="cislo2"><br/><br/>
<input type="submit"><br/><br/>
Soucet: <input type="text" name="soucet" value="<?php if(isset($_GET['soucet'])){ echo $_GET['soucet']; } ?>"><br/>
</form>
PHP
<?php
$soucet = $_POST['cislo1'] + $_POST['cislo2'];
$_GET['soucet'] = $soucet;
header('Location: form.php?soucet='. $soucet);
exit;
?>
Uplná blbost co jsem napsal na poprvý
až poznáš kouzlo, posílání formuláře na sebe sama, pak tě čeká příjemné překvapení.
<?php
$soucet = "";
if(isset($_POST['cislo1'])) $soucet = $_POST['cislo1'] + $_POST['cislo2'];
?>
<form method="post" action="form.php">
Cislo 1: <input type="text" name="cislo1"><br/>
Cislo 2: <input type="text" name="cislo2"><br/><br/>
<input type="submit"><br/><br/>
<?php if($soucet != "") echo "Soucet: <input type=/"text/" name=/"soucet/" value= {$soucet}><br/>";?>
</form>
No snažil jsem se přispůsobit kód tomu, co napsal Frantisek Rychnovsky
Ahoj, popravde v php jsem to nakonec nedal, vyresil jsem to pres javascript.
Kazdopadne priste se to muze hodit, tak bych to rad rozchodil. V poslednim
uvedenem kodu mi to hlasi chybu syntaxe, nevim, co je tam ale spatne.:
syntax error, unexpected 'text' (T_STRING), expecting ',' or ';' (na
predposlednim radku if soucet...)
FR
Protože když máš dvojitou uvozovku ve stringu, který je uvozený dvojitými uvozovkami, tak ji musíš escapovat zpětným lomítkem. David Hynek tam má ale normální lomítko, takže to nefunguje a hází to syntax error. Je to vidět i tady v tom formátovači kódu, blbě se to barví
// Takže místo ...
echo "Soucet: <input type=/"text/" ... ";
// ... použít
echo "Soucet: <input type=\"text\" ... ";
Dík, uz OK . Jde jeste nastavit, aby ty hodnoty zustaly vyplnene a nesmazaly se po prikazu odeslat?
Kolega má pravdu. Když to člověk střílí od boku tak se netrefí
Hodnoty doplnit jdou:
<?php
$soucet = "";
$cislo1 = "";
$cislo2 = "";
if(isset($_POST['cislo1']) and isset($_POST['cislo2']) {
$cislo1 = $_POST['cislo1'] * 1;
$cislo2 = $_POST['cislo2'] * 1;
$soucet = $cislo1 + $cislo2 ;
}
echo "<form method=\"post\" action=\"form.php\" >
Cislo 1: <input type=\"text\" name=\"cislo1\" value=\"{$cislo1}\"><br/>
Cislo 2: <input type=\"text\" name=\"cislo2\" value=\"{$cislo2}\"><br/><br/>
<input type=\"submit\"><br/><br/>
Soucet: <input type=\"text\" name=\"soucet\" value=\"{$soucet}\"><br/>
</form>";
?>
diky, jen tam jeste je syntax error , unexpected '{' u radku if(isset....
if(isset($_POST['cislo1']) and isset($_POST['cislo2'])) {
uz to vidim, ze zacatku je tezke se v tom orientovat... Jen se ty vyplnene hodnoty stejne vzdy smazou a po odeslani zustane jen vysledek (takze neni videt, co to vlastne spocitalo)
Zobrazeno 29 zpráv z 29.