Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z zapisem w pliku txt
zenoon
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 4.08.2006

Ostrzeżenie: (0%)
-----


Dopiero co zacząłem uczyć się php i kupiłem sobie książkę "php i MySQL vademecum..." wyd. Helion. Pierwszym zadaniem w nim jest stworzenie sklepu z częściami samochodowymi. Gdy już mamy takie coś to trzeba zamówienia zapisywać (w pliku txt). W książce jest taki kod:


Kod
<?php
  // utworzenie krótkich nazw zmiennych
  $iloscopon = $_POST['iloscopon'];
  $iloscoleju = $_POST['iloscoleju'];
  $iloscswiec = $_POST['iloscswiec'];
  $adres = $_POST['adres'];
  $adres = $_POST['adres'];

  $DOCUMENT_ROOT = $_POST['DOCUMENT_ROOT'];
?>

<html>
<head>
  <title>Części samochodowe Janka — wyniki zamówienia</title>
</head>
<body>
<h1>Części samochodowe Janka</h1>
<h2>wyniki zamówienia</h2>
<?php

$data=date('H:i, jS F');

  echo '<p>Zamówienie przyjęte o ';

  echo $data;
  echo '</p>';
  echo '<p>Zamówienie Państwa wygląda następująco: </p>';

  $ilosc=0;
  $ilosc=$iloscopon+$iloscoleju+$iloscswiec;

  if( $ilosc == 0 )
  {
   echo 'Na poprzedniej stronie nie zostało złożone żadne zamówienie!<br />';
  }
  else
  {
   if ( $iloscopon>0 )
     echo $iloscopon.' opon<br />';
   if ( $iloscoleju>0 )
     echo $iloscoleju.' butelek oleju<br />';
   if ( $iloscswiec>0 )
     echo $iloscswiec.' świec zapłonowych<br />';
  }

  $wartosc=0.00;

  define('CENAOPON', 100);
  define('CENAOLEJU', 10);
  define('CENASWIEC', 4);

  $wartosc =$iloscopon * CENAOPON + $iloscoleju * CENAOLEJU + $iloscswiec * CENASWIEC;

  $wartosc=number_format($wartosc, 2, '.', ' ');

  echo '<P>Wartość zamówienia wynosi '.$wartosc.'</P>';

  echo '<P>Adres wysyłki to '.$adres. '</P>';

  $ciagwyjsciowy = $data."\t".$iloscopon." opon \t".$iloscoleju." butelek oleju\t"
               .$iloscswiec." swiec zapłonowych\t".$wartosc
               ."PLN/t". $adres."\n";

  // otwarcie pliku w celu dopisywania
@ $wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'ab');

  if (!$wp)
  {
   echo '<p><strong> Zamówienie Państwa nie może zostać przyjęte w tej chwili.  '
       .'Proszę spróbować później.</strong></p></body></html>';
   exit;
  }

  fwrite($wp, $ciagwyjsciowy, strlen($ciagwyjsciowy));
  fclose($wp);

  echo '<p>Zamówienie zapisane.</p>';
?>
</body>
</html>




Niestety gdy wrzucam to na serwer i próbuję zapisać to do pliku zamowienia.txt to za każdym razem mam komunikat niepowodzenia. Nie wiem co jest nie tak. Proszę o pomoc!

Z góry wielkie dzięki i sorry za tak debilne pytania.
Go to the top of the page
+Quote Post
eai
post
Post #2





Grupa: Zarejestrowani
Postów: 367
Pomógł: 10
Dołączył: 20.05.2005

Ostrzeżenie: (0%)
-----


Pokaż jaki błąd wywala.
Go to the top of the page
+Quote Post
zenoon
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 4.08.2006

Ostrzeżenie: (0%)
-----


nie wywala błędu bo dałem przecież instrukcję:

Kod
@ $wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'ab');
if (!$wp)  {   echo '<p><strong> Zamówienie Państwa nie może zostać przyjęte w tej chwili.  '
.'Proszę spróbować później.</strong></p></body></html>';  
exit;  }


i wyswietla sie tylko ta notka. a jesli jej nie ma to ma problem z odczytem (2 razy) raz zapisem i raz z zamknieciem
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #4





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Sprawdź, czy masz prawo zapisu do katalogu zamowienia.
Możesz tez sprawdzić, czy $DOCUMENT_ROOT jest utworzona, bo byc może jej nie ma, a to oznaczm że ściezka do pliku zamowienia.txt jest niepoprawna.

Pozdrawiam


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
zenoon
post
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 4.08.2006

Ostrzeżenie: (0%)
-----


wszystko jest na miejscu. i nie wiem co zrobic dry.gif
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #6





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Pokaż komunikat błędu w takim razie.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
zenoon
post
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 4.08.2006

Ostrzeżenie: (0%)
-----


Kod
Warning: fopen() [function.fopen]: open_basedir restriction in effect. File(/../zamowienia/zamowienia.txt) is not within the allowed path(s): (/home) in /home/l/i/v/livesgood/www/szukaj/rozdzial_02/przetworzzamowienie.php on line 65

