Diskuze: Vraceni hodnoty souctu v php scriptu zpet do formulare

PHP PHP Vraceni hodnoty souctu v php scriptu zpet do formulare American English version English version

Aktivity (1)
Avatar
Frantisek Rychnovsky:19. března 22:10

Ahoj, potreboval bych pomoc s timto: mam html stranku s 3 poli input a rad bych poslal obsah bunek 1 a 2 do php scriptu soucet tak, aby mi vysledek vratil zpet do te puvodni stranky, a to do pole 3, namisto toho aby mi jen na prazdne strance oznamil soucet. Je to proveditelne?

<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"><br/>
</form>

php:

<?php

$soucet = $_POST['cislo1'] + $_POST['cislo2'];
            echo("Součet: $soucet");

        ?>
 
Odpovědět 19. března 22:10
Avatar
Michal Martinec:19. března 22:46

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.

Nahoru Odpovědět 19. března 22:46
Neporovnavaj sa s ostatnymi. Porovnavaj sa sam so sebou.
Avatar
tom.ondrej
Člen
Avatar
tom.ondrej:19. března 22:50

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');
?>
Editováno 19. března 22:53
Nahoru Odpovědět 19. března 22:50
Talk is cheap. Show me the code --- Linus Torvalds
Avatar
Michal Martinec:19. března 22:53

No ok tak sa to da :D Len je to na mna zatial vela :D

Nahoru Odpovědět 19. března 22:53
Neporovnavaj sa s ostatnymi. Porovnavaj sa sam so sebou.
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:19. března 22:54

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.

 
Nahoru Odpovědět 19. března 22:54
Avatar
ConflictBoy
Člen
Avatar
ConflictBoy:19. března 23:04

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>
Nahoru Odpovědět 19. března 23:04
I'm programmer, I have no life :)
Avatar
Frantisek Rychnovsky:19. března 23:05

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 ?

 
Nahoru Odpovědět 19. března 23:05
Avatar
Odpovídá na ConflictBoy
Frantisek Rychnovsky:19. března 23:09

myslis tim cely ten kod v php souboru, nebo ta cast s formularem do html?

 
Nahoru Odpovědět 19. března 23:09
Avatar
Odpovídá na ConflictBoy
Frantisek Rychnovsky:19. března 23:17

Uz jsem to prozkousel - funguje :-) ale tak, ze to pocita na nove strance a opusti to puvodni formular (nevraci to vysledek zpatky)...

 
Nahoru Odpovědět 19. března 23:17
Avatar
ConflictBoy
Člen
Avatar
Odpovídá na Frantisek Rychnovsky
ConflictBoy:19. března 23:40

Pokud ten můj kód hodíš celý do jednoho souboru, zůstane to na formuláři :)

Nahoru Odpovědět 19. března 23:40
I'm programmer, I have no life :)
Avatar
Odpovídá na ConflictBoy
Frantisek Rychnovsky:20. března 8:13

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

 
Nahoru Odpovědět 20. března 8:13
Avatar
Odpovídá na Jiří Fencl
Frantisek Rychnovsky:20. března 8:37

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?

 
Nahoru Odpovědět 20. března 8:37
Avatar
ConflictBoy
Člen
Avatar
Odpovídá na Frantisek Rychnovsky
ConflictBoy:20. března 18:08

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

Nahoru Odpovědět 20. března 18:08
I'm programmer, I have no life :)
Avatar
Odpovídá na ConflictBoy
Frantisek Rychnovsky:21. března 10:20

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

 
Nahoru Odpovědět 21. března 10:20
Avatar
Odpovídá na Frantisek Rychnovsky
Michal Štěpánek:21. března 11:07

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...

Editováno 21. března 11:07
Nahoru Odpovědět 21. března 11:07
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Frantisek Rychnovsky:21. března 12:14

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 ?

 
Nahoru Odpovědět 21. března 12:14
Avatar
Odpovídá na Frantisek Rychnovsky
Michal Štěpánek:21. března 12:26

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...

Nahoru Odpovědět 21. března 12:26
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Frantisek Rychnovsky:21. března 16:02

Jasne, s tim uz si nejak poradim, diky vsem, FR.

 
Nahoru Odpovědět 21. března 16:02
Avatar
Eda Stehlík
Člen
Avatar
Eda Stehlík:29. března 20:14

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;
 
Nahoru Odpovědět 29. března 20:14
Avatar
Eda Stehlík
Člen
Avatar
Odpovídá na Eda Stehlík
Eda Stehlík:29. března 20:19

Já jsem párek :D

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ý :D

 
Nahoru Odpovědět 29. března 20:19
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na Eda Stehlík
David Hynek:30. března 7:16

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>
Editováno 30. března 7:16
Nahoru Odpovědět  +1 30. března 7:16
Čím víc vím, tím víc věcí nevím.
Avatar
Eda Stehlík
Člen
Avatar
Odpovídá na David Hynek
Eda Stehlík:30. března 15:58

No snažil jsem se přispůsobit kód tomu, co napsal Frantisek Rychnovsky

 
Nahoru Odpovědět 30. března 15:58
Avatar
Odpovídá na Eda Stehlík
Frantisek Rychnovsky:31. března 8:59

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

 
Nahoru Odpovědět 31. března 8:59
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Frantisek Rychnovsky
Jiří Gracík:31. března 10:29

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\" ... ";
Nahoru Odpovědět  +1 31. března 10:29
Creating websites is awesome till you see the result in another browser ...
Avatar
Frantisek Rychnovsky:31. března 10:49

Dík, uz OK :-) . Jde jeste nastavit, aby ty hodnoty zustaly vyplnene a nesmazaly se po prikazu odeslat?

 
Nahoru Odpovědět 31. března 10:49
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na Frantisek Rychnovsky
David Hynek:31. března 12:53

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>";
?>
Editováno 31. března 12:55
Nahoru Odpovědět  +1 31. března 12:53
Čím víc vím, tím víc věcí nevím.
Avatar
Odpovídá na David Hynek
Frantisek Rychnovsky:31. března 13:08

diky, jen tam jeste je syntax error , unexpected '{' u radku if(isset....

 
Nahoru Odpovědět 31. března 13:08
Avatar
NouF
Člen
Avatar
Odpovídá na Frantisek Rychnovsky
NouF:31. března 13:47

if(isset($_POS­T['cislo1']) and isset($_POST['cis­lo2'])) {

 
Nahoru Odpovědět 31. března 13:47
Avatar
Frantisek Rychnovsky:31. března 13:53

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)

 
Nahoru Odpovědět 31. března 13:53
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 29 zpráv z 29.