Tomasz Mikołajczyk

Tomasz Mikołajczyk nauczyciel, trener
IT, Software QA
Manager

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Proszę o niebluzganie, bo zamieszałem strasznie:

## wczesniej jeszcze kooooodu a koooodu
if ($_POST['nazwa2']='2')
{
$znacznik2=" checked";
}
else
{
$znacznik2="";
}
?>
<input type="checkbox" name="nazwa2" value="2" onclick="this.form.elements['ulica'].disabled = !this.checked" />
<?
echo "Ulica: <input type='text' name='ulica' value='".$_SESSION['ulica']."' size='10' maxlength='30' disabled='disabled'><br>"; ##Ilica
?>



1) nie wiem gdzie by tu i jak wrzucić $znacznik2 do inputu checkbox zeby byl checked. Jak robie w php a nie wychodze z niego to z cudzyslowami sobie nie radzi, ogolnie to zamieszanie jest :/

2) Jakby ktoś się pogubił to wizja calosciowa jest taka, że chce mieć formularz:
[checkbox] [pole text]
[przycisk wyslij]

domyslnie checkbox odznaczony, pole text zdisablowane. Jak zaznacze checkbox, pole sie enabluje (to juz mam onclickiem), wypelniam je i wysylam formularz jako target do samego siebie (on costam wykonuje) i zeby checkbox zostal w stanie takim jaki byl ostatnio (i wartosc pola tekstowego tez).
Czyli jak zaznaczylem checkbox, wpisalem w pole 'ADAM' to po wyslaniu np. listuje mi osoby o imieniu ADAM a formularz jest juz z zaznaczonym checkboxem i wpisanym w polu napisem ADAM. Napis potrafie wrzucic juz, ale z reszta sobie nie radze. Checkbox pozostaje odznaczony a pole zdisablowane (z wpisanym napisem).


HELP!
Przemysław Pacura

Przemysław Pacura Team leader,
programista php

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Tomasz M.:
Proszę o niebluzganie, bo zamieszałem strasznie:

## wczesniej jeszcze kooooodu a koooodu
if ($_POST['nazwa2']='2')
{
$znacznik2=" checked";
}
else
{
$znacznik2="";
}
?>
<input type="checkbox" name="nazwa2" value="2" [/quote]> onclick="this.form.elements['ulica'].disabled = !this.checked" [quote]/>
<?[/quote]> echo "Ulica: <input type='text' name='ulica' > value='".$_SESSION['ulica']."' size='10' maxlength='30' [quote]disabled='disabled'><br>"; ##Ilica
?>


1) nie wiem gdzie by tu i jak wrzucić $znacznik2 do inputu checkbox zeby byl checked. Jak robie w php a nie wychodze z niego to z cudzyslowami sobie nie radzi, ogolnie to zamieszanie jest :/

2) Jakby ktoś się pogubił to wizja calosciowa jest taka, że chce mieć formularz:
[checkbox] [pole text]
[przycisk wyslij]

domyslnie checkbox odznaczony, pole text zdisablowane. Jak zaznacze checkbox, pole sie enabluje (to juz mam onclickiem), wypelniam je i wysylam formularz jako target do samego siebie (on costam wykonuje) i zeby checkbox zostal w stanie takim jaki byl ostatnio (i wartosc pola tekstowego tez).
Czyli jak zaznaczylem checkbox, wpisalem w pole 'ADAM' to po wyslaniu np. listuje mi osoby o imieniu ADAM a formularz jest juz z zaznaczonym checkboxem i wpisanym w polu napisem ADAM. Napis potrafie wrzucic juz, ale z reszta sobie nie radze. Checkbox pozostaje odznaczony a pole zdisablowane (z wpisanym napisem).

HELP!

Po pierwsze - nawet prosty, banalny kod staje się zagmatwany gdy się go nie formatuje ;)
Po drugie " $_POST['nazwa2']='2' " -> ma być ==
Po trzecie wstaw w inputa po prostu <?php echo $znacznik2 ?> i tyle ? Chyba że czegoś nie rozumiem?

... a i ma być $_SESSION['ulica']? czy raczej $_POST['ulica'] lub $_GET['ulica'] - nie wiem zapisujesz wcześniej w kodzie gdzieś przesłaną ulicę do sesji i dlatego z niej chcesz skorzystać?Przemysław Pacura edytował(a) ten post dnia 29.03.10 o godzinie 22:05
Tomasz Mikołajczyk

Tomasz Mikołajczyk nauczyciel, trener
IT, Software QA
Manager