Warning: fopen(/../zamowienia/zamowienia.txt) [function.fopen]: failed to open stream: Operation not permitted in /home/l/i/v/livesgood/www/szukaj/rozdzial_02/przetworzzamowienie.php on line 65

Warning: fwrite(): supplied argument is not a valid stream resource in /home/l/i/v/livesgood/www/szukaj/rozdzial_02/przetworzzamowienie.php on line 67

Warning: fclose(): supplied argument is not a valid stream resource in /home/l/i/v/livesgood/www/szukaj/rozdzial_02/przetworzzamowienie.php on line 68
Go to the top of the page
+Quote Post
eai
post
Post #8





Grupa: Zarejestrowani
Postów: 367
Pomógł: 10
Dołączył: 20.05.2005

Ostrzeżenie: (0%)
-----


Nie znajduje pliku. Sprawdz ścieżke. Prawa do zapisu.
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #9





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




/../zamowienia/zamowienia.txt

tak wygląda twoja ścieżka zapisu - pisałem, żebyś sprawdził, czy masz $DOCUMENT_ROOT - ne srawdziłeś, i widać, że nie masz jej. Zresztą. Nawet, gdyby była, to i tak skrypt sie nie wykona, bo nie masz uprawnień do wychodzenia poza swój katalog domowy. Zrób tak:
  1. <?php
  2. $wp = fopen("zamowienia/zamowienia.txt", 'ab');
  3. ?>


Zadziała.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
zenoon
post
Post #10





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 4.08.2006

Ostrzeżenie: (0%)
-----


sprawdziłem i chyba wszystko się zgadza. Ale wyjaśnię Wam wszystko:

strona, na której to mam: http://livesgood.ovh.org/naukaphp/formularz.html

formularz wyglada nastepujaco:
Kod
<html>
<head>
  <title>Części samochodowe Janka</title>
</head>
<body>
<h1>Części samochodowe Janka</h1>
<h2>Formularz zamówienia</h2>

<form action="przetworzzamowienie.php" method=post>
<table border=0>
<tr bgcolor=#cccccc>
  <td width=150>Produkt</td>
  <td width=15>Ilość</td>
</tr>
<tr>
  <td>Opony</td>
  <td align=left><input type="text" name="iloscopon" size=3 maxlength=3></td>
</tr>
<tr>
  <td>Olej</td>
  <td align=left><input type="text" name="iloscoleju" size=3 maxlength=3></td>
</tr>
<tr>
  <td>Świece Zapłonowe</td>
  <td align=left><input type="text" name="iloscswiec" size=3 maxlength=3></td>
</tr>
<tr>
  <td>Adres</td>
  <td align=left><input type="text" name="adres" size=40 maxlength=40></td>
</tr>
<tr>
  <td colspan=2 align=center><input type=submit value="Złóż zamówienie"></td>
</tr>
</table>
</form>

</body>
</html>


plik php już podałem. w katalogu mam formularz.html i przetworzzamowienie.php. w katalogu zamowienia (jest on o folder wyżej niż formularz) mam plik zamowienia.txt. nie wiem co dalej. ustawiłem chmody zamowienia.txt na 777 i przetworzzamowienie.php na 755
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #11





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




A prawa do katalogu zamowienia? To właśnie prawa dostępu do tego katalogu musisz ustawić.

Ten post edytował Cysiaczek 4.08.2006, 22:24:44


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
zenoon
post
Post #12





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 4.08.2006

Ostrzeżenie: (0%)
-----


w jaki sposób?
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #13





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Nie rozbrajaj mnie tongue.gif Ta samo jak ustawiłeś do plików. Zresztą tutaj napisałem przed chwilą.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
zenoon
post
Post #14





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 4.08.2006

Ostrzeżenie: (0%)
-----


sorry w takim razie ze cie rozbroilem ale jak napisalem USTAWILEM CHMOD NA 777 I TO NIC NIE DALO!
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #15





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




  1. <?php
  2. $DOCUMENT_ROOT = $_POST['DOCUMENT_ROOT'];
  3. ?>


Nie masz w swoim pliku zawierającym formularz pola, które nazywa się DOCUMENT_ROOT
Jako, że istenieje tablica zmiennych serwera, to spóbuj:
  1. <?php
  2. $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
  3. ?>


Jednak używasz w ścieżce ../, co oznacza cofanie się w górę, Nie bardzo możesz przez to otrzymać poprawny katalog - takiego po prostu nie ma. Sprawdziłem - u mnie pokazuje coś takiego

/usr/local/apache2/htdocs/../zamowienia/zamowienia.txt

Czy to wygląda na poprawną ścieżkę? Raczej nie.

Dlatego mówię - odnieś się do katalogu <zamowienia> w taki sposób
  1. <?php
  2. $wp = fopen("zamowienia/zamowienia.txt", 'ab');
  3. ?>


Powyższy zapis mówi o tym, ze chcsz zapisac plik <zamowiania.txt> w katalogu <zamowienia> znajdującym sie w jakimś innym katalogu (np w twoim katalogu głównym). Teraz ustaw chmod na 777 dla katalogu, a nie dla pliku zamowienia. Napisałeś, że ustawiłeś dla plikuów zamowienia,txt i dla przetworzzamowienie.php. To za mało.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 13:11