Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zapis zamówienia do pliki .txt
Forum PHP.pl > Forum > Przedszkole
Furiapl
Witam,
Wałkuję książkę, która jest określana mianem "archaicznej" i coraz częściej zastanawiam się czy słusznie robię.
Mam problem z pewnym zadaniem z popularnej ksiązki do nauki PHP.
Otóż :
  1. <html>
  2. <head>
  3. <title>Części samochodowe Janka oraz wyniki zamówienia</title>
  4. </head>
  5. <body>
  6. <h1>Części samochodowe Dominika</h1>
  7. <h2>Wyniki zamówienia</h2>
  8. <?php
  9.  
  10. $iloscopon = $_POST['iloscopon'];
  11. $iloscoleju = $_POST['iloscoleju'];
  12. $iloscswiec = $_POST['iloscswiec'];
  13. $jak = $_POST['jak'];
  14. $data = date('H:i jS F Y');
  15. $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
  16. $adres = $_POST['adres'];
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23. echo '<p> Zamówienie złożone o ' .$data;
  24. echo '</p>';
  25.  
  26. $ilosc = 0;
  27. $ilosc = $iloscopon + $iloscoleju + $iloscswiec;
  28.  
  29.  
  30.  
  31. echo '<p> Państwa zamówienie wygląda następująco : </p>';
  32.  
  33. if($ilosc == 0) {
  34. echo ' Na poprzedniej stronie nie złożono żadnego zamówienia!';
  35. }
  36. else {
  37. if ($iloscopon > 0) {
  38. echo $iloscopon. ' opon <br />';
  39. }
  40. if ($iloscoleju > 0) {
  41. echo $iloscoleju. ' butelek oleju <br />';
  42. }
  43. if ($iloscswiec >0) {
  44. echo $iloscswiec. ' świec zapłonowych <br />';
  45. }
  46.  
  47. }
  48.  
  49.  
  50.  
  51. echo '<p> Zamówionych części razem : ' .$ilosc;
  52. echo '</p>';
  53.  
  54.  
  55. define('CENAOPON', 100);
  56. define('CENAOLEJU', 10);
  57. define ('CENASWIEC', 4);
  58.  
  59. if($iloscopon <10)
  60. $znizka = 0;
  61. elseif ($iloscopon >=11 && $iloscopon <=40)
  62. $znizka = 0.05;
  63. elseif ($iloscopon >=41 && $iloscopon <=80)
  64. $znizka = 0.10;
  65. elseif ($iloscopon >=81 && $iloscopon <=1000)
  66. $znizka = 0.15;
  67.  
  68.  
  69. $opon = $iloscopon * CENAOPON;
  70. $oleju = $iloscoleju * CENAOLEJU;
  71. $swiec = $iloscswiec * CENASWIEC;
  72.  
  73. $opon = $opon * (1-$znizka);
  74.  
  75. $wartosc = $opon + $oleju + $swiec;
  76.  
  77.  
  78. echo '<p> Wartość netto zamówienia wynosi : ' .$wartosc. ' PLN <br />';
  79.  
  80. $podatekvat = 0.23;
  81.  
  82. $wartosc = $wartosc * (1+$podatekvat);
  83.  
  84. echo ' Wartość brutto zamówienia wynosi : ' .number_format ($wartosc, 2). ' PLN ';
  85.  
  86. echo '<p> Skąd się Pan dowiedział o naszej firmie? </p> ';
  87.  
  88. switch($jak) {
  89. case 'a':
  90. echo 'Jestem stałym klientem <br />';
  91. break;
  92. case 'b':
  93. echo 'Reklama telewizyjna <br />';
  94. break;
  95. case 'c':
  96. echo 'Książka telefoniczna <br />';
  97. break;
  98. case 'd':
  99. echo 'Od znajomego <br />';
  100. break;
  101. default:
  102. echo ' Nie wprowadzono danych';
  103. break;
  104. }
  105.  
  106.  
  107. $ciagwyjsciowy = $data."\t".$iloscopon." opon \t".$iloscoleju." butelek oleju\t"
  108. .$iloscswiec." swiec zapłonowych\t".$wartosc
  109. ."PLN\t". $adres."\n";
  110.  
  111. $wp = fopen ("$DOCUMENT_ROOT/zamowienia.txt" , 'ab');
  112. flock($wp, LOCK_EX);
  113.  
  114. if(!$wp) {
  115. echo ' Państwa zamówienie chwilowo nie może być zrealizowane, przepraszamy za wszelkie niedogodności';
  116.  
  117. }
  118.  
  119.  
  120. fwrite($wp, $ciagwyjsciowy, strlen($ciagwyjsciowy));
  121. flock($wp, LOCK_UN);
  122. fclose($wp) ;
  123.  
  124. echo 'Zamówienie zostało zapisane';
  125.  
  126.  
  127.  
  128.  
  129. ?>
  130.  
  131.  
  132. </body>
  133. </html>

