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.

Člen

Zobrazeno 17 zpráv z 17.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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?
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?
A existuje ta složka? Mám pocit, že ta fce vytvoří soubor pokud neexistuje, ale složku už ne.
Složky právě existují. A $this->skupina a $this->uzivatel vrací to co má (skupina, uživatele).
A co udělá v tom druhým foreachi
var_dump($value);
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
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.
Měl jsem špatně napsanou cestu.
Chyběla mi tam proměnná $this->adrJidla. Nyní to errory nevyhazuje,
ale soubor to stále nevytvoří.
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?
Složky jsou správně, název souboru také. A proměnné mají hodnoty takové jaké mají mít. To jsem si otestoval
Tak to je tedy záhada. Dle všeho by to mělo fungovat..
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";
}
}
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.
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[]=explode(...) 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.
Aha, no tak hlavně, že se to vyřešilo
Snad jsem aspoň trochu pomohl.
Zobrazeno 17 zpráv z 17.