Forumdelen sponsras av

Skapa HTML kod i PHP. Vanlig metod?

Trädvy Permalänk
Medlem
Plats
Dalarna
Registrerad
Apr 2016

Skapa HTML kod i PHP. Vanlig metod?

Sitter o sullar med HTML+PHP. Ser att en del exempel visar hur php:n genererar HTML-koden. De skapar en variabel som de plockar på mer o mer HTML och sen skriver de ut den med echo.
Är det vanligt? Ska det alltid vara ett HTML-huvud först och sen att PHP-koden körs direkt? Jag anar att det beror på fall till fall.
I mitt fall(!) nu så har jag tre inmatningsfält med lite ledtext och sen en dropdown som fylls på med data från MySQL. Den dropdown skapas i PHP:n. Varför kan jag inte göra HTML-koden för de andra två fälten i PHP också då?

Trädvy Permalänk
Medlem
Plats
skåne
Registrerad
Jun 2004

Och varför vill du göra det?
Allt i din fil (index.php?) körs på servern och skapar en HTML-fil som skickas till klienten. Du kan använda php för att generera ren html, men jag vet inte varför man vill göra så om du inte har variabler eller funktioner som ska köras i den.
Tänk mer att du använder php för att införa funktionalitet och variabler i htmln, som dropdownen tex. Eller om du tex vill loopa över en lista och generera <li>element.
Vill du skapa något med php så bara innefatta det i phptaggar; <?php echo "<input />"; ?>

Skickades från m.sweclockers.com

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Trädvy Permalänk
Medlem
Plats
Dalarna
Registrerad
Apr 2016
Skrivet av kundun:

Och varför vill du göra det?
Allt i din fil (index.php?) körs på servern och skapar en HTML-fil som skickas till klienten. Du kan använda php för att generera ren html, men jag vet inte varför man vill göra så om du inte har variabler eller funktioner som ska köras i den.
Tänk mer att du använder php för att införa funktionalitet och variabler i htmln, som dropdownen tex. Eller om du tex vill loopa över en lista och generera <li>element.
Vill du skapa något med php så bara innefatta det i phptaggar; <?php echo "<input />"; ?>

Skickades från m.sweclockers.com

Varför frågan uppkom är pga. mitt behov av att populera en dropbox med data från mySQL. Då googlade jag som vanligt och fann en massa exempel där PHP-koden skapade själva dropboxen. Koden skrev helt enkelt ut HTML-koden. Det gör ju att Dropboxen laddas direkt. I och med detta så tänkte jag att "Varför inte skriva ut de andra två nödvändiga inbox också och sen vid klick på en submit-knapp så aktiveras scriptet igen och de får datat. Men vän av ordning så anar jag att jag är ute fel och inser ju det när det inte fungerar. Varför vet jag inte för submit-knappen bör ju även skicka med dropboxens valda värde. Alla befinner sig inom samma <form></form>.

Trädvy Permalänk
Medlem
Plats
Helsingborg
Registrerad
Jan 2015

Lättast är att behandla php-dokumentet som om det vore ett html-dokument, och sen innefatta all php-kod i taggar. php-koden behöver inte vara på ett enda ställe utan du kan öppna/stänga taggar på flera olika ställen i dokumentet.

På så vis slipper man bygga ihop en enorm textsträng som man sen skickar ut med echo.

Trädvy Permalänk
Medlem
Plats
Varberg
Registrerad
Aug 2009

Eller så behandlar du din php-fil som en service som du returnerar en xml eller json med din mysql-data och populerar den html med jquery...

Exempel : https://programmerblog.net/jquery-ajax-get-example-php-mysql/

ASUS P9X79 | RX 580 | Corsair DDR3 XMS3 8x8Gb | Intel I7 3820 | 2x Samsung 840 Pro 256Gb + 1 Intel 520 256 + 1 Crucial M500 256Gb
DELL XPS 15 | I7 | 512GB | 16GB ram | 4K EYEFINITY

Trädvy Permalänk
Medlem
Plats
Dalarna
Registrerad
Apr 2016
Skrivet av elBenko:

Lättast är att behandla php-dokumentet som om det vore ett html-dokument, och sen innefatta all php-kod i taggar. php-koden behöver inte vara på ett enda ställe utan du kan öppna/stänga taggar på flera olika ställen i dokumentet.

På så vis slipper man bygga ihop en enorm textsträng som man sen skickar ut med echo.

