Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]zapisanie danych na serwerze
Forum PHP.pl > Forum > Przedszkole
webświr
Witam wszystkich jestem laikiem jeżeli chodzi o php, dopiero się go uczę, stawiam pierwsze kroczki i mam prośbę do starszych użytkowników, jeżeli możecie wyjaśnijcie mi co w poniższym kodzie jest nie tak że dane z formularza nie chcą się zapisać na serwerze.

  1. <?php
  2.  
  3. $iloscpiwo = $_POST ['iloscpiwo']; //przypisanie wartości poprzez użycie formularza
  4. $iloscwino = $_POST ['iloscwino'];
  5. $iloscwodka = $_POST ['iloscwodka'];
  6. $iloscdrink = $_POST ['iloscdrink'];
  7. $ilosccola = $_POST ['ilosccola'];
  8. $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
  9.  
  10. echo '<p>Zamówienie przyjęte o ';
  11. echo date('H:i. jS F Y'); //data
  12. echo '</p>';
  13. echo '<p>Zamówienie Państwa wygląda następująco: </p>';
  14.  
  15. echo $iloscpiwo.'Piwo<br />'; //wyświetla ilość zadeklarowaną w formularzu
  16. echo $iloscwino.'Wino<br />';
  17. echo $iloscwodka.'Wódka<br />';
  18. echo $iloscdrink.'Drink<br />';
  19. echo $ilosccola.'Cola<br />';
  20.  
  21. $ilosc = 0;
  22. $ilosc = $iloscpiwo + $iloscwino + $iloscwodka + $iloscdrink + $ilosccola;
  23. echo 'Zamówionych trunków: '.$ilosc. '<br />';
  24.  
  25. $wartosc = 0.00;
  26. define ( "CENAPIWA", 5); //przypisanie stałej wartości(ceny) piwa,wódki itd.
  27. define ( "CENAWINA", 10);
  28. define ( "CENAWÓDKI", 40);
  29. define ( "CENADRINKA", 7);
  30. define ( "CENACOLI", 4);
  31.  
  32. $wartosc = $iloscpiwo * CENAPIWA
  33. + $iloscwino * CENAWINA
  34. + $iloscwodka * CENAWÓDKI
  35. + $iloscdrink * CENADRINKA
  36. + $ilosccola * CENACOLI;
  37.  
  38. echo 'Cena netto: '.number_format($wartosc, 2).' PLN<br />';
  39.  
  40. $stawkavat = 0.22; // stawka VAT wynosi 22%
  41. $wartosc = $wartosc * (1 + $stawkavat);
  42. echo 'Cena brutto: ' .number_format($wartosc, 2).' PLN<br />';
  43.  
  44. if( $ilosc == 0 ){ //jeżeli podana ilość w formularzu jest równa zero wyświetli się poniższy komunikat
  45. echo '<p style="color:red">';
  46. echo 'Na poprzedniej stronie nie zostało złożone żadne zamówienie !<br /> ';
  47. echo '</p>';}
  48.  
  49. $co = $_POST ['co'];
  50. if($co == "a") {
  51. echo "<P>Brzuch ci urośnie</p>";
  52. } else if($co == "b") {
  53. echo "<P>Pod mostem smakuje najlepiej</p>";
  54. } else if($co == "c") {
  55. echo "<P>Gwarancja dobrej zabawy</p>";
  56. } else if($co == "d") {
  57. echo "<P>Takie rzeczy tylko w erze</p>";
  58. }
  59.  
  60. $ciagwyjsciowy = $data."\t".
  61. $iloscpiwo." piwo \t".
  62. $iloscwino." wino \t".
  63. $iloscwodka." wódka \t".
  64. $iloscdrink." drink \t".
  65. $ilosccola." cola \t".
  66. $wartosc." PLN \t";
  67.  
  68. @ $wp = fopen("$DOCUMENT_ROOT/.../zamowienia/zamowienia.txt". 'ab');
  69. flock($wp. LOCK_EX);
  70. fwrite($wp. $ciagwyjsciowy. strlen($ciagwyjsciowy));
  71. flock($wp. LOCK_UN);
  72. fclose($wp.);
  73.  
  74. echo "<p>Zamówienie zapisane.</p>";
  75. ?>
