2024. szeptember 18., szerda

PHP böngésző problémákra

?php
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');

// Ne tárolja el a böngésző a választ 
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 
header("Expires: 0");

Ezek a fejlécbeállítások PHP-ban általában a Cross-Origin Resource Sharing (CORS) és a cache kezelésére szolgálnak.

Az első 3 lehetővé teszi a szerver számára, hogy különböző eredetű (domainek közötti) kéréseket fogadjon el, és különböző HTTP-módszereket (GET, POST, PUT, DELETE) kezeljen. A következő 4 a cache problémát oldja meg, amivel a fejlesztés során találkozunk.

  1. header('Access-Control-Allow-Origin: *');

    • Ez a fejléc beállítja, hogy a szerver minden domaintől elfogadjon kéréseket. A * azt jelenti, hogy bármilyen eredet (origin) engedélyezett.
  2. header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");

    • Ez a fejléc határozza meg, hogy a kérésben milyen egyedi fejlécek használhatók. Itt például az Origin, X-Requested-With, Content-Type, és Accept fejléceket engedélyezi.
  3. header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');

    • Ez a fejléc szabályozza, hogy milyen HTTP-módszereket engedélyez a szerver. A GET, POST, PUT és DELETE módszerek itt kifejezetten engedélyezve vannak.
  4. Cache-Control: no-store, no-cache, must-revalidate, max-age=0

    • no-store: Ne tároljon semmilyen adatot.
    • no-cache: Minden egyes kérésnél ellenőrizze, hogy a válasz friss-e.
    • must-revalidate: Az elavult adatok nem használhatóak.
    • max-age=0: Az adatok azonnal lejárnak.
  5. Cache-Control: post-check=0, pre-check=0, false

    • post-check és pre-check: Ezek az opciók az Internet Explorer speciális beállításait érintik.
  6. Pragma: no-cache

    • Ez a fejléc a régebbi HTTP/1.0 rendszerek számára biztosítja, hogy ne cache-eljenek.
  7. Expires: 0

    • Ez a fejléc a válasz lejárati idejét állítja be, általában azonnali lejáratra.
  8. Ezek a beállítások segítenek abban, hogy a böngésző minden egyes kérésnél friss adatokat kérjen a szervertől, és ne tároljon el semmit a cache-be.

2024. szeptember 17., kedd

12 B Body-parser modul

 A body-parser egy Node.js middleware modul, amely megkönnyíti a bejövő HTTP-kérések body részének kezelését. Ez a modul különösen hasznos akkor, ha az űrlapadatokat vagy JSON-tartalmat szeretnél fogadni és feldolgozni egy POST vagy PUT kérés során az Express-ben.

Miért van szükség a body-parser-re?

Alapértelmezésben a Node.js és az Express nem képes a kérések törzsét automatikusan feldolgozni. Ezért van szükség a body-parser modulra, amely a kérések törzsét elérhetővé teszi a req.body objektumon keresztül.

Telepítése: npm install body-parser

Példa a használatára:

const express = require('express');

const bodyParser = require('body-parser');

const app = express();

// A body-parser használata JSON formátumú adatok feldolgozásához

/* app.use(bodyParser.json()): Ez a middleware lehetővé teszi, hogy JSON típusú kéréseket tudjunk feldolgozni, így például egy API-ban érkező JSON adatok a req.body-ban lesznek elérhetők. */

app.use(bodyParser.json());

// A body-parser használata URL-kódolt adatok feldolgozásához

/* app.use(bodyParser.urlencoded({ extended: true })): Ez az opció az űrlapokon keresztül küldött URL-kódolt adatokat dolgozza fel (mint a HTML form elemek application/x-www-form-urlencoded típusa). Az extended: true opció lehetővé teszi, hogy összetett objektumokat (pl. beágyazott objektumokat) is kezeljünk. */

app.use(bodyParser.urlencoded({ extended: true }));

// Példa POST kérésre

app.post('/submit', (req, res) => {

  const name = req.body.name;

  const email = req.body.email;

  res.send(`Név: ${name}, Email: ${email}`);

});

 

// A szerver figyel a 3000-es porton

