 |
Coders' city Nasza pasja to programowanie!
|
| Zobacz poprzedni temat :: Zobacz następny temat |
| Autor |
Wiadomość |
matii578

Dołączył: 18 Gru 2011 Posty: 12
|
Wysłany: Wto Sty 24, 2012 6:42 pm Temat postu: Kontakt - błąd z odczytem pliku |
|
|
Witam. Napisałem skrypt kontaktu, który zapisuje treść wiadomości do pliku. Po wciśnięciu przycisku "Wyślij" wyświetla wiadomość. Do tego momentu wszystko działa. Problem zaczyna się gdy w pliku "tajne.php" wiadomość ma być odczytana. Jeśli przy wpisywaniu treści kliknie się klawisz "enter" To przerzuca do nowej lini i wpisuje jako "imię". Jeśli mnie nie zrozumieliście załączam plik w którym jest ten skrypt. Wiem oczywiście czym jest spowodowany ten błąd (pojawiającymi się znakami "\n") lecz nie umiem go zlikwidować. Próbowałem funkcją nl2br(); ale też nie pomogło.
Byłbym wdzięczny za pomoc.
Pozdrawiam
Kod Pliku index.html
| Kod: |   <html>
  <head>
  <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-2" />
  <style type="text/css">
  body
  {
  background-color: gray;
  color: black;
  font-family: tahoma;
  font-size: 14px;
  }
  .naglowek
  {
  background-color: black;
  color: white;
  width: 100%;
  height: 50px;
  margin-top: 25px;
  text-align: center;
  font-family: Cooper Black,tahoma;
  }
  </style>
  <body>
  <div class="naglowek">
  <h1>Kontakt</h1>
  </div>
  <form action="przetworzkontakt.php" target="strona" method="post">
  <table border="0" cellpadding="10%" cellspacing="10%">
  <tr>
  <td width="45%">
  <p><b>Imię:</b> <br /><input type="text" id="imie" name="imie" value="Imię" maxlength="25" /></p>
  <p><b>Nazwisko:</b> <br /><input type="text" id="nazwisko" name="nazwisko" value="Nazwisko" maxlength="25" /></p>
  <p><b>e-mail:</b> <br /><input type="text" id="mail" name="mail" value="mail" maxlength="40" /></p>
  <p><b>Klasa:</b><br /><input type="radio" id="1" value="1" name="klasa" [checked="checked"]/> 1
  <br /><input type="radio" id="2a" value="2a" name="klasa" [checked="checked"]/> 2a
  <br /><input type="radio" id="2b" value="2b" name="klasa" [checked="checked"]/> 2b
  <br /><input type="radio" id="3a" value="3a" name="klasa" [checked="checked"]/> 3a
  <br /><input type="radio" id="3b" value="3b" name="klasa" [checked="checked"]/> 3b
  <br /><input type="radio" id="Rodzic" value="Rodzic" name="klasa" [checked="checked"]/> Rodzic
  <br /><input type="radio" id="Nauczyciel" value="Nauczyciel" name="klasa" [checked="checked"]/> Nauczyciel</p>
  </td>
  <td width="45%">
  <p><b>Temat:</b> <input type="text" id="Temat" value="Temat" name="temat" maxlength="40" /></p>
  <p><b>Tresc:</b><br /> <textarea id="tresc" name="tresc" cols="50" rows="10"></textarea></p>
 
  </td>
  </tr>
  <tr>
  <td colspan="2" align="center"><input type="submit" value="Wyslij" /></td>
  </tr>
  </table>
  </form>
  </body>
  </html>
