Hur BÖR jag skriva PHP + HTML?

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2007

Hur BÖR jag skriva PHP + HTML?

Tjena!

Nån erfaren kanske vet:

Jag har ett dilemma där jag känner att jag måste bestämma mig.

Vad jag förstår finns det två sätt att kombinera HTML och PHP. (Inte inräknat include osv).

Första sättet är att echo:a ut alla html element inuti php'n.
Andra sättet är att öppna och stänga php-taggarna mellan html-elementen. (Samma med loopar, foreach/endforeach).

För mig personligen är det lättare att se vad som händer i alternativ #1, det beror kanske främst på att jag började skriva på detta sätt.

Det verkar inte finnas något rätt eller fel.

Hur gör ni? Vilka fördelar/nackdelar finns med respektive sätt?

[7700K 4.5Ghz] - [PRIME Z270-A] - [16Gb 3200Mhz] - [EVGA GTX980Ti 6GB SC ACX] - [~500GB 840 EVO] - [FD 800W Newton R3 Platinum] - [Noctua D14] - [Define R3] - [S27A950D @120hz]

Trädvy Permalänk
Medlem
Registrerad
Jun 2011

Nu programmerar jag inte PHP till vardags, men jag skulle säga att det beror lite på. I de allra flesta fall skulle jag säga #2 för att det ger en bättre överblick över HTML-koden. Skulle endast använda mig av #1 om det är mycket logik och lite HTML, dvs fokus ligger på PHP-koden snarare än HTML-koden.

MSI Z77A-GD65 | Intel Core i5 3570K @ 4,2 GHz | Palit Geforce GTX 1070 JetStream | 16 GB Corsair Vengeance 1600 MHz

You must come with me, young ones, for I am the grim reaper.

Trädvy Permalänk
Medlem
Registrerad
Sep 2011

Om det är mycket HTML-kod och mindre data som ska infogas är andra sättet logiskt smidigt, är det liten mängd konstant html-kod och mycket dynamisk data kan blir ju metod 1 snyggare kodmässigt.

Man väljer väl själv det som är mest fördelaktigt.

Trädvy Permalänk
Medlem
Registrerad
Jan 2010
Skrivet av Rekl3M:

Tjena!

Nån erfaren kanske vet:

Jag har ett dilemma där jag känner att jag måste bestämma mig.

Vad jag förstår finns det två sätt att kombinera HTML och PHP. (Inte inräknat include osv).

Första sättet är att echo:a ut alla html element inuti php'n.
Andra sättet är att öppna och stänga php-taggarna mellan html-elementen. (Samma med loopar, foreach/endforeach).

För mig personligen är det lättare att se vad som händer i alternativ #1, det beror kanske främst på att jag började skriva på detta sätt.

Det verkar inte finnas något rätt eller fel.

Hur gör ni? Vilka fördelar/nackdelar finns med respektive sätt?

Programmerar php dagligen, Jag brukar vid större html kod använda templates, dvs

<code>
<?php
require_once 'header.html';
// Beskrivning 1
require_once 'footer.html';
</code>

Beskrivning 1:
Body kod här, oftast mer logiska lösningar här. Båda lösningarna du nämner fungerar, prestandan är likvärdig med de serverresurser som finns numera.
Jag brukar själv använda mig av andra sättet, alternativt sätt 1 ifall det är små saker som tex ändra i en tabell osv.

Om du bryr dig om läsbar kodning, använd dig av vscode samt phpsc, phpsc är i princip en linter som nämner hur man bör strukturera kod samt eventuella möjliga fel.

|-I7 5820K @4GHZ | Samsung SSD 850 PRO 512 GB | Corsair SSD 60 GB | | OCZ Vector 4 SSD 256 GB | Seagate SSHD 2TB | 1x HDD 1TB | Nvidia GTX 980 OC 4GB VRAM |Corsair DDR4 2400mhz 16GB | Corsair H90i | OCZ 1000w GOLD | Asus Rampage V Extreme Intel X99 | Thermaltake Level 10 GT Svart l

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2007
Skrivet av L'ombra:

Nu programmerar jag inte PHP till vardags, men jag skulle säga att det beror lite på. I de allra flesta fall skulle jag säga #2 för att det ger en bättre överblick över HTML-koden. Skulle endast använda mig av #1 om det är mycket logik och lite HTML, dvs fokus ligger på PHP-koden snarare än HTML-koden.

Okok. Tack!

Skrivet av dannesthlm:

