Autor | Zpráva | ||
---|---|---|---|
katka96 Profil * |
#1 · Zasláno: 16. 3. 2011, 18:47:52
Ahoj, mám trochu problém s přičítáním a odečítáním 1 do souboru. Mám dva soubory y.txt a x.txt ve kterých jsou zadaná čísla z nichž se počítá průměr. Pak jestli je průměr větší než 200, má se přičítat 1 ke zdraví a odečítat 1 z energie.
Všechno fungovalo ale teď jsem dolů (html) přidávala obrázek a stylovala stránku a najednou se to dělá špatně. Nebo spíš to nedělá nic. vypíše to že se to přidalo a odečetlo ale nepřidalo se nic a neodečetlo se nic. Nevíte někdo čím to je? $prumer=$y+$x; $prumer=$prumer/2; if($prumer > 200){ //jestliže je průměr čísel větší než 200 $energie = file_get_contents($cesta_energie); if($energie >= 0){ //jestli je energie menší nebo rovna 0 $energie--; $file=fopen($cesta_energie,"w"); fwrite($file, "$energie"); fclose($file); echo "ztratil jsi 1% energie"; } //ukončení odečtení energie $zdravi = file_get_contents($cesta_zdravi); if($zdravi < 100){ //jestliže je zdraví menší než 100 $zdravi++; $file=fopen($cesta_zdravi, "w"); fwrite($file, "$zdravi"); fclose($file); echo "získal jsi 1% zdraví."; }} //konec přičtení zdraví, konec odstavce |
||
Pekl Profil * |
#2 · Zasláno: 16. 3. 2011, 19:07:59
6 řádek máš je větší nebo rovno, jestli chces aby to bylo je menší nebo rovno napiš tam
if($energie <= 0){ |
||
katka96 Profil * |
#3 · Zasláno: 16. 3. 2011, 19:24:04
ups to je chyba v té poznámce... má tam být větší nebo rovno 0 (aby se neodečítalo do mínusu)
|
||
katka96 Profil * |
#4 · Zasláno: 16. 3. 2011, 19:34:08
jinak zdraví se přičítá (za podmínky), ale energie se neodečítá
|
||
Pekl Profil * |
#5 · Zasláno: 16. 3. 2011, 19:41:02
Co tathle zkusit místo místo w dát a+, poduk si dobře pamatuji tak w je že původní data budou ztracena a+ (Otevře soubor pro přidávání a čtení, pokud soubor neexistuje PHP jej vytvoří)
if($prumer > 200){ //jestliže je průměr čísel větší než 200 $energie = file_get_contents($cesta_energie); if($energie >= 0){ //jestli je energie menší nebo rovna 0 $energie--; $file=fopen($cesta_energie,"a+"); fwrite($file, $energie); fclose($file); echo "ztratil jsi 1% energie"; } //ukončení odečtení energie $zdravi = file_get_contents($cesta_zdravi); if($zdravi < 100){ //jestliže je zdraví menší než 100 $zdravi++; $file=fopen($cesta_zdravi, "a+"); fwrite($file, $zdravi); fclose($file); echo "získal jsi 1% zdraví."; } |
||
Joker Profil |
#6 · Zasláno: 16. 3. 2011, 19:44:56
katka96:
Nemůže být chyba v přístupových právech k souboru? Vypíše to nějakou chybovou hlášku? Možná bude potřeba na začátek skriptu (dočasně pro ladění) dát: error_reporting(E_ALL); |
||
katka96 Profil * |
#7 · Zasláno: 16. 3. 2011, 19:48:43
Pekl:
nn, tim si myslím to není protože to nepotřebuju "přidat" k té původní hodnotě. to by mi vzniklo něco jako 5051 (původně 50, po přidání), navíc přičítání zdraví funguje :/ Joker: nic to nevypisuje, ten kod jsem tam dala nic.. |
||
katka96 Profil * |
#8 · Zasláno: 16. 3. 2011, 21:09:04
víte někdo v čem je problém?
|
||
meris Profil |
#9 · Zasláno: 17. 3. 2011, 14:48:42 · Upravil/a: meris
Víme :)
Algoritmus je napsaný správně, bude ti fungovat tak jak potřebuješ. Chyba není v něm, ale v definici proměnné $cesta_energie. Myslím, že tam budeš mít překlep v názvu. Je to chyba, která se odhaluje docela těžko i při zapnutém error_reportingu, respektive na tom nezáleží. Warning se vypisuje i při standartním nastavení php. Funguje to takto 1) při prvním průchodu s pozměněným názvem souboru ti php na ve funkci file_get_content() vypíše chybovou hlášku. 2) funkce fopen ti vytvoří soubor s novým názvem 3) další průchod proběhne ale soubor je prázdný, takže přetypování na int vrátí 0, a provede se odpočet energie, do souboru se vloží -1 4) načte se záporná hodnota, podmínka správně neproběhne. Tady je třeba dát pozor na několik věcí, předevšim před bodem 1) kontrolovat existenci souboru, například pomocí funkce is_file Také na to, že název souboru může být víceméně libovolný a docházet tak k podivným chybám. Například ted při zkoušení mi PHP bez problémů vytvoří soubor s názvem "e .txt" (pro jistotu: eMEZERA.txt) a určitě existují i další trochu šílené kombinace názvů a hodnot, které jsou okem těžko viditelné. |
||
Matthew113 Profil |
#10 · Zasláno: 17. 3. 2011, 14:55:21 · Upravil/a: Matthew113
katka96:
„ups to je chyba v té poznámce... má tam být větší nebo rovno 0 (aby se neodečítalo do mínusu)“ 0-1 = -1. $prumer=$y+$x; $prumer=$prumer/2; if($prumer > 200){ //jestliže je průměr čísel větší než 200 $energie = file_get_contents($cesta_energie); if($energie > 0){ //jestli je energie menší nebo rovna 0 $energie--; file_put_contents($cesta_energie,$energie); echo "ztratil jsi 1% energie"; } //ukončení odečtení energie $zdravi = file_get_contents($cesta_zdravi); if($zdravi < 100){ //jestliže je zdraví menší než 100 $zdravi++; file_put_contents($cesta_zdravi,$zdravi); echo "získal jsi 1% zdraví."; } } Kód jsem trochu přepsal, ale stále tady nevidím chybu. Když vyechujete $zdravi a $energie (před i po scriptu), co se vypíše? |
||
Časová prodleva: 13 let
|
0