IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Cykly while, for, do - Počítadlo

Aktivity
Avatar
katrincsak
Člen
Avatar
katrincsak:27.2.2015 21:33

Zdravím,

strávil jsem spoustu času hledáním na googlu, abych našel cyklus, který po odeslání formuláře bude počítat kolikrát jsem formulář odeslal. I když je to kravina, ale nějak se bez toho nemohu pohnout dále, když mi to trčí v žaludku.

Chci udělat jednoduchý script, ve kterém do inputu vložím číslo, pomocí submit to odešlu metodou POST a výsledně budu při opakování procesu hádat číslo. Rád bych zároveň při tom počítal kolikrát jsem se o to pokusil. Nechci to řešit uložením do txt, databáze, nebo jiným způsobem. Hledám způsob pomocí proměnný, která se pak vypaří.

Podle hledání zjišťuji, že to asi v PHP neudělám. Že jakmile se script zpracuje, tak prohlížeč zobrazí co udělal a zbytek se ztratí a pak začíná znovu a znovu. Jestli má logika je po konečném zjišťování správná, nemá cenu se o to snažit. Potom ale... Nechápu jednu věci.

Jaký velký rozdíl je v cyklu While a For ? .. While opakuje příkaz dokuď nesplní podmínku a teoreticky může být náročnější oproti FOR kdy bez opakování rovnou vypíše výsledek tolikrát kolik má. Dříve jsem se učil C++ a jsme zvyklý na docela větší rozdíl, možná proto že se snažím udělat výše zmíněnou věc a v C++ tohle fungovalo.

Děkuji za radu a budu vděčný případně za malý script jestli je opravdu možné to co je pro mně nemožné.

Editováno 27.2.2015 21:33
 
Odpovědět
27.2.2015 21:33
Avatar
Tomáš123
Člen
Avatar
Odpovídá na katrincsak
Tomáš123:27.2.2015 21:42

Medzi cyklami while a for nie je veľký rozdiel (ak nehľadíme na formu). Obidvoma vieme dosiahnuť rovnaký výsledok:

for($i = 0; $i < $pocet; $i++) {
        echo $i;
}

$i = 0;
while($i < $pocet) {
        echo $i;
        $i++;
}

Údaje o rýchlosti nepoznám, ale myslím, že while je rýchlejší, kvôli jednoduchšej forme.

Ak chceš dosiahnuť, aby užívateľ z tvojej stránky neodosla viac ako 1 e-mail (antispam), ôžeš použiť $_SESSION. Avšak, neviem, či by šlo pomocou $_SESSION dosiahnuť výsledku, ak som sa netrafil.

V každom prípade, určite ti pomôže JavaScript. Výsledok môžeš vypísať, ak bude medzi stlačením nejaký dlhší časový interval.

Nahoru Odpovědět
27.2.2015 21:42
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
katrincsak
Člen
Avatar
Odpovídá na Tomáš123
katrincsak:27.2.2015 21:50

Děkuji za vysvětlení, nebo aspoň za tvůj pohled a názor k těmto cyklum.

Každopádně rád bych zůstal zatím 100% u jazyka PHP mám v plánu později zahrnout i JavaScripty, ale zatím nechci obcházet mojí neznalost něčím dalším a rád bych si i nejprve byl jistý jestli to na konec dělám dobře.

Zatím to stále tedy vypadá, že pomocí while, for a klasický proměnný neudělám cyklus, aby si php pamatovalo počet opakování. Protože script se ukončí jakmile while a for bude pravdivý/splněný.

 
Nahoru Odpovědět
27.2.2015 21:50
Avatar
Tomáš123
Člen
Avatar
Odpovídá na katrincsak
Tomáš123:27.2.2015 21:55

Páči sa mi tvoj prístup :)

Ono, to ale asi v PHP nepôjde.

JavaScript neovládam, ale viem, že počítať kliky v ňom určite pôjde. Nejaký okoloidúci ti určite poradí.

Nahoru Odpovědět
27.2.2015 21:55
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
katrincsak
Člen
Avatar
Odpovídá na Tomáš123
katrincsak:27.2.2015 22:04