Temat: Zamieszałem z cudzysłowami - php, html, formularze

tak, do sesji to akurat wrzucam ale zbawienny wpływ miało dodanie drugiego znaku =

Faktycznie, pomyłki typu przypisanie lub porównanie są mega-uciążliwe. A że nie formatuje kodu jak należy - niestety jeszcze tego sie nie nauczylem ale bede cwiczyl nawyki.

konto usunięte

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Oprócz rzeczy wskazanych przez przedmówcę (pomylone porównanie z przypisaniem), przy obsłudze tego typu zadań polecam następujące podejście (założenie, że kod funkcjonalny i widok html jest w jednym pliku):

- określenie przełączników wykorzystywanych w dokumencie (np. nazwaChecked)
- zdefiniowanie domyślnych wartości dla przełączników, np.

$nazwaChecked = false;


- nadpisanie domyślnych ustawień na podstawie danych otrzymanych z formularza:

$nazwaChecked = $_POST['nazwa2'] == 2;


- wyświetlenie HTMLa:

<input type="checkbox" name="XXX" value="YYY" <?=$nazwaChecked ? 'checked="checked"' : '';?>


Co zyskujesz:

- w obecnej implementacji i w przypadku przyszłych zmian masz pewność, że parametry "sterujące" są zdefiniowane. W najgorszym wypadku kiedy np. usuniesz kawałek kodu przez pomyłkę, zostaną zastosowane parametry domyślne i nie dojdzie do żadnej awarii
- łatwiejsze debugowanie

Co tracisz:

- więcej klepania kodu na początku

Wracając do tematu przenoszenia danych po wysłaniu formularza: to, że przesłałeś określone dane i nawet zaznaczyłeś checkbox na poziomie generowania HTML nie oznacza, że tym samym wyzwoliłeś zdarzenie onclick. Musisz w tym wypadku zadecydować o parametrze "disabled" tak samo jak generujesz checked="checked".

konto usunięte

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Szymon Komendera:
<input type="checkbox" name="XXX" value="YYY" 	[/quote]> <?=$nazwaChecked ? 'checked="checked"' : '';?>

<?= - jest defaultowo wyłączone coś mi się zdaje

konto usunięte

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Nie spotkałem się z takim ustawieniem. Podejrzewam, że short_open_tag = off nie utrzymałby się na żadnym hostingu dłużej, niż jeden dzień :)

Trzymając się dokumentacji można nawet twierdzić, że fajnie jest używać <script language="php"> ponieważ jest wszędzie dostępny, ale jak to wygląda w praktyce... :)

konto usunięte

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Tomasz M.:
tak, do sesji to akurat wrzucam ale zbawienny wpływ miało dodanie drugiego znaku =

Faktycznie, pomyłki typu przypisanie lub porównanie są mega-uciążliwe. A że nie formatuje kodu jak należy - niestety jeszcze tego sie nie nauczylem ale bede cwiczyl nawyki.

Pomyłki typu przypisanie lub porównanie nie są mega-uciążliwe jeżeli byś to zrobił tak.


if ( '2' == $_POST['nazwa2'] )
Jakub L.

Jakub L. Programista

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Karol Buczek:

Pomyłki typu przypisanie lub porównanie nie są mega-uciążliwe jeżeli byś to zrobił tak.


if ( '2' == $_POST['nazwa2'] )

Takie defensywne podejście działa, sporo kodu by Microsoft widziałem tak napisanego.

Problem 1: jak porównuje się do stałej, to działa, jak porównuje się dwie zmienne to nadal nie bangla.

Problem 2: może to kwestia mojego przyzwyczajenia, porówanie if (STALA == $zmienna) {...} gorzej mi się czyta, w sporej części przypadków czytania kodu interesuje mnie która zmienna steruje przepływem, a nie najpierw jakie wartości. W zależności od wielkości stałej (stringi), znalezienie zmiennej do której się porównuje może być upierdliwe.

W przypadku
if (funkcja($zmienna) == STALA) { ... }
if (STALA == funkcja($zmienna)) { ... }
druga opcja jest jeszcze trudniejsza w czytaniu, dodatkowe parametry funkcji jeszcze bardziej mieszają, ale to tylko moje subiektywne odczucia.
Tomasz Grabowski

Tomasz Grabowski szukam praktyki w C#

Temat: Zamieszałem z cudzysłowami - php, html, formularze

