Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Vkládání do souboru OOP

PHP PHP Vkládání do souboru OOP American English version English version

Aktivity (1)
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
Marek Z.
Redaktor
Avatar
Odpovídá na smoukey
Marek Z.: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 Marek Z.
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
Marek Z.
Redaktor
Avatar
Odpovídá na smoukey
Marek Z.: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 Marek Z.
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
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  +1 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  +1 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.