Niktoś
Jak byś nie miał @ przy funkcji to byś wiedział:
@ $wp = fopen("$DOCUMENT_ROOT/.../zamowienia/zamowienia.txt", 'ab'); .U siebie dałeś '.' zamiast ','
webświr
zamieniłem kropkę na przecinek niestety dalej nie działa

podaję odnośnik do czego kod się odnosi http://test333.jcom.pl/poczatki.html

PS: uczę się z książki w której nie ma odróżnienia między kropką a przecinkiem :/
Niktoś
Cytat
flock($wp. LOCK_EX);
fwrite($wp. $ciagwyjsciowy. strlen($ciagwyjsciowy));
flock($wp. LOCK_UN);
fclose($wp.);


Zamiast kropek wstaw wszędzie przecinki.Popatrz się na swój post funkcje oznaczone czerwonym to są odnośniki do manula,tam możesz sobie posprawdzać ,czy masz dobrze skonstruowane polecenia.
webświr
wszędzie przy wp dodałem przecinek i przy ciągwyjściowy i dalej nie działa. Przeglądam manuala ale nic nie widzę tym bardziej że całość skryptu funkcjonuje do momentu dodania polecenia zapisu pliku.

Niktoś
Czytam w manualu i proponują zrobić tak:
$DOCUMENT_ROOT = str_replace ("//", "/", $_SERVER['DOCUMENT_ROOT']."/");
Zresztą daj za linią 8:
echo $DOCUMENT_ROOT ;
i zobacz jak Tobie zwraca ścieżkę.
webświr
usunąłem ten element
@ $wp = fopen("$DOCUMENT_ROOT/.../zamowienia/zamowienia.txt", 'ab');
wkleiłem ten podany i zapisałem

dalej nie działa sciana.gif

wszystko jest praktycznie z książki zerżnięte i to mnie dziwi tym bardziej
Niktoś
Ej ,ale ja Tobie nie mówiłem żebyś to usunął.
@ $wp = fopen("$DOCUMENT_ROOT/.../zamowienia/zamowienia.txt", 'ab');-zresztą to też jest źle,kurna co to za książka?

Miałeś zamienić:
  1. $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
na
  1. $DOCUMENT_ROOT = str_replace ("//", "/", $_SERVER['DOCUMENT_ROOT']."/");
  2. echo $DOCUMENT_ROOT;

I podaj co ci wyskoczyło u góry.
webświr
nie zwraca mi żadnej ścieżki po wciśnięciu "złóż zamówienie" firefox wyświetla całą pustą stronę a IE wywala błąd
HTTP 500 Wewnętrzny błąd serwera

