Sauvegarde de l'ajout de projet
This commit is contained in:
@@ -23,6 +23,17 @@ CREATE TABLE IF NOT EXISTS users (
|
||||
UNIQUE INDEX idx_username (username)
|
||||
);
|
||||
|
||||
-- Création de la table projects : (Généré par Beekeeper Studio)
|
||||
CREATE TABLE IF NOT EXISTS projects (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
title VARCHAR(100) NOT NULL,
|
||||
tags VARCHAR(255) NULL,
|
||||
description TEXT NOT NULL,
|
||||
image_url VARCHAR(255) NOT NULL, -- Stockage de l'image par URL (exemple : par CDN)
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
-- Compte de test
|
||||
INSERT INTO users (username, password, role)
|
||||
VALUES ('admin', 'admin', 'admin');
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
session_start();
|
||||
require_once 'databaseConnection.php';
|
||||
|
||||
// Pour faire cette fonction l'utilisateur doit être administrateur
|
||||
if (!isset($_SESSION['role']) || $_SESSION['role'] !== 'admin') {
|
||||
header('Location: home.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// La requête doit être un POST sinon on l'a refuse
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
|
||||
// Récupération des données dans la requete POST
|
||||
$title = $_POST['title'] ?? '';
|
||||
$tags = $_POST['tags'] ?? '';
|
||||
$description = $_POST['description'] ?? '';
|
||||
$image_url = $_POST['image_url'] ?? '';
|
||||
|
||||
// On vérifie que les champs obligatoires ne sont pas vide
|
||||
if (!empty($title) && !empty($description) && !empty($image_url)) {
|
||||
try {
|
||||
// On prépare la requête SQL pour insérer le nouveau projet
|
||||
$stmt = $dbh->prepare('INSERT INTO projects (title, tags, description, image_url) VALUES (:title, :tags, :description, :image_url)');
|
||||
|
||||
// On execute la requete préparée
|
||||
$stmt->execute([
|
||||
':title' => $title,
|
||||
':tags' => $tags,
|
||||
':description' => $description,
|
||||
':image_url' => $image_url
|
||||
]);
|
||||
|
||||
// Redirection vers projects.php ds que la requete est executée
|
||||
header('Location: projects.php');
|
||||
exit;
|
||||
|
||||
} catch (PDOException $e) {
|
||||
// En cas d'erreur :
|
||||
echo "Erreur pendant l'ajout du projet: " . $e->getMessage();
|
||||
exit;
|
||||
}
|
||||
} else {
|
||||
echo "Veuillez remplir tous les champs obligatoires.";
|
||||
exit;
|
||||
}
|
||||
} else {
|
||||
// Si on y accède de façon peu légitime sans requête POST on refuse
|
||||
header('Location: projects.php');
|
||||
exit;
|
||||
}
|
||||
?>
|
||||
@@ -6,7 +6,7 @@
|
||||
session_start();
|
||||
|
||||
// Ajout de connexion a la bdd
|
||||
require_once('./../database/databaseConnection.php');
|
||||
require_once('./databaseConnection.php');
|
||||
|
||||
// La requête doit être un POST sinon on l'a refuse
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
// Formulaire de contact avec WEBHOOK Discord
|
||||
|
||||
// On ajoute ici le header
|
||||
require_once('./../elements/header.php');
|
||||
|
||||
+40
-1
@@ -8,4 +8,43 @@ require_once('../elements/header.php');
|
||||
|
||||
// Dans le principe il me faudrait des cases avec des images carrousel du projet un titre et une description
|
||||
|
||||
// Si l'utilisateur est admin, il pourra créer de nouveaux projets
|
||||
// On vérifie si l'utilisateur est admin avant d'afficher le formulaire
|
||||
if (isset($_SESSION['role']) && $_SESSION['role'] === 'admin') { ?>
|
||||
|
||||
<!-- Message de confirmation que le projet à été créer -->
|
||||
<?php if (isset($message)) { echo "<p style='color: white; text-align: center;'>$message</p>"; } ?>
|
||||
|
||||
<!-- Formulaire de création de projet -->
|
||||
<div class="project-container">
|
||||
<div class="project-card">
|
||||
|
||||
<div class="project-header">
|
||||
<h2>Nouveau projet</h2>
|
||||
</div>
|
||||
|
||||
<!-- en envoie les données à addProject.php -->
|
||||
<form method="POST" action="">
|
||||
|
||||
<label>Titre *</label>
|
||||
<input type="text" name="title" required>
|
||||
|
||||
<label>Tags (virgules)</label>
|
||||
<input type="text" name="tags">
|
||||
|
||||
<label>Description *</label>
|
||||
<textarea name="description" required></textarea>
|
||||
|
||||
<label>Lien de l'image *</label>
|
||||
<!-- URL Pour un potentiel Lien image/CDN -->
|
||||
<input type="url" name="image_url" placeholder="https://..." required>
|
||||
|
||||
<!-- Le bouton qui déclenche le PHP en haut de page -->
|
||||
<input type="submit" name="submit_project" value="+ Ajouter le projet" class="btn-submit">
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php }
|
||||
|
||||
?>
|
||||
@@ -111,4 +111,102 @@ nav a {
|
||||
|
||||
.login-card input[type="submit"]:hover {
|
||||
background-color: #5a52e0;
|
||||
}
|
||||
|
||||
/* ---- PAGE AJOUT PROJET ---- */
|
||||
.project-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding: 40px 20px;
|
||||
}
|
||||
|
||||
.project-card {
|
||||
background-color: #111116; /* Fond très sombre comme sur l'image */
|
||||
border: 1px dashed #3a3a5e; /* Bordure pointillée */
|
||||
border-radius: 12px;
|
||||
padding: 30px;
|
||||
width: 800px;
|
||||
}
|
||||
|
||||
.project-header h2 {
|
||||
margin-top: 0;
|
||||
font-size: 20px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.badge-admin {
|
||||
color: #6c63ff; /* Ton violet */
|
||||
font-size: 14px;
|
||||
margin-left: 10px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.form-row {
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.half-width {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.form-group label {
|
||||
display: block;
|
||||
color: #aaaaaa;
|
||||
margin-bottom: 8px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
/* Inputs reprenant ton style login */
|
||||
.project-card input[type="text"],
|
||||
.project-card input[type="url"],
|
||||
.project-card textarea {
|
||||
width: 100%;
|
||||
background-color: #1a1a24;
|
||||
border: 1px solid #2a2a3e;
|
||||
border-radius: 6px;
|
||||
color: white;
|
||||
padding: 12px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.project-card textarea {
|
||||
min-height: 100px;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
/* Zone pour l'URL (qui remplace l'upload de fichier) */
|
||||
.url-input-zone {
|
||||
border: 1px dashed #3a3a5e;
|
||||
border-radius: 6px;
|
||||
padding: 40px 20px;
|
||||
text-align: center;
|
||||
background-color: #15151c;
|
||||
}
|
||||
|
||||
.url-input-zone input {
|
||||
width: 80%;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
/* Bouton violet */
|
||||
.btn-submit {
|
||||
background-color: #6c63ff;
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
padding: 12px 24px;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.btn-submit:hover {
|
||||
background-color: #5a52e0;
|
||||
}
|
||||
Reference in New Issue
Block a user