NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

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.

Aktivity
Avatar
Frantisek Rychnovsky:19.3.2017 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.3.2017 22:10
Avatar
Michal Martinec:19.3.2017 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.3.2017 22:46
Neporovnavaj sa s ostatnymi. Porovnavaj sa sam so sebou.
Avatar
tom.ondrej
Člen
Avatar
tom.ondrej:19.3.2017 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.3.2017 22:53
Nahoru Odpovědět
19.3.2017 22:50
Talk is cheap. Show me the code --- Linus Torvalds
Avatar
Michal Martinec:19.3.2017 22:53

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

Nahoru Odpovědět
19.3.2017 22:53
Neporovnavaj sa s ostatnymi. Porovnavaj sa sam so sebou.
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:19.3.2017 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.3.2017 22:54
Avatar
ConflictBoy
Člen
Avatar
ConflictBoy:19.3.2017 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.3.2017 23:04
I'm programmer, I have no life :)
Avatar
Frantisek Rychnovsky:19.3.2017 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.3.2017 23:05
Avatar
Odpovídá na ConflictBoy
Frantisek Rychnovsky:19.3.2017 23:09

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

 
Nahoru Odpovědět
19.3.2017 23:09
Avatar
Odpovídá na ConflictBoy
Frantisek Rychnovsky:19.3.2017 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.3.2017 23:17
Avatar
ConflictBoy
Člen
Avatar
Odpovídá na Frantisek Rychnovsky
ConflictBoy:19.3.2017 23:40

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

Nahoru Odpovědět
19.3.2017 23:40
I'm programmer, I have no life :)
Avatar
Odpovídá na ConflictBoy
Frantisek Rychnovsky:20.3.2017 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.3.2017 8:13
Avatar
Odpovídá na Jiří Fencl
Frantisek Rychnovsky:20.3.2017 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.3.2017 8:37
Avatar
ConflictBoy
Člen
Avatar
Odpovídá na Frantisek Rychnovsky
ConflictBoy:20.3.2017 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.3.2017 18:08
I'm programmer, I have no life :)
Avatar
Odpovídá na ConflictBoy
Frantisek Rychnovsky:21.3.2017 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.3.2017 10:20
Avatar
Odpovídá na Frantisek Rychnovsky
Michal Štěpánek:21.3.2017 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.3.2017 11:07
Nahoru Odpovědět
21.3.2017 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.3.2017 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.3.2017 12:14
Avatar
Odpovídá na Frantisek Rychnovsky
Michal Štěpánek:21.3.2017 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.3.2017 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.3.2017 16:02

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

 
Nahoru Odpovědět
21.3.2017 16:02
Avatar
Eda Stehlík
Člen
Avatar
Eda Stehlík:29.3.2017 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.3.2017 20:14
Avatar
Eda Stehlík
Člen
Avatar
Odpovídá na Eda Stehlík
Eda Stehlík:29.3.2017 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.3.2017 20:19
Avatar
David Hynek
Tvůrce
Avatar
Odpovídá na Eda Stehlík
David Hynek:30.3.2017 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.3.2017 7:16
Nahoru Odpovědět
30.3.2017 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.3.2017 15:58

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

 
Nahoru Odpovědět
30.3.2017 15:58
Avatar
Odpovídá na Eda Stehlík
Frantisek Rychnovsky:31.3.2017 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.3.2017 8:59
Avatar
Odpovídá na Frantisek Rychnovsky
Neaktivní uživatel:31.3.2017 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
31.3.2017 10:29
Neaktivní uživatelský účet
Avatar
Frantisek Rychnovsky:31.3.2017 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.3.2017 10:49
Avatar
David Hynek
Tvůrce
Avatar
Odpovídá na Frantisek Rychnovsky
David Hynek:31.3.2017 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.3.2017 12:55
Nahoru Odpovědět
31.3.2017 12:53
Čím víc vím, tím víc věcí nevím.
Avatar
Odpovídá na David Hynek
Frantisek Rychnovsky:31.3.2017 13:08

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

 
Nahoru Odpovědět
31.3.2017 13:08
Avatar
NouF
Člen
Avatar
Odpovídá na Frantisek Rychnovsky
NouF:31.3.2017 13:47

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

 
Nahoru Odpovědět
31.3.2017 13:47
Avatar
Frantisek Rychnovsky:31.3.2017 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.3.2017 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.