Jag skulle ju kunna fylla dropdown med data från MySQL direkt i HTML:en med som du säger inbäddad PHP. Så har jag gjort tidigare. Så när user anropar den adressen (typ index.php) så skapas HTML-sidan med förifylld dropdown och de övriga två inputs. Sen skickas det över till klientens browser. Det är första körningen. (Du hör hur novis jag är...)
Andra körningen blir när user trycker på Submit knappen. Då blir det en ytterligare aktivering av hela sidan i servern men då skickas datat till mySQL och kanske nåt echo till klienten att allt gick bra. Jag måste ha lite if-satser inser jag.

Jag har lite svårt att ta till mig hur server-client utbyter information m.h.a HTML/PHP. Servern, mh.a. PHP preparerar en sida som den skickar till klienten. Sen vilar den tills nästa begäran från nån <form> eller nåt. Så har jag förstått det.

Trädvy Permalänk
Medlem
Plats
Helsingborg
Registrerad
Jan 2015
Skrivet av orig_rejser:

Eller så behandlar du din php-fil som en service som du returnerar en xml eller json med din mysql-data och populerar den html med jquery...

Exempel : https://programmerblog.net/jquery-ajax-get-example-php-mysql/

Detta är det smidigaste och snyggaste sättet, men innebär också lite mer komplexitet då man får läsa på om hur ajax funkar.

Trädvy Permalänk
Medlem
Plats
Helsingborg
Registrerad
Jan 2015
Skrivet av Sweedland:

Jag skulle ju kunna fylla dropdown med data från MySQL direkt i HTML:en med som du säger inbäddad PHP. Så har jag gjort tidigare. Så när user anropar den adressen (typ index.php) så skapas HTML-sidan med förifylld dropdown och de övriga två inputs. Sen skickas det över till klientens browser. Det är första körningen. (Du hör hur novis jag är...)
Andra körningen blir när user trycker på Submit knappen. Då blir det en ytterligare aktivering av hela sidan i servern men då skickas datat till mySQL och kanske nåt echo till klienten att allt gick bra. Jag måste ha lite if-satser inser jag.

Jag har lite svårt att ta till mig hur server-client utbyter information m.h.a HTML/PHP. Servern, mh.a. PHP preparerar en sida som den skickar till klienten. Sen vilar den tills nästa begäran från nån <form> eller nåt. Så har jag förstått det.

Jepp, dokumentet du anropar vid submit i ditt formulär behöver ha en if-sats som kollar efter formulärdata, och därefter utför du det jobb du behöver. Du har dina globala variabler för GET (data via url) och POST (data via formulär) som du använder dels för att kolla efter submit och dels hämta ut formulärdata.

Förslaget ovan om AJAX innebär i princip att man skickar formulärdata till en separat php-fil, som utför arbete och sen returnerar data som xml eller json till ett javascript på din webbsida, på så vis kan man uppdatera data på sidan utan att behöva ladda om dokumentet.

Som du säger så när klienten frågar efter exempelvis index.php så exekveras php på dokumentet först, och sen skickar servern resultatet som html till klienten precis som vanligt, php vilar tills klienten begär ett nytt dokument/eller laddar om sidan.

Trädvy Permalänk
Medlem
Plats
Dalarna
Registrerad
Apr 2016
Skrivet av elBenko:

Jepp, dokumentet du anropar vid submit i ditt formulär behöver ha en if-sats som kollar efter formulärdata, och därefter utför du det jobb du behöver. Du har dina globala variabler för GET (data via url) och POST (data via formulär) som du använder dels för att kolla efter submit och dels hämta ut formulärdata.

Förslaget ovan om AJAX innebär i princip att man skickar formulärdata till en separat php-fil, som utför arbete och sen returnerar data som xml eller json till ett javascript på din webbsida, på så vis kan man uppdatera data på sidan utan att behöva ladda om dokumentet.

Som du säger så när klienten frågar efter exempelvis index.php så exekveras php på dokumentet först, och sen skickar servern resultatet som html till klienten precis som vanligt, php vilar tills klienten begär ett nytt dokument/eller laddar om sidan.

Det där med Ajax låter lockande men barn måste lära sig krypa först.

Har en fundering. När User fyller i data i inbox och dropbox o sånt och sen klickar på Submit knappen så undrar jag vad som sker. Jag utgår att det skickas ett paket med data från klient till server. Detta data är hämtat från de controls som befinner sig mellan <FORM></FORM>? På Server-sidan plockar man ur datat i den överskickade dataarrayen m.h.a $_POST.
Detta skickande från klient till server utförs av browsern? Vad är det för modul som gör det? (Om jag nu har resonerat rätt...)

Trädvy Permalänk
Entusiast
Testpilot
Plats
Chalmers
Registrerad
Aug 2011

Min några år gamla och tämligen begränsade erfarenhet av PHP är att man brukade göra så här:

<?php $username = "Alling"; ?> <!DOCTYPE html> <title><?php echo $username; ?></title> <h1>Välkommen <?php echo $username; ?>!</h1>

5930K • Corsair DP 32 GiB • EVGA GTX 980 • 2x Swift PG278Q
Better SweClockersDisplayPort över USB-C

Köp processor för framtiden™, men inte grafikkort.

Trädvy Permalänk
Medlem
Plats
Helsingborg
Registrerad
Jan 2015

@Sweedland: oj, vad som sker bakom kulisserna vid en POST är bortom min kunskap, det får du nog googla om ingen annan här sitter på den kunskapen Men i övrigt har du helt rätt i hur det funkar.

Trädvy Permalänk
Medlem
Plats
Karlskrona
Registrerad
Aug 2009

Det är lite blandade koncept här i tråden och även din fråga om att "generera" html kod medans du egentligen pratar om att bara hålla en sträng med html kod i en variabel är två saker lite blandade.

Vad folk ofta "börjar med" är i princip att de använder PHP som ett template språk. Likt vad Alling skriver tex där man även kan ha en del logik med <?php if($foo === true);?> följt av <?php endif;?>. Det blir snabbt väldigt rörigt dock.

Ofta vill man förr eller senare dela upp logik, presentation, lagring osv i olika lager.

Att skriva sin frontend kod i javascript eller något javascript-bibliotek och sedan hämta, bearbeta och returnera data via PHP är populärt. Speciellt om du har en "ensidesapp" där du faktiskt inte laddar nya sidor utan endast byter ut data som presenteras så är detta det sätt som är mest lämpat.

För en mer "vanlig" site, med massa olika distinkta sidor så gör man kanske dock fortfarande mycket i backend. Någon form av existerande MVC-bibliotek för PHP eller linande hemmasnickrad lösning används då ofta för att dela upp olika ansvarsområden inom koden.

Jag själv har ett bibliotek som jag skapade för att skriva objektorienterade plugins till ett system som annars egentligen var välidgt mycket "låt din plugin exponera en index.php fil i en undermapp som publikt exponerar alla funktioner som din plugin använder". Lite hur plugins till Wordpress ser ut.

Jag började ofta med att skriva ihop klasser och det min index.php gjorde var i princip att ladda dessa och lämna över till dem. Men när jag märkte vilket mönster jag alltid följde så gjorde jag ett bibliotek med en basklass för en Plugin som skötte allt med att installera och avinstallera en Plugin osv.

Till detta gjorde jag sedan med tiden olika underkomponenter som hanterar en massa olika återkommande saker för mig. Bland annat finns klasser för att skapa och hantera HTML element.

När det behövs så gör jag lösningar via ajax och jquery också och kod kan även höra till ett speciellt element och således automatiskt inkluderas om ett givet element faktiskt skrivs ut på sidan eller inte. Om en tabell skall ritas upp så har jag en klass som jag kan sätta kolumner, addera rader (Table\Row) osv. Där jag sedan vill ha denna utskriven behöver jag bara köra en echo på objektet. Sedan har jag en klass som ärver av Table som heter DataTable och denna skapar istället en interaktiv tabell som kan sorteras, rader markeras osv. Att ta en Table och istället göra om den till en DataTable blir med en sådan här uppbyggnad så lätt att det handlar om att kalla $myTable = new DataTable('table_id'); istället för $myTable = new Table('table_id'); Då DataTable ärver ifrån en gemensam basklass som är Element som även Form, TableRow osv ärver ifrån så kan jag snabbt och lätt i PHP koden göra saker som att gå igenom min DataTable's alla rader och för varje rad gå igenom alla kolumner och sätta bakgrundsfärgen till röd för alla som har ett visst innehåll osv.

Man kan även lätt ta andra Element, tex en Form eller en Img och lagt i en av cellerna och när vårt Table skrivs ut så hade även den skrivits ut med korrekt kod för den taggen och dess attribut.

Om man talar om att "generera/skapa" HTML "i" PHP så hade nog ett sådant här system med en hirarkisk arvsstruktur med en grundläggande Element-klass i botten varit vad jag såg framför mig.

Asus Zenith Extreme | 32gb DDR4 3200MHZ CL14 | Threadripper 1950X | 1080Ti
Asus Z97 Pro Gamer | 32gb ram DDR3 2400MHz | i7 4790k | 2 x R9 390 - Barnen fått ta över
Asrock P67 Extreme4 rev3 | 16gb DDR3 2400MHz | i7 2600K | R9 290 - Barnen fått ta över
En massa bärbara, servrar, RPi's och andra boxar