Foros del Web » Programando para Internet » PHP »

Como resolver este detalle

Estas en el tema de Como resolver este detalle en el foro de PHP en Foros del Web. Buenas ando por aqui con una idea loca, no se si se pueda pero preguntar no quiere decir nada, resulta que entra una persona con ...
  #1 (permalink)  
Antiguo 07/07/2010, 09:47
 
Fecha de Ingreso: marzo-2010
Mensajes: 152
Antigüedad: 14 años, 1 mes
Puntos: 1
Como resolver este detalle

Buenas ando por aqui con una idea loca, no se si se pueda pero preguntar no quiere decir nada, resulta que entra una persona con su cedula y elige su comida, eso se inserta en una tabla, luego hay una pagina llamada listado y alli se ven todos los nombres de las personas con sus pedidos, ahora bien, mi pregunta es la siguiente si vengo yo mañana y vuelvo hacer lo mismo o lo intento una segunda vez me va a decir esto:
Ha habido un error al insertar los valores.Duplicate entry '20002952' for key 1

debido a que la cedula es la clave primaria, pero si no tengo clave primaria entonces hay duplicacion de datos, y en el listado me mostrara todoooo eso, como hago para que cada vez que ingrese solo se cambie el campo opcion que es donde va el pedido, y que los otros campos queden igual..

esperando su maravillosa respuesta, y agradecida siempre
  #2 (permalink)  
Antiguo 07/07/2010, 10:32
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Respuesta: Como resolver este detalle

Deberías añadir un campo id en tu tabla y que eso fuera la clave primaria (con autoincrement), o hacer una consulta previa al recibir los datos por si existe ese dato y no quieres repetirlo que se muestro el mensaje de error que tu desees.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #3 (permalink)  
Antiguo 07/07/2010, 10:44
 
Fecha de Ingreso: marzo-2010
Mensajes: 68
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Como resolver este detalle

hola jen26...pues pensando aqui un poco... yo creo que... en tu tema una persona puede pedir muchas comidas y a su vez una comida puede ser pedida por muchas personas... lo que quiere decir que tendriamos una relacion de muchos a muchos en base a esto YO crearia 3 tablas

1 - tabla personas donde tengo la cedula como clave primaria y demas datos personales como nombres, apellidos, etc

2 - tabla donde esta un listado de las comidas con sus datos (no lo se tal vez nombre de la comida, precio, etc)

3 - y la tabla comidas x persona donde tendre como claves foraneas la cedula de la persona y el codigo de la comida... asi pues en esta tabla podria repertir - TANTAS COMIDAS POR PERSONA ó TANTAS PERSONAS POR COMIDA - como se presente la situación....... SALUDOS
  #4 (permalink)  
Antiguo 07/07/2010, 11:57
 
Fecha de Ingreso: marzo-2010
Mensajes: 152
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Como resolver este detalle

pero si tengo una pagina que hay que actualizar diariamente con los pedidos, esa pagina va a ser como el reporte diario, y por eso varia cada dia, tu observacion es muy pertinente, pero aqui es algo un poco pequeño y mas especifico porque lamentandolo mucho no depende de mi que sea de cual o tal forma, lo que habia pensado es hacer una sola tabla y cuando la persona elija su comida al darle enviar si la cedula esta ya registrada obviamente no le va a permitir hacer nada porque hay un error entonces pensando tambien creo que puedo hacer un update, si la cedula ya existe entonces que actualice el campo, debido que es una sola tabla y deben estar solo los datos alli registrados.

Código PHP:
Ver original
  1. $query=mysql_query("INSERT INTO resmenu (cedula, nombre, opcion) VALUES ($ced, '', '$opcion')",$link);
  2.    
  3.    
  4.      $resul=mysql_query($query);
  5.      $registro=mysql_fetch_assoc($resul);
  6.      if ($registro["cedula"]= $ced) {
  7.      mysql_query("UPDATE resmenu SET opcion= '$opcion' WHERE cedula=$ced");
  8.      }
  9.      
  10.     else {
  11.     // Ahora comprobaremos que todo ha ido correctamente
  12.     $my_error = mysql_error($link);
  13.     if(!empty($my_error)) {
  14.     echo "Ha habido un error al insertar los valores.$my_error";
  15.     } else {
  16.    
  17.     echo '<script language="javascript">
  18.      alert("Los datos han sido introducidos satisfactoriamente.!!");
  19.      window.location.href="http://localhost/Menu/consulta.html";
  20.      </script>
  21.      ';
  22.      }
  23.      }

Bueno espero que resulte porque asi se acthualiza cada vez y se elimina la opcio debido a que esa opcion se esta tomando es de un formulario y no de la base de datos =)
  #5 (permalink)  
Antiguo 07/07/2010, 11:59
 
Fecha de Ingreso: marzo-2010
Mensajes: 152
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Como resolver este detalle

Bueno me dio el siguiente error:

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\Menu\Mn\listo.php on line 20

pero es algo asi lo que quiero hacer, sera que se puede, un insert y si el dato ya existe entonce que se haga un update pero como lo hago??
  #6 (permalink)  
Antiguo 07/07/2010, 12:01
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Respuesta: Como resolver este detalle

Offtopic: te recomiendo evitar los alert, son muy incomodos para los usuarios, sería mejor que mostraras un mensaje normal con un simple echo.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #7 (permalink)  
Antiguo 07/07/2010, 12:11
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: Como resolver este detalle

Estoy con xziolhvinvhgl,

porque lamentandolo mucho no depende de mi que sea de cual o tal forma

No es excusa, si llevas tu el proyecto sabrás que ese modelo a la larga ( más bien pronto ) habrá una redundancia de datos impresionante entre otras cosas.

Te paso unos links ( normalización y modelo entidad-relación)

http://es.wikipedia.org/wiki/Normali...bases_de_datos
http://es.wikipedia.org/wiki/Modelo_...-relaci%C3%B3n

Un saludo.
  #8 (permalink)  
Antiguo 07/07/2010, 12:23
 
Fecha de Ingreso: marzo-2010
Mensajes: 152
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Como resolver este detalle

aun haciendo el update??? siempre van a estar mis datos principales y lo que cambiaria es la opcion
  #9 (permalink)  
Antiguo 07/07/2010, 12:41
 
Fecha de Ingreso: marzo-2010
Mensajes: 152
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Como resolver este detalle

lo resolvi asi:
Código PHP:
Ver original
  1. $consulta=mysql_query ( "SELECT cedula FROM resmenu",$link);
  2. if( $consulta ){
  3. mysql_query ( "UPDATE resmenu SET opcion= '$opcion' WHERE cedula=$ced",$link );
  4. } else{
  5. mysql_query ( "INSERT INTO resmenu (cedula, nombre, opcion) VALUES ($ced, '', '$opcion')",$link );
  6. }

de esta manera no s erepiten los datos y cada vez que se elija algo ya esa persona esta alli y se le actualizan los datos, porque no se quiere que esten siempre todos las opciones que siempre hace sino que este la ultima que hizo :p

Etiquetas: detalle
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 07:29.