Foros del Web » Programando para Internet » PHP »

Actualizar la base de datos

Estas en el tema de Actualizar la base de datos en el foro de PHP en Foros del Web. Tengo una base de datos donde introduzco los avisos pendientes de realizar. La tabla 'avisos' contiene un campo 'estado' que toma los siguiente valores: - ...
  #1 (permalink)  
Antiguo 12/02/2003, 06:37
Avatar de paky  
Fecha de Ingreso: septiembre-2002
Mensajes: 127
Antigüedad: 21 años, 7 meses
Puntos: 0
Actualizar la base de datos

Tengo una base de datos donde introduzco los avisos pendientes de realizar. La tabla 'avisos' contiene un campo 'estado' que toma los siguiente valores:

- abierto-->si el aviso está pendiente
- cerrado-->si el aviso ya se realizó

En una tabla visualizo los registros pendientes con los datos correspondientes y con una columna en la que aparece unos checkbox desactivados (uno por cada registro visualizado). Al seleccionarlos y pulsar el botón de eliminar avisos, quiero que los registros seleccionados se actualicen a estado=cerrado. Para ello utilizo otra pantalla con el siguiente código...
Código PHP:
//antes de esta instrucción he realizado la conexión a la BD.
foreach ($borra as $i=>$salida){ 
    
mysql_query("UPDATE FROM $TableName SET estado='cerrado' WHERE (id_aviso=$i)",$link); 

Utilizo un array con el siguiente formato $salida[$i].

Bueno, creo que lo estoy complicando demasiado. Mi problema es que no me actualiza los registros seleccionados y quería saber si la instrucción de actualización está bien o mal.

Espero que comprendáis la explicación, aunque reconozco que es liosa.

Lo siento y MUCHAS GRACIAS.
  #2 (permalink)  
Antiguo 12/02/2003, 08:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Suponiendo que $borrar es el array q obtienes de tus checkbox . y estos estan definidos tipo:
Código PHP:
<intput type="checkbox"  name="borra[]" value="$id_que_corresponda"
Si usas method en tu formulario POST .. deberias hacer:

Código PHP:
foreach ($_POST['borra'] as $i){ 
    
mysql_query("UPDATE FROM $TableName SET estado='cerrado' WHERE id_aviso='$i'",$link); 

Aunque puedes asumir $borra .. como global .. es recomendable que accedas a ella por su array asociado al metodo de envio usado en tu formulario o links ...

usar el foreach tipo $indice=>$valor .. en tu caso estabas usando el $indice del array borra y no su valor .. usando simplemente $algo .. usas el valor.

Tambien tienes otra opción para realizar ese proceso de actualización de registros (UPDATE o incluso DELETE tambien ..)

Se trata de usar la sentencia SQL: IN(lista de valores separados por comas)

Sería algo tipo:

Código PHP:
$ids=implode(",",$_POST['borra']);// Obtenemos los id's q implican en la consulta separados por comas (del array).
mysql_query("UPDATE FROM $TableName SET estado='cerrado' WHERE id_aviso IN($ids)",$link); 
(sin el blucle foreach ..)

Un saludo,
  #3 (permalink)  
Antiguo 12/02/2003, 11:26
Avatar de paky  
Fecha de Ingreso: septiembre-2002
Mensajes: 127
Antigüedad: 21 años, 7 meses
Puntos: 0
con la instrucción DELETE sale bien

Tal y como yo lo tengo en el mensaje anterior pero con la siguiente instrucción de borrado:

Código PHP:
mysql_query("DELETE FROM $TableName WHERE (id=$i)",$link); 
De esta manera, me elimina el registro correctamente. Sin embargo, esto no me interesa, lo que quiero es actualizar el registro no eliminarlo.

¿qué es lo que hago mal en la intrucción de actualización?

Gracias,
  #4 (permalink)  
Antiguo 12/02/2003, 11:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
NI me habia fijado en el SQL ..

Debe ser:
UPDATE tabla SET campo='valor'

(revisa la sintax de SQL cuando tengas problemas en el manual oficial de www.mysql.com)

Un saludo,
  #5 (permalink)  
Antiguo 12/02/2003, 11:55
Avatar de paky  
Fecha de Ingreso: septiembre-2002
Mensajes: 127
Antigüedad: 21 años, 7 meses
Puntos: 0
perdon por mi torpeza

He puesto la instrucción de la sigueinte manera y sigue sin salir:

Código PHP:
mysql_query("UPDATE $TableName SET estado='cerrado' WHERE (id_aviso='$i'),$link"); 
AY AY AY AY, NO SÉ QUÉ HACER.
  #6 (permalink)  
Antiguo 12/02/2003, 12:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Yo le quitaría los parentesis en el condicional .. Usa mysql_error() para ver si el error está en SQL .. Si lo está ya te dirá algo Mysql.

Código PHP:
mysql_query("UPDATE $TableName SET estado='cerrado' WHERE id_aviso='$i',$link") or die (mysql_error()); 
Y comprubea q $TableName tenga el valor y nombre de una la tabla q estas usando para actualizar ..

Un saludo,
  #7 (permalink)  
Antiguo 12/02/2003, 12:52
Avatar de paky  
Fecha de Ingreso: septiembre-2002
Mensajes: 127
Antigüedad: 21 años, 7 meses
Puntos: 0
PERDÓN POR TANTA MOLESTIA

El mensaje de error que me aparece es el siguiente:

You have an error in your SQL syntax near 'Resource id #1' at line 1

¿Puede ser que el valor id_aviso sea distinto de $i? ¿O es por otro motivo? ¿Qué significa el error?

  #8 (permalink)  
Antiguo 12/02/2003, 13:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Eso parece .. alguno de esos ID's q pretendes actualizar NO existen en tu BD dichos registros ..

Revisa que ID's vas a actualizar (hazte echo $id; en tu bucle foreach si lo usas ..) y revisalo esos "id_aviso" existen ..

Un saludo,
  #9 (permalink)  
Antiguo 12/02/2003, 13:35
Avatar de paky  
Fecha de Ingreso: septiembre-2002
Mensajes: 127
Antigüedad: 21 años, 7 meses
Puntos: 0
Desacuerdo YA NO SÉ QUÉ HACER

La variable $i toma valor 674. El registro con id_aviso=674 existe. NO SE ME ACTUALIZA.

Me sigue dando el mismo error. ¿¿¿¿CUÁL ES EL PROBLEMA????

Lo que más me fastidia es que pongo el DELETE y funciona.

Saludos, y gracias. :-p
  #10 (permalink)  
Antiguo 12/02/2003, 13:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129


Código PHP:
mysql_query("UPDATE $TableName SET estado='cerrado' WHERE id_aviso='$i'",$link) or die (mysql_error()); 
El " final no corresponde donde estaba .. con todo eso estaba tomando como sentencia SQL hasta el $link (q si hay un solo recurso en curso seria 1 .. q es lo q mostraba como error).

Fijate siempre en la sintax .. a mi se me pasan las cosas tambien .. pero si no va hay q empezar por reivisar sintax ..

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:12.