J'ai beaucoup cherché, mais je séche là.
Voici mon code :
la page principale (afficher.php):
<?php
require("commandes.php");
$produits=afficher();
$nom="PokeCards";
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="shortcut icon" href="../images/navbar/logo.png" type="image/png">
<title>Admin - Tous les produits</title>
<!--Google Fonts-->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&family=Roboto+Flex:opsz,[email protected],100;8..144,300;8..144,500;8..144,700;8..144,900&display=swap" rel="stylesheet" />
<link href="bootstrap.min.css" rel="stylesheet" />
<link href="fontawesome-free-6.4.2-web/css/all.min.css" rel="stylesheet" />
<!--CSS Style-->
<style type="text/css">
.containeur-fluid{
position: absolute;
top: 10px;
left: 0px;
display: inherit;
margin-bottom: 10px;
}
.container{
position: absolute;
top: 70px;
left: 100px;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar_light bg-light">
<div class="containeur-fluid">
<a class="navbar-brand" href="../" style="color: cadetblue; font-weight: 400;">// PokeCards Boutique //</a>
<button class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent"
aria-expanded="false"
aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-lg-0">
<li class="nav-item">
<a class="nav-link active"
style="font-weight: bold;"
aria-current="page"
href="afficher.php">Produits</a>
</li>
<li class="nav-item">
<a class="nav-link"
aria-current="page"
href="nouveau.php"
style="color: cadetblue; font-weight: 400;">Nouveau</a>
</li>
<li class="nav-item">
<a class="nav-link"
aria-current="page"
href="supprimer.php"
style="color: cadetblue; font-weight: 400;">Suppression</a>
</li>
<li class="nav-item">
<a class="nav-link"
aria-current="page"
href="#"
style="color: cadetblue; font-weight: 400;">Modification</a>
</li>
</ul>
</div>
<a class="btn btn-danger d-flex" style="display: flex; justify-content: flex-end;" href="../logout.php">Déconnexion</a>
</div>
<div style="position: absolute; top: 17px;left: 730px;" >
<h5 style="color: cadetblue;opacity: 1.0;"><?=$nom?></h5>
</div>
</nav>
<div class="album py-5 bg-light">
<div class="container">
<div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-3">
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">image</th>
<th scope="col">nom</th>
<th scope="col">collection</th>
<th scope="col">infoscarte</th>
<th scope="col">etat</th>
<th scope="col">prix</th>
<th scope="col">disponibilite</th>
<th scope="col">stock</th>
<th scope="col">éditer</th>
</tr>
</thead>
<?php foreach ($produits as $produit): ?>
<tr>
<th scope="row"><?= $produit->id ?></th>
<td><img src="../images/cartes/<?= $produit->image_produit ?>" style="width:69%"></td>
<td><?= $produit->nom_produit ?></td>
<td><?= $produit->collection_produit ?></td>
<td><?= substr($produit->infoscarte_produit,0,100) ?>...</td>
<td><?= $produit->etat_produit ?></td>
<td style="font-weight:bold;color:green;"><?= $produit->prix_produit ?> Euros</td>
<td><?= $produit->disponibilite_produit ?></td>
<td><?= $produit->stock_produit ?></td>
<td><a href="editer.php?id=<?= $produit->id ?>"><i class="fa fa-pencil" style="font-size:30px;"></i></a></td>
</tr>
<?php endforeach; ?>
</table>
</div>
</div>
</div>
</body>
</html>
la page d'édition 'editer.php):
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require("commandes.php");
$id=$_GET['id'];
$leProduit=afficherUnproduit($id);
$nom="PokeCards";
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="shortcut icon" href="../images/navbar/logo.png" type="image/png">
<title>Admin - Editer les Produits</title>
<!--Google Fonts-->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&family=Roboto+Flex:opsz,[email protected],100;8..144,300;8..144,500;8..144,700;8..144,900&display=swap" rel="stylesheet" />
<link href="bootstrap.min.css" rel="stylesheet" />
<link href="fontawesome-free-6.4.2-web/css/all.min.css" rel="stylesheet" />
<!--CSS Style-->
<style type="text/css">
.containeur-fluid{
position: absolute;
top: 10px;
left: 0px;
display: inherit;
margin-bottom: 10px;
}
.bg-light {
--bs-bg-opacity: 0;
background-color: rgba(var(--bs-light-rgb),var(--bs-bg-opacity)) !important;
}
.container{
position: absolute;
top: 70px;
left: 100px;
}
h5{
text-align: center;
}
.btn btn-success{
display: block;
width: 310px;
padding-left: 8px;
padding-right: 8px;
}
.retourproduitspanel{
text-decoration: none;
background-color: #198754;
padding: 8px;
border-radius: 5px;
text-align: center;
color: white;
display: block;
width: 310px;
transition: color .15s ease-in-out,
background-color .15s ease-in-out,
border-color .15s ease-in-out,
box-shadow .15s ease-in-out;
margin-bottom: 30px;
}
.retourproduitspanel:hover{
background-color: #157347;
transition: color .15s ease-in-out,
background-color .15s ease-in-out,
border-color .15s ease-in-out,
box-shadow .15s ease-in-out;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar_light bg-light">
<div class="containeur-fluid">
<a class="navbar-brand" href="../" style="color: cadetblue; font-weight: 400;">// PokeCards Boutique //</a>
<button class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent"
aria-expanded="false"
aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-lg-0">
<li class="nav-item">
<a class="nav-link"
aria-current="page"
href="afficher.php"
style="color: cadetblue; font-weight: 400;">Produits</a>
</li>
<li class="nav-item">
<a class="nav-link"
aria-current="page"
href="nouveau.php"
style="color: cadetblue; font-weight: 400;">Nouveau</a>
</li>
<li class="nav-item">
<a class="nav-link"
aria-current="page"
href="supprimer.php"
style="color: cadetblue; font-weight: 400;">Suppression</a>
</li>
<li class="nav-item">
<a class="nav-link active"
style="font-weight: bold;
color: green"
aria-current="page"
href="">Modification</a>
</li>
</ul>
</div>
<a class="btn btn-danger d-flex" style="display: flex; justify-content: flex-end;" href="../logout.php">Déconnexion</a>
</div>
<div style="position: absolute; top: 17px;left: 730px; font-weight: bold;" >
<h5 style="color: cadetblue;opacity: 1.0;"><?=$nom?></h5>
</div>
</nav>
<div class="album py-5 bg-light">
<div class="container">
<div class="row-cols-1 row-cols-sm-2 row-cols-md-3 g-3">
<?php foreach($leProduit as $produit): ?>
<form method="POST">
<h5>Edition du produit sélectionné</h5>
<div class="mb-3">
<label for="input1" class="form-label">L'image d'illustration de ce produit</label>
<input type="text" class="form-control" name="image_produit" value="<?=$produit->image_produit?>" required>
</div>
<div class="mb-3">
<label for="input2" class="form-label">Le nom de ce produit</label>
<input type="text" class="form-control" name="nom_produit" value="<?=$produit->nom_produit?>" required>
</div>
<div class="mb-3">
<label for="input2" class="form-label">La collection/série de ce produit</label>
<input type="text" class="form-control" name="collection_produit" value="<?=$produit->collection_produit?>" required>
</div>
<div class="mb-3">
<label for="input2" class="form-label">L'état de qualité de ce produit</label>
<input type="text" class="form-control" name="etat_produit" value="<?=$produit->etat_produit?>" required>
</div>
<div class="mb-3">
<label for="input2" class="form-label">La description de ce produit</label>
<textarea class="form-control" name="infoscarte_produit" required><?=$produit->infoscarte_produit?></textarea>
</div>
<div class="mb-3">
<label for="input2" class="form-label">Le prix de ce produit</label>
<input type="number" class="form-control" name="prix_produit" value="<?=$produit->prix_produit?>" required>
</div>
<div class="mb-3">
<label for="input2" class="form-label">La disponibilité ou non de ce produit</label>
<input type="text" class="form-control" name="disponibilité_produit" value="<?=$produit->disponibilite_produit?>" required>
</div>
<div class="mb-3">
<label for="input2" class="form-label">L'état des stocks de ce produit</label>
<input type="text" class="form-control" name="stock_produit" value="<?=$produit->stock_produit?>" required>
</div>
<button type="submit" name="valider"
class="btn btn-success">Enregistrer les modifications</button>
</form>
<?php endforeach; ?>
<br />
<a href="afficher.php" class="retourproduitspanel">Retour aux produits sans rien modifier</a>
</div>
</div>
</div>
</body>
</html>
<?php
if(isset($_POST['valider']))
{
if(isset($_POST['image_produit']) AND isset($_POST['nom_produit']) AND isset($_POST['collection_produit']) AND isset($_POST['etat_produit']) AND isset($_POST['infoscarte_produit']) AND isset($_POST['prix_produit']) AND isset($_POST['disponibilite_produit']) AND isset($_POST['stock_produit']))
{
if(!empty($_POST['image_produit']) AND !empty($_POST['nom_produit']) AND !empty($_POST['collection_produit']) AND !empty($_POST['etat_produit']) AND !empty($_POST['infoscarte_produit']) AND !empty($_POST['prix_produit']) AND !empty($_POST['disponibilite_produit']) AND !empty($_POST['stock_produit']))
{
$image=htmlspecialchars(strip_tags($_POST['image_produit']));
$nome=htmlspecialchars(strip_tags($_POST['nom_produit']));
$collection=htmlspecialchars(strip_tags($_POST['collection_produit']));
$etat=htmlspecialchars(strip_tags($_POST['etat_produit']));
$infoscarte=htmlspecialchars(strip_tags($_POST['infoscarte_produit']));
$prix=htmlspecialchars(strip_tags($_POST['prix_produit']));
$disponibilite=htmlspecialchars(strip_tags($_POST['disponibilite_produit']));
$stock=htmlspecialchars(strip_tags($_POST['stock_produit']));
if(isset($_GET['id']))
{
if(!empty($_GET['id']) OR is_numeric($_GET['id']))
{
$id=$_GET['id'];
}
}
try
{
modifier($image,$nom,$collection,$etat,$infoscarte,$prix,$disponibilite,$stock,$id);
header('Location: afficher.php');
}
catch (Exception $e)
{
$e->getMessage();
}
}
}
}
?>
la page qui fait le lien entre la page d'édition, et la bdd (commande.php):<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
function ajouter($image, $nom, $collection, $etat, $infoscarte, $prix, $disponibilite, $stock, $id)
{
if (require("connexion.php"))
{
$req=$access->prepare("INSERT INTO cartes (image_produit, nom_produit, collection_produit, etat_produit, infoscarte_produit, prix_produit, disponibilite_produit, stock_produit) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
$req->execute(array($image, $nom, $collection, $etat, $infoscarte, $prix, $disponibilite, $stock));
$req->closeCursor();
}
}
function afficher()
{
if (require("connexion.php"))
{
$req=$access->prepare("SELECT * FROM cartes ORDER BY id DESC");
$req->execute();
$data=$req->fetchAll(PDO::FETCH_OBJ);
return $data;
$req->closeCursor();
}
}
function afficherUnproduit($id)
{
if (require("connexion.php"))
{
$req=$access->prepare("SELECT * FROM cartes WHERE id=?");
$req->execute(array($id));
$data=$req->fetchAll(PDO::FETCH_OBJ);
return $data;
$req->closeCursor();
}
}
function modifier($image, $nom, $collection, $etat, $infoscarte, $prix, $disponibilite, $stock, $id)
{
if (require("connexion.php"))
{
$req=$access->prepare("UPDATE cartes SET image_produit=?,nom_produit=?,collection_produit=?,etat_produit=?,infoscarte_produit=?,prix_produit=?,disponibilite_produit=?,stock_produit=? WHERE id=?");
$req->execute(array($image,$nom,$collection,$etat,$infoscarte,$prix,$disponibilite,$stock,$id));
$req->closeCursor();
}
}
function supprimer($id)
{
if(require("connexion.php"))
{
$req=$access->prepare("DELETE FROM cartes WHERE id=?");
$req->execute(array($id));
$req->closeCursor();
}
}
?>
et la page de connexion (connexion.php):
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
try
{
$access=new pdo("mysql:host=localhost;dbname=***;charset=utf8", "***", "");
}
catch (Exception $e)
{
$e->getMessage();
}
?>
J'espère trouver un peu d'aide, tchuss !