Avatar
smoukey
Člen
Avatar
smoukey:

Zdravím,

pokračuji v učení OOP a narazil jsem na problém. Mám rozdělanou aplikaci jídelníčku :D a potřebuju udělat, aby to co uživatel si odešle, aby se uložilo do souboru.

Kód:

class Objednat_jidla{
        private $uzivatel;
        private $jidla=array();
        private $skupina;
        private $adrJidla="uzivatele_jidla";


        public function zapis_jidla($komu,$jidla,$skupina){
                $this->uzivatel=$komu;
                $this->skupina=$skupina;
                foreach ($jidla as $key => $value) {
                $this->jidla=explode(";", $value);
                }
                foreach ($this->jidla as $key => $value) {
                        if($value[1]=="true"){
                                file_put_contents("./".$this->adrJidla."/".$this->skupina."/".$this->uzivatel.".txt", $value[0].";\n", FILE_APPEND);
                }
                //return "úspěch";
        }
}

// komu a skupina jde ze session a jidlo je pole jidel.

Problém je v tom, že mi to ten soubor nevytvoří.

Poradíte mi, kde je chyba?

Předem děkuji za odpovědi

Editováno 20.11.2014 20:24
 
Odpovědět 20.11.2014 20:22
Avatar
Odpovídá na smoukey
Martin Konečný (pavelco1998):

Mně spíš přijde, že se k volání funkce file_put_contents() vůbec nedostane.

Když procházíš pole $jidla, pokaždé si přepíšeš hodnotu $this->jidla. Tzn. $this->jidla obsahuje jen jednu jedinou položku.
Jak vypadá obsah toho .txt souboru?

Edit: nechybí ti tam náhodou za ifem konec bloku?

Editováno 20.11.2014 20:36
 
Nahoru Odpovědět 20.11.2014 20:35
Avatar
smoukey
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
smoukey:

Měl jsi pravdu, chybí. Teď už tam je. a $this->jidla je pole, to už mám taky opravené. Takže by to teoreticky mělo jít ne?
obsah souboru není, právě tato funkce mi ho má vytvořit a zrovna do něho napumpovat data.

btw: Nebude spíš dělat bordel to, jak se dostávám do adresáře s tím souborem?

 
Nahoru Odpovědět 20.11.2014 20:45
Avatar
Odpovídá na smoukey
Martin Konečný (pavelco1998):

A existuje ta složka? Mám pocit, že ta fce vytvoří soubor pokud neexistuje, ale složku už ne.

 
Nahoru Odpovědět 20.11.2014 20:59
Avatar
smoukey
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
smoukey:

Složky právě existují. A $this->skupina a $this->uzivatel vrací to co má (skupina, uživatele).

 
Nahoru Odpovědět 20.11.2014 21:03
Avatar
Odpovídá na smoukey
Martin Konečný (pavelco1998):

A co udělá v tom druhým foreachi

var_dump($value);
 
Nahoru Odpovědět 20.11.2014 21:06
Avatar
smoukey
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
smoukey:

Vyplodí toto:

array(2) {
  [0]=>
  string(24) "Svíčková s knedlíkem"
  [1]=>
  string(4) "true"
}
<br />
<b>Warning</b>:  file_put_contents(./Ucitele/Jan.txt): failed to open stream: No such file or directory in <b>/data/web/virtuals/83366/virtual/www/subdom/jidelna/tridy/Objednat_jidla.php</b> on line <b>18</b><br />
array(2) {
  [0]=>
  string(63) "Jelení kýta se šípkovou omáčkou s bramborovým knedlíkem"
  [1]=>
  string(5) "false"
}
array(2) {
  [0]=>
  string(10) "Palačinky"
  [1]=>
  string(4) "true"
}
<br />
<b>Warning</b>:  file_put_contents(./Ucitele/Jan.txt): failed to open stream: No such file or directory in <b>/data/web/virtuals/83366/virtual/www/subdom/jidelna/tridy/Objednat_jidla.php</b> on line <b>18</b><br />
array(2) {
  [0]=>
  string(51) "Srbské vepřové žebírko s houskovým knedlíkem"
  [1]=>
  string(5) "false"
}
array(2) {
  [0]=>
  string(19) "Boloňské špagety"
  [1]=>
  string(4) "true"
}
<br />
<b>Warning</b>:  file_put_contents(./Ucitele/Jan.txt): failed to open stream: No such file or directory in <b>/data/web/virtuals/83366/virtual/www/subdom/jidelna/tridy/Objednat_jidla.php</b> on line <b>18</b><br />
array(2) {
  [0]=>
  string(49) "Masové nudličky na čínský způsob s kuskusem"
  [1]=>
  string(5) "false"
}
array(2) {
  [0]=>
  string(38) "Vepřový řízek s bramborovou kaší"
  [1]=>
  string(4) "true"
}
<br />
<b>Warning</b>:  file_put_contents(./Ucitele/Jan.txt): failed to open stream: No such file or directory in <b>/data/web/virtuals/83366/virtual/www/subdom/jidelna/tridy/Objednat_jidla.php</b> on line <b>18</b><br />
array(2) {
  [0]=>
  string(23) "Rybí prsty s bramborem"
  [1]=>
  string(5) "false"
}
array(2) {
  [0]=>
  string(16) "Čína s rýží"
  [1]=>
  string(4) "true"
}
<br />
<b>Warning</b>:  file_put_contents(./Ucitele/Jan.txt): failed to open stream: No such file or directory in <b>/data/web/virtuals/83366/virtual/www/subdom/jidelna/tridy/Objednat_jidla.php</b> on line <b>18</b><br />
array(2) {
  [0]=>
  string(38) "Střpačky s uzeným masem a se zelím"
  [1]=>
  string(5) "false"
}

Všude kde je true t ose uloží do souboru, kde není neuloží se, viz podmínka

Editováno 20.11.2014 21:11
 
Nahoru Odpovědět 20.11.2014 21:09
Avatar
Odpovídá na smoukey
Martin Konečný (pavelco1998):

Hází ti to tam warningy, že neexistuje soubor. Ta fce by ten soubor měla normálně vytvořit, tak nevím. Třeba to nějak blbne s tou konstantou FILE_APPEND.

 
Nahoru Odpovědět 20.11.2014 21:31
Avatar
smoukey
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
smoukey:

Měl jsem špatně napsanou cestu.

Chyběla mi tam proměnná $this->adrJidla. Nyní to errory nevyhazuje, ale soubor to stále nevytvoří. :(

 
Nahoru Odpovědět 20.11.2014 21:58
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na smoukey
Marek Z.:

Není třeba problém v cestě? Třeba nějaká proměnná bude nultá při špatném zadání. Nemáš je třeba v jiné složce, která obsahuje dané podložky?

Nahoru Odpovědět 20.11.2014 22:33
Chybami se člověk učí, běžte se učit jinam!
Avatar
smoukey
Člen
Avatar
Odpovídá na Marek Z.
smoukey:

Složky jsou správně, název souboru také. A proměnné mají hodnoty takové jaké mají mít. To jsem si otestoval

 
Nahoru Odpovědět 20.11.2014 22:42
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na smoukey
Marek Z.:

Tak to je tedy záhada. Dle všeho by to mělo fungovat..

Nahoru Odpovědět 20.11.2014 22:48
Chybami se člověk učí, běžte se učit jinam!
Avatar
smoukey
Člen
Avatar
Odpovídá na Marek Z.
smoukey:

Nyní vše funguje. Nevím proč. Každopádně v mém případě jsem musel i if dát to true do "".

Vše funguje.

Řešení:

class Objednat_jidla{
        private $uzivatel;
        private $jidla=array();
        private $skupina;
        private $adrJidla="uzivatele_jidla";


        public function zapis_jidla($komu,$jidla,$skupina){
                $this->uzivatel=$komu;
                $this->skupina=$skupina;
                foreach ($jidla as $key => $value) {
                $this->jidla[]=explode(";", $value);
                }
                foreach ($this->jidla as $key => $value) {
                        if($value[1]=="true"){
                                file_put_contents("./".$this->adrJidla."/".$this->skupina."/".$this->uzivatel.".txt", $value[0].";\n",FILE_APPEND);
                        }
                }
                return "úspěch";
        }
}
 
Nahoru Odpovědět 20.11.2014 23:03
Avatar
Odpovídá na smoukey
Ondřej Štorc:

To bude asi tím že to true v poli je string..

Nahoru Odpovědět 20.11.2014 23:14
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Odpovídá na smoukey
Martin Konečný (pavelco1998):

Předtíms neměl $this->jidla[] = explode(...), ale jen $this->jidla = explode(...). To ti mělo udělat jen jednu hodnotu a jelikož v posledním poli byla hodnota false, tak se nesplnila podmínka.
Zřejmě jsi ten dump házel do prvního foreache.

 
Nahoru Odpovědět 20.11.2014 23:14
Avatar
smoukey
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
smoukey:

Ondřej:
Ano, ale jak mi to nelšo tak jsem zkoušel všechno možné a zapomněl jsem to dát zpět.

Martin:

to $this->jidla[]=explo­de(...) to jsem upravoval hned, jak jsi poprvé odpověděl.

Jinak dump jsem házel do druhého foreache, ale před podmínku, takže to vyhodilo všechno.

Každopádně Děkuji za pomoc.

 
Nahoru Odpovědět  +1 20.11.2014 23:22
Avatar
Odpovídá na smoukey
Martin Konečný (pavelco1998):

Aha, no tak hlavně, že se to vyřešilo :D
Snad jsem aspoň trochu pomohl.

 
Nahoru Odpovědět  +1 20.11.2014 23:36
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 17 zpráv z 17.