Om det är mycket HTML-kod och mindre data som ska infogas är andra sättet logiskt smidigt, är det liten mängd konstant html-kod och mycket dynamisk data kan blir ju metod 1 snyggare kodmässigt.

Man väljer väl själv det som är mest fördelaktigt.

Okej, men en sak jag inte fattar är att vid sätt #2 så behöver man inte använda sig av curlybrackets {} till sina loopar/statements? Man använder sig av endforeach och endif?

Skrivet av klotim:

Programmerar php dagligen, Jag brukar vid större html kod använda templates, dvs

<code>
<?php
require_once 'header.html';
// Beskrivning 1
require_once 'footer.html';
</code>

Beskrivning 1:
Body kod här, oftast mer logiska lösningar här. Båda lösningarna du nämner fungerar, prestandan är likvärdig med de serverresurser som finns numera.
Jag brukar själv använda mig av andra sättet, alternativt sätt 1 ifall det är små saker som tex ändra i en tabell osv.

Om du bryr dig om läsbar kodning, använd dig av vscode samt phpsc, phpsc är i princip en linter som nämner hur man bör strukturera kod samt eventuella möjliga fel.

Hmm okej! Tack för ditt svar!

[7700K 4.5Ghz] - [PRIME Z270-A] - [16Gb 3200Mhz] - [EVGA GTX980Ti 6GB SC ACX] - [~500GB 840 EVO] - [FD 800W Newton R3 Platinum] - [Noctua D14] - [Define R3] - [S27A950D @120hz]

Trädvy Permalänk
Medlem
Registrerad
Jan 2010
Skrivet av Rekl3M:

Okej, men en sak jag inte fattar är att vid sätt #2 så behöver man inte använda sig av curlybrackets {} till sina loopar/statements? Man använder sig av endforeach och endif?

endforeach och endif är ett alternativ för utan brackets, du kan fortfarande använda dig av brackets utan att förstöra koden, det är helt enkelt bara upp till dig hur du skriver.

|-I7 5820K @4GHZ | Samsung SSD 850 PRO 512 GB | Corsair SSD 60 GB | | OCZ Vector 4 SSD 256 GB | Seagate SSHD 2TB | 1x HDD 1TB | Nvidia GTX 980 OC 4GB VRAM |Corsair DDR4 2400mhz 16GB | Corsair H90i | OCZ 1000w GOLD | Asus Rampage V Extreme Intel X99 | Thermaltake Level 10 GT Svart l

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2007
Skrivet av klotim:

endforeach och endif är ett alternativ för utan brackets, du kan fortfarande använda dig av brackets utan att förstöra koden, det är helt enkelt bara upp till dig hur du skriver.

Tusen tack! det visste jag inte ens även om jag misstänkte det.

[7700K 4.5Ghz] - [PRIME Z270-A] - [16Gb 3200Mhz] - [EVGA GTX980Ti 6GB SC ACX] - [~500GB 840 EVO] - [FD 800W Newton R3 Platinum] - [Noctua D14] - [Define R3] - [S27A950D @120hz]

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Dec 2006

Andra alternativet är det enda som gäller när du börjar förstå hur det fungerar, hämtning av information från databaser mm. Blir rörigt att ha all HTML i PHP taggar när du börjar sätta upp stora mallar i HTML/CSS.

Sen så är det svårt att koda html inuti PHP, din editor ser det inte riktigt som html och kommer inte hjälpa dig på traven så mycket.

Canon 70D | 2x Dell Ultrasharp 24" | i7 3770k | 16B | GTX 780

Trädvy Permalänk
Medlem
Plats
Mora
Registrerad
Jan 2011

Aldrig arbetat med en större hemsida, men jag använder mig personligen utav båda två. Mestadels sätt 2 där jag använder en större PHP fil med all kod och använder enbart funktioner i html filen. Tycker det underlättar otroligt mycket när html koden inte har tusentals rader med PHP utan enbart ett par funktioner istället.

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Dec 2006
Skrivet av Tekoppar:

Aldrig arbetat med en större hemsida, men jag använder mig personligen utav båda två. Mestadels sätt 2 där jag använder en större PHP fil med all kod och använder enbart funktioner i html filen. Tycker det underlättar otroligt mycket när html koden inte har tusentals rader med PHP utan enbart ett par funktioner istället.

Att importera funktioner där de behövs är definitivt smidigare.

Bygga delar och importera vid behov, t.ex.
<?PHP include 'footer.php' ?>