app.listen(3000, () => {

  console.log('Szerver fut a http://localhost:3000 címen');

});

Működés:

Ha egy POST kérés érkezik a /submit útvonalra, például egy HTML űrlapból, a body-parser feldolgozza a kérést, és az adatokat a req.body objektumban tárolja. Ezután az adatok hozzáférhetők a további feldolgozáshoz vagy válaszként történő küldéshez.

Extended beállítás a urlencoded metódusnál

extended: true: Lehetővé teszi, hogy összetett adatstruktúrák, például beágyazott objektumok is kezelhetők legyenek (azaz nemcsak sima string értékeket tudsz fogadni).

extended: false: Csak egyszerű key-value párokat enged feldolgozni, például az alapvető URL-kódolt formákat.

Az express újabb verzióiban (pl. Express 4.x-től) a body-parser bizonyos funkciói beépítésre kerültek az Express alapvető részeként, így külön body-parser telepítése nem mindig szükséges, mivel használhatod az Express saját beépített módszereit is:

app.use(express.json());

app.use(express.urlencoded({ extended: true }));

vagyis nem kell külön telepíteni. Ezért nézzük meg a verzió számot.

12 B Express.js - Bevezetés: Express.js keretrendszer alapjai, routing és middleware

 Az Express.js a Node.js egyik legnépszerűbb és legszélesebb körben használt keretrendszere. Ez egy minimalista és rugalmas webes keretrendszer, amely egyszerűsíti a webalkalmazások és API-k fejlesztését. Az Express.js a Node.js-re épül, és lehetővé teszi, hogy gyorsan és hatékonyan fejlesszünk webes szervereket, mivel számos olyan alapvető funkciót biztosít, amelyekkel különben kézzel kellene bajlódnunk. Lényegében megkönnyíti a szerveroldali alkalmazások és API-k létrehozását. Az express sokkal könnyebbé teszi a HTTP-kérések kezelését, az útvonalak definiálását, és middleware-k hozzáadását a request/response ciklushoz.

3.1. Az Express.js Alapjai

Mi az az Express.js?

Az Express.js egy Node.js alapú, nyílt forráskódú webes alkalmazáskeretrendszer, amelyet főleg kiszolgálói alkalmazások készítésére használnak. Az Express segítségével gyorsan és könnyen létrehozhatunk weboldalakat és webes API-kat. Ez a keretrendszer azért vált népszerűvé, mert megkönnyíti a HTTP kérések és válaszok kezelését, a különböző útvonalak (routing) beállítását, valamint a middleware-ek alkalmazását, amelyek speciális funkciókat biztosítanak.

Az Express.js Telepítése

Mielőtt használni kezdhetjük az Express.js-t, telepítenünk kell. Ehhez először telepíteni kell a Node.js-t, majd a Node Package Manager (npm) segítségével az Express-t.

2.     Express.js telepítése:

    • Nyisd meg a terminált (vagy parancssort) és hozd létre az alkalmazásod mappáját:
mkdir my-express-app
cd my-express-app
    • Inicializáld az npm-et a mappában:
npm init -y
    • Telepítsd az Express.js-t:
npm install express --save
vagy ha már van saját mappád: npm install express

Egyszerű Express.js Alkalmazás Létrehozása

Az alábbi kód egy egyszerű Express.js alkalmazás, amely egy HTTP szervert hoz létre, és válaszol a bejövő kérésekre.

// Az express modul importálása
const express = require('express');
 
// Egy új express alkalmazás létrehozása
const app = express();
 
// Egy útvonal kezelése a gyökér URL-re ('/')
app.get('/', (req, res) => {
  res.send('Hello, Express.js!');
});
 
// A szerver elindítása és figyelés egy adott porton (3000)
app.listen(3000, () => {
  console.log('Szerver fut a http://localhost:3000 címen');
});

1.     const express = require('express');:

    • Az express modul importálása szükséges ahhoz, hogy használni tudjuk az Express.js keretrendszert. Ez a sor betölti az Express modulját, amit később az app nevű változóban fogunk használni.

