Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] PHP jako część dokumentu html
Forum PHP.pl > Forum > Przedszkole
poxrimex
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>
mike
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.
Zyx
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.
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.