nie pokazuje żadnej ścieżki oto aktualny zapisany kod

  1. <?php
  2.  
  3. $iloscpiwo = $_POST ['iloscpiwo']; //przypisanie wartości poprzez użycie formularza
  4. $iloscwino = $_POST ['iloscwino'];
  5. $iloscwodka = $_POST ['iloscwodka'];
  6. $iloscdrink = $_POST ['iloscdrink'];
  7. $ilosccola = $_POST ['ilosccola'];
  8. $DOCUMENT_ROOT = str_replace ("//", "/", $_SERVER['DOCUMENT_ROOT']."/");
  9. echo $DOCUMENT_ROOT ;
  10.  
  11. echo '<p>Zamówienie przyjęte o ';
  12. echo date('H:i. jS F Y'); //data
  13. echo '</p>';
  14. echo '<p>Zamówienie Państwa wygląda następująco: </p>';
  15.  
  16. echo $iloscpiwo.'Piwo<br />'; //wyświetla ilość zadeklarowaną w formularzu
  17. echo $iloscwino.'Wino<br />';
  18. echo $iloscwodka.'Wódka<br />';
  19. echo $iloscdrink.'Drink<br />';
  20. echo $ilosccola.'Cola<br />';
  21.  
  22. $ilosc = 0;
  23. $ilosc = $iloscpiwo + $iloscwino + $iloscwodka + $iloscdrink + $ilosccola;
  24. echo 'Zamówionych trunków: '.$ilosc. '<br />';
  25.  
  26. $wartosc = 0.00;
  27. define ( "CENAPIWA", 5); //przypisanie stałej wartości(ceny) piwa,wódki itd.
  28. define ( "CENAWINA", 10);
  29. define ( "CENAWÓDKI", 40);
  30. define ( "CENADRINKA", 7);
  31. define ( "CENACOLI", 4);
  32.  
  33. $wartosc = $iloscpiwo * CENAPIWA
  34. + $iloscwino * CENAWINA
  35. + $iloscwodka * CENAWÓDKI
  36. + $iloscdrink * CENADRINKA
  37. + $ilosccola * CENACOLI;
  38.  
  39. echo 'Cena netto: '.number_format($wartosc, 2).' PLN<br />';
  40.  
  41. $stawkavat = 0.22; // stawka VAT wynosi 22%
  42. $wartosc = $wartosc * (1 + $stawkavat);
  43. echo 'Cena brutto: ' .number_format($wartosc, 2).' PLN<br />';
  44.  
  45. if( $ilosc == 0 ){ //jeżeli podana ilość w formularzu jest równa zero wyświetli się poniższy komunikat
  46. echo '<p style="color:red">';
  47. echo 'Na poprzedniej stronie nie zostało złożone żadne zamówienie !<br /> ';
  48. echo '</p>';}
  49.  
  50. $co = $_POST ['co'];
  51. if($co == "a") {
  52. echo "<P>Brzuch ci urośnie</p>";
  53. } else if($co == "b") {
  54. echo "<P>Pod mostem smakuje najlepiej</p>";
  55. } else if($co == "c") {
  56. echo "<P>Gwarancja dobrej zabawy</p>";
  57. } else if($co == "d") {
  58. echo "<P>Takie rzeczy tylko w erze</p>";
  59. }
  60.  
  61. $ciagwyjsciowy = $data."\t".
  62. $iloscpiwo." piwo \t".
  63. $iloscwino." wino \t".
  64. $iloscwodka." wódka \t".
  65. $iloscdrink." drink \t".
  66. $ilosccola." cola \t".
  67. $wartosc." PLN \t";
  68.  
  69. @ $wp = fopen("$DOCUMENT_ROOT/.../zamowienia/zamowienia.txt", 'ab');
  70. flock($wp, LOCK_EX);
  71. fwrite($wp, $ciagwyjsciowy, strlen($ciagwyjsciowy));
  72. flock($wp, LOCK_UN);
  73. fclose($wp,);
  74.  
  75. echo "<p>Zamówienie zapisane.</p>";
  76. ?>
Niktoś
Zamień te linijki na to.
  1. @ $wp = fopen($DOCUMENT_ROOT."zamowienia/zamowienia.txt", 'ab');
  2. flock($wp, LOCK_EX);
  3. fwrite($wp, $ciagwyjsciowy, strlen($ciagwyjsciowy));
  4. flock($wp,LOCK_UN);
  5. fclose($wp);


Wiesz co zmień może autora.
webświr
dobrze że książka pożyczona, ale kod dalej nie działa oczywiście mogę podać zmodyfikowany kod po zapisaniu ale nie chcę żeby było że zaśmiecam forum czy coś

czy jest taka możliwość że server nie jest prawidłowo skonfigurowany czy coś w te bańkę
Niktoś
Chyba coś zadziałało.
webświr
udało się gościu jesteś wielki zamówienie zapisane teraz tylko trzeba zrobić wjazd na chatę autorowi za to jak można takie ..... publikować
Niktoś
hehe.No to fajnie bo już mi w móżgu od myślenia się lasuje co by mogło byc jeszcze nie tak.Jak działa to dobrze:)
Zmień autora:)
webświr
przeoczyłem początkowo brak przecinka we wklejonym przez Ciebie poście

