Ver Mensaje Individual
  #4 (permalink)  
Antiguo 06/07/2010, 16:41
camrodri2010
 
Fecha de Ingreso: junio-2010
Mensajes: 60
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Problema con actualizacion de registrosen una Base de Datos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Vamos por partes, y no te molestes por lo que te digo: Es habitual que un post no se responda cuando sea el tema o la forma de presentarlo no estimula el interés de los foristas. No tiene nada de malo ni de bueno. Simplemente que nadie se entusiasmó con el asunto, a mi entender porque los temas de votaciones, noticias, o el funcionamiento de un programa, la mayoría de las veces tiene que ver con el programa, y no con la base de datos.
Tal vez te parezca que no, pero el caso es que casi todo tu problema es de programación, y programación no es el tema de este foro. Para eso están los de PHP, ASP, VB, etc.

Volviendo a tu problema, hay, sí, algunos defectos en las sentencias de SQL, pero no son defectos sintácticos: Son errores de lógica.
Caso 1: Estás usando aparentemente el mismo nombre para la tabla que para un campo de la misma:
Esto puede producir resultados erráticos porque MySQL puede confundir cuando invocas a la tabla de cuando invocas al campo, y eso simplemente porque el parser hace una interpretación jerárquica de los nombres, y la tabla está más arriba en esa jerarquía...
No uses los mismos nombres para los diferentes objetos de la base, ni aunque MySQL te los acepte.
Sugerencia: cuando sean identificadores, ponle un sufijo:

Código MySQL:
Ver original
  1. insert into voto (voto_id) values ('$voto')
Obviamente, esto implica que deberás reformar las tablas...

Caso 2: Estás indicando operaciones sin verificar lo que estás poniendo en las condiciones del WHERE:
Código MySQL:
Ver original
  1. UPDATE voto SET voto=voto+1 WHERE Id_voto=Id_voto;
Esto le dice a MySQL que incfremente en 1 en campo si el id_voto es igual a si mismo... O sea, siempre.
Siempre un número va a ser igual a si mismo. El el principio de reflexibilidad de lógica. A = A.
Ese WHERE no tiene sentido, y además lo que hace es que te incremente todos los registros de votaciones. TODOS. Porque en todos se cumple esa condición.

Algo parecido pasa con esto que pusiste en el segundo post:
Código MySQL:
Ver original
  1. update voto set voto=voto+1
A nivel de lógica, es exactamente igual que el anterior, porque la actualización del acumulador se realizará en todos los registros disponibles...

¿Cuál es la solución?
Simple: Debes indicar una condición lógica coherente. El IdVoto debe ser igual al valor de una variable obtenida previamente, en la cual conservas el IdVoto que corresponde a la noticia que estás votando...
Pero eso es tema de programación. Consulta esos detalles en el [URL="http://www.forosdelweb.com/f18/"]Foro de PHP[/URL].

Caso 3: No estás recuperando un identificador válido.
En este código:
Código php:
Ver original
  1. <?php
  2. $conexion = mysql_connect ("localhost", "admin", "") or die (mysql_error());
  3.  
  4. if ($_POST['voto'])
  5. {
  6. $voto = mysql_query ("insert into voto (voto) values ('$voto')");
  7. $consulta = mysql_query ($voto, $conexion);
  8. $sumavotos = mysql_query ("update voto set voto=voto+1");
  9. $consulta = mysql_query ($sumavotos, $conexion);
  10. header ("location: index.php");
  11. mysql_close ($conexion);
  12. }
  13. ?>
No estás realmente recuperando el valor del último id autoincremental generado en el INSERT. Para hacerlo deberías haber usado [URL="http://ar.php.net/manual/es/function.mysql-insert-id.php"]mysql_insert_id()[/URL]:
Código PHP:
Ver original
  1. <?php
  2. $query = sprintf( "INSERT INTO `users`"
  3.     ."(`id`    ,`username`)"
  4.     ."VALUES"
  5.     ."(UUID(),'%s'           )",
  6.   );
  7.  
  8. if( !mysql_query($query) )
  9. {/*insert failed*/}
  10.  
  11. ?>

Espero que estos detalles te orienten, pero si el problema es realmente de PHP, te recomiendo postear la duda en el foro correcto, porque allí recibirás mejor asesorameitno sobre ese lenguaje.


Hombre pues muchas gracias, la verdad muchas graias por tu ayuda, para mi desde la semana pasada ha sido un tema de quedarme calvo este del voto, y la verdad me he sentido muy perdido, pero la verdad tu ayuda me ha servido para darme cuenta de los errores que estoy cometiendo.

Muchas gracias por tu ayuda, e intentare corregir y aplicar lo que me has mostrado, muchas gracias por tu ayuda.