Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Cosecutivo para uso multiusuario...

Estas en el tema de Cosecutivo para uso multiusuario... en el foro de PHP en Foros del Web. Buenas, lo que pasa es que a mi codigo le he agregado un consecutivo, esto me funciona bien pero como es multiusuario me crea de ...
  #1 (permalink)  
Antiguo 06/12/2012, 10:53
 
Fecha de Ingreso: septiembre-2012
Ubicación: Norte de Santander
Mensajes: 127
Antigüedad: 11 años, 7 meses
Puntos: 1
Exclamación Cosecutivo para uso multiusuario...

Buenas, lo que pasa es que a mi codigo le he agregado un consecutivo, esto me funciona bien pero como es multiusuario me crea de vez en cuando consecutivos duplicados. He leido por ahi que se debe bloquear la tabla o la base de datos para que esto no suceda pero no tengo ni idea de como incluirlo en mi codigo. Aca les dejo el codigo que me realiza el consecutivo.

Código PHP:
<?php 
$cons 
mysql_query("SELECT * FROM parametros"); 
$t=mysql_fetch_assoc($cons);
if(
mysql_num_rows($cons)>0){
$val $t['cons_s']+1;
echo 
'11S-'.sprintf("%05d",$val).''
}
?>
Agradezco cualquier ayuda que me puedan brindar...
  #2 (permalink)  
Antiguo 06/12/2012, 12:10
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 3 meses
Puntos: 36
Respuesta: Cosecutivo para uso multiusuario...

Mira no manejes los consecutivos desde el código, si estas usando MySQL deberías de usar el Autoincrement y que sea llave Primaria la columna donde tienes el indice, MySQL genera el consecutivo automaticamente siempre y cuando lo hayas indicado.

Si usas Oracle utiliza secuencias para generar el consecutivo.

Crear tabla con indice con autoincrement y que sea llave primaria

Código MySQL:
Ver original
  1. CREATE TABLE paramectros (
  2.    datos VARCHAR(100)
  3. );
  4.  
  5. -- Y las pruebas
  6.  
  7. mysql> INSERT INTO parametros(datos)
  8.     ->      VALUES ('Hello world');
  9. Query OK, 1 row affected (0.01 sec)
  10.  
  11. mysql> SELECT * FROM  parametros;
  12. +----+-------------+
  13. | id | data        |
  14. +----+-------------+
  15. |  1 | Hello world |
  16. +----+-------------+
  17. 1 row in set (0.01 sec)

Si manejas Oracle comenta y te pongo un ejemplo, saludos.
  #3 (permalink)  
Antiguo 06/12/2012, 13:10
 
Fecha de Ingreso: septiembre-2012
Ubicación: Norte de Santander
Mensajes: 127
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Cosecutivo para uso multiusuario...

Gracias por tu respuesta pero lo que pasa es que el consecutivo que estoy llevando es del tipo varchar,ya que asi me lo exigieron. Como puedes ver en el echo el consecutivo que guardo es de esta forma 11S-00001 asi debe quedar en la base de datos y pues para eso tengo una tabla que me lleva el ultimo valor entero ingresado que seria el campo cons_s. E l cual covierto en varchar con el codigo que deje antes. Pero no soy capaz de solucionar lo de los duplicados, y leyendo por ahi encontre que si se bloquea la tabla se puede hacer. Pero la verdad no tengo ni idea de como podria quedar el codigo.
  #4 (permalink)  
Antiguo 06/12/2012, 13:24
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 3 meses
Puntos: 36
Respuesta: Cosecutivo para uso multiusuario...

A ok, no hay problema y como dices, tu problema son los duplicados, si te fijas en la creación de la tabla viene un constraint o restricción que se llama PRIMARY KEY si creas la tabla con ese constraint cuando intentes guardar el consecutivo si esta repetido te va a arrojar un error el cual puedes manejar en tu código y así indicarle al usuario que esta repetido.

NOTA: Recuerda que tienes que guardar el engine como InnoDB que si no no te va tomar en cuenta los constraints.

Si no eres muy bueno con las bases de datos puedes usar phpmyadmin para manejar la creación de las tablas o usar MySQL Workbench y ahí creas tu tabla con lo que necesites y eso te da el script.
  #5 (permalink)  
Antiguo 06/12/2012, 13:28
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 3 meses
Puntos: 36
Respuesta: Cosecutivo para uso multiusuario...

Y lo de InnoDB solo es para MySQL

Etiquetas: mysql, sql, tabla, usuarios
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 05:50.