Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przykład z książki nie działa
Forum PHP.pl > Forum > Przedszkole
Musashi
Witam.
Jestem bardzo początkujący w php. Po długich bojach z czerwoną kontrolką dopiero wczoraj udało mi się uruchomić Krasnala i próbuję coś w nim działać. Kupiłem także książkę "php i MySQL - Tworzenie stron WWW" - vademecum profesjonalisty i przepisuję z niej przykłady zamieszczając je w katalogu Krasnala.
Już przykład z rozdziału 2 nie działa. Składam zamówienie poprzez formularz, lecz dane nie są zapisywane i wyskakuje komunikat, że nic nie zostało zamówione.

W rozdziale 2 znajdują się następujące pliki:
formularz.html
  1. <title>Części samochodowe Janka</title>
  2. </head>
  3. <h1>Części samochodowe Janka</h1>
  4. <h2>Formularz zamówienia</h2>
  5.  
  6. <form action="przetworzzamowienie.php" method=post>
  7. <table border=0>
  8. <tr bgcolor=#cccccc>
  9. <td width=150>Produkt</td>
  10. <td width=15>Ilość</td>
  11. </tr>
  12. <tr>
  13. <td>Opony</td>
  14. <td align=left><input type="text" name="iloscopon" size=3 maxlength=3></td>
  15. </tr>
  16. <tr>
  17. <td>Olej</td>
  18. <td align=left><input type="text" name="iloscoleju" size=3 maxlength=3></td>
  19. </tr>
  20. <tr>
  21. <td>Świece Zapłonowe</td>
  22. <td align=left><input type="text" name="iloscswiec" size=3 maxlength=3></td>
  23. </tr>
  24. <tr>
  25. <td>Adres</td>
  26. <td align=left><input type="text" name="adres" size=40 maxlength=40></td>
  27. </tr>
  28. <tr>
  29. <td colspan=2 align=center><input type=submit value="Złóż zamówienie"></td>
  30. </tr>
  31. </form>
  32.  
  33. </body>
  34. </html>


