Foros del Web » Programando para Internet » PHP »

Colocar ceros a la izquierda

Estas en el tema de Colocar ceros a la izquierda en el foro de PHP en Foros del Web. Hola amigos: Tengo una funcion que me coloca ceros a la izquierda de un autonumerico que genero con codigo PHP. El problema es que al ...
  #1 (permalink)  
Antiguo 11/09/2009, 15:03
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Sonrisa Colocar ceros a la izquierda

Hola amigos:

Tengo una funcion que me coloca ceros a la izquierda de un autonumerico que genero con codigo PHP. El problema es que al guardar en la bd mysql no me guarda los ceros.

Que tipo de campo debo usar en mysql para que me guarde los ceros a la izquierda?

Gracias.

Saludos
  #2 (permalink)  
Antiguo 11/09/2009, 15:07
 
Fecha de Ingreso: febrero-2009
Mensajes: 21
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Colocar ceros a la izquierda

para guardar los ceros tienes que usar uno que no sea numerico, por ejemplo un char() o un varchar().
  #3 (permalink)  
Antiguo 11/09/2009, 15:11
Avatar de nonpublic  
Fecha de Ingreso: agosto-2009
Mensajes: 240
Antigüedad: 15 años, 3 meses
Puntos: 4
Respuesta: Colocar ceros a la izquierda

Puedes poner un campo int autonumerico. Y si quieres los Ceros a la izquierda pones como atributo UNSIGNED ZEROFILL, asi mantienes el campo numerico y con el formato que requieres.
  #4 (permalink)  
Antiguo 11/09/2009, 15:20
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Colocar ceros a la izquierda

lo que pasa es que ya tengo un autonumerico y el otro problema es que no se si la funcion que tengo acepta que el campo no sea numerico. Este es el codigo con la funciom

Código PHP:
$sql1 "select max(idfact) as autonumerico from facturas"
$soc mysql_query($sql1$conexion) or die( mysql_error() );  
$rs_idfact mysql_fetch_assoc($soc);     
$idfact $rs_idfact ['autonumerico'] + 1