|
Kod pliku przetworzkontakt.php
| Kod: |   <?php
  $imie = $_POST['imie'];
  $nazwisko = $_POST['nazwisko'];
  $klasa = $_POST['klasa'];
  $temat = $_POST['temat'];
  $tresc = $_POST['tresc'];
  $mail = $_POST['mail'];
  ?>
  <html>
  <head>
  <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-2" />
  <title>Kontakt</title>
  <style type="text/css">
  body
  {
  background-color: gray;
  color: black;
  font-family: tahoma;
  font-size: 14px;
  }
  .naglowek
  {
  background-color: black;
  color: white;
  width: 100%;
  height: 50px;
  margin-top: 25px;
  text-align: center;
  font-family: Cooper Black,tahoma;
  }
  </style>
  </head>
  <body>
  <div class="naglowek">
  <h1>Kontakt</h1>
  </div>
  <p>
  <b>
  <?php
  echo "Imię: ".$imie."<br />";
  echo "Nazwisko: ".$nazwisko."<br />";
  echo "e-mail: ".$mail."<br />";
  echo "Klasa: ".$klasa."<br />";
  echo "Temat: ".$temat."<br />";
  echo "Tresc:<p>".nl2br($tresc)."</p>";
  ?>
  </b>
  </p>
  <?php
  $ciag = $imie."\t".$nazwisko."\t".$mail."\t".$klasa."\t".$temat."\t".nl2br($tresc)."\t\n";
  $ciag = nl2br($ciag);
  @ $wp = fopen("wiad.wiadomosci", 'ab');
  flock($wp, LOCK_EX);
  if (!$wp) {
  echo "<p><b>Wystąpił BŁĄD. Niestety nie udało się wysłac wiadomości. Przepraszamy</b></p></body></html>";
  exit;
  }
  fwrite($wp, $ciag, strlen($ciag));
  flock($wp, LOCK_UN);
  fclose($wp);
  echo "<center><p><b>Wiadomośc wysłana</b></p></center>"
  ?>
  </body>
  </html>
|
Kod pliku tajne.php
| Kod: |   <html>
  <head>
  </head>
  <body>
  <center><h1>Panel administracyjny</h1></center>
  <hr /><br />
  <?php
  @ $wiadomosci = file("wiad.wiadomosci");
  $ilosc = count($wiadomosci);
  if ($ilosc == 0) {
  echo "<p><b>brak wiadomosci</b></p>";
  }
  
  for ($i=0; $i<$ilosc; $i++) {
  $linia = explode( "\t", $wiadomosci[$i]);
  $linia[5] = ereg_replace("\r\n\r\n", "\n<P>", $linia[5]);
  echo "<b>Imię:</b> ".$linia[0]."<br />
  <b>Nazwisko:</b> ".$linia[1]."<br />
  <b>e-mail:</b> ".$linia[2]."<br />
  <b>Klasa:</b> ".$linia[3]."<br />
  <b>Temat:</b> ".$linia[4]."<br />
  <b>Treśc:</b><br />".$linia[5]."<br />"
  .$linia[6].
  "<hr />";
  }
  ?>
  </body>
  </html>
|
| Opis: |
|
 Pobierz |
| Nazwa pliku: |
kontakt.rar |
| Wielkość pliku: |
2.03 KB |
| Pobierano: |
4 raz(y) |
|
|
| Powrót do góry |
|
 |
|
|
Garf

Dołączył: 25 Maj 2005 Posty: 3348 Skąd: Rzeszów
|
Wysłany: Wto Sty 31, 2012 11:02 am Temat postu: |
|
|
Primo, to polecam nauczyć się HTML, bo to co masz to nie jest ani HTML, ani tym bardziej XHTML. To po prostu taka zupka tagowa. Dodatkowo zmieszana z PHP, co daje przepiękny kod spaghetti. Secundo, to dokumentacji do PHP prawdopodobnie nie czytałeś. Używasz na oślep funkcji - zastanawiam się czy w ogóle sprawdzałeś co generuje się w pliku wynikowym. Najpierw zorientuj się co robi funkcja której używasz, a potem użyj. Podpowiem, że do pozbycia się znaków nowej linii w treści wystarczy str_replace.
_________________ Zakochanie - to relacja międzyosobowa wynikająca z upodobania sobie w kimś, powodującego zależność emocjonalną od tego kogoś. Na miarę siły owej zależności następuje proporcjonalnie: utrata zdrowego rozsądku oraz zdolności do samodecydowania. o. Paweł Gużyński OP |
|
| Powrót do góry |
|
 |
matii578

Dołączył: 18 Gru 2011 Posty: 12
|
Wysłany: Czw Lut 02, 2012 7:02 pm Temat postu: |
|
|
| Ok. Dzięki. Jestem samoukiem. Ale nie rozumiem co jest źle w moim HTML. Jakbyś mógł to mi odpowiedz. PHP dopiero zacząłem się uczyć (jestem dopiero na 200 stronie poradnika), a to był mój pierwszy skrypt. Nie jestem żadnym doświadczonym informatykiem. Jestem dopiero Gimnazjalistą.
|
|
| Powrót do góry |
|
 |