fclose($wp);
Niktoś
PS.Możesz usunąć echo $DOCUMENT_ROOT; -to miało na celu tylko pokazać wygląd ścieżki,ale jak działa to można usunąć.
webświr
niestety muszę odświeżyć ten temat bo aplikacja dalej nie zapisuje danych tzn funkcja fopen nie działa, przynajmniej tak mi się wydaje tutaj podaje kod aplikacji:

  1. $iloscpiwo = $_POST ['iloscpiwo']; //przypisanie wartości poprzez użycie formularza
  2. $iloscwino = $_POST ['iloscwino'];
  3. $iloscwodka = $_POST ['iloscwodka'];
  4. $iloscdrink = $_POST ['iloscdrink'];
  5. $ilosccola = $_POST ['ilosccola'];
  6. $DOCUMENT_ROOT = str_replace ("//", "/", $_SERVER['DOCUMENT_ROOT']."/");
  7.  
  8.  
  9. echo '<p>Zamówienie przyjęte o ';
  10. echo date('H:i. jS F Y'); //data
  11. echo '</p>';
  12. echo '<p>Zamówienie Państwa wygląda następująco: </p>';
  13.  
  14. echo $iloscpiwo.'Piwo<br />'; //wyświetla ilość zadeklarowaną w formularzu
  15. echo $iloscwino.'Wino<br />';
  16. echo $iloscwodka.'Wódka<br />';
  17. echo $iloscdrink.'Drink<br />';
  18. echo $ilosccola.'Cola<br />';
  19.  
  20. $ilosc = 0;
  21. $ilosc = $iloscpiwo + $iloscwino + $iloscwodka + $iloscdrink + $ilosccola;
  22. echo 'Zamówionych trunków: '.$ilosc. '<br />';
  23.  
  24. $wartosc = 0.00;
  25. define ( "CENAPIWA", 5); //przypisanie stałej wartości(ceny) piwa,wódki itd.
  26. define ( "CENAWINA", 10);
  27. define ( "CENAWÓDKI", 40);
  28. define ( "CENADRINKA", 7);
  29. define ( "CENACOLI", 4);
  30.  
  31. $wartosc = $iloscpiwo * CENAPIWA
  32. + $iloscwino * CENAWINA
  33. + $iloscwodka * CENAWÓDKI
  34. + $iloscdrink * CENADRINKA
  35. + $ilosccola * CENACOLI;
  36.  
  37. echo 'Cena netto: '.number_format($wartosc, 2).' PLN<br />';
  38.  
  39. $stawkavat = 0.22; // stawka VAT wynosi 22%
  40. $wartosc = $wartosc * (1 + $stawkavat);
  41. echo 'Cena brutto: ' .number_format($wartosc, 2).' PLN<br />';
  42.  
  43. if( $ilosc == 0 ){ //jeżeli podana ilość w formularzu jest równa zero wyświetli się poniższy komunikat
  44. echo '<p style="color:red">';
  45. echo 'Na poprzedniej stronie nie zostało złożone żadne zamówienie !<br /> ';
  46. echo '</p>';}
  47.  
  48. $co = $_POST ['co'];
  49. if($co == "a") {
  50. echo "<P>Brzuch ci urośnie</p>";
  51. } else if($co == "b") {
  52. echo "<P>Pod mostem smakuje najlepiej</p>";
  53. } else if($co == "c") {
  54. echo "<P>Gwarancja dobrej zabawy</p>";
  55. } else if($co == "d") {
  56. echo "<P>Takie rzeczy tylko w erze</p>";
  57. }
  58.  
  59. $ciagwyjsciowy = $data."\t".
  60. $iloscpiwo." piwo \t".
  61. $iloscwino." wino \t".
  62. $iloscwodka." wódka \t".
  63. $iloscdrink." drink \t".
  64. $ilosccola." cola \t".
  65. $wartosc. "PLN \t";
  66.  
  67. $wp = fopen("$DOCUMENT_ROOT.zamowienie/zamowienia.txt", 'ab');
  68. flock($wp, LOCK_EX);
  69.  
  70. if (!$wp) {
  71. echo "<p><strong> Zamówienie Państwa nie może zostać przyjęte w tej chwili.
  72. Proszę spróbować później.</strong></p>";
  73. } else {
  74. echo "<p><strong>zamówienie zapisane</p></strong>";
  75. }
  76. fwrite($wp, $ciagwyjsciowy, strlen($ciagwyjsciowy));
  77. flock($wp, LOCK_UN);
  78. fclose($wp);
  79.  
  80.  
  81. ?>


