Autor Zpráva
katka96
Profil *
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 *
6 řádek máš je větší nebo rovno, jestli chces aby to bylo je menší nebo rovno napiš tam
if($energie <= 0){
katka96
Profil *
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 *
jinak zdraví se přičítá (za podmínky), ale energie se neodečítá
Pekl
Profil *
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
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);
aby to ty chyby vypsalo.
katka96
Profil *
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 *
víte někdo v čem je problém?
meris
Profil
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
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?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0