Formulari d'esborrament d'usuari

De Wiki personal d'en Guillem Serrat
La revisió el 00:27, 9 des 2025 per Guseba (discussió | contribucions) (Es crea la pàgina amb «== Formulari de cerca i selecció per esborrar == De la mateixa manera que amb la cerca d’usuaris, definim criteris de cerca i a l’hora d’obtenir-los ens assegurem que sigui un de definit<pre> <!-- Formulari de cerca --> <form method="post"> <label for="criteri">Selecciona el criteri de cerca:</label> <select name="criteri" id="criteri" required> <option value="">-- Selecciona --</option> <option va...».)
(dif.) ← Versió més antiga | Versió actual (dif.) | Versió més nova → (dif.)

Formulari de cerca i selecció per esborrar

De la mateixa manera que amb la cerca d’usuaris, definim criteris de cerca i a l’hora d’obtenir-los ens assegurem que sigui un de definit

<!-- Formulari de cerca -->
<form method="post">
    <label for="criteri">Selecciona el criteri de cerca:</label>
    <select name="criteri" id="criteri" required>
        <option value="">-- Selecciona --</option>
        <option value="numeroDocument">DNI/NIE/Passaport</option>
        <option value="email">Correu electrònic</option>
        <option value="telf">Telèfon mòbil</option>
        <option value="nom_cognoms">Nom i cognoms</option>
    </select>

    <label for="valor">Introdueix el valor a cercar:</label>
    <input type="text" id="valor" name="valor" required>

    <input type="submit" value="Cercar">
</form>


A més, també requerim una connexió de lectura i assignem tant el criteri seleccionat com el valor, i comprovem que el criteri n’és un de permès

require_once "../php/connexioR.php"; // Requerim una sola vegada la connexió de lectura
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $criteri = $_POST['criteri']; // Definim la variable criteri
    $valor = trim($_POST['valor']); // Definim la variable valor


    // Validar criteri
    $columnes_permeses = ['numeroDocument', 'email', 'telf', 'nom_cognoms']; // Definim el nom de les columnes permeses en la cerca
    if (!in_array($criteri, $columnes_permeses)) { // Si el criteri de cerca no està en l'array de columnes permeses (usat per millorar la seguretat, evitant injeccions SQL)
        echo "<p style='color:red;'>Criteri no vàlid.</p>";
}

A partir d'aquí, els resultats que retornarà serà únicament la ID, el nom i cognoms, el nº de document, l’email i el telèfon (dades bàsiques). De la mateixa manera, el SELECT és un pels noms i cognoms i un altre per la resta de criteris

if ($criteri === 'nom_cognoms') { // Ja que el nom i cognom està separat a la base de dades

               $stmt = $conn->prepare("SELECT 
               id, 
               tipusDocument, 
               numeroDocument, 
               nom, 
               cognoms, 
               email, 
               telf FROM Usuaris WHERE CONCAT(nom,' ',cognoms) = :valor"); // El WHERE es diferent, ja que hem de concatenar les dues columnes
           } else {
               $stmt = $conn->prepare("SELECT 
               id, 
               tipusDocument, 
               numeroDocument, 
               nom, 
               cognoms, 
               email, 
               telf FROM Usuaris WHERE $criteri = :valor"); // Ja que el nom dels valors i el criteri tenen el mateix nom, és el mateix WHERE per tots
           }
           $stmt->bindParam(':valor', $valor); // Assignem la variable $valor al paràmetre enllaçat de la consulta preparada
           $stmt->execute(); // Executem el SELECT
           $result = $stmt->fetchAll(PDO::FETCH_ASSOC); // Recupera tots els registres (files) que retorna la consulta
           // PDO::FETCH_ASSOC fa que cada fila es retorni com una array associativa, on les claus són els noms de les columnes


Un cop trobats els resultats, generarem un formulari, ja que voldrem enviar certes dades, i la taula amb els resultats, començant per les capçeleres, havent-hi com a novetat, una columna de nom “selecciona” que contindrà caselles de selecció.

if (!$result) { // En cas que el SELECT no retorni res
                echo "<p>No s'ha trobat cap usuari amb aquest criteri.</p>";
      } else { // En cas que el SELECT retorni algun registre
                echo "<p>Resultats trobats:</p>";
                echo "<form method='post' action='../php/esborrarConfirmar.php'>"; // Imprimirem un formulari el qual enviarà l'usuari seleccionat per esborrar i la seva contrasenya
                echo "<div class='table-wrapper'>";
                echo "<table border='1' cellpadding='5'>"; // Imprimim la taula
                
                // Imprimim les capçaleres de la taula
                echo "<tr>";
                echo "<th>Selecciona</th>";
                echo "<th>Tipus Document</th>";
                echo "<th>Nº Document</th>";
                echo "<th>Nom</th>";
                echo "<th>Cognoms</th>";
                echo "<th>Email</th>";
                echo "<th>Telèfon</th>";
                echo "</tr>";


I amb les capçaleres ja creades, imprimirem tots els resultats. A cada registre hi haurà un botó d’opció que tindrà com a valor la ID del registre. Això és així per seleccionar quin usuari es vol eliminar. Aques botó de selecció és obligatori, ja que hem de seleccionar quin usuari volem esborrar, tot i que en la cerca únicament aparegui un sol registre.

foreach ($result as $fila) { // Imprimim tots els registres
        echo "<tr>"; // Iniciem la fila
        // Imprimim radiobuttions per seleccionar l'usuari a esborarr
        echo "<td><input type='radio' name='id_borrar' value='" . htmlspecialchars($fila['id']) . "' required></td>"; // El valor del radiobutton és l'ID del registre de la base de dades. Així podem identificar-lo únicament
        // Imprimim la resta de camps dels registres
        echo "<td>" . htmlspecialchars($fila['tipusDocument']) . "</td>";
        echo "<td>" . htmlspecialchars($fila['numeroDocument']) . "</td>";
        echo "<td>" . htmlspecialchars($fila['nom']) . "</td>";
        echo "<td>" . htmlspecialchars($fila['cognoms']) . "</td>";
        echo "<td>" . htmlspecialchars($fila['email']) . "</td>";
        echo "<td>" . htmlspecialchars($fila['telf']) . "</td>";
        echo "</tr>"; // Tanquem la fila
}
echo "</table><br>"; // Tanquem la taula
echo "</div>";


Per últim, crearem un camp per escriure la contrasenya de l’usuari, ja que per eliminar-lo, requerirà la contrasenya d’aquell usuari per tal de completar l’operació; a més del botó d’esborrar

echo "<label for='contrasenya'>Introdueix la contrasenya de l'usuari seleccionat:</label>"; // Requerim la contrasenya per esborrar les dades
echo "<input type='password' id='contrasenya' name='contrasenya' required>";
echo "<input type='submit' value='Esborrar usuari'>"; // Botó per esborrar l'usuari
echo "</form>";

El resultat final després de fer una cerca al formulari d’esborrament d’usuaris és el següent:

S'ha produït un error en crear la miniatura: Fitxer inexistent

Esborrament a la BBDD i confirmació