Ver Mensaje Individual
  #5 (permalink)  
Antiguo 08/01/2015, 06:39
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 3 meses
Puntos: 2658
Respuesta: Problema para actualizar datos en mysql(problema de principiante)

No tiene ninguna utilidad poner N UPDATE cuando puedes hacerlo en uno. La sintaxis la puedes leer en el manual de referencia (recomiendo usar la version que esta en la web).
Por otro lado, el UPDATE funcionará en tu caso si y sólo si el valor de la variable $obra está llegando. Si la variable es nula, contiene un caracter vacío, o un valor inválido, evidentemente no realizará nada. Pero como no podemos ver de donde proviene, eso lo deberás verificar tu.
Ten en cuenta que NUNCA debes asumir que las variables contienen lo que supones. El 90% de los sproblemas de este tipo se producen porque la variable no contiene lo que el programador supone que contiene, pero jamás se tomo el trabajo de verificar.
Validar es siempre la parte mas engorrosa de toda codificiación, pero es fundamental.

Por otro lado, no debes usar en un msimo script fucniones por procedimietnos y funciones orientadas ao objetos. No son muy compatibles. O usas una, o usas la otra.
Además, debes también verificar que cuando se ejecuta una sentencia no se haya producido un error, y eso tampoco lo estás haciendo...
NUNCA asumas que algo funcionó bien porque está bien escrito. Verifícalo.

Yo propondría algo como esto:
Código PHP:
function actualizarObras($obra){

$con = new mysqli("localhost""root""password""mydb");
if (
$con->connect_errno) {
    echo 
"Fallo al contenctar a MySQL: (" $con->connect_errno ") ".$con->connect_error;
}

$query_select "SELECT * FROM detalle_obra WHERE cod_obra = '$obra'";
$query_execute $con->query($query_select);
// debes validr siempre que no haya fallado. 

if(!$query_execute)
{echo 
"Error al ejecutar SELECT: " $con->errno " - " $con->error;}
else
  {
  while(
$query_result $query_execute->fetch_array()) {
  
$egre $query_result['egresos'];
  
$ingre $query_result['ingresos']; 
  
$recepci $query_result['recepcion'];
  
$combusre $query_result['combustible_recepcion'];
  
$combuem $query_result['combustible_emision'];
  
$conslt "UPDATE obra 
    SET egresos = (egresos + $egre), 
      ingresos = (ingresos + $ingre), 
      recepcion = recepcion + $recepci), 
      combustible_recepcion = (combustible_recepcion + $combusre), 
      combustible_emision = (combustible_emision + $combuem) 
    WHERE obra.codigo = '$obra'"
;
  
$result $con->query($conslt);
  if($!
result)
    {echo 
"Error al ejecutar UPDATE: " $con->errno " - " $con->error "\r";
     echo 
"Consulta: ".$conslt}
  }
}
$con->close;


NOtarás que eliminé los apostrofes de los valores que se suman. Eso es porque no debe en SQL ponerse un valor numerico como cadena de texto, ya que es inencesario y obliga a conversiones implicitas. Por otro lado, poner una variable entre apostrfes esconde errores con ellas, ya que si un valor está llegando nulo no se ve si usas los apostrofes, pero si dispara un error si no está.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)