2.     const app = express();:

    • Az express() meghívása létrehoz egy új Express alkalmazást, amely egy HTTP szerverként fog viselkedni. Az app nevű változóban tároljuk az alkalmazást, hogy később hozzáférjünk a különböző funkcióihoz.

3.     app.get('/', (req, res) => { ... });:

    • Itt definiálunk egy útvonalat a gyökér URL-re (azaz a / útvonalra). Ez azt jelenti, hogy ha valaki meglátogatja az alkalmazást a böngészőjében a gyökér URL-en, akkor a megadott callback függvény fut le.
    • A callback függvény két paramétert kap: req (request) és res (response). A req tartalmazza a kliens által küldött kérés részleteit, a res pedig azt az objektumot, amellyel válaszolhatunk a kliensnek.
    • A res.send('Hello, Express.js!'); sor elküldi a válaszként a "Hello, Express.js!" szöveget a kliensnek.

4.     app.listen(3000, () => { ... });:

    • Ezzel a sorral indítjuk el a szervert, és megadjuk, hogy melyik porton figyeljen (ebben az esetben a 3000-es porton). Amikor a szerver sikeresen elindul, a callback függvény fut le, és kiírja a konzolra, hogy a szerver fut.

3.2. Routing Express.js-ben

A routing az az eljárás, amellyel az alkalmazás meghatározza, hogyan válaszoljon a bejövő kérésekre egy adott URL-re. Az Express.js ezt rendkívül egyszerűvé teszi. Különböző HTTP módszereket (pl. GET, POST, PUT, DELETE) használhatunk, hogy különböző típusú kéréseket kezeljünk.

Erre példának, egy komplex feladatot fogunk megoldani közösen.

3.3. Middleware Az Express.js-ben

A middleware az Express.js egyik legfontosabb eleme. A middleware-ek olyan függvények, amelyek a bejövő kérések és a kiszolgált válaszok közötti folyamatokat kezelik. Ezek a függvények lehetővé teszik, hogy módosítsuk a kérés és válasz objektumokat, befejezzük a kérelem- és válaszfolyamatot, vagy továbblépjünk a következő middleware-re.

Példa Egy Egyszerű Middleware-re

const express = require('express');
const app = express();
 
// Egy egyszerű middleware, amely minden kérésnél lefut
app.use((req, res, next) => {
  console.log(`${req.method} kérés érkezett a(z) ${req.url} URL-re`);
  next(); // Tovább lép a következő middleware-re vagy útvonalra
});
 
// Kezelés a gyökér URL-re
app.get('/', (req, res) => {
  res.send('Kezdőlap');
});
 
// Kezelés az '/about' URL-re
app.get('/about', (req, res) => {
  res.send('About oldal');
});
 
app.listen(3000, () => {
  console.log('Szerver fut a http://localhost:3000 címen');
});

Middleware Kód Magyarázata

  1. app.use((req, res, next) => { ... });:
    • Az app.use metódussal definiálunk egy általános middleware-t, amely minden egyes bejövő kérésnél lefut.
    • A middleware függvény három paramétert kap: req (kérés), res (válasz) és next (egy függvény, amely a következő middleware-t vagy útvonalkezelőt hívja meg).
    • Ebben az esetben a middleware naplózza a konzolra a kérés típusát (pl. GET) és a kért URL-t. Ezután a next() meghívásával a folyamat továbbhalad a következő middleware-re vagy útvonalkezelőre.

Példák és Gyakorlati Feladatok

Példa 1: Alapvető Routing

Hozz létre egy Express.js alkalmazást, amely különböző útvonalakat kezel:

  • GET /: Válaszoljon "Főoldal".
  • GET /about: Válaszoljon "Rólunk".
  • GET /contact: Válaszoljon "Kapcsolat".
  • GET *: Válaszoljon "404 - Az oldal nem található", ha a felhasználó egy nem létező oldalra próbál navigálni.

2024. szeptember 16., hétfő

13 backend 9. - Adatbázis műveletek a PHP-ben összefoglaló

 -- Minden érték lekérése

SELECT * FROM tablanev;

 

-- Adott oszlopok lekérése

SELECT oszlop1, oszlop2, oszlop3 FROM tablanev;

 

-- Az oszlopok nevének körülírása backtick-kel