i strona aplikacji http://test333.jcom.pl/poczatki.html

a tu podaję sprawdzenie zamówienia

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  3.  
  4. <?php
  5. $DOCUMENT_ROOT = str_replace ("//", "/", $_SERVER['DOCUMENT_ROOT']."/");
  6. ?>
  7.  
  8. <html>
  9. <head>
  10. <h1>Bar Zdzicha</h1>
  11. </head>
  12. <body>
  13.  
  14. <h2>zamówienia klientów</h2>
  15.  
  16. <?php
  17. @ $wp = fopen("$DOCUMENT_ROOT.zamowienia/zamowienia.txt",'rb');
  18.  
  19. if (file_exists ("$DOCUMENT_ROOT.zamowienia/zamowienia.txt")) {
  20. echo 'plik istnieje';
  21. } else {
  22. echo 'pliku nie ma';
  23. }
  24.  
  25. if (!$wp) {
  26. echo "<p><strong>Brak zamówień.
  27. Proszę spróbować później. </strong></p>";
  28. }
  29. while (!feof($wp)) {
  30. $zamowienie = fgets($wp. 999);
  31. echo $zamowienie . "<br />";
  32. }
  33. fclose($wp);
  34.  
  35.  
  36. ?>
  37.  
  38. </body>
  39. </html>


i strona na sprawdzenie zamówienia http://test333.jcom.pl/zamowieniezdzicha.php

Edit: dodam tylko że w książce znalazłem jakieś polecenia dla systemów unix sprawdziłem w cpanel jest tam coś odnośnie wersji apache i w nawiasie unix znalezione polecenia to mkdir oraz chmod777 nie mam pojęcia tylko jak tego użyć książka milczy na ten temat.
Niktoś
Popatrz z mojego przykładu:
Cytat
@ $wp = fopen($DOCUMENT_ROOT."zamowienia/zamowienia.txt", 'ab');

A ty zmieniłeś na:
Cytat
$wp = fopen("$DOCUMENT_ROOT.zamowienie/zamowienia.txt", 'ab');

Widzisz rożnice,a wiesz co się dzieje?Podajesz ścieżkę dostępu do pliku $DOCUMENT_ROOT.zamowienie/zamowienia.txt zamiast przykładowo c:\AppServ\www\zamowienie\zamowienia.txt
webświr
ścieżkę poprawiłem ale dalej nie działa
Niktoś
A wszystkie tak pozmieniałeś?
$zamowienie = fgets($wp. 999);- a ty znowu z kropkami -tam ma być przecinek-najlepiej posprawdzaj sobie wszystkie polecenia w manualu,bo jak książka jest nieczytelna to się jej nie czyta.
webświr
tak na jednej i drugiej podstronie (wszystkich są 3)

wyłapałeś błąd za to dzięki.

tylko że gets służy do odczytu pliku a ja dałem instrukcję która wywala informację że plik nie istnieje

  1. #
  2. if (file_exists ("$DOCUMENT_ROOT.zamowienia/zamowienia.txt")) {
  3. #
  4. echo 'plik istnieje';
  5. #
  6. } else {
  7. #
  8. echo 'pliku nie ma';
  9. #
  10. }
