Foros del Web » Programando para Internet » PHP »

UPDATE suma de a dos

Estas en el tema de UPDATE suma de a dos en el foro de PHP en Foros del Web. Hola de nuevo, me surgio el problema de que el UPDATE me suma de a dos en lugar de a uno como deberia ser; si ...
  #1 (permalink)  
Antiguo 02/06/2008, 14:36
 
Fecha de Ingreso: agosto-2004
Mensajes: 113
Antigüedad: 19 años, 8 meses
Puntos: 0
UPDATE suma de a dos

Hola de nuevo, me surgio el problema de que el UPDATE me suma de a dos en lugar de a uno como deberia ser; si pongo que sume de a 10 me suma de a 20 y asi todos los demas.
Pongo abajo el codigo entero de la página porque estoy muy confundido porque por mas que siga el código no puedo imaginar donde esta el error.
Código PHP:
<?php echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?".">"?>
<?php
include ("includes/data.php");
@
$id $_GET['id'];
mysql_query("update notas set fotosvistas=fotosvistas+1 where id='$id' AND estado ='a'"); 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<link href="estilo_foto.css" rel="stylesheet"type="text/css" />
<head>
<link rel="shortcut icon" href="favicon.ico">
<script language="JavaScript" type="text/JavaScript" src="funciones.js"></script>
<title><? $rs mysql_query("SELECT titulo, seccion_nota FROM notas WHERE estado = 'a' AND id = '$id'");
list(
$titulo$seccion_nota) = mysql_fetch_array($rs);
                          
$rslista = @mysql_fetch_array($rs)?><? echo $titulo?><? echo $seccion_nota;?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<? $rsclientes mysql_query("SELECT titulo, seccion_nota, txt_principal, nombre, mini, foto, fecha, fotosvistas FROM notas WHERE estado = 'a' AND id = '$id'");
                          list(
$titulo$seccion_nota$txt_principal$nombre$mini$foto$fecha$fotosvistas) = mysql_fetch_array($rsclientes);
                          
$rslista = @mysql_fetch_array($rsclientes)?>
<div id="contenido">
<!--ACA EMPIEZA LA FOTO, DESCRIPCION-->
<div id="cabeza"><?php include ("cabeza.php");?></div>
<div id="primeracolumna">
<div id="columna_a">
<div id="principal"><img src="fotos/<? echo $foto;?>" border="0" class="marco_fotos"/></div>
<!--DATOS DE LA FOTO -->
<div id="datos_foto"><b><? echo $titulo;?></b><br />Fotografía enviada por <b><? echo $nombre;?></b> el <b><? echo $fecha;?></b>
<br /><? echo $txt_principal;?><br />
Vista <b><? echo $fotosvistas;?> veces</b></div>
<!--ACA VAN LAS 3 FOTOS QUE SIGUEN EN LA GALERIA -->
<div id="galeria">GALERÍA DE FOTOS<br />
<?php
$sql 
"SELECT id, nombre, mini, titulo FROM notas WHERE seccion_nota = 'fotos' AND estado = 'a' AND id <= $id ORDER BY id DESC LIMIT 3";
$sql mysql_query($sql);                    
// Mostrar los datos
echo '<table align="center">';

// Número de filas
$num mysql_num_rows($sql);

$i 1;
while (
$row mysql_fetch_assoc($sql)) {
    if ((
$i == 1) || ((($i 1) % 3) == 0)) {
        echo 
'<tr>';
    }
    echo 
'<td align="center" valign="top"  class="fotos" ><a href="foto.php?id='.$row['id'].'"><img src="fotos/'.$row['mini'].'" border="0" class="marco_fotos" alt="'.$row['titulo'].'- enviada por '.$row['nombre'].' " title="'.$row['titulo'].' - enviada por '.$row['nombre'].'"/><br />'.$row['titulo'].'</a></td>';

    if (((
$i 3) != 0) && ($i == $num)) {
        while (((
$i 3) != 0)) {
            echo 
'<td></td>';
            
$i++;
        }
    } elseif (((
$i 3) == 0)) {
        echo 
'</tr>';
    }
    
$i++;
}
echo 
'</table>';

?></div></div>
</div>
</body>
</html>
Alguién tiene alguna idea?
Gracias
  #2 (permalink)  
Antiguo 02/06/2008, 14:48
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: UPDATE suma de a dos

hola

se me ocurre que primero hagas un select para saber cuanto vale fotovisitas y le sumes uno fuera de la sentencia SQL y despues hagas el update
Un saludo
  #3 (permalink)  
Antiguo 02/06/2008, 15:01
 
Fecha de Ingreso: junio-2008
Ubicación: Valencia (España)
Mensajes: 45
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: UPDATE suma de a dos

Hola Moquehua

Prueba a recuperar el valor de fotosvistas antes de a hacer el update. Le sumas 1 y a continuación haces el update:

<?php
//Obtengo el valor de fotosvistas con una query y le sumo 1 al valor recuperado

$sql=mysql_query("SELECT fotosvistas FROM notas where id='$id' AND estado ='a'");

//Tiene que haber solo una fila

while ($row = mysql_fetch_array($sql)) {
$fv=$row["fotosvistas"];
$fv+=1;
}
mysql_query("update notas set fotosvistas=".$fv." where id='$id' AND estado ='a'");
?>

Supongo que con esto, el error no se te debe repetir.

Ya me comentas.

Un saludo

PD: Acabo de ver lo que pone Jaronu y es justo lo que estaba escribiendo. Sigue esa idea
  #4 (permalink)  
Antiguo 02/06/2008, 15:24
 
Fecha de Ingreso: abril-2008
Mensajes: 72
Antigüedad: 16 años
Puntos: 0
Respuesta: UPDATE suma de a dos

creo es el problema lo tienes en el ultimo


$i++;

lo tienes debajo del cierre del else cuando lo tendrias que tener encima
para que no te contara tanto si la condicion se cumple como si no se cumple

ya que en el primer "sub" if te suma cuando se cumple y luego se ejectua de nuevo se cumpla o no
no se si me explico

pero deveria de ser asi

} elseif ((($i % 3) == 0)) {
echo '</tr>';

$i++;
}
}


y no asi

} elseif ((($i % 3) == 0)) {
echo '</tr>';
}
$i++;
}
  #5 (permalink)  
Antiguo 03/06/2008, 07:19
 
Fecha de Ingreso: agosto-2004
Mensajes: 113
Antigüedad: 19 años, 8 meses
Puntos: 0
Respuesta: UPDATE suma de a dos

Gracias por las respuestas, hoy, después de verlo en frio, resulto que el problema no estaba en la parte de código que puse, sino en la segunda parte (que nada tenia que ver) ya que era la parte de banners y tipos de banners.
Aparentemente si el tipo de banner no existe en la base de datos produce el error.
Loco pero es asi.
Saludos y gracias
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 01:01.