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: Vkládání do souboru OOP

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
smoukey
Člen
Avatar
smoukey:20.11.2014 20:22

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):20.11.2014 20:35

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
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
smoukey
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
smoukey:20.11.2014 20:45

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):20.11.2014 20:59

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
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
smoukey
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
smoukey:20.11.2014 21:03

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):20.11.2014 21:06

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

var_dump($value);
Nahoru Odpovědět
20.11.2014 21:06
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
smoukey
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
smoukey:20.11.2014 21:09

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):20.11.2014 21:31

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
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
smoukey
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
smoukey:20.11.2014 21:58

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
Odpovídá na smoukey
Uživatel sítě :20.11.2014 22:33

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 Uživatel sítě
smoukey:20.11.2014 22:42

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
Odpovídá na smoukey
Uživatel sítě :20.11.2014 22:48

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 Uživatel sítě
smoukey:20.11.2014 23:03

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
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na smoukey
Ondřej Štorc:20.11.2014 23:14

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):20.11.2014 23:14

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
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
smoukey
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
smoukey:20.11.2014 23:22

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
20.11.2014 23:22
Avatar
Odpovídá na smoukey
Martin Konečný (pavelco1998):20.11.2014 23:36

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

Nahoru Odpovědět
20.11.2014 23:36
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
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.