przetworzzamowienie.php
  1. <?php
  2.   // utworzenie krótkich nazw zmiennych
  3.   $iloscopon = $_POST['iloscopon'];
  4.   $iloscoleju = $_POST['iloscoleju'];
  5.   $iloscswiec = $_POST['iloscswiec'];
  6.   $adres = $_POST['adres'];
  7.   $adres = $_POST['adres'];
  8.  
  9.   $DOCUMENT_ROOT = $_POST['DOCUMENT_ROOT'];
  10. ?>
  11.  
  12. <html>
  13. <head>
  14.   <title>Części samochodowe Janka — wyniki zamówienia</title>
  15. </head>
  16. <body>
  17. <h1>Części samochodowe Janka</h1>
  18. <h2>wyniki zamówienia</h2>
  19. <?php
  20.  
  21.  $data=date('H:i, jS F');
  22.  
  23.   echo '<p>Zamówienie przyjęte o ';
  24.  
  25.   echo $data;
  26.   echo '</p>';
  27.   echo '<p>Zamówienie Państwa wygląda następująco: </p>';
  28.  
  29.   $ilosc=0;
  30.   $ilosc=$iloscopon+$iloscoleju+$iloscswiec;
  31.  
  32.   if( $ilosc == 0 )
  33.   {
  34.     echo 'Na poprzedniej stronie nie zostało złożone żadne zamówienie!<br />';
  35.   }
  36.   else
  37.   {
  38.     if ( $iloscopon>)
  39.       echo $iloscopon.' opon<br />';
  40.     if ( $iloscoleju>)
  41.       echo $iloscoleju.' butelek oleju<br />';
  42.     if ( $iloscswiec>)
  43.       echo $iloscswiec.' świec zapłonowych<br />';
  44.   }
  45.  
  46.   $wartosc=0.00;
  47.  
  48.   define('CENAOPON', 100);
  49.   define('CENAOLEJU', 10);
  50.   define('CENASWIEC', 4);
  51.  
  52.   $wartosc =$iloscopon * CENAOPON + $iloscoleju * CENAOLEJU + $iloscswiec * CENASWIEC;
  53.  
  54.   $wartosc=number_format($wartosc, 2, '.', ' ');
  55.  
  56.   echo '<P>Wartość zamówienia wynosi '.$wartosc.'</P>';
  57.  
  58.   echo '<P>Adres wysyłki to '.$adres. '</P>';
  59.  
  60.   $ciagwyjsciowy = $data.&#092;"t\".$iloscopon.\" opon t\".$iloscoleju.\" butelek olejut\"
  61.                    .$iloscswiec.&#092;" swiec zapłonowycht\".$wartosc
  62.                    .&#092;"PLN/t\". $adres.\"n\";
  63.  
  64.   // otwarcie pliku w celu dopisywania
  65. @ $wp = fopen(&#092;"$DOCUMENT_ROOT/../zamowienia/zamowienia.txt\", 'ab');
  66.  
  67.   if (!$wp)
  68.   {
  69.     echo '<p><strong> Zamówienie Państwa nie może zostać przyjęte w tej chwili.  '
  70.          .'Proszę spróbować później.</strong></p></body></html>';
  71.     exit;
  72.   }
  73.  
  74.   fwrite($wp, $ciagwyjsciowy, strlen($ciagwyjsciowy));
  75.   fclose($wp);
  76.  
  77.   echo '<p>Zamówienie zapisane.</p>';
  78. ?>
  79. </body>
  80. </html>


zamowienia.txt
Kod
19:35, 18 lipca    4 opon    1 butelek oleju    6 świec zapłonowych    1820.00PLN    ul. Krótka 22, Kraków
19:37, 18 lipca    1 opon    0 butelek oleju    0 świec zapłonowych    400.00PLN    ul. Główna 33, Gliwice
19:38, 18 lipca    0 opon    1 butelek oleju    4 świec zapłonowych    180.00PLN    ul. Akacjowa 127, Warszawa


zobaczzamowienia.php
  1. <?php
  2.   // utworzenie krótkich nazw zmiennych
  3.   $DOCUMENT_ROOT = $HTTP_SERVER_VARS['DOCUMENT_ROOT'];
  4. ?>
  5. <html>
  6. <head>
  7.   <title>Części samochodowe Janka — zamówienia klientów</title>
  8. </head>
  9. <body>
  10. <h1>Części samochodowe Janka</h1>
  11. <h2>Zamówienia klientów</h2>
  12. <?php
  13.  
  14. @ $wp = fopen(&#092;"$DOCUMENT_ROOT/../zamowienia/zamowienia.txt\", 'r');
  15.  
  16.   if (!$wp)
  17.   {
  18.     echo '<p><strong>Brak zamówień.'
  19.         .'Proszę spróbować później.</strong></p></body></html>';
  20.     exit;
  21.   }
  22.  
  23.   while (!feof($wp))
  24.   {
  25.     $zamowienie = fgets($wp, 999);
  26.     echo $zamowienie.'<br>';
  27.   }
  28.   
  29.   fclose($wp);
  30.  
  31. ?>
  32. </body>
  33. </html>


Wszystkie te pliki umieściłem na moim serwerze http://student.wisz.edu.pl/~kfialkowski/rozdzial_02/

Wpisuję do przeglądarki http://localhost/~formularz.html w celu wypełnienia formularza, a następnie zatwierdzam. Wtedy automatycznie uruchamia się plik przetworzzamowienie.php, ale już bez tyldy przed nim, czyli http://localhost/przetworzzamowienie.php, przy czym się nie wyświetla. Gdy po tym dopiszę ową tyldę informuje mnie, że nie było żadnych zamówień.
Proszę o pomoc.

Pozdrawiam,
K.
Kamis
Podstawowe pytanie... po co Ci ta tylda questionmark.gif?
Jeśli masz plik nazwany "cos.php" to nie "~cos.php". Serwer rozróżnia również duże i małe litery w nazwie plików... czyli plik "nazwa.php" nie jest taki sam jak "Nazwa.php"...

Podsumowując... jak masz pliki nazwane "cos.php" to nie wprowadzaj tej tyldy. W ogóle wprowadzanie znaków specjalnych do nazw plików jest nie wskazane... (czyt. polskich też - ąźć itp).

Zobacz coś takiego:
plik zobaczzamowienia.php
  1. <?php
  2.   // utworzenie krótkich nazw zmiennych
  3.   //$DOCUMENT_ROOT = $HTTP_SERVER_VARS['DOCUMENT_ROOT'];
  4. ?>
  5. <html>
  6. <head>
  7.   <title>Części samochodowe Janka — zamówienia klientów</title>
  8. </head>
  9. <body>
  10. <h1>Części samochodowe Janka</h1>
  11. <h2>Zamówienia klientów</h2>
  12. <?php
  13.  
  14. @ $wp = fopen(&#092;"zamowienia.txt\", 'r'); 
  15. // oznacza to, ze masz w tym samym katalogu wszystkie pliki
  16.   if (!$wp)
  17.   {
  18.     echo '<p><strong>Brak zamówień.'
  19.         .'Proszę spróbować później.</strong></p></body></html>';
  20.     exit;
  21.   }
  22.  
  23.   while (!feof($wp))
  24.   {
  25.     $zamowienie = fgets($wp, 999);
  26.     echo $zamowienie.'<br>';
  27.   }
  28.   
  29.   fclose($wp);
  30.  
  31. ?>
  32. </body>
  33. </html>


Czyli moim zdaniem masz źle podane:
$DOCUMENT_ROOT/../zamowienia/zamowienia.txt <--- co to oznacza?

$DOCUMENT_ROOT - zmienna wyciągnięta z php oznaczająca ścieżkę do katalogu "domowego", do którego wrzucasz pliki uruchamiane przez krasnala

../zamowienia/zamowienia.txt - w tym katalogu głównym znajduje się folder zamowienia a w nim plik zamowienia.txt z tego co piszesz... wynika, że masz wszystko w jednym miejscu... więc zlikwiuduj to zostawiając ../zamowienia.txt

Tak samo zmień w pozostałych... Może pomoże?
Powodzenia smile.gif
Musashi
Cytat(Kamis @ 2005-05-25 22:23:26)
Podstawowe pytanie... po co Ci ta tylda questionmark.gif?
Jeśli masz plik nazwany "cos.php" to nie "~cos.php". Serwer rozróżnia również duże i małe litery w nazwie plików... czyli plik "nazwa.php" nie jest taki sam jak "Nazwa.php"...

Więc rozpoczynam od uruchomienia pliku formularz.html. Znajduje się on w katalogu c:\usr\krasnal\www.
Gdy próbuję go uruchomić poprzez polecenie http://localhost/formularz.html przeglądarka generuje błąd 404. Gdy dodam tyldę i wpiszę http://localhost/~formularz.html formularz jest uruchamiany poprawnie, lecz mimo, że zmieniłem ścieżkę w pliku przetworzzamowienie.php na
  1. <?php
  2. @ $wp = fopen(&#092;"../zamowienia.txt\", 'ab');
  3. ?>

pojawia się (tak jak przedtem) strona http://localhost/przetworzzamowienie.php (bez tyldy) z komunikatem: "błąd 404; STRONA O PODANEJ NAZWIE JESZCZE NIE ISTNIEJE LUB ZOSTAŁA USUNIETA".
Czyli mówiąc inaczej nic się nie zmieniło. Formularz mogę uruchomić tylko z tyldą, bo inaczej wyświetla taki sam komunikat błędu jak powyżej. W dalszym ciągu nie uruchamia się prawidłowa strona z zamówieniami w pliku przetworzzamowienie.php.
Gdybyś mógł to ściągnij te pliczki z mojego serwera i przetestuj. To tylko kilka kB.
Pozdrawiam,
K.
aleksander
  1. <form action="~przetworzzamowienie.php" method="post">
questionmark.gif
Musashi
Cytat(aleksander @ 2005-05-26 06:02:12)
  1. <form action="~przetworzzamowienie.php" method="post">
questionmark.gif

Dziękuję bardzo. Wstawienie tej tyldy pomogło i wszystko jest w porządku - odbiera prawidłowo.

Pozdrawiam,
K.

EDIT
Widzę wyniki zamówienia w pliku przetworzzamowienie.php, lecz nie zostaje to podsumowane w zobaczzamowienia.php. Myślę, że chodzi znowu o jakąś interakcję między plikami.
Podejrzewam, że w zobaczzamowienia.php jest jakieś błędne odwołanie do przetworzzamowienie.php, n.p. w tym wierszu: $DOCUMENT_ROOT = $HTTP_SERVER_VARS['DOCUMENT_ROOT']; Tak mi się wydaje.

  1. <?php
  2. // utworzenie krótkich nazw zmiennych
  3. $DOCUMENT_ROOT = $HTTP_SERVER_VARS['DOCUMENT_ROOT'];
  4. ?>
  5. <html>
  6. <head>
  7. <title>Części samochodowe Janka — zamówienia klientów</title>
  8. </head>
  9. <body>
  10. <h1>Części samochodowe Janka</h1>
  11. <h2>Zamówienia klientów</h2>
  12. <?php
  13.  
  14. @ $wp = fopen(&#092;"$DOCUMENT_ROOT/../zamowienia/zamowienia.txt\", 'r');
  15. //zmieniłem ten wiersz na @ $wp = fopen(\"../zamowienia.txt\", 'r');
  16. //i też nie pomogło
  17.  
  18. if (!$wp)
  19. {
  20. echo '<p><strong>Brak zamówień.'
  21. .'Proszę spróbować później.</strong></p></body></html>';
  22. }
  23.  
  24. while (!feof($wp))
  25. {
  26. $zamowienie = fgets($wp, 999);
  27. echo $zamowienie.'<br>';
  28. }
  29.  
  30. fclose($wp);
  31.  
  32. ?>
  33. </body>
  34. </html>


Pozdrawiam,
K.
czachor
  1. <?php
  2. //Nie:
  3. $HTTP_SERVER_VARS['DOCUMENT_ROOT'];
  4. //ale:
  5. $_SERVER['DOCUMENT_ROOT'];
  6. ?>
Musashi
Cytat(czachor @ 2005-05-26 19:49:35)
  1. <?php
  2. //Nie:
  3. $HTTP_SERVER_VARS['DOCUMENT_ROOT'];
  4. //ale:
  5. $_SERVER['DOCUMENT_ROOT'];
  6. ?>

Dziękuję, zapisuje się pięknie, nawet zapamiętało to co wpisywałem kilka godzin temu smile.gif
No i teraz próbuj zrozumieć skrypty z książki, tym bardziej vademecum profesjonalisty (sic!). Chyba, że to polecenie nie jest kompatybilne z Krasnalem. Mam na myśli to jak na przykład, że przed nazwą końcowego pliku w URLu trzeba wstawić tyldę. Widzę, że będą dalej problemy z tymi książkowymi przykładami. Nie wiem ile wypada się komuś naprzykrzać zadając ciągle lamerskie pytania. Ale cóż, egzamin już niedługo...
Czy można wytłumaczyć jaka jest różnica między tym $HTTP_SERVER_VARS, a $_SERVER?

Pozdrawiam,
K.
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.