Niktoś
Nie
Cytat
if (file_exists ("$DOCUMENT_ROOT.zamowienia/zamowienia.txt")) {

a

Cytat
if (file_exists ($DOCUMENT_ROOT."zamowienia/zamowienia.txt")) {

A mówiłeś ,że wszystko poprawiłeś.
webświr
bo skopiowałem z tematu dry.gif

Niktoś
Zrób aby ci na stronie wyświetliło $DOCUMENT_ROOT
zrób
Cytat
echo $DOCUMENT_ROOT;
webświr
dodałem ale nic nowego na stronie się nie wyświetla

  1. $DOCUMENT_ROOT = str_replace ("//", "/", $_SERVER['DOCUMENT_ROOT']."/");
  2. echo $DOCUMENT_ROOT;


niewłaściwe miejsce ?

w tej chwil mam wrażenie jak bym wogóle stracił kontrolę nad stroną zmieniłem treść zapisałem plik w edytorze odświeżyłem stronę i nie ma żadnej różnicy
Niktoś
Powiedz ,dlaczego zadekarowałeś tag <html> dwa razy?W tej książce tak było?
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  3.  
  4. <?php
  5. $DOCUMENT_ROOT = str_replace ("//", "/", $_SERVER['DOCUMENT_ROOT']."/");
  6. ?>
  7.  
  8. <html>//-usuń to
  9. <head>
  10. <h1>Bar Zdzicha</h1>
  11. </head>
  12. <body>

webświr
cholera nie, cały dzień już ślęczę nad tym kodem i nie mogę tego rozkminić musiałem dodać coś od siebie i zapomniałem o tym (poprawione) a teraz jeszcze ta utrata kontroli nad stroną
Niktoś
Musisz te pliki zamieścić na hosting.Ja się na hostingach nie bawiłem ,więc nawet nie wiem czy jest możliwość zapisu pliku.
webświr
niebardzo wiem co się dzieje nie mam wogóle możliwości edycji plików php

działa polecenie echo dało coś takiego /home/vol2/jcom.pl/jcom_10329730/htdocs/
Niktoś
Masz tam w htdocs folder zamowienia?
webświr
nie nie mam takiego folderu

za to mam pytanie
czy plik zamowienia.php może zmieniać swoje położenie na serwerze bo raz mam możliwość edycji tego pliku a raz nie tak jak by zmieniał swoją lokalizację już nawet przeszedłem na innego klienta ftp a tu znowu nie mogę edytować php
Niktoś
To musisz utworzyć ten folder jak chcesz zapisać plik do folderu którego nie ma?
Cytat
czy plik zamowienia.php może zmieniać swoje położenie na serwerze bo raz mam możliwość edycji tego pliku a raz nie tak jak by zmieniał swoją lokalizację już nawet przeszedłem na innego klienta ftp a tu znowu nie mogę edytować php

Nie nie możesz chyba że ustawisz inaczej w php.ini , u ciebie katalog główny serwera to chyba htdoc.
webświr
nie wszystko jeszcze działa ale w folderze zamowienia pojawił się plik txt
Niktoś
No widzisz to duży krok ,na przód.Pisze ,że zamówienie złożone-zapisuje ci do txt?.
webświr
tak zapisuje do txt
trzeba coś zrobić żeby każdy wpis był pod sobą bo mi się to zapisuje jednym ciągiem

no i nie wyświetla mi wyników na tej drugiej podstronie jest tylko informacja że taki plik istnieje

Niktoś
Aby nie było w jednej lini to:
Cytat
$ciagwyjsciowy = $data."\t".
$iloscpiwo." piwo \t".
$iloscwino." wino \t".
$iloscwodka." w�dka \t".
$iloscdrink." drink \t".
$ilosccola." cola \t".
$wartosc." PLN \t";

tam gdzie \t zmień na \n -zamiast t to n.Dalej musisz radzić sobie sam i kombinować,bo tutaj limit postów jest ograniczony wink.gif
Powodzenia
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.