Garf

Dołączył: 25 Maj 2005 Posty: 3348 Skąd: Rzeszów
|
Wysłany: Czw Lut 02, 2012 10:45 pm Temat postu: |
|
|
Skoro jesteś samoukiem, i w dodatku osobą młodą, to najlepszy czas aby korygować nabyte złe nawyki ;) Co złego jest w Twoim kodzie HTML? Ano, bazowy szkielet dla obecnie używanej wersji wygląda tak:
| Kod: |   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
  <HTML>
  <HEAD>
  <TITLE>My first HTML document</TITLE>
  </HEAD>
  <BODY>
  <P>Hello world!
  </BODY>
  </HTML>
|
Ot, choćby brak nagłówka DOCTYPE u Ciebie. Na wielkość liter nie zwracaj uwagi - w HTML jest to bez różnicy.
Zaczynając od początku: HTML i CSS. Jeśli dokumentacja Cię przeraża (a na początkujących tak zwłaszcza działa), na forum toczyły się już dyskusje o kursach w internecie. Ot, chociażby w tym wątku. Ale uwaga! Kurs jest o XHTML - niby to samo, ale troszkę inaczej. W każdym razie kurs da Ci ogólne pojęcie o używaniu tego języka. Dla PHP masz w miarę dobrą dokumentację po polsku - choć najlepiej czytać ją w języku, w którym została napisana (czyli w angielskim).
Na koniec: poprawność kodu HTML najłatwiej sprawdzić na walidatorze. Jak dobrze poszukasz to i do CSS znajdziesz. Osobiście używam jeszcze tego dodatku do Firefox'a. Plus jest taki, że od razu widać czy kod jest poprawny - bez zbędnego klikania po walidatorze.
_________________ Zakochanie - to relacja międzyosobowa wynikająca z upodobania sobie w kimś, powodującego zależność emocjonalną od tego kogoś. Na miarę siły owej zależności następuje proporcjonalnie: utrata zdrowego rozsądku oraz zdolności do samodecydowania. o. Paweł Gużyński OP |
|
| Powrót do góry |
|
 |
matii578

Dołączył: 18 Gru 2011 Posty: 12
|
Wysłany: Pią Lut 03, 2012 4:30 pm Temat postu: |
|
|
Ja poradnik już czytałem "HTML, XHTML i CSS. Biblia" wydawnictwa Helion, ale nie starałem się wszystkiego wkuwać, tylko chciałem mieć ogólny zarys pisania stron. Wiem, że brak mi DOCTYPE, ale jak już pisałem to mój pierwszy skrypt, i nie bawiłem się tutaj w HTML tylko bardziej w PHP. Jeśli chcesz zobaczyć moją stronę, którą napisałem z kolegą to jest pod adresem http://www.lipinkigimnazjum.w.of.pl . Na pewno mamy tam wiele błędów. Spowodowane są one tym, że większość podstron jest przechwytywana z innych serwerów.
Jeśli już wejdziesz to zobacz, że w kontakt (gdzie jest zastosowany powyższy skrypt (naprawiony dzięki twojej pomocy)) server ma problem z otwarciem pliku do zapisywania. Wiesz czym to może być spowodowane???
|
|
| Powrót do góry |
|
 |
Garf

