slogan3

Ontwerp een PHP-script voor dynamische webpagina's

description

Met deze prompt kan de gebruiker een op maat gemaakt PHP-script ontwikkelen dat dynamische webpagina's genereert, wat essentieel is voor interactieve websites. Het helpt gebruikers om hun ideeën te concretiseren in werkende code, inclusief belangrijke aspecten zoals gebruikersinvoer en databasekoppelingen, zonder dat ze zelf alle details hoeven te bedenken.

prompt

Help me bij het ontwerpen van een PHP-script dat dynamische webpagina's genereert ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een basisvoorbeeld van een PHP-script dat een eenvoudig systeem biedt voor registratie, inloggen en profielweergave. Dit voorbeeld gebruikt een MySQL-database en PDO voor database-interactie. Zorg ervoor dat je een database en tabel hebt aangemaakt, bijvoorbeeld: ```sql CREATE DATABASE gebruikersdb; USE gebruikersdb; CREATE TABLE gebruikers ( id INT AUTO_INCREMENT PRIMARY KEY, gebruikersnaam VARCHAR(50) UNIQUE NOT NULL, wachtwoord VARCHAR(255) NOT NULL, email VARCHAR(100) NOT NULL, naam VARCHAR(100) ); ``` Hier is een basis PHP-implementatie: 1. **config.php** – Database-verbinding ```php <?php // config.php try { $pdo = new PDO('mysql:host=localhost;dbname=gebruikersdb', 'gebruikersnaam', 'wachtwoord'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Databaseverbinding mislukt: " . $e->getMessage()); } ?> ``` 2. **register.php** – Registratieformulier en verwerking ```php <?php session_start(); require 'config.php'; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $gebruikersnaam = $_POST['gebruikersnaam']; $wachtwoord = $_POST['wachtwoord']; $email = $_POST['email']; $naam = $_POST['naam']; // Wachtwoord hash maken $hashed_wachtwoord = password_hash($wachtwoord, PASSWORD_DEFAULT); // Insert gebruiker $stmt = $pdo->prepare("INSERT INTO gebruikers (gebruikersnaam, wachtwoord, email, naam) VALUES (?, ?, ?, ?)"); try { $stmt->execute([$gebruikersnaam, $hashed_wachtwoord, $email, $naam]); echo "Registratie geslaagd! <a href='login.php'>Login hier</a>"; } catch (PDOException $e) { echo "Fout bij registratie: " . $e->getMessage(); } } ?> <h2>Registreren</h2> <form method="post"> Gebruikersnaam: <input type="text" name="gebruikersnaam" required><br> Wachtwoord: <input type="password" name="wachtwoord" required><br> Email: <input type="email" name="email" required><br> Naam: <input type="text" name="naam"><br> <button type="submit">Registreren</button> </form> ``` 3. **login.php** – Inlogformulier en loginverwerking ```php <?php session_start(); require 'config.php'; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $gebruikersnaam = $_POST['gebruikersnaam']; $wachtwoord = $_POST['wachtwoord']; $stmt = $pdo->prepare("SELECT * FROM gebruikers WHERE gebruikersnaam = ?"); $stmt->execute([$gebruikersnaam]); $gebruiker = $stmt->fetch(); if ($gebruiker && password_verify($wachtwoord, $gebruiker['wachtwoord'])) { $_SESSION['gebruiker_id'] = $gebruiker['id']; header('Location: profiel.php'); exit; } else { echo "Ongeldige gebruikersnaam of wachtwoord."; } } ?> <h2>Inloggen</h2> <form method="post"> Gebruikersnaam: <input type="text" name="gebruikersnaam" required><br> Wachtwoord: <input type="password" name="wachtwoord" required><br> <button type="submit">Inloggen</button> </form> ``` 4. **profiel.php** – Profielweergave ```php <?php session_start(); require 'config.php'; if (!isset($_SESSION['gebruiker_id'])) { header('Location: login.php'); exit; } $stmt = $pdo->prepare("SELECT * FROM gebruikers WHERE id = ?"); $stmt->execute([$_SESSION['gebruiker_id']]); $gebruiker = $stmt->fetch(); ?> <h2>Welkom, <?php echo htmlspecialchars($gebruiker['naam']); ?></h2> <p>Gebruikersnaam: <?php echo htmlspecialchars($gebruiker['gebruikersnaam']); ?></p> <p>Email: <?php echo htmlspecialchars($gebruiker['email']); ?></p> <a href="logout.php">Uitloggen</a> ``` 5. **logout.php** – Uitloggen ```php <?php session_start(); session_destroy(); header('Location: login.php'); exit; ?> ``` **Let op:** - Zorg dat je je databasegegevens correct invoert in `config.php`. - Gebruik altijd prepared statements om SQL-injectie te voorkomen. - Voor een production-omgeving moet je extra beveiligingsmaatregelen nemen, zoals inputvalidatie, HTTPS, en veilige sessiebeheer. Wil je dat ik een compleet werkend voorbeeld met alle bestanden samenstel of aanvullende functionaliteiten toevoeg?
provider: deepseek
model: deepseek-chat
Zeker, ik help je bij het ontwerpen van een PHP-script voor gebruikersauthenticatie. Hier is een gestructureerd ontwerp: ## Database Structuur (MySQL) ```sql CREATE TABLE gebruikers ( id INT AUTO_INCREMENT PRIMARY KEY, gebruikersnaam VARCHAR(50) UNIQUE NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, wachtwoord VARCHAR(255) NOT NULL, voornaam VARCHAR(50), achternaam VARCHAR(50), telefoon VARCHAR(20), aangemaakt_op TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` ## Bestandsstructuur ``` / ├── config/ │ └── database.php ├── includes/ │ ├── auth.php │ ├── functies.php │ └── sessie.php ├── registratie.php ├── inloggen.php ├── profiel.php ├── uitloggen.php └── index.php ``` ## Kernbestanden ### 1. config/database.php ```php <?php class Database { private $host = "localhost"; private $db_naam = "jouw_database"; private $gebruiker = "jouw_gebruiker"; private $wachtwoord = "jouw_wachtwoord"; public $conn; public function getConnection() { $this->conn = null; try { $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_naam, $this->gebruiker, $this->wachtwoord); $this->conn->exec("set names utf8"); } catch(PDOException $exception) { echo "Database verbinding mislukt: " . $exception->getMessage(); } return $this->conn; } } ?> ``` ### 2. includes/functies.php ```php <?php function wachtwoordHash($wachtwoord) { return password_hash($wachtwoord, PASSWORD_DEFAULT); } function wachtwoordVerifieren($wachtwoord, $gehashtWachtwoord) { return password_verify($wachtwoord, $gehashtWachtwoord); } function sanitizeInput($data) { return htmlspecialchars(strip_tags(trim($data))); } ?> ``` ### 3. includes/sessie.php ```php <?php session_start(); function isIngelogd() { return isset($_SESSION['gebruiker_id']); } function redirectNaar($pagina) { header("Location: " . $pagina); exit(); } ?> ``` ### 4. includes/auth.php ```php <?php require_once 'config/database.php'; require_once 'functies.php'; class GebruikerAuth { private $conn; private $tabel_naam = "gebruikers"; public function __construct() { $database = new Database(); $this->conn = $database->getConnection(); } public function registreer($gebruikersnaam, $email, $wachtwoord, $voornaam, $achternaam) { $query = "INSERT INTO " . $this->tabel_naam . " SET gebruikersnaam=:gebruikersnaam, email=:email, wachtwoord=:wachtwoord, voornaam=:voornaam, achternaam=:achternaam"; $stmt = $this->conn->prepare($query); $gebruikersnaam = sanitizeInput($gebruikersnaam); $email = sanitizeInput($email); $wachtwoord = wachtwoordHash($wachtwoord); $voornaam = sanitizeInput($voornaam); $achternaam = sanitizeInput($achternaam); $stmt->bindParam(":gebruikersnaam", $gebruikersnaam); $stmt->bindParam(":email", $email); $stmt->bindParam(":wachtwoord", $wachtwoord); $stmt->bindParam(":voornaam", $voornaam); $stmt->bindParam(":achternaam", $achternaam); return $stmt->execute(); } public function login($gebruikersnaam, $wachtwoord) { $query = "SELECT id, gebruikersnaam, wachtwoord FROM " . $this->tabel_naam . " WHERE gebruikersnaam = :gebruikersnaam LIMIT 1"; $stmt = $this->conn->prepare($query); $stmt->bindParam(":gebruikersnaam", $gebruikersnaam); $stmt->execute(); if($stmt->rowCount() == 1) { $gebruiker = $stmt->fetch(PDO::FETCH_ASSOC); if(wachtwoordVerifieren($wachtwoord, $gebruiker['wachtwoord'])) { $_SESSION['gebruiker_id'] = $gebruiker['id']; $_SESSION['gebruikersnaam'] = $gebruiker['gebruikersnaam']; return true; } } return false; } public function haalProfielOp($gebruiker_id) { $query = "SELECT id, gebruikersnaam, email, voornaam, achternaam, telefoon, aangemaakt_op FROM " . $this->tabel_naam . " WHERE id = :id"; $stmt = $this->conn->prepare($query); $stmt->bindParam(":id", $gebruiker_id); $stmt->execute(); return $stmt->fetch(PDO::FETCH_ASSOC); } } ?> ``` ### 5. registratie.php ```php <?php require_once 'includes/sessie.php'; require_once 'includes/auth.php'; if($_SERVER["REQUEST_METHOD"] == "POST") { $auth = new GebruikerAuth(); if($auth->registreer($_POST['gebruikersnaam'], $_POST['email'], $_POST['wachtwoord'], $_POST['voornaam'], $_POST['achternaam'])) { redirectNaar('inloggen.php?registratie=success'); } else { $fout = "Registratie mislukt"; } } ?> <!-- HTML formulier voor registratie --> ``` ### 6. inloggen.php ```php <?php require_once 'includes/sessie.php'; require_once 'includes/auth.php'; if(isIngelogd()) { redirectNaar('profiel.php'); } if($_SERVER["REQUEST_METHOD"] == "POST") { $auth = new GebruikerAuth(); if($auth->login($_POST['gebruikersnaam'], $_POST['wachtwoord'])) { redirectNaar('profiel.php'); } else { $fout = "Ongeldige inloggegevens"; } } ?> <!-- HTML formulier voor inloggen --> ``` ### 7. profiel.php ```php <?php require_once 'includes/sessie.php'; require_once 'includes/auth.php'; if(!isIngelogd()) { redirectNaar('inloggen.php'); } $auth = new GebruikerAuth(); $profiel = $auth->haalProfielOp($_SESSION['gebruiker_id']); ?> <!-- HTML om profielgegevens weer te geven --> <h2>Welkom, <?php echo $profiel['voornaam'] . ' ' . $profiel['achternaam']; ?></h2> <p>Gebruikersnaam: <?php echo $profiel['gebruikersnaam']; ?></p> <p>Email: <?php echo $profiel['email']; ?></p> ``` ## Beveiligingsmaatregelen - Wachtwoordhashing met password_hash() - Prepared statements tegen SQL-injectie - Input sanitization - Sessiebeheer - CSRF-tokens (aanbevolen toevoeging) Dit ontwerp biedt een solide basis voor een gebruikersauthenticatiesysteem. Je kunt het verder uitbreiden met extra functionaliteiten zoals e-mailverificatie, wachtwoordreset en gebruikersrollen.