SELECT `oszlop1`, `oszlop2`, `oszlop3` FROM tablanev;

 

-- Feltétellel adatlekérés

SELECT * FROM tablanev WHERE feltetel;

 

-- Adott oszlopok lekérése feltétellel

SELECT oszlop1, oszlop2, oszlop3 FROM tablanev WHERE feltetel;

 

-- Keresés LIKE segítségével

SELECT oszlop1, oszlop2, oszlop3 FROM tablanev WHERE oszlop1 LIKE 'kifejezes%';  -- Kezdő kifejezés

SELECT oszlop1, oszlop2, oszlop3 FROM tablanev WHERE oszlop1 LIKE '%kifejezes%';  -- Bármely helyen

 

-- Rendezés ASC [A-Z-ig], DESC [Z-A-ig]

SELECT * FROM tablanev ORDER BY oszlop1 ASC;  -- Növekvő sorrend

SELECT * FROM tablanev ORDER BY oszlop1 DESC;  -- Csökkenő sorrend

SELECT * FROM tablanev WHERE feltetel ORDER BY oszlop1 DESC;  -- Feltétellel és csökkenő sorrend

SELECT * FROM tablanev WHERE feltetel ORDER BY oszlop1 DESC, oszlop2 ASC;  -- Több oszlop szerinti rendezés

 

-- Adott darabszám lekérése

SELECT * FROM tablanev LIMIT 10;  -- Az első 10 rekord

SELECT * FROM tablanev LIMIT 10, 10;  -- 10-től kezdődő következő 10 rekord

 

-- Rekord beszúrása

INSERT INTO tablanev (oszlop1, oszlop2, oszlop3) VALUES ('ertek1', ertek2, ertek3);

 

-- Rekordok törlése

DELETE FROM tablanev WHERE feltetel;

 

-- Rekordok módosítása

UPDATE tablanev SET oszlop1 = ertek1, oszlop2 = 'ertek2' WHERE feltetel;

 

-- Több tábla összekapcsolása JOIN használatával

-- Inner Join: Két tábla közös rekordjait adja vissza

SELECT t1.oszlop1, t2.oszlop2 FROM tabla1 t1

JOIN tabla2 t2 ON t1.kozos_oszlop = t2.kozos_oszlop;

 

-- Left Join: Az első táblából minden rekordot visszaad, és a második táblából csak a megfelelő rekordokat

SELECT t1.oszlop1, t2.oszlop2 FROM tabla1 t1

LEFT JOIN tabla2 t2 ON t1.kozos_oszlop = t2.kozos_oszlop;

 

-- Right Join: A második táblából minden rekordot visszaad, és az első táblából csak a megfelelő rekordokat

SELECT t1.oszlop1, t2.oszlop2 FROM tabla1 t1

RIGHT JOIN tabla2 t2 ON t1.kozos_oszlop = t2.kozos_oszlop;

 

-- Union: Két SELECT eredményének egyesítése

SELECT oszlop1 FROM tabla1

UNION

SELECT oszlop1 FROM tabla2;

2024. szeptember 15., vasárnap

2024.09.16-20

 


12 ikt - before express

 A feladat megoldásához az alábbi kódrészletet fogjuk használni: 

