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)
|
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
|
-- Compte de test
|
||||||
INSERT INTO users (username, password, role)
|
INSERT INTO users (username, password, role)
|
||||||
VALUES ('admin', 'admin', 'admin');
|
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();
|
session_start();
|
||||||
|
|
||||||
// Ajout de connexion a la bdd
|
// 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
|
// La requête doit être un POST sinon on l'a refuse
|
||||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
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
|
// 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 }
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -112,3 +112,101 @@ nav a {
|
|||||||
.login-card input[type="submit"]:hover {
|
.login-card input[type="submit"]:hover {
|
||||||
background-color: #5a52e0;
|
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