Så här såg faktiskt min flera år gamla portfolio ut... inget mästerverk, men väldigt städat. Alla delar låg separat.

<!DOCTYPE html> <head> <?PHP include 'portfolio/head.php'; ?> </head> <body> <div class="page-border"></div> <?PHP include 'portfolio/intro.php' ?> <!-- START KATEGORIERNA --> <div id="content"></div> <!-- scroll target --> <?PHP include 'portfolio/webb.php' ?> <?PHP include 'portfolio/bilder.php' ?> <?PHP include 'portfolio/foton.php' ?> <!-- SLUT KATEGORIERNA --> <?PHP include 'portfolio/highlight.php' ?> <?PHP include 'portfolio/om.php' ?> <?PHP include 'portfolio/kontakt.php' ?> <?PHP include 'portfolio/footer.php' ?> <?PHP include 'portfolio/script.php' ?> </body> </html>

Canon 70D | 2x Dell Ultrasharp 24" | i7 3770k | 16B | GTX 780

Trädvy Permalänk
Forumledare
Registrerad
Okt 2002

Ska jag vara lite kategorisk så skulle jag säga att ifall man känner sig behöva skriva echo-statements som innehåller HTML-uppmärkning så är det som regel tecken på bristande uppdelning mellan databearbetning och templatelogik. Jag skulle mycket hellre förespråka att hoppa ur PHP-kontext (?>) när man ska skriva HTML, där data matas in med <?=-syntaxen, och sedan återvända till PHP-kontext (<?php) temporärt när så krävs.

Typiskt skulle jag säga att utseendet av underhållbara PHP-templates är en header där egentligen all databearbetning görs/förbereds (databasanrop sätts upp, booleaner med läsbara namn för olika villkor skapas, etc.), följt av att gå över i HTML-kontext och sedan enbart använda enklare template-konstruktioner med mer eller mindre triviala variabler och jämförelser i resten av filen: <?=, if, else, while, foreach. Detta kringgår de vanligaste fallgroparna när det gäller att undvika att PHP-koden blir ohanterbar spagetti över tid. En grund till PHP:s dåliga rykte är i mina ögon att det inbjuder till att blanda ihop dessa delar hejvilt.

Lägg därtill att vid all utmatning se till att behandla data med korrekt kodning (i praktiken typiskt använda
htmlspecialchars
överallt i HTML-kontext) och att använda prepared statements för databasfrågor så har man även navigerat runt de vanligaste problemen med säkerhet och robusthet.

Har man en sådan uppdelning som grund så är det sedan rätt lätt att bryta ut logik från sina template-headers in i ett klassystem för att än mer separera templaterendering från "affärslogiken". Tricket är i mina ögon att försöka vara strikt med att se PHP som ett templatespråk, med tydlig avgränsning mellan databearbetnings- och template-delarna, så kan det trots allt bli en rätt trevlig upplevelse att jobba med.

Jag minns en gammal Stack Overflow-post på temat som tyvärr tagits bort, men archive.org har den kvar:
PHP tutorial that is security-, accuracy- and maintainability-conscious? [Stack Overflow]
. Punkt 5+6 och 1+2+3 i den frågan har berörts ovan.

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Trädvy Permalänk
Medlem
Plats
Åland
Registrerad
Jun 2009

Nu är jag ingen webutvecklare, men många av punkterna på https://phptherightway.com/ ser kloka ut att följa. Är nog värt att kika på det som sägs där.
Specifikt för frågan om hur att kombinera PHP och HTML går dom genom under kapitlet Templating.

Trädvy Permalänk
Medlem
Registrerad
Nov 2005

Skulle rekommendera twig som är ett mycket modernare template språk för php
https://twig.symfony.com/

Trädvy Permalänk
Medlem
Registrerad
Apr 2006
Skrivet av Rekl3M:

Det verkar inte finnas något rätt eller fel.

Jo, det finns definitivt fel sätt

Får jag fråga om detta är för en kurs/skoluppgift? Jag jobbar dagligen med PHP och hör talas om skolor och kurser där man fortfarande använder PHP på det här sättet (d.v.s blandar PHP och HTML i samma filer). Det är väldigt tråkigt eftersom det ger en dålig, och väldigt omodern, bild av PHP som har kommit mycket längre än så.

Vad jag tycker du bör göra är att kolla på en template engine, t.ex. Twig som @Meto nämner ovan. Du separerar då HTML-koden helt och hållet från din PHP-kod, som det borde vara.