function 
Zeros($numero$largo

  
$resultado $numero;
  while(
strlen($resultado) < $largo
  { 
       
$resultado "0".$resultado;  
  } 
  return 
$resultado;
}  

$valor $idfact
$autoceros Zeros($valor5); 
que me aconsejan?

Gracias
  #5 (permalink)  
Antiguo 11/09/2009, 15:23
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Colocar ceros a la izquierda

Como te indico nonpublic es que debes hacerlo con UNSIGNED ZEROFILL, sino los ceros no van a enseñarse, ademas para que te complicas haciendo una funcion que autoincremente, si en la base de datos lo puedes hacer indicandole que sea autoincrement
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 11/09/2009, 15:23
Avatar de kike00  
Fecha de Ingreso: febrero-2005
Ubicación: El Salvador
Mensajes: 180
Antigüedad: 19 años, 9 meses
Puntos: 7
Respuesta: Colocar ceros a la izquierda

asi por ejemplo si tu campo es int(5) osea campo entero con una longitud maxima de 5 digitos,
si tienes el numero 4, al ser el campo UNSIGNED ZEROFILL te guardara el registro 00004

Talvez te sirva

Saludos :P
  #7 (permalink)  
Antiguo 11/09/2009, 15:29
Avatar de nonpublic  
Fecha de Ingreso: agosto-2009
Mensajes: 240
Antigüedad: 15 años, 3 meses
Puntos: 4
Respuesta: Colocar ceros a la izquierda

prueba con esto:

Código:
function llenar_ceros($numero,$ceros) {
  $dif = $ceros - strlen($numero); 
  for($m = 0 ;$m < $dif; $m++) 
  { 
    @$insertar_ceros .= 0;
  } 
  return $insertar_ceros .= $numero; 
}
y lo llamas asi:
Cita:
$autoceros.=llenar_ceros($valor,5);
  #8 (permalink)  
Antiguo 11/09/2009, 15:32
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Colocar ceros a la izquierda

¿para que declarar los 0 si UNSIGNED ZEROFILL lo hace automaticamente?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 11/09/2009, 15:34
Avatar de kike00  
Fecha de Ingreso: febrero-2005
Ubicación: El Salvador
Mensajes: 180
Antigüedad: 19 años, 9 meses
Puntos: 7
Respuesta: Colocar ceros a la izquierda

esa es una buena pregunata :P
pero puede ser que necesite mostrar el numero con los ceros antes de guardarlos en la BD, por otro lado sería innecesario :P
  #10 (permalink)  
Antiguo 11/09/2009, 15:35
Avatar de nonpublic  
Fecha de Ingreso: agosto-2009
Mensajes: 240
Antigüedad: 15 años, 3 meses
Puntos: 4
Respuesta: Colocar ceros a la izquierda

Sorry, acabo de darme cuenta que tu funcion es similar Y creo que el tema va por el miedo a usar autoincrement que particularmente a mi tampoco me agrada pero parece que es lo mas optimo.
  #11 (permalink)  
Antiguo 11/09/2009, 15:46
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Colocar ceros a la izquierda

lo que pasa es que como lo dije arriba, ya tengo un campo que usa autoincrement y mysql no me deja generar otro campo con autoincrement por eso hice esta funcion que pasa los datos perfectos en PHP pero no los guarda asi en la BD. Ese es el problema, como hago?
  #12 (permalink)  
Antiguo 11/09/2009, 15:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Colocar ceros a la izquierda

Pues aqui me da otra pregunta. ¿Porque tener dos valores que sean autoincrementable, si para mi entender todo se puede hacer desde uno solamente?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #13 (permalink)  
Antiguo 11/09/2009, 15:54
Avatar de kike00  
Fecha de Ingreso: febrero-2005
Ubicación: El Salvador
Mensajes: 180
Antigüedad: 19 años, 9 meses
Puntos: 7
Respuesta: Colocar ceros a la izquierda

Seria bueno que nos explicaras un poco mas el proposito de esa tabla... para que se usa... y un poco mas (mejor explicado), que es lo que estas haciendo o.O
  #14 (permalink)  
Antiguo 11/09/2009, 16:03
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Colocar ceros a la izquierda

me exijen dos campos autonumericos uno es un numero de transaccion y el otro es numero de factura. Son indispensables los dos pues reflejan cosas distintas.
  #15 (permalink)  
Antiguo 11/09/2009, 16:08
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Colocar ceros a la izquierda

Ok, otra pregunta, solo para poder indicarte como hacerlo al final, ¿las dos columnas van a tener el mismo valor numerico? (olvidate de este caso que la diferencia sean los 0).
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #16 (permalink)  
Antiguo 11/09/2009, 16:29
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Colocar ceros a la izquierda

no porque a veces varia, uno es un numero de transaccion que siempre se genera porque va a confirmar o rechazar un transaccion y el numero de factura se genera pero si la transaccion es rechazada se anula.
  #17 (permalink)  
Antiguo 11/09/2009, 16:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Colocar ceros a la izquierda

Bueno en ese caso te sugiero usar un select y dentro del select tengas la funcion max, luego con PHP usas str_pad para añadir los 0 a la izquieda. Para que te funciona str_pad tienes que declarar el valor como string no como numerico. Pero te indico desde ahora que no es necesario hacer este paso porque si declaras la columna UNSIGNED ZEROFILL esto lo hace por ti. Solo tienes que usar el select max para poder ver el número mayor y aumentarle.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #18 (permalink)  
Antiguo 11/09/2009, 16:54
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 16 años, 4 meses
Puntos: 15
Respuesta: Colocar ceros a la izquierda

ah ya te entendi que tonta!!! ya coloque UNSIGNED ZEROFILL al campo. Es que tenia la idea de que solo lo podia hacer con el autonumeric. Es que estoy tan agotada que ya ni pienso. Mil gracias abimaelrc y a todos por su ayuda.
  #19 (permalink)  
Antiguo 25/09/2015, 23:31
 
Fecha de Ingreso: septiembre-2015
Mensajes: 1
Antigüedad: 9 años, 2 meses
Puntos: 0
Colocar ceros a la izquierda

segun el nuevo regimen de facturacion tiene que ser asi N°:000-002-01-00000001, el corelativo N°:000-002-01-00000001 donde los primeros 8 digitos no son cambiantes N°:000-002-01- los ultimos 8 si 00000001 no es podido lograr rellenar con ceros ahora de imprimir la factura sale de la siguiente manera N°:000-002-01-1 y asi N°:000-002-01-2, N°:000-002-01-3...N°:000-002-01-100 pero no he podido hacer que se rellene los ceros a la izquierda, necesito me pueda ayudar por favor, tengo una plantilla en xml de la siguiente forma.

SUB: PrintTransactionType
=============================
-->
<SUB name="PrintTransactionType">
<TABLE>
<FONT> "Large" </FONT>
<BORDER> tbNone </BORDER>
<COLUMNHEADER>
<ALIGNMENT> "^" </ALIGNMENT>
<WIDTH> PageWidth </WIDTH>
<IF>
<CONDITION> Transaction.Type = transactionPayout </CONDITION>
<THEN>
<TEXT> "GASTO"</TEXT>
</THEN>
<ELSE>
<IF>
<CONDITION> Transaction.Type = transactionDrop </CONDITION>
<THEN>
<TEXT> "RETIRO DE EFECTIVO"</TEXT>
</THEN>
<ELSE>
<IF>
<CONDITION> Transaction.ReceiptReturnMode = TRUE </CONDITION>
<!--REGIMEN DE FACTURACION-->
<THEN>
<TEXT> "DEVOLUCION"</TEXT>
</THEN>
<ELSE>
<IF>
<CONDITION> (Transaction.Type = transactionAccountPayment) </CONDITION>
<THEN>
<TEXT> "ABONO A CUENTA" </TEXT>
</THEN>
<ELSE>
<IF>
<CONDITION> Transaction.Total &gt; 0 </CONDITION>
<THEN>
<TEXT> Transaction.ReceiptTransactionName </TEXT>
</THEN>
<ELSE>
<TEXT> "ANULAR/DEVOLUCION" </TEXT>
</ELSE>
</IF>
</ELSE>
</IF>
</ELSE>
</IF>
</ELSE>
</IF>
</ELSE>
</IF>
</COLUMNHEADER>
<!--REGIMEN DE FACTURACION-->
<IF>
<CONDITION> Transaction.Type &lt;&gt; transactionDrop &amp; Transaction.Type &lt;&gt; transactionPayout &amp; Transaction.Type &lt;&gt; transactionNoSale &amp; Transaction.Type &lt;&gt; transactionAccountPayment &amp; Transaction.Type &lt;&gt; transactionQuote &amp; Transaction.Type &lt;&gt; transactionworkorder &amp; Transaction.Type &lt;&gt; transactionlayaway </CONDITION>
<THEN>
<ROW> Session.Variable9 </ROW>
</THEN>
<ELSE>
<IF>
<CONDITION> Transaction.ReceiptReferenceNumber </CONDITION>
<THEN>
<ROW> Session.Variable9 </ROW>
</THEN>
<ELSE>
<ROW> Transaction.ReceiptTransactionNumber </ROW>
</ELSE>
</IF>
<!--<ROW> Transaction.ReceiptTransactionNumber </ROW>-->
</ELSE>
</IF>
</TABLE>
<TABLE>
<BORDER> tbNone </BORDER>
<COLUMNHEADER>
<ALIGNMENT> "&lt;~" </ALIGNMENT>
<WIDTH> PageWidth * 0.60 </WIDTH>
<TEXT> "" </TEXT>
</COLUMNHEADER>
<COLUMNHEADER>
<ALIGNMENT> "&lt;~" </ALIGNMENT>
<WIDTH> PageWidth * 0.50 </WIDTH>
<TEXT> "" </TEXT>
</COLUMNHEADER>
<IF>
<CONDITION> Transaction.ReceiptReferenceNumber </CONDITION>
<THEN>
<ROW> Transaction.ReceiptReferenceNumberCaption </ROW>
</THEN>

</IF>
<ROW>"N°:000-002-01-" Transaction.ReceiptTransactionNumber </ROW>

<!--REGIMEN DE FACTURACION-->
<IF>
<CONDITION> Len(Customer.AccountNumber) </CONDITION>
<THEN>
<ROW> "RTN:" Customer.AccountNumber </ROW>
</THEN>
</IF>
<ROW> "Cliente:" Customer.Name </ROW>
<ROW> "Dirección:" Customer.HomeAddress.Company </ROW>
<ROW> "Fecha: " Transaction.Date "|H:"Transaction.Time </ROW>
<ROW> "Cajero: " Cashier.Number "|Caja #: " Register.Number </ROW>
<SET name="Vendedor" custom="False" description="w" type="vbLong">1</SET>
<FOR each="entry">
<IF>
<CONDITION> Vendedor = 1 &amp; len(Entry.Salesrep.Name) </CONDITION>
<THEN>
<ROW> "Vendedor: "Entry.Salesrep.Name "|" "Artículos: " Transaction.TotalQuantity </ROW>
<SET name="Vendedor" custom="False" description="w" type="vbLong">2</SET>
</THEN>
</IF>
</FOR>

</TABLE>
</SUB>
<!--
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 14:05.