26. Modificacions i baixes
Índex
Identificació del registre
Per a modificar o donar de baixa un registre, cal localitzar-lo amb la clàusula WHERE. Cal ésser molt curós a fi que la identificació sigui precisa: pot donar-se el cas de diversos documents que tinguin un mateix valor en un camp, i correm el risc de fer un canvi on no toca, o d'eliminar un document que cal mantenir.
La millor manera d'identificar inequívocament un registre consisteix a fer ús d'un camp autonumèric, ja que el valor no s'hi pot repetir.
Normalment es procedeix en dues fases; en la primera, a partir d'una recerca, es localitza el conjunt dins el qual hi hagi el registre o registres que cal modificar o suprimir, i es presenta aquest conjunt, explicitant-hi el codi autonumèric. En la segona fase actuem exclusivament sobre el registre adequat, invocant-lo mitjançant el codi autonumèric.
Naturalment es poden arbitar programes més complexos que permetin fer diverses modificacions alhora, en un mateix camp o en diversos camps, amb un únic valor o amb diversos valors, però el nucli central de l'operació és sempre el que s'ha descrit.
Modificar els valors d'un registre
La instrucció d'actualització és
- $modif = mysql_query("UPDATE nom_de_taula SET nom_de_camp = valor_nou WHERE nom_de_camp = valor_identificatiu")
Es poden acumular diversos canvis simultanis en un mateix registre:
- SET nom_de_camp = valor_nou, nom_de_camp = valor_nou WHERE ...
- Taula MySQL anomenada estats, amb els camps Id, A i B, i un cert nombre de registres.
- ...
- $dades = mysql_query("SELECT * FROM estats") or
- die("Problemes de lectura");
- while($fila = mysql_fetch_array($dades)){
- echo "<tr>";
- echo "<td class='e'>" . $fila['Id'] . "</td>"; // Lectura i presentació de tot el contingut
- echo "<td class='e'>" . $fila['A'] . "</td>";
- echo "<td class='e'>" . $fila['B'] . "</td>";
- echo "</tr>";
- }
- mysql_close($con);
- ...
- A continuació el document conté un formulari, mitjançant el qual s'indica quin registre es vol modificar.
- ...
-
- $dades = mysql_query("SELECT * FROM estats WHERE Id = $I") or
- die("Problemes de lectura"); // Tria del registre desitjat
-
- $fila = mysql_fetch_array($dades);
- $A = trim($fila['A']); // Lectura dels camps del registre (sense while, només n'hi ha un)
- $B = trim($fila['B']);
- mysql_close($con);
-
- ...
-
- <h3>Modifiqueu les dades que calgui</h3>
- <p> </p>
- <form action="26c.php" method="post">
- <table>
- <tr><td><input type="text" name="id" style="width: 50px" value="<?php echo $I; // Inclusió de les dades actuals com value d'un camp de formulari ?>" readonly="readonly" /></td></tr>
- <tr><td><input type="text" name="A_nou" style="width: 250px" value="<?php echo $A; // Idem ?>" /></td></tr>
- <tr><td><input type="text" name="B_nou" style="width: 250px" value="<?php echo $B; // Idem ?>" /></td></tr>
- <tr><td><input type="submit" value="D'acord" /></td></tr>
- </table>
- </form>
-
- ...
- <?php
-
- $I = $_POST['id'];
- $A = $_POST['A_nou'];
- $B = $_POST['B_nou'];
-
- ...
-
- $modif = mysql_query("UPDATE estats SET A = '$A', B = '$B' WHERE Id = '$I'") or
- die("Problemes en el canvi");
-
- $dades = mysql_query("SELECT * FROM estats") or
- die("Problemes de lectura");
-
- Presentació de la taula modificada
-
- mysql_close($con);
-
- ?>
Vegeu-ne el resultat.
Nota: En una situació real, la lectura inicial no es faria probablement sobre el total de la taula, sinó sobre un fragment prèviament seleccionat, i la lectuira final es reduiria potser només al registre modificat.
Esborrar registres
Abans d'esborrar un registre, s'identifica d'una manera anàloga a la indicada per a les modificacions.
Els registres s'esborren així:
- $del = mysql_query("DELETE FROM nom_de_taula WHERE nom_de_camp = valor")
Per a esborrar tots els registres d'una taula, es prescindeix de l'especificació WHERE.