Afegir productes al catàleg

De Wiki personal d'en Guillem Serrat
La revisió el 01:56, 12 gen 2026 per Guseba (discussió | contribucions)
(dif.) ← Versió més antiga | Versió actual (dif.) | Versió més nova → (dif.)

Afegir productes al catàleg

L’administrador o responsable del catàleg pot afegir nous productes al catàleg.

Connexió a la BD

En aquest cas, degut a que estem afegint productes i modificant la BD, necessitarem la connexió d'escriptura.

require_once "../connexioBD/connexioRW.php"; // Connexió PDO

Formulari

El formulari consta de 5 aspectes a emplenar:

  • Nom del producte
  • Preu
  • Descripció
  • Estoc
  • Categoria
  • Imatge

El formulari té una codificació especial per suportar imatges i la seva acció és el mateix codi. També s'afageix un missatge de verificació.

<!-- Formulari -->
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Afegir Producte</title>
    <link rel="stylesheet" href="../css/stylesAfegirProductes.css"> <!-- Definim el full d'estils -->
</head>
<body>

<form method="post" action="" enctype="multipart/form-data"> <!-- Tipus de codificació que permet pujar imatges -->
    <h1>Afegir Producte Nou</h1>
    <?php if (isset($missatge)):?> <!-- En cas que s'enviï un missatge un cop enviat el formulari -->
        <center><p style="color: green; font-weight: bold;"> <?php echo $missatge ?> </p></center> <!-- Missatge d'èxit -->
    <?php endif; ?>
    
    Nom:<br>
    <input type="text" name="nom" required><br><br>

    Preu (€):<br>
    <input type="number" step="0.01" name="preu" required><br><br>

    Descripció:<br>
    <textarea name="descripcio" rows="3" cols="40"></textarea><br><br>

    Estoc:<br>
    <input type="number" name="estoc" min="0" required><br><br>

    Categoria:<br>
    <input type="text" name="categoria" required><br><br>

    Imatge:<br>
    <input type="file" name="imatge" accept="image/*" required><br><br>

    <input type="submit" value="Afegir Producte">
</form>

</body>
</html>

Inserció de producte a la BD

Un cop es respon el formulari, abans de fer l'Insert a la BD, haurem de treballar com es desa la imatge. Recordem que la imatge es desa al servidor i a la BD es desa el nom de la imatge.

Per això, definim la ruta on es desen les imatges, el nom de la imatge i la ruta final (rutaImatges/nomImatge)

$directoriImatges = "./../imatges/"; // Carpeta on es desa la imatge
$nomImatge = basename($_FILES['imatge']['name']); // Agafem el nom de la imatge
$destí = $directoriImatges . $nomImatge; // Definim el destí on es desarà la imatge (../imatges/nomImatge)

Seguidament haurem de moure la imatge a la ruta especificada. En cas que l'operació sigui correcte, realitzarem l'Insert

// Mou el fitxer pujat al directori if (move_uploaded_file($_FILES['imatge']['tmp_name'], $destí)) { // Desa el fitxer al servidor

   // Inserim les dades del producte a la BD
   $stmt = $pdo->prepare("
       INSERT INTO productes (nom, preu, descripcio, estoc, categoria, imatge)
       VALUES (:nom, :preu, :descripcio, :estoc, :categoria, :imatge)
   ");
   $stmt->bindParam(':nom', $_POST['nom']);
   $stmt->bindParam(':preu', $_POST['preu']);
   $stmt->bindParam(':descripcio', $_POST['descripcio']);
   $stmt->bindParam(':estoc', $_POST['estoc']);
   $stmt->bindParam(':categoria', $_POST['categoria']);
   $stmt->bindParam(':imatge', $nomImatge); // Nom del fitxer a la BD
   $stmt->execute();
   $missatge = "Producte afegit correctament"; // Definim un missatge d'èxit

Codi complet

<?php
require_once "../connexioBD/connexioRW.php"; // Connexió PDO

$directoriImatges = "./../imatges/"; // Carpeta on es desa la imatge

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['imatge'])) { // En cas que s'envii el formulari
    // Nom del fitxer final
    $nomImatge = basename($_FILES['imatge']['name']); // Agafem el nom de la imatge
    $destí = $directoriImatges . $nomImatge; // Definim el destí on es desarà la imatge (../imatges/nomImatge)

    // Mou el fitxer pujat al directori
    if (move_uploaded_file($_FILES['imatge']['tmp_name'], $destí)) { // Desa el fitxer al servidor

        // Inserim les dades del producte a la BD
        $stmt = $pdo->prepare("
            INSERT INTO productes (nom, preu, descripcio, estoc, categoria, imatge)
            VALUES (:nom, :preu, :descripcio, :estoc, :categoria, :imatge)
        ");

        $stmt->bindParam(':nom', $_POST['nom']);
        $stmt->bindParam(':preu', $_POST['preu']);
        $stmt->bindParam(':descripcio', $_POST['descripcio']);
        $stmt->bindParam(':estoc', $_POST['estoc']);
        $stmt->bindParam(':categoria', $_POST['categoria']);
        $stmt->bindParam(':imatge', $nomImatge); // Nom del fitxer a la BD

        $stmt->execute();

        $missatge = "Producte afegit correctament"; // Definim un missatge d'èxit
    } else {
        echo "Error en pujar la imatge.";
    }
}
?>


<!-- Formulari -->
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Afegir Producte</title>
    <link rel="stylesheet" href="../css/stylesAfegirProductes.css"> <!-- Definim el full d'estils -->
</head>
<body>

<form method="post" action="" enctype="multipart/form-data"> <!-- Tipus de codificació que permet pujar imatges -->
    <h1>Afegir Producte Nou</h1>
    <?php if (isset($missatge)):?> <!-- En cas que s'enviï un missatge un cop enviat el formulari -->
        <center><p style="color: green; font-weight: bold;"> <?php echo $missatge ?> </p></center> <!-- Missatge d'èxit -->
    <?php endif; ?>
    
    Nom:<br>
    <input type="text" name="nom" required><br><br>

    Preu (€):<br>
    <input type="number" step="0.01" name="preu" required><br><br>

    Descripció:<br>
    <textarea name="descripcio" rows="3" cols="40"></textarea><br><br>

    Estoc:<br>
    <input type="number" name="estoc" min="0" required><br><br>

    Categoria:<br>
    <input type="text" name="categoria" required><br><br>

    Imatge:<br>
    <input type="file" name="imatge" accept="image/*" required><br><br>

    <input type="submit" value="Afegir Producte">
</form>

</body>
</html>