<!DOCTYPE html>
            <html lang="hu">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>Rólunk</title>
                <style>
                    body { font-family: Arial, sans-serif; margin: 0; padding: 0; }
                    header { background: #007BFF; color: white; padding: 1rem; text-align: center; }
                    nav { background: #343A40; padding: 0.5rem; }
                    nav a { color: white; text-decoration: none; margin: 0 1rem; }
                    main { padding: 2rem; }
                    footer { background: #343A40; color: white; padding: 1rem; text-align: center; }
                </style>
            </head>
            <body>
                <header><h1>Rólunk</h1></header>
                <nav>
                    <a href="/">Főoldal</a>
                    <a href="/about">Rólunk</a>
                    <a href="/contact">Kapcsolat</a>
                </nav>
                <main>
                    <h2>Rólunk</h2>
                    <p>Ez az oldal a csapatunk történetéről és célkitűzéseiről szól.</p>
                </main>
                <footer><p>&copy; 2024 Weboldal. Minden jog fenntartva.</p></footer>
            </body>
            </html>

12 ikt - 3. Express.js Bevezetés: Express.js keretrendszer alapjai, routing és middleware

Az Express.js a Node.js egyik legnépszerűbb és legszélesebb körben használt keretrendszere. Ez egy minimalista és rugalmas webes keretrendszer, amely egyszerűsíti a webalkalmazások és API-k fejlesztését. Az Express.js a Node.js-re épül, és lehetővé teszi, hogy gyorsan és hatékonyan fejlesszünk webes szervereket, mivel számos olyan alapvető funkciót biztosít, amelyekkel különben kézzel kellene bajlódnunk.

Mi az az Express.js?

Az Express.js egy Node.js alapú, nyílt forráskódú webes alkalmazáskeretrendszer, amelyet főleg kiszolgálói alkalmazások készítésére használnak. Az Express segítségével gyorsan és könnyen létrehozhatunk weboldalakat és webes API-kat. Ez a keretrendszer azért vált népszerűvé, mert megkönnyíti a HTTP kérések és válaszok kezelését, a különböző útvonalak (routing) beállítását, valamint a middleware-ek alkalmazását, amelyek speciális funkciókat biztosítanak.

Az Express.js Telepítése

Mielőtt használni kezdhetjük az Express.js-t, telepítenünk kell. Ehhez először telepíteni kell a Node.js-t, majd a Node Package Manager (npm) segítségével az Express-t.

1.     Node.js telepítése:

    • Töltsd le és telepítsd a Node.js-t a hivatalos weboldalról.
    • A telepítés során az npm is telepítésre kerül.

2.     Express.js telepítése:

    • Nyisd meg a terminált (vagy parancssort) és hozd létre az alkalmazásod mappáját:
mkdir my-express-app
cd my-express-app
    • Inicializáld az npm-et a mappában:
npm init -y
    • Telepítsd az Express.js-t:
npm install express --save

Egyszerű Express.js Alkalmazás Létrehozása

Az alábbi kód egy egyszerű Express.js alkalmazás, amely egy HTTP szervert hoz létre, és válaszol a bejövő kérésekre.

// Az express modul importálása
const express = require('express');
 
// Egy új express alkalmazás létrehozása
const app = express();
 
// Egy útvonal kezelése a gyökér URL-re ('/')
app.get('/', (req, res) => {
  res.send('Hello, Express.js!');
});
 
// A szerver elindítása és figyelés egy adott porton (3000)
app.listen(3000, () => {
  console.log('Szerver fut a http://localhost:3000 címen');
});

1.     const express = require('express');:

    • Az express modul importálása szükséges ahhoz, hogy használni tudjuk az Express.js keretrendszert. Ez a sor betölti az Express modulját, amit később az app nevű változóban fogunk használni.

2.     const app = express();:

    • Az express() meghívása létrehoz egy új Express alkalmazást, amely egy HTTP szerverként fog viselkedni. Az app nevű változóban tároljuk az alkalmazást, hogy később hozzáférjünk a különböző funkcióihoz.

3.     app.get('/', (req, res) => { ... });:

    • Itt definiálunk egy útvonalat a gyökér URL-re (azaz a / útvonalra). Ez azt jelenti, hogy ha valaki meglátogatja az alkalmazást a böngészőjében a gyökér URL-en, akkor a megadott callback függvény fut le.
    • A callback függvény két paramétert kap: req (request) és res (response). A req tartalmazza a kliens által küldött kérés részleteit, a res pedig azt az objektumot, amellyel válaszolhatunk a kliensnek.
    • A res.send('Hello, Express.js!'); sor elküldi a válaszként a "Hello, Express.js!" szöveget a kliensnek.

4.     app.listen(3000, () => { ... });:

    • Ezzel a sorral indítjuk el a szervert, és megadjuk, hogy melyik porton figyeljen (ebben az esetben a 3000-es porton). Amikor a szerver sikeresen elindul, a callback függvény fut le, és kiírja a konzolra, hogy a szerver fut.

3.2. Routing Express.js-ben

A routing az az eljárás, amellyel az alkalmazás meghatározza, hogyan válaszoljon a bejövő kérésekre egy adott URL-re. Az Express.js ezt rendkívül egyszerűvé teszi. Különböző HTTP módszereket (pl. GET, POST, PUT, DELETE) használhatunk, hogy különböző típusú kéréseket kezeljünk.

Erre példának, egy komplex feladatot fogunk megoldani közösen.

3.3. Middleware Az Express.js-ben

A middleware az Express.js egyik legfontosabb eleme. A middleware-ek olyan függvények, amelyek a bejövő kérések és a kiszolgált válaszok közötti folyamatokat kezelik. Ezek a függvények lehetővé teszik, hogy módosítsuk a kérés és válasz objektumokat, befejezzük a kérelem- és válaszfolyamatot, vagy továbblépjünk a következő middleware-re.

Példa Egy Egyszerű Middleware-re

const express = require('express');
const app = express();
 
// Egy egyszerű middleware, amely minden kérésnél lefut
app.use((req, res, next) => {
  console.log(`${req.method} kérés érkezett a(z) ${req.url} URL-re`);
  next(); // Tovább lép a következő middleware-re vagy útvonalra
});
 
// Kezelés a gyökér URL-re
app.get('/', (req, res) => {
  res.send('Kezdőlap');
});
 
// Kezelés az '/about' URL-re
app.get('/about', (req, res) => {
  res.send('About oldal');
});
 
app.listen(3000, () => {
  console.log('Szerver fut a http://localhost:3000 címen');
});

Middleware Kód Magyarázata

  1. app.use((req, res, next) => { ... });:
    • Az app.use metódussal definiálunk egy általános middleware-t, amely minden egyes bejövő kérésnél lefut.
    • A middleware függvény három paramétert kap: req (kérés), res (válasz) és next (egy függvény, amely a következő middleware-t vagy útvonalkezelőt hívja meg).
    • Ebben az esetben a middleware naplózza a konzolra a kérés típusát (pl. GET) és a kért URL-t. Ezután a next() meghívásával a folyamat továbbhalad a következő middleware-re vagy útvonalkezelőre.

Példák és Gyakorlati Feladatok

Példa 1: Alapvető Routing

Hozz létre egy Express.js alkalmazást, amely különböző útvonalakat kezel:

  • GET /: Válaszoljon "Főoldal".
  • GET /about: Válaszoljon "Rólunk".
  • GET /contact: Válaszoljon "Kapcsolat".
  • GET *: Válaszoljon "404 - Az oldal nem található", ha a felhasználó egy nem létező oldalra próbál navigálni.

Megoldás:

const express = require('express');
const app = express();
 
app.get('/', (req, res) => {
  res.send('Főoldal');
});
 
app.get('/about', (req, res) => {
  res.send('Rólunk');
});
 
app.get('/contact', (req, res) => {
  res.send('Kapcsolat');
});
 
app.get('*', (req, res) => {
  res.status(404).send('404 - Az oldal nem található');
});
 
app.listen(3000, () => {
  console.log('Szerver fut a http://localhost:3000 címen');
});

Példa 2: Middleware Használata

Adj hozzá egy middleware-t, amely naplózza a bejövő kéréseket és a kért URL-eket, majd kezelje az alábbi útvonalakat:

  • GET /: Válaszoljon "Kezdőlap".
  • GET /about: Válaszoljon "About oldal".

Megoldás:

const express = require('express');
const app = express();
 
app.use((req, res, next) => {
  console.log(`${req.method} kérés érkezett a(z) ${req.url} URL-re`);
  next();
});
 
app.get('/', (req, res) => {
  res.send('Kezdőlap');
});
 
app.get('/about', (req, res) => {
  res.send('About oldal');
});
 
app.listen(3000, () => {
  console.log('Szerver fut a http://localhost:3000 címen');

Tanfolyami jelentkezés – HTML űrlap készítése, adatok feldolgozása PHP-val, validációval és formázással

  HTML űrlap (jelentkezes.html) Készíts egy HTML oldalt, amely egy tanfolyamra történő jelentkezési űrlapot jelenít meg. Az űrlap legyen ...