Las sentencias MySQL que permiten la modificación de registros en las tablas pueden incluir algunas de las siguientes cláusulas que, al igual que ocurría en casos anteriores, pueden tener categoría de obligatorias u opcionales.
El orden en que deben estar indicadas ha de seguir la misma secuencia en la que están descritas aquí.
(PULSE EN EL ENLACE LEER MAS PARA LEER EL CONTENIDO COMPLETO DEL ARTÍCULO)
UPDATE
Tiene carácter obligatorio, debe ser la primera palabra de la sentencia e indica a MySQL que vamos realizar una modificación.
[LOW_PRIORITY]
Es opcional e indica a MySQL espere a que se terminen de hacer las consultas que en ese momento pudiera haber en proceso antes realizar la actualización.
[IGNORE]
Es opcional. Cuando se incluye en una sentencia el proceso de actualización no se interrumpe si aparece un conflicto de clave duplicada en uno de los registros en proceso. Simplemente ignora ese registro y continúa con los siguientes
Si no se incluye, el proceso de modificación se interrumpe en el momento en que encuentre un conflicto de clave duplicada.
Tanto con ignore como sin esa cláusula, en el caso de duplicidad de clave NUNCA se efectúan las modificaciones.
tabla
Es obligatoria y contiene el nombre de la tabla que pretendemos modificar.
SET
Tiene carácter obligatorio y debe estar delante de las definiciones de campo y valor.
campo1 = valor1
Es obligatoria al menos una definición. Indica el nombre del campo a modificar (campo1) y el valor que se asignará a ese campo.
Si se pretende modificar más de un campo se repetirá esta definición tantas veces como sea necesario, separando cada una de ellas por una coma.
WHERE
Es un campo opcional y su comportamiento es idéntico a señalado al mencionar el proceso de consultas.
ORDER BY
Tiene idéntica funcionalidad a la descrita al referirnos a consultas
Modificar un campo en todos los registros de una tabla
La sentencia MySQL, que permite modificar uno o varios campos en todos los registros de una tabla, es la siguiente:
UPDATE tabla SET campo1=valor1, campo2=valor2 |
<?
$base="ejemplos";
# establecemos la conexión con el servidor
$c=mysql_connect ("localhost","pepe","pepa");
#Seleccionamos la BASE DE DATOS en la que PRETENDEMOS TRABAJAR
mysql_select_db ($base, $c);
# establecemos el nombre de la tabla en una variable
$tabla="demodat1";
# asignamos el valor a escribir en todos los registros a una varibale
$valor=7;
# hacemos la llamada a MySQL mediante la función mysql_query
# y le decimos que UPDATE (modifique) la tabla
# y que lo haga (SET) en el campo Puntos
# poniendo el valor que en este caso es 7
$resultado=mysql_query("UPDATE $tabla SET Puntos=$valor",$c);
# cerramos la conexión con la base de datos
mysql_close($c);
# escribimos un mensaje para que nos avise del final de proceso de actualización
echo "<h2>Proceso de actualización terminado</h2>";
# cerramo el script PHP
?>
<!--
###################################################################
# AHORA YA ESTAMOS EN HTML (hemos cerrado el script PHP con ?> #
###################################################################
escribimos esta script de JAVASCRIPT
para que el navegador cargue en la ventana actual
la página que nos permite visualizar el contenido
de las tablas y que es un ejemplo que hemos desarrollado
en la página anterior.
Como observarás esta llamada no la hacemos desde PHP
sino desde JavaScript, la razón es simple:
PHP se ejecuta en el servidor SIEMPRE
JavaScript se ejecuta siempre el el cliente (navegador del usuario)
y lo que pretendemos ahora es que el navegador del usuario
cargue la página indicada -->
<script language="JavaScript">
window.self.location="ejemplo196.php";
</script>
Selección y modificación de un solo registro
La condición es fundamental en esta opción y normalmente aludirá a un campo índice (clave principal o única), de modo que sea un solo registro el que cumpla la condición. Podría ser el caso, en nuestro ejemplo, del campo DNI que por su unicidad garantizaría que la modificación solamente va a afectar a uno solo de los registros.
El ejemplo siguiente nos permitirá hacer modificaciones de este tipo en la tabla deomodat2. Observa el código fuente y verás que mediante un simple recurso JavaScript, el script que realiza la modificación nos reenvía al formulario con un mensaje de confirmación de la modificación.
El formulario:
<html>
<head><title>Formulario de modificaciones</title></head>
<body>
<h2><center>MODIFICACION DE PUNTUACIONES<BR> DE LA PRUEBA Nº 2
<!-- Caundo la variable $avisa recoge el mensaje creado en
el script que actualiza la base de datos, la imprimimos
con esta etiqueta PHP -->
<? echo $_GET['avisa']; ?>
</H2></CENTER>
<FORM name="modificar" method="GET" action="ejemplo199.php">
<table align=center border=2>
<td>Escriba el DNI de la persona a calificar..:</td>
<td><input type="text" name="Penitente" value=""></td><tr>
<td>Escriba aquí la calificación..:</td>
<td><input type="text" name="Calificacion" value=""></td><tr>
<td align=center><input type="submit" value="Calificar"></td>
<td align=center><input type="reset" value="Borrar"></td>
</form>
</table>
<br><BR>
<H3><CENTER>Tenga en cuenta que la calificación requiere<br>un número de DNI existente en la base de datos</center></h3>
</body>
</html>
El Script:
<?
#recogemos del formulario las variables Calificacion y Penitente
# en variables automaticas de PHP que serán $Calificacion y $Penitente
# atención a Mayusculas/Minusculas en nombres de variables
# recuerda que para PHP son DISTINTAS
$Calificacion=$_GET['Calificacion'];
$Penitente=$_GET['Penitente'];
$base="ejemplos";
# establecemos la conexión con el servidor
$c=mysql_connect ("localhost","pepe","pepa");
#Seleccionamos la BASE DE DATOS en la que PRETENDEMOS TRABAJAR
mysql_select_db ($base, $c);
# establecemos el nombre de la tabla en una variable
$tabla="demodat2";
#########################################################################
# COMPROBACION DE LA EXISTENCIA DE UN REGISTRO CON ESE D.N.I. #
#########################################################################
# Es una operación necesaria para advertir al usuario de la correcta realización
# del proceso de modificación.
# Si introducimos un DNI inexistente la función UPDATE no DARA MENSAJE DE ERROR
# aunque evidentemente NO LO ACTUALIZARA tampoco
#
# Para hacer esa comprobación tenemos múltiples opciones una de ellas sería
# contar los registros en los que el DNI es igual al valor recibido en la variable
# $Penitente
# Si existiera el DNI devolvería UNO en el índice CERO DEL ARRAY
# recuerda que los indices de ese array se corresponden con el orden
# en el que han sido insertados los campos en la opcion SELECT
# en este caso solo ponemos uno... COUNT(DNI) por lo que el índice del array
# ha de ser el primero de los posibles que como sabes es CERO
$resultado=mysql_query("SELECT DNI FROM $tabla WHERE (DNI=$Penitente)",$c);
$comprueba=mysql_num_rows($resultado);
#HACEMOS LA COMPROBACION
# y en caso de inexistencia del recogemos en una variable ($Avisar)
# la cadena del mensaje de inexistencia
# en otro caso (cuando el DNI existe) hacemos que ese mensaje sea la cadena vacia
if($comprueba==0) {$avisar="<h2>No existe nadie con DNI ".$Penitente. " en la base de datos<br>Su Modificacion anterior no ha sido procesada</h2>";
}else{
$avisar="<BR>Calificación registrada<BR>";
}
# hacemos la llamada a MySQL mediante la función mysql_query
# y le decimos que UPDATE (modifique) la tabla
# y que lo haga (SET) en el campo Puntos
# poniendo el valor que en este caso $Calificacion
# si el DNI existe en la base de datos actualizará el valor
# y si no existe no pasa nada... ya tenemos el mensaje de error
# que nos aparecerá en la página formulario
$resultado=mysql_query("UPDATE $tabla SET Puntos=$Calificacion WHERE (DNI=$Penitente)",$c);
#colocamos la opcion de mensaje de error por si se produce alguna incidencia
if (mysql_errno($c)==0){echo " ";
}else{
if (mysql_errno($c)==1062){echo "<h2>No ha podido añadirse el registro<br>Ya existe un campo con este DNI</h2>";
}else{
$numerror=mysql_errno($c);
$descrerror=mysql_error($c);
echo "Se ha producido un error nº $numerror que corresponde a: $descrerror <br>";
}
}
# cerramos la conexión con la base de datos
mysql_close($c);
# escribimos un mensaje para que nos avise del final de proceso de actualización
#insertamos el script de Java que nos devolverá al formulario
#####################################################
#fijate como pasamos el valor del mensaje de aviso #
#####################################################
# para pasar valores a PHP hay la opcion de añadir a la direccion
# URL del script el simbolo de cerrar interrogacion
# seguido del nombre de la variable con la que será transferido
# el signo igual y el valor de la variable
#
# si quieres pasar mas de una variable la sintaxis sería
# http://loquesea.php?variable1=valor1&variable2=valor2&variable3=valor3
?>
<script language='JavaScript'>
<? echo "window.self.location='ejemplo198.php?avisa=$avisar'" ?>
</script>
Aquí tienes un ejemplo que permite visualizar el valor actual de todas las puntuaciones de la prueba 2 de los astronautas así como sus nombres y apellidos y DNI y en la cual se pueden modificar ninguno, uno, varios o todos los valores y posteriormente actualizarlos todos con los nuevos valores.
El formulario:
<html>
<head>
<title>Formulario para añadir datos a la tabla demo4</title>
</head>
<body>
<?
# definimos una variable con el NOMBRE DE LA BASE DE DATOS
$base="ejemplos";
# establecemos la conexión con el servidor
$conexion=mysql_connect ("localhost","pepe","pepa");
#Seleccionamos la BASE DE DATOS en la que PRETENDEMOS TRABAJAR
mysql_select_db ($base, $conexion);
#creamos una consulta de las bases de datos demo4 y demodat2
# esta segunda es la tabla de puntuaciones de la segunda prueba
# seleccionamos los campos DNI de ambas tablas
# y nombre y apellidos de la primera
# establecemos como condicion la IGUALDAD DE LOS DNI en ambas BASES
$resultado=mysql_query("SELECT demo4.DNI,demo4.Nombre,demo4.Apellido1, demo4.Apellido2 ,demodat2.Puntos FROM demo4, demodat2 WHERE (demo4.DNI=demodat2.DNI) ",$conexion);
# presentamos la salida en forma de tabla HTML
# estos son los encabezados
echo "<table align=center border=2 bgcolor='#F0FFFF'>";
echo "<td colspan=5 align=center>Para modificar escribe en la casilla correspondiente</td><tr>";
echo "<td colspan=4 align=center>Datos del aspirante</td>";
echo "<td align=center>Puntuación</td><tr>";
#escribimos la etiqueta de apertura de un formulario como method=post
# como action ponemos la direccion de la página que realizará las actualizaciones
# en este caso sera ejemplo201.php
echo "<form name='modificar' method=\"POST\" action='ejemplo201.php'>";
while($salida = mysql_fetch_array($resultado)){
# escribimos un bucle que nos lea desde el indice 0 hasta el indice 6
# de la matriz de salida ya que los indices 0,1,2,3,4...
# se corresponden con el número de orden tal como fueron establecidos
# los campos en la opción SELECT: 0 es el indice del primero
# 1 el de segundo, 2 el del tercero, etc. etc.
for ($i=0;$i<5;$i++){
# establecemos un condicion que escriba una tabla normal SALVO
# cuando $i=4 que es el valor actual de la puntuación
# cuando eso ocurre pedimos que escriba en la celda de la tabla
# un campo de formulario TIPO TEXTO cuyo NOMBRE SEA UNA MATRIZ
# aqui la hemos llamado ident
# cuyos indices sean los DNI de los personajes de la tabla
# recuerda que la $Salida[0] contiene siempre el primer elemento
# definido en la opcion SELECT y que en este caso es el DNI
# PEDIMOS QUE ESE CAMPO DEL FORM tenga por valor EL VALOR ACTUAL DE LA PUNTUACION
# existente en la base de DATOS
if($i!=4){
echo "<td>",$salida[$i],"</td>";
}else{
echo "<td><input type=text size=8 name=ident[$salida[0]] value=$salida[4]></td><tr>";
}
#cerramos el bucle for
}
# CERRAMOS EL BUCLE WHILE
}
# cerramos la conexión... y listo...
mysql_close($conexion)
# SALIMOS DE PHP y ponemos los botones de borrar /enviar desde HTML
?>
<td colspan=5 align=center><br><input type=submit value='Modificar'> <input type=reset value='Borrar'>
<!-- CERRAMOS EL FORMULARIO Y LA TABLA -->
</form></table>
<!-- LOS CAMPOS DEL FORMULARIO PUEDEN MODIFICARSE DESDE EL TECLADO
Y RECOGERAN LAS MODIFICACIONES EN EL ARRAY iden que como recuerdas
TENIA POR INDICE EL Nº DE DNI
AL PULSAR EN ENVIAR ESE ARRAY ES PASADO A ejemplo133.php
QUE REALIZA LA ACTUALIZACION DE LA TABLA -->
</body>
</html>
El Script:
<?
$base="ejemplos";
# establecemos la conexión con el servidor
$conexion=mysql_connect ("localhost","pepe","pepa");
#Seleccionamos la BASE DE DATOS en la que PRETENDEMOS TRABAJAR
mysql_select_db ($base, $conexion);
# escribimos un bucle que nos lea la matriz pasada desde el formulario
# de modificación de datos
# el indice de esa matriz sera el DNI (fijate en el codigo fuente del formulario)
# y el valor asociado la puntuación tecleada en el formulario
# que será el valor con el que se modificará la tabla
# la instruccion WHERE obliga a que cada valor se asigne en la tabla
# al registro cuyo DNI coincide con el indice de la matria transferida desde el formulario
foreach ($_POST['ident'] as $indice=>$valor){
$resultado=mysql_query("UPDATE demodat2 SET Puntos=$valor WHERE DNI=$indice ",$conexion);
}
#cerramos la conexion
mysql_close($conexion);
# cerramos la etiqueta PHP y desde HTML llamamos a la página que visualiza los valores
# si todo ha ido bien :-) los campos apareceran actualizados
?>
<script language="JavaScript">
window.self.location="ejemplo200.php";
</script>
|
No hay comentarios:
Publicar un comentario