Foros del Web » Programando para Internet » PHP »

Si existe update, si no insert into

Estas en el tema de Si existe update, si no insert into en el foro de PHP en Foros del Web. Amigos, como les va? tengo un problema con una trivia en la que a la hora de mostrar e imprimir los datos del resultado tengo ...
  #1 (permalink)  
Antiguo 18/11/2012, 14:05
 
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 33
Antigüedad: 15 años
Puntos: 1
Exclamación Si existe update, si no insert into

Amigos, como les va? tengo un problema con una trivia en la que a la hora de mostrar e imprimir los datos del resultado tengo que hacer algunas validaciones.

por un include mantengo logueado al usuario desde donde traigo su $id_usuario y su $nombre_usuario

en la tabla donde imprimiré los datos de la trivia tengo los siguientes campos:

id (bigint autoincrement)
id_usuario (para que se guarde el usuario de la tabla usuarios que traigo desde el include
nombre
record


desde la trivia obtengo un puntaje llamado $score.

Lo que hago es identificar si en la tabla quienesquien (trivia) existe ya un juego de $id_usuario, si existe hago que compare su último puntaje con el $score, si es menor hace un update al nuevo número, si es mayor queda como está solo muestra el valor en el div.

pero el problema lo tengo cuando intento hacer la primera validación. si existe un juego de $id_usuario o no.. si existe avanza bien pero si no hay registros en esa tabla, no hace el insert into que ordeno debajo..

aquí les dejo el código

podrían ayudarme a encontrar la explicación?


Código PHP:
<?php

    $result
=mysql_query("SELECT quienesquien.* FROM quienesquien WHERE quienesquien.id_usuarios = $id_usuario",$link);

while(
$row mysql_fetch_assoc($result)) {
  if(
$row['id_usuarios'] = $id_usuario) {

  if(
$row['record'] <= $score) {

mysql_query("update quienesquien SET record='$score', id_usuarios='$id_usuario' WHERE id_usuarios=$id_usuario;",$link);

?>

<div id="lila2" align="center">
      <p class="titulofinal">Tu record es de <span class="quizzy_result_score"><?php echo $score;?></span> puntos.</p>
    

    </div>
<?
} else {
?>

<div id="lila2" align="center">
      <p class="titulofinal">Tu record es de <span class="quizzy_result_score"><?php echo $row['record'];?></span> puntos.</p>
    

    </div>
<?
}
} else {

mysql_query("insert into quienesquien (id_usuarios,nombre,record) values ('$id_usuario','$nombre_usuario','$score')");

?>
<div id="lila2" align="center">
      <p class="titulofinal">Tu record es de <span class="quizzy_result_score"><?php echo $score;?></span> puntos.</p>
    

    </div>

<?
}}
?>
  #2 (permalink)  
Antiguo 18/11/2012, 14:24
Avatar de feconto  
Fecha de Ingreso: noviembre-2012
Ubicación: En mi Mundo
Mensajes: 25
Antigüedad: 11 años, 5 meses
Puntos: 5
Respuesta: Si existe update, si no insert into

Código PHP:
Ver original
  1. <?php
  2.  
  3. $id_usuario = $_SESSION['Id_usuario'];
  4.  
  5.  
  6. $query = mysql_query("select * from quienesquien where id_usuario='".$id_usuario."'");
  7. if(mysql_num_rows($query) == 0)
  8. {
  9.     //el usuario no existe en la database lo insertamos
  10.     $query2 = "insert into quienesquien(id_usuario,name,record) values('$id_usuario','$name','$record')";
  11. }
  12. $row = mysql_fetch_object($query);
  13. //primero preguntamos que si el usuario esta registrado en un registro
  14. elseif($row->record < $record)
  15. {
  16.     //lo actualiza si ya esta
  17.    $query2 = "update quienesquien SET record='$score', id_usuarios='$id_usuario' WHERE id_usuarios='$id_usuario'";
  18.    
  19. }
  20. elseif($row->record == $record)
  21. {
  22. //no se hace nada
  23. }
  24. //ejecutamos la sentencia cualquiera de los dos
  25. mysql_query($query2);
  26.  
  27. ?>
  #3 (permalink)  
Antiguo 18/11/2012, 14:50
 
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 33
Antigüedad: 15 años
Puntos: 1
Respuesta: Si existe update, si no insert into

Gracias Feconto,
igualmente tengo algunas dudas.. quizá es porque soy muy nuevo en php..

en la linea 7 y 11 no debería ser id_usuarios (con s) el nombre del campo? el valor si está bien

dreamweaver me tira error en los dos elseif
devuelve: Parse error: syntax error, unexpected T_ELSE in

de todos modos aunque intento arreglarlo sigo sin poder hacerlo funcionar
  #4 (permalink)  
Antiguo 18/11/2012, 16:15
Avatar de feconto  
Fecha de Ingreso: noviembre-2012
Ubicación: En mi Mundo
Mensajes: 25
Antigüedad: 11 años, 5 meses
Puntos: 5
Respuesta: Si existe update, si no insert into

primero que todo amigo eso es un ejemplo si quieres me pasas un privado y te ayudo rapido con tu codigo
  #5 (permalink)  
Antiguo 18/11/2012, 16:32
 
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 33
Antigüedad: 15 años
Puntos: 1
Respuesta: Si existe update, si no insert into

feconto! mil gracias, logré combinar tu código con parte del mío y lo hice funcionar
lo dejo por si sirve de ayuda para alguien

saludos!

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. $query = mysql_query("select * from quienesquien where id_usuarios='".$id_usuario."'");
  5. if(mysql_num_rows($query) == 1){
  6.  
  7.   if($row['record'] <= $score) {
  8.  
  9. mysql_query("update quienesquien SET record='$score', id_usuarios='$id_usuario' WHERE id_usuarios=$id_usuario;",$link);
  10.  
  11. ?>
  12.  
  13. <div id="lila2" align="center">
  14.       <p class="titulofinal">Tu record es de <span class="quizzy_result_score"><?php echo $score;?></span> puntos.</p>
  15.    
  16.  
  17.     </div>
  18. <?
  19. } else {
  20. ?>
  21.  
  22. <div id="lila2" align="center">
  23.       <p class="titulofinal">Tu record es de <span class="quizzy_result_score"><?php echo $row['record'];?></span> puntos.</p>
  24.    
  25.  
  26.     </div>
  27. <?
  28. }
  29. } else {
  30.  
  31. mysql_query("insert into quienesquien (id_usuarios,nombre,record) values ('$id_usuario','$nombre_usuario','$score')");
  32.  
  33. ?>
  34. <div id="lila2" align="center">
  35.       <p class="titulofinal">Tu record es de <span class="quizzy_result_score"><?php echo $score;?></span> puntos.</p>
  36.    
  37.  
  38.     </div>
  39.  
  40. <?
  41. }
  42. ?>
  #6 (permalink)  
Antiguo 19/11/2012, 07:01
Avatar de Trublux  
Fecha de Ingreso: octubre-2010
Ubicación: Madrid
Mensajes: 355
Antigüedad: 13 años, 6 meses
Puntos: 48
Respuesta: Si existe update, si no insert into

En MySQL hay una forma de hacer esto de forma más sencilla para no tener que hacer un insert y un update, la consulta quedaría así:

Código MySQL:
Ver original
  1. insert into quienesquien ( id_usuarios, nombre, record ) values  ( '$id_usuario', '$nombre_usuario', '$score' ) on duplicate key update;

Documentación sobre MySQL (insert into... on duplicate key update)

Y por cierto, hacer un "select *" cuando sólo vás a usar un campo es una mala práctica, es mejor poner sólo los campos que necesitas.
__________________
eZ Publish Developer Basic Legacy
eZ Publish Developer Basics (4.4)
Alojamientos rurales en España

Última edición por Trublux; 19/11/2012 a las 08:48
  #7 (permalink)  
Antiguo 19/11/2012, 20:36
 
Fecha de Ingreso: abril-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 33
Antigüedad: 15 años
Puntos: 1
Respuesta: Si existe update, si no insert into

Mil gracias Trublux
luego vi que si se podía hacer así!

Etiquetas: condicionalseguir, errorinsert, mysql
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 13:11.