Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Zitros en 28 Febrero 2014, 22:11 pm



Título: Generar Numero Consecutivo -PHP
Publicado por: Zitros en 28 Febrero 2014, 22:11 pm
Hola a todos!

Tengo un problema en php.

Trataba de generar un numero consecutivo para que luego se inserte en la base de datos en php. Lo que trato de realizar es que primero verifique si en la tabla tiene un dato en el campo y si no lo tiene, inserte el primer número.

Más o menos lo tengo pensado es de esta manera:
Código:
<?php
include 'conexión.php'; // conexión a base de datos
    $codigo = 1;
                $consulta = mysql_query("select `codigo` from `prueba_id` where `codigo` = $codigo");
           
               
if($consulta >0){

$cod_resultado= $consulta+$codigo;

mysql_query("INSERT INTO `prueba_id` (`Codigo`) VALUES ('$cod_resultado') ");

}

else {
mysql_query("INSERT INTO `prueba_id` (`Codigo`) VALUES ('$codigo') ");
}
?>

Sin embargo, al insertar en la base de datos me inserta 6. Y cuando vuelvo a ejecutar nuevamente no me vuelve a insertar nada. Se que debo meterle un while pero no se la sintaxis correcta para que funcione.

El propósito del código es para generar un numero consecutivo en el campo de la tabla: Codigo, dejando de lado la funcion autoincrement que viene como opción en mysql.


Muchas gracias de antemano por su ayuda!.


Título: Re: Generar Numero Consecutivo -PHP
Publicado por: #!drvy en 28 Febrero 2014, 23:00 pm
Citar
El propósito del código es para generar un numero consecutivo en el campo de la tabla: Codigo, dejando de lado la funcion autoincrement que viene como opción en mysql.

La mayoría de los motores de BD cuentan con la opción de auto-increment.

Lo que estas intentando hacer es peligroso. Si se realizan dos consultas o mas al mismo tiempo, estoy casi seguro de que se van a mezclar y vas a tener campos con códigos repetitivos. Precisamente por esto se invento el auto-increment, para evitar problemas de repetición.

De todos modos, lo que haces esta mal... simplemente saca el mayor numero actual, si mysql no lo encuentra, te devolverá un campo vació.

Usa MySQLI en vez de mysql. Este ultimo ya esta considerado como obsoleto y en futuras versiones de PHP sera eliminado.

Código
  1. <?php
  2.  
  3. // Conexion
  4. $mysql = mysqli_connect('servidor','usuario','pass','base de datos');
  5.  
  6. $consulta = mysqli_query($mysql,'SELECT MAX(Codigo) as Codigo FROM prueba_id LIMIT 1');
  7. $consulta = mysqli_fetch_array($consulta,MYSQLI_ASSOC);
  8.  
  9. // Si el codigo actual esta vacio o es 0, se convierte en 1.
  10. // En caso contrario se le suma +1.
  11. $codigo = (empty($consulta['Codigo']) ? 1 : $consulta['Codigo']+=1);
  12. echo 'El codigo actual es: '.$codigo;
  13.  
  14. $consulta = mysqli_query($mysql,'INSERT INTO prueba_id (Codigo) VALUES ('.$codigo.')');
  15. if(!$consulta){die('Error');}
  16.  
  17. ?>

Saludos


Título: Re: Generar Numero Consecutivo -PHP
Publicado por: Zitros en 7 Marzo 2014, 18:54 pm
Muchas gracias por la respuesta con base a tu publicación pude generar el siguiente código consecutivo:

Código:

function consecutivo(){
$consulta = mysql_query('SELECT MAX(`campo_id`) as `campo_id` FROM `tabla` LIMIT 1');//1
if(mysql_num_rows($consulta)>0)
  {


  $row=mysql_fetch_array($consulta);
$cod=$row[0];
$sig=$cod+1;
$Strsig = (string)$sig;
$formato = str_pad($Strsig, "6", "0", STR_PAD_LEFT);

}
else{
$sig=1;
$Strsig = (string)$sig;
$formato= str_pad($Strsig, "4", "0", STR_PAD_LEFT);

}
return $formato;

}



Pongo el código por si acaso es de utilidad. Gracias!!!