Wpisałem komendę do otworzenia pliku txt o nazwie "zamowienia" nadałem tej komendzie parametry związane z zapisem (a,cool.gif
Pomimo tego przy próbie złożenia zamówienia kompletnie nic nie zapisuje się w tym pliku.
Gdzie popełniłem błąd?
Czy jest sens nauki tej metody czy jest już ona tak przestarzała, że powinienem to pominąć?
Póki co to jedyna książka z jakiej uczę się PHP a w sieci piszą by lepiej ją pominąć.
Pozdrawiam.
Comandeer
A tak, vademecum profesjonalisty - zaczynałem od tego, ale dzisiaj faktycznie nikomu bym tej książki nie polecił wink.gif Faktycznie jest bardzo przestarzała i pomija bardzo dużo aspektów związanych z programowaniem w PHP (obiektówki praktycznie tam nie ma, a dzisiaj to de facto podstawa).
Furiapl
Zatem na sam początek mam się zająć programowaniem obiektowym, tak?
Od ilości informacji związanych z tym językiem można zgłupieć.
Myślałem, że już chociaż mam jakieś dobre źródło wiedzy (wraz z przykładami, co jest szalenie ważne dla mnie)
A tu znowu się okazuje, że nic z tego.
Mógłbym prosić o jakieś wskazówki w takim razie?
Oczywiście chodzi mi o publikacje, które mogłyby mi pomóc złapać bakcyla i zacząć na poważnie.
com
zajrzyj do działu książki tam jest setka tematów na ten temat smile.gif
Furiapl
Dziękuje za odpowiedzi Panowie.
A co z rozwiązaniem mojego problemu?
Jest w stanie ktoś pomóc?
Doradzić, naprowadzić, cokolwiek?
com
zajrzyj do tematu jak zadać pytanie, tam jest jak włączyć raportowanie błędów, bo przy dev to podstawa. wydrukuj sobie var_dumpem zmienne przed zapisem i sprawdź co do nich trafia itp
Furiapl
Dziękuje za radę.
Poprawiłem trochę kod i teraz chociaż błąd się wyświetla.
Warning: flock() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\rozdzial2\przetworzzamowienie.php on line 118
  1. <html>
  2. <head>
  3. <title>Części samochodowe Janka oraz wyniki zamówienia</title>
  4. </head>
  5. <body>
  6. <h1>Części samochodowe Dominika</h1>
  7. <h2>Wyniki zamówienia</h2>
  8. <?php
  9.  
  10. ini_set('display_errors','1');
  11.  
  12. $iloscopon = $_POST['iloscopon'];
  13. $iloscoleju = $_POST['iloscoleju'];
  14. $iloscswiec = $_POST['iloscswiec'];
  15. $jak = $_POST['jak'];
  16. $data = date('H:i jS F Y');
  17. $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
  18. $adres = $_POST['adres'];
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25. echo '<p> Zamówienie złożone o ' .$data;
  26. echo '</p>';
  27.  
  28. $ilosc = 0;
  29. $ilosc = $iloscopon + $iloscoleju + $iloscswiec;
  30.  
  31.  
  32.  
  33. echo '<p> Państwa zamówienie wygląda następująco : </p>';
  34.  
  35. if($ilosc == 0) {
  36. echo ' Na poprzedniej stronie nie złożono żadnego zamówienia!';
  37. }
  38. else {
  39. if ($iloscopon > 0) {
  40. echo $iloscopon. ' opon <br />';
  41. }
  42. if ($iloscoleju > 0) {
  43. echo $iloscoleju. ' butelek oleju <br />';
  44. }
  45. if ($iloscswiec >0) {
  46. echo $iloscswiec. ' świec zapłonowych <br />';
  47. }
  48.  
  49. }
  50.  
  51.  
  52.  
  53. echo '<p> Zamówionych części razem : ' .$ilosc;
  54. echo '</p>';
  55.  
  56.  
  57. define('CENAOPON', 100);
  58. define('CENAOLEJU', 10);
  59. define ('CENASWIEC', 4);
  60.  
  61. if($iloscopon <10)
  62. $znizka = 0;
  63. elseif ($iloscopon >=11 && $iloscopon <=40)
  64. $znizka = 0.05;
  65. elseif ($iloscopon >=41 && $iloscopon <=80)
  66. $znizka = 0.10;
  67. elseif ($iloscopon >=81 && $iloscopon <=1000)
  68. $znizka = 0.15;
  69.  
  70.  
  71. $opon = $iloscopon * CENAOPON;
  72. $oleju = $iloscoleju * CENAOLEJU;
  73. $swiec = $iloscswiec * CENASWIEC;
  74.  
  75. $opon = $opon * (1-$znizka);
  76.  
  77. $wartosc = $opon + $oleju + $swiec;
  78.  
  79.  
  80. echo '<p> Wartość netto zamówienia wynosi : ' .$wartosc. ' PLN <br />';
  81.  
  82. $podatekvat = 0.23;
  83.  
  84. $wartosc = $wartosc * (1+$podatekvat);
  85.  
  86. echo ' Wartość brutto zamówienia wynosi : ' .number_format ($wartosc, 2). ' PLN ';
  87.  
  88. echo '<p> Skąd się Pan dowiedział o naszej firmie? </p> ';
  89.  
  90. switch($jak) {
  91. case 'a':
  92. echo 'Jestem stałym klientem <br />';
  93. break;
  94. case 'b':
  95. echo 'Reklama telewizyjna <br />';
  96. break;
  97. case 'c':
  98. echo 'Książka telefoniczna <br />';
  99. break;
  100. case 'd':
  101. echo 'Od znajomego <br />';
  102. break;
  103. default:
  104. echo ' Nie wprowadzono danych';
  105. break;
  106. }
  107.  
  108.  
  109. $ciagwyjsciowy = $data."\t".$iloscopon." opon \t".$iloscoleju." butelek oleju\t"
  110. .$iloscswiec." swiec zapłonowych\t".$wartosc
  111. ."PLN\t". $adres."\n";
  112.  
  113.  
  114. @ $wp = fopen("$DOCUMENT_ROOT C:\xampp\htdocs\rozdzial2\zamowienia.txt", 'ab');
  115.  
  116. flock($wp, LOCK_EX);
  117.  
  118. if (!$wp) {
  119. echo "<p><strong> Zamówienie Państwa nie może zostać przyjęte w tej chwili.
  120. Proszę spróbować później.</strong></p></body></html>";
  121. }
  122.  
  123. fwrite($wp, $ciagwyjsciowy, strlen($ciagwyjsciowy));
  124. flock($wp, LOCK_UN);
  125. fclose($wp);
  126.  
  127. echo 'Zamówienie zostało zapisane';
  128.  
  129. ?>
  130.  
  131.  
  132. </body>
  133. </html>

Czy to źle, że podałem ścieżkę do pliku zamowienia.txt w ten sposób?
$DOCUMENT_ROOT C:\xampp\htdocs\rozdzial2\zamowienia.txt", 'ab'
Bo przyznam szczerze, że nie wiem z czego może ten błąd wynikać.
com
nie używaj @ i tu był błąd : $wp = fopen("C:\xampp\htdocs\rozdzial2\zamowienia.txt", 'ab'); jak juz to tak smile.gif
Furiapl
Dziękuje za pomoc jednak po modyfikacji kodu doszedł kolejny błąd i nadal to samo.
  1. Warning: fopen(C: mpp\htdocs ozdzial2\zamowienia.txt): failed to open stream: Invalid argument in C:\xampp\htdocs\rozdzial2\przetworzzamowienie.php on line 116
  2.  
  3. Warning: flock() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\rozdzial2\przetworzzamowienie.php on line 118
Comandeer
  1. $wp = fopen("C:\\xampp\\htdocs\\rozdzial2\\zamowienia.txt", 'ab');

Polecam poczytać o tym co robi znak \, bo to wyjaśni czemu trzeba go wstawić podwójnie do ścieżki.
com
patrz zapis ścieżki smile.gif
Furiapl
Wszystko pięknie działa.
Dziękuje serdecznie i pozdrawiam.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.