jeśli masz problemy z czytelnością kodu polecam Ci świetne rozwiązanie w postaci sablonów Smarty. Pozwoli Ci to na oddzielenie PHP od html'a i css.
Istota działania jest banalna a od razu będziesz wiedział gdzie leży błąd, czy po stronie PHP czy html.
http://pl.wikibooks.org/wiki/PHP/Smarty
Michał Płonka

Michał Płonka Programista PHP

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Tomasz Grabowski:
jeśli masz problemy z czytelnością kodu polecam Ci świetne rozwiązanie w postaci sablonów Smarty
Osobiście nie lubię Smartów. Pomijam fakt, że jest to obecnie lekki przeżytek i że lepiej już wejść np. w OPT, ale wolę stosować mechanizm szablonów wbudowany w PHP czyli po prostu wchodzenie/wychodzenie z PHP. Tak się składa, że powyższe rozwiązanie jest wykorzystywane przez większość (wszystkie?) znaczące frameworki. Nie widzę potrzeby używania dodatkowych bibliotek, które finalnie i tak wyplują standardowy kod PHP (który nie zawsze musi być idealnie utworzony).

@Tomek: (swoją drogą to witam Pana hehe)
Jeśli nie chce Ci się robić wcięć (do czego jednak namawiam) to możesz korzystać z formatowania kodu. Porządne IDE (typu Eclipse PDT czy Netbeans) posiada taką możliwość - dajesz kod w stylu Twojego (czyli wszystko w jednej linii), a zostanie on ładnie sformatowany.

Dobrym nawykiem jest również ustawienie maksymalnego raportowania błędów. Twój kod zapewne wywali ostrzeżenie o braku indeksu nazwa2 w tablicy $_POST jeśli go tam nie będzie (np. jeśli formularz jeszcze nie został przesłany). Wypadałoby więc wcześniej sprawdzić czy ów indeks istnieje (isset($_POST['nazwa'])).
Tomasz Grabowski

Tomasz Grabowski szukam praktyki w C#

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Zgadzam się z Tobą, osobiście wgrywam się własnie w CodeIgnitera i tu jest tak jak piszesz. Swoją drogą framework to świetna sprawa :)

konto usunięte

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Michał Płonka:
Tomasz Grabowski:
jeśli masz problemy z czytelnością kodu polecam Ci świetne rozwiązanie w postaci sablonów Smarty
Osobiście nie lubię Smartów. Pomijam fakt, że jest to obecnie lekki przeżytek i że lepiej już wejść np. w OPT, ale wolę stosować mechanizm szablonów wbudowany w PHP czyli po prostu wchodzenie/wychodzenie z PHP. Tak się składa, że powyższe rozwiązanie jest wykorzystywane przez większość (wszystkie?) znaczące frameworki. Nie widzę potrzeby używania dodatkowych bibliotek, które finalnie i tak wyplują standardowy kod PHP (który nie zawsze musi być idealnie utworzony).
Smarty przerabia kod szablonowy na PHP i śmiga całkiem znośnie (uwzględniając buforowanie). Stosowanie czystego PHP w widoku strony jest niezgodne z MVC czy nawet MVP. Wprowadza zamęt i bałagan.

Który system jest najlepszy - Smarty, OPT czy Twig, nie będę wnikał, pewnie wszystkie mają wady i zalety.

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Kamil Brenk:

Smarty przerabia kod szablonowy na PHP i śmiga całkiem znośnie (uwzględniając buforowanie). Stosowanie czystego PHP w widoku strony jest niezgodne z MVC czy nawet MVP. Wprowadza zamęt i bałagan.

Póki nie wrzucasz logiki do widoku to co za różnica? Równie dobrze można pisać w PHP.

Z szablonów to mam miłe wspomnienia z XSLT, ale w większości przypadków czysty PHP jest wystarczająco dobrym systemem szablonów.

konto usunięte

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Rafał Nowak:
Kamil Brenk:

Smarty przerabia kod szablonowy na PHP i śmiga całkiem znośnie (uwzględniając buforowanie). Stosowanie czystego PHP w widoku strony jest niezgodne z MVC czy nawet MVP. Wprowadza zamęt i bałagan.

Póki nie wrzucasz logiki do widoku to co za różnica? Równie dobrze można pisać w PHP.
Do czasu, gdy pisanie front-endu powierzymy osobie, która nie zna PHP :)

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Kamil Brenk:

Póki nie wrzucasz logiki do widoku to co za różnica? Równie dobrze można pisać w PHP.
Do czasu, gdy pisanie front-endu powierzymy osobie, która nie zna PHP :)

