Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] PHP jako część dokumentu html
poxrimex
post
Post #1





Grupa: Zarejestrowani
Postów: 368
Pomógł: 2
Dołączył: 23.09.2007

Ostrzeżenie: (60%)
XXX--


Chciałem zadać pytanie czy poprawne jest:

  1. <?php $a=Strona Szkoły Podstawowej;
  2. echo $a;
  3. ?>
  4. </head>
  5. Treść Strony
  6. </body>
  7. </html>


Ten post edytował poxrimex 5.01.2008, 08:34:02


--------------------



Go to the top of the page
+Quote Post
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Empiryzm.
Czemu nie sprawdzisz? Już dawno miałbyś odpowiedź. A tak czekasz na odpowiedź na forum.

Oczywiście, że to jest poprawne, poza błędami składni.
Go to the top of the page
+Quote Post
Zyx
post
Post #3





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Najlepiej po prostu włączyć smile.gif. Ten skrypt nie jest poprawny, ale nie z powodu jego osadzenia w HTML-u, a zawartości samego skryptu:

  1. <?php
  2. $a=Strona Szkoły Podstawowej;
  3. echo $a;
  4. ?>


Sprawa pierwsza - jakikolwiek ciąg tekstu, który może być obrobiony przez skrypt, musi być objęty cudzysłowami lub apostrofami*. Pierwsze są znacznie bardziej rozbudowane, bo oferują łatwą obsługę kodów sterujących ASCII, proste osadzanie zmiennych itd., ale mocno odbija się to na wydajności (jeśli korzystasz z tych opcji, przetworzenie trwa nawet 10x dłużej). Ponadto gdy w tekście masz dużo znaczków w stylu dolara, nawiasów klamrowych, można się pociąć, próbując je wyescape'ować tak, by ich PHP przypadkiem nie przetworzył, tylko wyświetlił. Osobiście korzystam z apostrof i łączę to z danymi kropką, a z cudzysłowów tylko, gdy są kody kontrolne ASCII do wyświetlenia.

Zatem po poprawce 1 skrypt wygląda tak:

  1. <?php
  2. $a='Strona Szkoły Podstawowej';
  3. echo $a;
  4. ?>


Teraz już zadziała, ale to jeszcze nie wszystko, co można w nim poprawić. Nikt nigdy nie mówił, że po "echo" musi być koniecznie zmienna. Nieprawda - może tam stać dowolne wyrażenie, w szczególności ciąg tekstowy. Tak więc jeśli tego napisu "Strona Szkoły Podstawowej" nie zamierzasz jakoś obrabiać rozmaitymi algorytmami, nie ma w ogóle sensu jego pakowanie do zmiennej. Piszemy od razu:

  1. <?php
  2. echo 'Strona Szkoły Podstawowej';
  3. ?>


Klucz to zrozumienie, po co dany element jest w skrypcie. Jeśli wprowadzasz jakąś zmienną, powinieneś wiedzieć, jaki jest cel jej wprowadzenia. Jeżeli mimo najszczerszych chęci takiego celu znaleźć nie możesz, prawdopodobnie oznacza to, że zmienna ta nie jest potrzebna. Może być też sytuacja, że cel jest, ale bezsensowny. Oto przykład:

  1. <?php
  2. $escapowanyTekst = stripslashes($_POST['tekst']);
  3. $odhtmlowanyTekst = htmlspecialchars($escapowanyTekst);
  4. echo $odhtmlowanyTekst;
  5. ?>


Sytuacja taka będzie OK tylko w jednym przypadku: w dalszej części skryptu potrzebujesz wszystkich trzech postaci tekstu z formularza: wersji surowej, wersji wyescape'owanej i wersji z zabezpieczonym HTML-em. Można powiedzieć, że przecież trzeba jakoś ten tekst między funkcjami przesłać. Fakt - trzeba, ale po diabła 100 zmiennych do przesłania jednej informacji?
  1. <?php
  2. $_POST['tekst'] = stripslashes($_POST['tekst']);
  3. $_POST['tekst'] = htmlspecialchars($_POST['tekst']);
  4. echo $_POST['tekst'];
  5. ?>


Oczywiście rezultat będzie trochę inny, bo nadpisujemy tu sobie oryginalną wiadomość, ale jeżeli nam ona nie będzie potrzebna, to czemu nie? Jednak w ogóle po co tu jakąś zmienną stosować, skoro można bezpośrednio z funkcji do funkcji coś przesłać?

  1. <?php
  2. echo htmlspecialchars(stripslashes($_POST['tekst']));
  3. ?>


* - w teorii dopuszczalne jest pisanie pojedynczych słów bez cudzysłowów i apostrofów, ale interpreter sypie wtedy ostrzeżeniami. W każdym razie, najlepiej zapomnieć, że takie coś jest możliwe, przynajmniej na początku.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
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: 20.08.2025 - 04:54