Dołączył: 25 Maj 2005 Posty: 3348 Skąd: Rzeszów
|
Wysłany: Nie Lut 05, 2012 10:15 pm Temat postu: |
|
|
Wkuwając język niczego się nie nauczysz. Pisząc w danym języku, po pewnym czasie będziesz go znał na pamięć. Ale to, że jest to Twój pierwszy skrypt w niczym Cię nie rozgrzesza. Jeśli się uczysz, ucz się poprawnie. Takie prowizorki potem zostają już na dłużej i trudniej je wykorzenić. Prowizorki na zasadzie "ale przecież działa". Nie, nie działa. Działanie jest w tym przypadku efektem ubocznym.
Stronę widziałem, cóż rzec mogę... Ramek unikaj, kodowanie popraw (bo to nie iso-8859-2 tylko windows-1250), na reklamy doklejane (w nieodpowiednim miejscu HTML'a) przez of.pl wpływu nie masz. Błąd z plikiem znany, panaceum dość proste. Serwer WWW nie ma uprawnień, aby taki plik u Ciebie w katalogu domowym strony założyć. Najprościej będzie zrobić pusty plik wiad.wiadomosci lokalnie, wgrać go na serwer i poprzez FTP (zakładam że dostępu do shella, inaczej mówiąc SSH, tam nie masz) wykonać polecenie:
| Cytat: | | chmod 777 wiad.wiadomosci |
No i najlepiej zmień nazwę tego pliku na inny, bo teraz jak podałeś adres do strony to każdy może go sobie odczytać. Generalnie takie rzeczy zabezpiecza się w troszkę inny sposób niż poprzez niepodawanie do publicznej wiadomości nazwy pliku z korespondencją ;) Jeśli strona jest umieszczona na serwerze jakimś podkatalogu, np. public_html, to trzymaj taki plik w katalogu nadrzędnym. Serwer WWW bezpośrednio do niego nie będzie miał dostępu (tzn. nikt nie będzie miał możliwości wpisania odpowiedniego adresu w przeglądarce i otrzymania zawartości pliku). Za to samo PHP dostęp będzie miało, i wszystko będzie działać jak należy. Jedynie odwołanie do pliku zmieni się na coś takiego:
| Kod: |  fopen("../wiad.wiadomosci", 'ab');
|
Jeśli coś napisałem niejasno - pytaj :)
_________________ Zakochanie - to relacja międzyosobowa wynikająca z upodobania sobie w kimś, powodującego zależność emocjonalną od tego kogoś. Na miarę siły owej zależności następuje proporcjonalnie: utrata zdrowego rozsądku oraz zdolności do samodecydowania. o. Paweł Gużyński OP |
|
| Powrót do góry |
|
 |
matii578

Dołączył: 18 Gru 2011 Posty: 12
|
Wysłany: Pon Lut 06, 2012 3:25 pm Temat postu: |
|
|
Nazwę oczywiście zmienię. Ale nie rozumiem jak mam wykonać to polecenie:
| Cytat: | | chmod 777 wiad.wiadomosci |
|
|
| Powrót do góry |
|
 |
Garf

Dołączył: 25 Maj 2005 Posty: 3348 Skąd: Rzeszów
|
Wysłany: Pon Lut 06, 2012 3:59 pm Temat postu: |
|
|
Z jakiego klienta FTP korzystasz? Bo zapewne w jakiś sposób pliki na serwer wrzucasz. Jeśli jest to jakiś menedżer okienkowy typu Total Commander, to po prostu łączysz się na swoje konto i polecenie wpisujesz w pasku poleceń (ten na dole, pomiędzy panelami a przyciskami poleceń).
_________________ Zakochanie - to relacja międzyosobowa wynikająca z upodobania sobie w kimś, powodującego zależność emocjonalną od tego kogoś. Na miarę siły owej zależności następuje proporcjonalnie: utrata zdrowego rozsądku oraz zdolności do samodecydowania. o. Paweł Gużyński OP |
|
| Powrót do góry |
|
 |
matii578

Dołączył: 18 Gru 2011 Posty: 12
|
|
| Powrót do góry |
|
 |
Garf

Dołączył: 25 Maj 2005 Posty: 3348 Skąd: Rzeszów
|
Wysłany: Wto Lut 07, 2012 11:34 pm Temat postu: |
|
|
W sumie to zapomniałem zapytać jak wygląda opis błędu. Usuń tymczasowo znak '@' sprzed wywołania funkcji fopen i podrzuć błąd jaki wyrzuci.
_________________ Zakochanie - to relacja międzyosobowa wynikająca z upodobania sobie w kimś, powodującego zależność emocjonalną od tego kogoś. Na miarę siły owej zależności następuje proporcjonalnie: utrata zdrowego rozsądku oraz zdolności do samodecydowania. o. Paweł Gużyński OP |
|
| Powrót do góry |
|
 |
|
|
Możesz pisać nowe tematy Możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Możesz dodawać załączniki na tym forum Możesz pobierać pliki z tego forum
|
 Debug: strone wygenerowano w 0.41957 sekund, zapytan = 9
|