Naszła mnie taka myśl...
Tworzę coś na kształ aplikacji webowych z użyciem php,html,ja i jquery plus mysql.
Od samego początku piszę w php strukturalnie. Nigdy nie oddzielałem warstwy PHP od HTML. W zasadzie wszystkie pliki tworzę z rozszerzeniem php chyba, że są to skrypty js.
Elementy html wyświetlam za pomocą echo w php.
Jak myślicie? Czy to jest dopuszczalne? Chodzi za mną OOP ale czy zawsze trzeba programować obiektowo? Dodam, że aplikacje są specyficzne i w dużym stopniu oparte na formularzach i mysql. Taki dylemat amatora....
rafik73 napisał(a):
Od samego początku piszę w php strukturalnie. Nigdy nie oddzielałem warstwy PHP od HTML.
Trudno mi wyobrazić sobie jakiekolwiek STRUKTURY w tym stylu prowadzenia projektu.
https://pl.wikipedia.org/wiki/Programowanie_strukturalne
ps. Słowo "niekonwencjonalnie" ma pozytywny odcień. Tu zdecydowanie nie pasuje.
Rozumiem, nie zależy Ci na pochwałach, bo już dostatecznie sam sobie wystawiasz.
Łączenie PHP z HTML/JS tworzy chaos. Może to nie jest widoczne, gdy plik ma parę linijek, ale przy kilkuset to już zaczyna się burdel. Proponuję użyć chociażby Smarty, pozbędziesz się mieszania wszystkiego w jednym pliku, a jest to łatwe do zaimplementowania.
A czy trzeba programować obiektowo? Nie, nie trzeba xD Ale na pewno jest czytelniej.
AnyKtokolwiek, nie zależy mi na pochwałach tylko opinii. Szału nie ma. Chciałbym wyzbyć się złych przyzwyczajeń. serek,dzięki za radę. dopinam skrypty js z pliku za pomocą include na końcu kodu.
Jak nie chcesz to nie pisz nic obiektowo, ale zasadniczo oddziel HTMLe od PHPa, bo jak będzie jakiś babol, a z czasem na pewno jakiś będzie, łatwiej czytać krótsze pliki i zawęzić obszar poszukiwań. Programowanie obiektowe ma kilka dodatkowych plusów poza trzymaniem kodu w mniejszych plikach, bo zawęża Ci obszar poszukiwania do poszczególnych metod i klas.
Po podstawach php i liźnięciu obiektówki przejdź do jakiegoś frameworka, mi prozaicznie to pomogło niż walczenie z językiem, dodatkowo w nowych tutkach jest to lepiej wytłumaczone.
Jak chcesz podstawy MVC to zobacz Codeignitera 3 (czytelnie pokazuje zależności i jest banalny), stwórz podstawową apkę co jest proste z xampp, potem zobacz nowszą czwórkę, bądź uciekaj do Laravela, Symfony, czy Yii.
Po tym już raczej nie będziesz chciał wracać do tego co robisz obecnie ;)
przykładowy index.php
<?php include("log/config_mysqli.php"); ?><!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="generator" content="PSPad editor, www.pspad.com">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />
<link rel="Stylesheet" type="text/css" href="css/style_index.css">
<title>PANEL-RM</title>
</head>
<body>
<?php
session_destroy();
session_start();
//session_start();
//session_destroy();
//setcookie('panelrmcookie', '', time() - 3600,'/');
/*
if(strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== FALSE) {
$ismobile = 'mobile';
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Windows') !== FALSE) {
$ismobile = 'computer';
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Linux') !== FALSE) {
$ismobile = 'computer';
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone OS') !== FALSE) {
$ismobile = 'mobile';
}
elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'Mac OS') !== FALSE) {
$ismobile = 'mac';
}
else
{
$ismobile = 'computer';
}
*/
//echo $ismobile.'<br>';
//echo $_SERVER['HTTP_USER_AGENT'];
//echo $_COOKIE['panelrmcookie'];
if(isset($_COOKIE['panelrmcookie']))
{
$cookieset = $_COOKIE['panelrmcookie'];
$cookie_query = mysqli_fetch_array(mysqli_query($mysqli , "SELECT COUNT(*) FROM `autousers` WHERE `cookieset` = '$cookieset' "));
if ($cookie_query[0] == 0)
{
setcookie('panelrmcookie', '', time() - 3600,'/');
header("Location: index.php");
exit();
}
else
{
header("Location: log/loginn.php");
exit();
}
}
else
{
session_destroy();
session_start();
echo'<div id="site">';
echo'<div id="login">';
echo '
<div id="title" style="">
M<span style="font-weight:normal;font-style:normal;color:#65605E">ÓJ <span style="font-style:italic;font-weight:bold;color:#FF9B07">P<span style="font-weight:normal;font-style:normal;color:#65605E">ANEL</span></span></span></div>
';
echo '<form method="POST" action="log/login.php">';
echo '<div id="text_panel">';
echo '<div id="index_label_login" > login</div>';
echo '<div id="index_text_login" ><input type="text" placeholder="wpisz login..." name="loginmt" maxlength="20"></div>';
echo '<div id="index_label_pass" >hasło</div>';
echo '<div id="index_text_pass" ><input type="password" placeholder="wpisz hasło..." name="haslomt" maxlength="20"></div>';
echo '</div>'; // text_panel
//**************************************************
echo '<div id="remember_me_div"> ';
echo '<input type="hidden" name="remember_me" value="0" > ';
echo '<div id="remember_me_checkbox_input"><input type="checkbox" name="remember_me" id="remember_me" value="1" > </div>';
echo '<div id="remember_me_checkbox_label">zapamiętaj mnie</div>';
echo '</div> '; // remember_me_div
//**************************************************
echo '<div id="index_button_div" ><input type="submit" value="ZALOGUJ"></div>';
echo '</form>';
}
echo '</div>';
echo '</div>';
?>
</body>
</html>
rafik73 napisał(a):
Jak myślicie? Czy to jest dopuszczalne?
Myślę, że PHP samo w sobie jest niedopuszczalne.
A tak poważnie to mieszanie kodu z HTML jest straszne. Jeszcze znacznik HTML w pliku PHP można zrozumieć kiedy generuje się np. tabelkę albo formularz, ale kod PHP w pliku HTML... nie.
<?php
$priv = 0;
include("../log/config_mysqli.php");
include("../log/perm.php");
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" />
<link rel="Stylesheet" type="text/css" href="../css/style_menu.css">
<link rel="Stylesheet" type="text/css" href="../css/style_weekdays.css">
<title>PLAN </title>
<script type="text/javascript" src="../jquery_js/external/jquery/jquery.js"></script>
<script type="text/javascript" src="../jquery_js/jquery-ui.js"></script>
<script type='text/javascript' src="../jquery_js/jquery-ui.min.js"></script>
</head>
<body>
<?php
echo'<div id="site">';
include("../php_functions/datev.php");
$today = date("Y-m-d");
//$today = '2020-10-12';
$lastMondayFind = strtotime ("last Monday") ;
$lastMonday = date("Y-m-d", $lastMondayFind);
$nextMondayFind = strtotime ("Monday");
$nextMonday = date("Y-m-d", $nextMondayFind);
if($today != $nextMonday){
$startOfWeek = $lastMonday;
}else{
$startOfWeek = $nextMonday;
}
echo '<div id="header_title">```php
W TYGODNIU</div>';
echo '
echo '
echo '
echo '
//******************************************************************************************************************************************************
include("weekdays_ajax.php");
//******************************************************************************************************************************************************
echo '
//********************************************* menu
include ("../menu.php");
if($_SESSION['admin'] == 1)
{
$menu_button_style = 'display:block;width:25%;';
$setup_button_style = 'display:block;width:25%;';
$logout_button_style = 'display:block;width:50%;';
}
else
{
$menu_button_style = 'display:block;width:25%;';
$setup_button_style = 'display:none;';
$logout_button_style = 'display:block;width:75%;';
}
echo '
'; // navbar</p>echo '';
echo '</div>'; //site
?>
<?php include("../js_functions/js_functions.js"); //js_functions include("weekdays.js"); //javascript include("../js_functions/menu_functions.js"); //javascript ?> </body> </html>
Aj, user agent przez php to średni pomysł, obecnie takie rzeczy załatwia się przez css, formularz logowania trzeba zabezpieczyć (co na wejście załatwia ci framework).
user agent nie służy tu do obsługi responsywności, od tego jest media wraz min-width i max-width w css.
dlaczego nie przez php? Co masz na myśli pisząc o zabezpieczeniu formularza? W dalszej sekwenci i oddzielnym skrypcie logowanie
jest oparte na zapytaniu do bazy danych.
serek napisał(a):
Łączenie PHP z HTML/JS tworzy chaos. Może to nie jest widoczne, gdy plik ma parę linijek, ale przy kilkuset to już zaczyna się burdel. Proponuję użyć chociażby Smarty, pozbędziesz się mieszania wszystkiego w jednym pliku, a jest to łatwe do zaimplementowania.
W dużej mierze tak. Jak mamy gęstą htmlowo-phpową zupę to sam czort się w tym nie rozezna.
Z drugiej strony widywałam już smart-systemy, które z uwagi na fobię odnośnie mieszania html i php przeginały w drugą stronę, tworząc własne instrukcje warunkowe, bloki itp.
Z kolejnej strony, czy takie: {{$dupa}}
jest czytelniejsze niż: <?=$dupa?>
.
Chciałem jeszcze raz podkreślić, że są to aplikacje webowe.
Freja Draco napisał(a):
serek napisał(a):
Łączenie PHP z HTML/JS tworzy chaos. Może to nie jest widoczne, gdy plik ma parę linijek, ale przy kilkuset to już zaczyna się burdel. Proponuję użyć chociażby Smarty, pozbędziesz się mieszania wszystkiego w jednym pliku, a jest to łatwe do zaimplementowania.
W dużej mierze tak. Jak mamy gęstą htmlowo-phpową zupę to sam czort się w tym nie rozezna.
Z drugiej strony widywałam już smart-systemy, które z uwagi na fobię odnośnie mieszania html i php przeginały w drugą stronę, tworząc własne instrukcje warunkowe, bloki itp.
Z kolejnej strony, czy takie:
{{$dupa}}
jest czytelniejsze niż:<?=$dupa?>
.
Z tymi instrukcjami czasem są dobre rzeczy typu Thymeleaf - instrukcje są w postaci tagów i w IDE to bardzo ładnie wygląda.
Freja Draco napisał(a):
serek napisał(a):
Łączenie PHP z HTML/JS tworzy chaos. Może to nie jest widoczne, gdy plik ma parę linijek, ale przy kilkuset to już zaczyna się burdel. Proponuję użyć chociażby Smarty, pozbędziesz się mieszania wszystkiego w jednym pliku, a jest to łatwe do zaimplementowania.
W dużej mierze tak. Jak mamy gęstą htmlowo-phpową zupę to sam czort się w tym nie rozezna.
Z drugiej strony widywałam już smart-systemy, które z uwagi na fobię odnośnie mieszania html i php przeginały w drugą stronę, tworząc własne instrukcje warunkowe, bloki itp.
Z kolejnej strony, czy takie:
{{$dupa}}
jest czytelniejsze niż:<?=$dupa?>
.
i tu ma kolega racje. Muszę chyba jakomś terapie przejść i wyzbyć się tego echo
Może zrób inaczej, bo to co tworzysz to zuuuooo.
Spróbuj zrobić jakiś prosty projekt w MVC. Na YT jest mnóstwo jakichś tutorial o prostym MVC nawet jeszcze bez framework-ów pokroju Symfony, Laravel. Zobaczysz sam jakie to ma zalety. Poświęcony czas z dziś od pierwszej odpowiedzi już byś mógł wykorzystać na to by zrozumieć zasady i myśleć jak je wdrożyć do swoich projektów.
Jeśli da się na tym ogarnąć nietypowe i bardzo nieszablonowe rozwiązqnia to ok. mimo to spróbuję. dzięki za info.
rafik73 napisał(a):
Jeśli da się na tym ogarnąć nietypowe i bardzo nieszablonowe rozwiązqnia to ok. mimo to spróbuję. dzięki za info.
"nietypowe" i "nieszablonowe" to karmienie samego siebie propagandą (w 99% przypadków) i poprawianie sobie ego.
Częściej spotykam w biznesie "nasza firma jest tak wybitna, tak nietypowa, że gotowy program do fakturowania nas nie zadowoli" 1), ale jak widać programistom tez się zdarza.
- i jadą na Excellu
Rafik, po prostu rób po swojemu. Prędzej czy później sam zaczniesz się dusić w swoich rozwiązaniach i będziesz szukał czegoś lepszego.
Kiedyś sam podważałem bardzo ideę używania frameworków w PHP. Wydawały mi się przerostem formy nad treścią. Ale tak to zwykle bywa, że przepraszamy się z frameworkami, gdy mamy do zrobienia większy projekt. Wtedy sam zaczynasz coś dziubać sensownego i szybko się okazuje, że frameworki już to zrobiły, tylko lepiej.
Ale doświadczenie w nauczaniu innych mi pokazało, że nie ma lepszej nauki niż potaplać się w bagienku :) Dlatego rób swoje i dojdź do etapu, gdzie zaczniesz potrzebować więcej i lepiej.
bearek, zdarzało mi się gotować zupę na 3 do 5 tysięcy linii i teraz chyba nadszedł ten moment z przepraszaniem o którym wspomniałeś .
AnyKtokolwiek napisał(a):
rafik73 napisał(a):
Jeśli da się na tym ogarnąć nietypowe i bardzo nieszablonowe rozwiązqnia to ok. mimo to spróbuję. dzięki za info.
"nietypowe" i "nieszablonowe" to karmienie samego siebie propagandą (w 99% przypadków) i poprawianie sobie ego.
Częściej spotykam w biznesie "nasza firma jest tak wybitna, tak nietypowa, że gotowy program do fakturowania nas nie zadowoli" 1), ale jak widać programistom tez się zdarza.
- i jadą na Excellu
co ty chłopie z tym ego i chwaleniem się? Ja jestem amatorem-pasjonatem, nie dmucham swojego ego, a apki które starałem się tworzyć są naprawdę nietypowe. Także na luzie,bez spiny.
@rafik73: to do dzieła :) i nie traktuj skrajnych opinii zbyt poważnie, bo wielu programistów ma swoje zdanie na jakiś temat, wynikające z ignorancji. Jeśli kod jest prosty, czytelny, łatwy do modyfikacji i działa, to jest dobrze. A jakimi środkami to osiągniesz to już mniej ważne.
Dzięki bearek. Kod działa i to bardzo sprawnie. A mi po prostu zostało we krwii używanie echo. Po prostu przetwarzam dużo danych i je wyświetlam w rozmaity sposób - wygodniej mi było odpalać front poprzez php i tak mi zostało. Ostatnio zacząłem się bawić C# oraz Java i doznałem olśnienia jeśli chodzi o czytelność kodu. :)
To super. Kod HTML poza echo jest łatwiejszy do modyfikacji, więc może być lepiej :P
No ale są często takie sytuacje:
$activityQuery = new ActivityQuery();
$datas = $activityQuery->getAll();
foreach($datas as $data){
echo $data['name'].' ';
echo $data['surname'].' <br>';
}
i tu jestem niejako skazany na echo. Wyświetlanie musi być w pętli.
i tu jestem niejako skazany na echo. Wyświetlanie musi być w pętli.
$dupa = "";
foreach($datas as $data){
$dupa .= $data['name'].' ';
$dupa .= $data['surname'].' <br>';
}
//tu robisz z dupą coś innego.
Nic w pętli nie musisz
No ok. Ale gdybym chciał wyświetlić to w kontenerze:
<div id="person"><?= $dupa?></div>
to wrzuci mi zlepek wszystkich rekordów a chcę, żeby wyświetlał mi 1 rekord na 1 div.
I wtedy divy jeden pod drugim.
Można i tak:
<?php
$datas = $activityQuery->getAll();
foreach($datas as $data){
?>
<div id="person"><?php echo $data['name'].' '.$data['surname'] ?></div>
<?php
}
?>
Tylko mam wrażenie, że przy dużej ilości znaczników php to średnio fajne...ale to tylko moje subiektywne odczucie...
Często robi się tak, że do "widoku" (HTML) przekazujesz już gotowe lub prawie gotowe dane i tylko je sobie wstawiasz, np.:
<div>
<?php foreach ($people as $person): ?>
<div id="person"><?= $person['name'] ?> <?= $person['surname'] ?></div>
<?php endforeach ?>
</div>
Zauważ kilka rzeczy:
- Używam
foreach ():
zamiastforeach () {
iendforeach
zamiast}
. O ile klamry działają, często przy osadzaniu PHP w HTML używa się alternatywnej składni. Jest bardziej czytelna. - Używam
<?= $foo ?>
zamiast<?php echo $foo ?>
. Znowu - czytelność. Ta skrócona składnia przypomina swoją prostotą różne języki szablonów. - Używam
$people
i$person
zamiast$datas
(nie ma takiego słowa tak swoją drogą). Używanie konkretnych nazw bardzo zwiększa czytelność kodu, bo$data
nic nie mówi. - Usunąłem z widoku
$activityQuery->getAll()
. Mógłbyś przekazać tę wartość w czymś na kształt kontrolera, żeby widok był czysty i pozbawiony zabawy z logiką.
Takie odseparowanie naprawdę jest fajne i dużo przyjemniej się pracuje nad projektem. Poza tym weź pod uwagę, że osoby znające tylko HTML też sobie poradzą z edycją takiego szablonu jak będą wiedziały jakie dane mają do dyspozycji, czyli w Twoim przypadku $people
.
Dziękuję! To bardzo praktyczne rady!
Nie nazwałbym tego niekonwencjonalnym - każdy chyba tutorial i początkujący w ten sposób zaczynał. Dopóki masz prostą stronę z wizytówką, jednym formularzem kontaktowym i jesteś w stanie się w tym połapać w kodzie i wygląda to w porządku to nie ma sensu tego rozdzielać. Ale gdy aplikacja Ci się rozrośnie to sam w pewnym momencie nie będziesz w stanie nad tym zapanować i będziesz chciał to jakoś rozdzielić - zwłaszcza jeśli podobna logika pojawia się na wielu stronach i będziesz chciał ją nagle zmienić w wielu miejscach.
Jak już mówiłem - nie ma w tym nic niekonwencjonalnego - 22 lata temu w czasach PHP 3.0 praktycznie każda strona była pisana w ten sposób. Sytuacja zaczęła się zmieniać około 16 lat temu kiedy zaczęły powstawać proste template engine'y jak Smarty; potem chyba modą było pisanie w MVC, ale tego już nie wiem bo od kilkunastu lat nie dotknąłem PHP, a teraz w ogóle jakikolwiek widok pisany w php czy innym języku server-side jest niemodny - standardem stały się aplikacje SPA i backend służy tylko do wypluwania danych a całość jest renderowana po stronie klienta