To się nauczy pisać if, else, echo, foreach, tak jak się musi nauczyć systemy szablonów ;-)

konto usunięte

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Rafał Nowak:
Kamil Brenk:

Póki nie wrzucasz logiki do widoku to co za różnica? Równie dobrze można pisać w PHP.
Do czasu, gdy pisanie front-endu powierzymy osobie, która nie zna PHP :)

To się nauczy pisać if, else, echo, foreach, tak jak się musi nauczyć systemy szablonów ;-)

jak masz PHPTal to nie musisz znać tego wszystkiego

konto usunięte

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Kamil Brenk:
Rafał Nowak:
Kamil Brenk:

Smarty przerabia kod szablonowy na PHP i śmiga całkiem znośnie (uwzględniając buforowanie). Stosowanie czystego PHP w widoku strony jest niezgodne z MVC czy nawet MVP. Wprowadza zamęt i bałagan.

Póki nie wrzucasz logiki do widoku to co za różnica? Równie dobrze można pisać w PHP.
Do czasu, gdy pisanie front-endu powierzymy osobie, która nie zna PHP :)

Na pewno osoba nie znająca phpowych if, foreach , while będzie wymiatać w OPT ;)
PHP jest ok w widoku , stosuje się wtedy rozszerzenie .phtml .
Oczywiście php w widomu stosować powinniśmy tylko to prostych czynności typu pętle a nie operacje na bazie danych ;D

konto usunięte

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Chodzi o to, że praca front-end developera nie jest skojarzona tylko i wyłącznie z PHP, dlatego wymyślono taki wzorzec jak MVC.

Co jeśli ktoś wcześniej tworzył szablony dla platformy .NET, potem dla stron tworzonych w Python, potem dla stron tworzonych w Ruby i teraz zamierza dla stron robionych w PHP? Tzn. że musi się uczyć składni dla każdego języka z osobna? :-)

Dlatego wymyślono systemy szablonów, których składnia jest łatwiejsza w nauce (i pewnie podobna w różnych językach).

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Kamil Brenk:
Chodzi o to, że praca front-end developera nie jest skojarzona tylko i wyłącznie z PHP, dlatego wymyślono taki wzorzec jak MVC.

Pisanie widoków w php nie psuje wcale MVC, a osobny język szablonów nie ma z nim nic wspólnego.
Co jeśli ktoś wcześniej tworzył szablony dla platformy .NET, potem dla stron tworzonych w Python, potem dla stron tworzonych w Ruby i teraz zamierza dla stron robionych w PHP? Tzn. że musi się uczyć składni dla każdego języka z osobna? :-)

Pewnie, że fajnie mieć język szablonów kompatybilny z tymi wszystkimi platformami, ale pytanie, czy takie są (szczerze, nie wiem)?

Zresztą nie o to mi chodziło - znam i rozumiem zalety zewnętrznego systemu szablonów, ale przede wszystkim odnosiłem się do Twojego zdania, że pisanie widoków w PHP jest jakoby niezgodne z MVC. Jest to nieprawda, bo można zachować rozdzielenie widoku i logiki aplikacji stosując PHP jako "język szablonów". Chodzi o idee nie wykonywania operacji obliczeniowych, a jedynie odpowiednie wyświetlenie danych dostarczonych przez kontroler.
Przemysław
jak masz PHPTal to nie musisz znać tego wszystkiego

No ale musisz znać PHPTal, który też opiera się na ideach iteracji po kolekcjach, sterowania przepływem za pomocą odpowiednich warunków i tak samo musisz się nauczyć jego filozofii.

Mój punkt widzenia jest taki: systemy szablonów są przydatne i mają racje bytu, jednak stosowanie czystego PHP samo w sobie nie psuje wzorca MVC, a w dodatku jest szybkie. PHP na poziomie potrzebnym do pisania widoków jest równie proste w nauce jak dowolny system szablonów.Rafał Nowak edytował(a) ten post dnia 26.06.10 o godzinie 12:43
Michał Płonka

Michał Płonka Programista PHP

Temat: Zamieszałem z cudzysłowami - php, html, formularze

Kamil Brenk:
Do czasu, gdy pisanie front-endu powierzymy osobie, która nie zna PHP :)
Hmmm, a co tu jest do nauki? Instrukcja warunkowa, pętla (foreach wystarczy), wyświetlenie danych. Tyle. Dokładnie tyle samo byłoby do "nauki" przy zastosowaniu Smarty czy innego podobnego systemu szablonów.



Wyślij zaproszenie do