Budu rád, když se mi logika na konec potvrdí, že tímhle způsob to opravdu nejde. Nejde ani o to jestli je to vhodné, nebo nevhodné. Jen jestli opravdu "MUSÍM" hledat cestu jinou.

 
Nahoru Odpovědět
27.2.2015 22:04
Avatar
mkub
Tvůrce
Avatar
Odpovídá na katrincsak
mkub:28.2.2015 1:00

s tym, ze PHP po dobehnuti celeho skriptu zobrazi vysledok a sa ukonci a tym vsetko zabudne mas pravdu, ale teoreticky by sa to dalo riesit aj pomocou skryteho <input> tagu v HTML, kde sa ulozi pri generovani HTML kodu obsah premennej a v PHP sa znovu ulozi do danej premennej obsah toho tagu a tato hodnota sa vezme ako pociatocna

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
28.2.2015 1:00
Avatar
d4rkw34v3r
Tvůrce
Avatar
d4rkw34v3r:28.2.2015 12:48

Bezstavovost protokolu HTTP obejdeš jedině tím, že si tu hodnotu někam uložíš. Kam ji uložíš, je už tvoje volba.(URL, DB, soubor, session, cookie, hidden input apod.).

Editováno 28.2.2015 12:49
 
Nahoru Odpovědět
28.2.2015 12:48
Avatar
katrincsak
Člen
Avatar
katrincsak:28.2.2015 13:48

Nevěděl jsem že mohu akceptovat jenom jedno řešení :(

Každopádně takhle mi to stačí, děkuji moc za velice fajn odpovědi.

OT:

Včera jsem přišel na docela podstatný rozdíl for a while ve vytváření násobilky např. Nějak nevím jak bych toto s cyklem for udělal. Neříkám, že by to zatím nešlo, ale asi by to vypadalo dost divně. O kalkulačku se zde podělím, myslím že se mi docela povedla s maximální jednoduchostí díky funkci explode() a uvedu i script kvůli názorům co by šlo udělat jinak a lépe.

100% PHP :-)

http://test.elyz.cz/…zy/calc1.php

do inputu napíšu 10 x 10
.....

$calc_num = explode(" ","$text");

// Násobilka !!
        if ($calc_num[1] == 'x'){
                $calc_num[3] = $calc_num[0] * 10;

                while($calc_num[0] <= $calc_num[3]){
                        $poradi++;
                        echo "$calc_num[0], ";
                        $calc_num[0] += $calc_num[2];
                }
        }
Editováno 28.2.2015 13:50
 
Nahoru Odpovědět
28.2.2015 13:48
Avatar
Tomáš123
Člen
Avatar
Odpovídá na katrincsak
Tomáš123:28.2.2015 16:20

Šlo by to nejako takto:

<?php
$pocetriadkov = 10;
$pocetstlpcov = 10;
echo "<table>";
for ($i = 1; $i <= $pocetriadkov; $i++) {
  echo "<tr>";
  for ($j = 1; $j <= $pocetstlpcov; $j++) {
    echo "<td>".($i*$j)."</td>";
  }
  echo "</tr>";
}
echo "</table>";
?>
Editováno 28.2.2015 16:22
Nahoru Odpovědět
28.2.2015 16:20
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
katrincsak
Člen
Avatar
Odpovídá na Tomáš123
katrincsak:1.3.2015 21:35

Tohle není až tak úplně co dělá můj while. Každopádně jsem se inspiroval $i*$j. Takže i za pomocí cyklu for jsem udělal to samé. Kvůli jednoduchosti, jsem uvedl fixní hodnoty. Násobilka 5 a maximálně do 50. Děkuji ;-)

for ($b = 5; $b <= 50; $b += 5){

        echo "$b, ";
};

Na základě čeho vzniklo toto vlákno a výše uvedených rad/nápověd jsem dal do kupy počítadlo za pomocí neviditelného input.

<?php

        if (isset($_POST['text'])){
        $pocet = $_POST['pocet'] + 1;
        }
        echo $pocet;
?>

<form action="#" method="post">
<input type="text" name="text">
<input type="hidden" name="pocet" value="<?php echo "$pocet"; ?>" >
<input type="submit" value="odeslat">

Děkuji všem za pomoc a toto celé beru již za vyřešené. Mnoho jsem se tím naučil.

 
Nahoru Odpovědět
1.3.2015 21:35
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 10 zpráv z 10.