PHP razem z HTML - niekonwencjonalnie?

2

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....

3
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.

6

Łą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.

0

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.

2

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.

5

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 ;)

0

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>
1
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.

0
<?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 '

<input type="button" value="&lt;&lt;" disabled="disabled">
';</p>

echo '

<input type="button" value="&lt;">
';</p>

echo '

<input type="button" value="">>">
';</p>

echo '

';
//******************************************************************************************************************************************************
include("weekdays_ajax.php");
//******************************************************************************************************************************************************
echo '
'; // weekdays_container</p>

//********************************************* 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 'totop.png';

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>
2

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).

0

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.

2
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?>.

0
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.

0
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

2

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.

0

Jeśli da się na tym ogarnąć nietypowe i bardzo nieszablonowe rozwiązqnia to ok. mimo to spróbuję. dzięki za info.

1
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.

  1. i jadą na Excellu
2

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.

0

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.

  1. 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.

1

@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.

0

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. :)

0

To super. Kod HTML poza echo jest łatwiejszy do modyfikacji, więc może być lepiej :P

0

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.

1

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

0

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.

1

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...

3

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:

  1. Używam foreach (): zamiast foreach () { i endforeach zamiast }. O ile klamry działają, często przy osadzaniu PHP w HTML używa się alternatywnej składni. Jest bardziej czytelna.
  2. Używam <?= $foo ?> zamiast <?php echo $foo ?>. Znowu - czytelność. Ta skrócona składnia przypomina swoją prostotą różne języki szablonów.
  3. 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.
  4. 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.

1

Dziękuję! To bardzo praktyczne rady!

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1