Usfe 8 Denunciar post Postado Julho 27, 2012 Boa noite pessoal, estou com uma dificuldade, é o seguinte tenho um sistema de cadastro de pedidos e preciso gerar um numero para esse pedido... seria prudente resgatar o Id do pedido cadastrado e formatar ele com o str_pad $numPedido = 1; $numPedido = str_pad($numPedido, 6, "0", STR_PAD_LEFT); echo $numPedido;//SAIDA -> "000007" ou criar um campo para Numero/código do pedido? na opinião de vocês qual a melhor solução? Compartilhar este post Link para o post Compartilhar em outros sites
Vini_Aviva 13 Denunciar post Postado Julho 27, 2012 no seu banco já tem uma id unica pra cada linha de pedido? Compartilhar este post Link para o post Compartilhar em outros sites
Usfe 8 Denunciar post Postado Julho 27, 2012 no seu banco já tem uma id unica pra cada linha de pedido? Sim na tabela pedido tem a chave primaria id_pedido.. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Julho 27, 2012 o que você necessita pode ser algo como o dell service tag. veja esse topico, em especial o post #13 http://forum.imasters.com.br/topic/467590-gerar-uma-quantidade-de-16-ou-menor-de-caractere-unicos/page__view__findpost__p__1855657 Compartilhar este post Link para o post Compartilhar em outros sites
Luiz Cláudio Pinheiro 4 Denunciar post Postado Julho 27, 2012 Você pode (e deve) usar o ID do pedido como código do pedido, uma vez que esse código provavelmente será usada para representação humana do pedido, ou seja, passar para um cliente ou rastreador enfim... Você pode sim usar o str_pad sem problemas, ou então usar o UNSIGNED ZEROFILL do próprio mysql, que adicionaria os 00000 necessários ao seu ID diretamente na tabela. Vai do gosto. ALTER TABLE `tabela_pedidos` CHANGE `id` `id` INT( 6 ) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT Obs: INT(6) -> o 6 aqui significa o numero de digitos que você deseja para o pedido. No caso o pedido de ID 3 será exibido como: 000003 Essa prática será completamente útil, a menos se existir uma restrição que diga que o ID não possa ser o código. Compartilhar este post Link para o post Compartilhar em outros sites
Pablo Garrido 2 Denunciar post Postado Julho 27, 2012 O ideal para você é colocar como auto increment e deixar o parâmetro do tipo int(6). Aqui na empresa fiz isso, porém já defini um pedido inicial com o valor: "258967" e com isso os próximos já vão seguir uma sequencia auto increment , mas já com um valor alto definido. Compartilhar este post Link para o post Compartilhar em outros sites
Usfe 8 Denunciar post Postado Julho 28, 2012 Valeu amigo Pela dica ;) o que você necessita pode ser algo como o dell service tag. veja esse topico, em especial o post #13 http://forum.imasters.com.br/topic/467590-gerar-uma-quantidade-de-16-ou-menor-de-caractere-unicos/page__view__findpost__p__1855657 Valeu amigo eu vou usar o id mesmo acho que vai ficar mais simples dessa forma ;) Você pode (e deve) usar o ID do pedido como código do pedido, uma vez que esse código provavelmente será usada para representação humana do pedido, ou seja, passar para um cliente ou rastreador enfim... Você pode sim usar o str_pad sem problemas, ou então usar o UNSIGNED ZEROFILL do próprio mysql, que adicionaria os 00000 necessários ao seu ID diretamente na tabela. Vai do gosto. ALTER TABLE `tabela_pedidos` CHANGE `id` `id` INT( 6 ) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT Obs: INT(6) -> o 6 aqui significa o numero de digitos que você deseja para o pedido. No caso o pedido de ID 3 será exibido como: 000003 Essa prática será completamente útil, a menos se existir uma restrição que diga que o ID não possa ser o código. Bacana amigo mas aonde você define esse valor inicial? "258967" O ideal para você é colocar como auto increment e deixar o parâmetro do tipo int(6). Aqui na empresa fiz isso, porém já defini um pedido inicial com o valor: "258967" e com isso os próximos já vão seguir uma sequencia auto increment , mas já com um valor alto definido. Compartilhar este post Link para o post Compartilhar em outros sites
a1click_mac 0 Denunciar post Postado Julho 28, 2012 # Amigão... quer gerar número de PEDIDOS aleatórios? Muito simples, postar um código que uso para gerar números aleatórios, só alterar os números do mesmo e configurar ao seu gosto para gerar sempre a quantidade exata de números... # CÓDIGO srand((double)microtime()*1000000); $parte1 = rand(262,726); // 3 - 3 = 3numeros $parte2 = rand(139,382); // 3 - 3 = 3numeros echo $pedido=("$parte1$parte2"); // 3 + 3 = 6numeros // SAÍDA -> 321987 / 158309 ( sempre número aleatórios ) Se alterar a quantidade da ( parte 1 ), sempre altere a quantidade da ( parte 2 ) para a mesma quantidade final de números # EXEMPLO // 8numeros total srand((double)microtime()*1000000); $parte1 = rand(1262,7126); // 4 - 4 = 4numeros $parte2 = rand(1539,8382); // 4 - 4 = 4numeros echo $pedido=("$parte1$parte2"); // 4 + 4 = 8numeros E assim por diante. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Julho 29, 2012 #7 ALTER TABLE nome_da_tabela AUTO_INCREMENT = 100 é muito comum as empresas ocultarem o número real do pedido, pois geralmente são números sequenciais. muitas vezes transmite uma imagem negativa da empresa (marketing negativo). mas como ? Suponha que a empresa X lançou um serviço há 6 meses. O banco de dados está com 20 pedidos. Um concorrente ou mesmo um cliente mais atento observará o número do pedido, podendo deduzir: "em 6 meses estão no número 20 ainda ?" (esse cliente fez pedido ontem) Citando um exemplo mais prático, tenho diversos clientes que pedem para usar alguma máscara ou iniciar a partir de um número mais alto que 1000 Em serviços novos, para dar impressão de que o serviço está tendo demanda, sendo aceito pelos consumidores. Isso é marketing. Em outros casos tive que usar algo como o a logística da DELL (service tag). No caso do service tag, é uma máscara.. o ID real é codificado para um código único e curto de 8 caracteres. Pode ser menor de 5 caracteres. Depende da quantidade de caracteres que deseja combinar e profundidade de bits (8, 16, 32...). Uma vantagem nisso é que no atendimento ao cliente, principalmente via telefone, diminui os riscos do cliente pronunciar um código errado. O código nas embalagens de produtos, faturas e rececibos, fica mais amigável. Apenas uma observação, se você estiver desenvolvendo um sistema para um cliente, consulte-o sobre o assunto. Pode não ficar legal implementar da forma como achar melhor. O cliente pode querer algo específico. Compartilhar este post Link para o post Compartilhar em outros sites
Usfe 8 Denunciar post Postado Julho 30, 2012 # Amigão... quer gerar número de PEDIDOS aleatórios? Muito simples, postar um código que uso para gerar números aleatórios, só alterar os números do mesmo e configurar ao seu gosto para gerar sempre a quantidade exata de números... # CÓDIGO srand((double)microtime()*1000000); $parte1 = rand(262,726); // 3 - 3 = 3numeros $parte2 = rand(139,382); // 3 - 3 = 3numeros echo $pedido=("$parte1$parte2"); // 3 + 3 = 6numeros // SAÍDA -> 321987 / 158309 ( sempre número aleatórios ) Se alterar a quantidade da ( parte 1 ), sempre altere a quantidade da ( parte 2 ) para a mesma quantidade final de números # EXEMPLO // 8numeros total srand((double)microtime()*1000000); $parte1 = rand(1262,7126); // 4 - 4 = 4numeros $parte2 = rand(1539,8382); // 4 - 4 = 4numeros echo $pedido=("$parte1$parte2"); // 4 + 4 = 8numeros E assim por diante. :thumbsup: @a1click_mac Amigo simplesmente show de bola :clap: a resposta abaixo complementa a sua mas uma pergunta é possivel fazer com que esses numeros sejam unicos? ou por padrão eles não se repetem? #7 ALTER TABLE nome_da_tabela AUTO_INCREMENT = 100 é muito comum as empresas ocultarem o número real do pedido, pois geralmente são números sequenciais. muitas vezes transmite uma imagem negativa da empresa (marketing negativo). mas como ? Suponha que a empresa X lançou um serviço há 6 meses. O banco de dados está com 20 pedidos. Um concorrente ou mesmo um cliente mais atento observará o número do pedido, podendo deduzir: "em 6 meses estão no número 20 ainda ?" (esse cliente fez pedido ontem) Citando um exemplo mais prático, tenho diversos clientes que pedem para usar alguma máscara ou iniciar a partir de um número mais alto que 1000 Em serviços novos, para dar impressão de que o serviço está tendo demanda, sendo aceito pelos consumidores. Isso é marketing. Em outros casos tive que usar algo como o a logística da DELL (service tag). No caso do service tag, é uma máscara.. o ID real é codificado para um código único e curto de 8 caracteres. Pode ser menor de 5 caracteres. Depende da quantidade de caracteres que deseja combinar e profundidade de bits (8, 16, 32...). Uma vantagem nisso é que no atendimento ao cliente, principalmente via telefone, diminui os riscos do cliente pronunciar um código errado. O código nas embalagens de produtos, faturas e rececibos, fica mais amigável. Apenas uma observação, se você estiver desenvolvendo um sistema para um cliente, consulte-o sobre o assunto. Pode não ficar legal implementar da forma como achar melhor. O cliente pode querer algo específico. @hinom Amigo sua dica valeu mais que qualquer codificação... realmente gera uma impressão negativa mesmo pois eu gero o comprovante ai se for pelo id desse pedido não vai ficar bom... fica melhor como nosso amigo @a1click_mac disse. só preciso ver se tem como esse valor ser unico, mas caso não seja, tem algum problema ele não ser? penso eu que teria já que emito comprovante desse pedido, mas oque você(s) acham? Compartilhar este post Link para o post Compartilhar em outros sites
Marcos_imasters 288 Denunciar post Postado Julho 30, 2012 amigo pelo que entedir tu quer gerar um codigo para o numero do pedido certo? se for isso tu pode tentar assim <? $numeros = array(0,1,2,3,4,5,6,7,8,9); $total_num = count($numeros)-1; $numPedido = $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)]; $gerador = $numPedido; echo $gerador ?> ele gera codigos quanse inpussivel de gerar o mesmo codigo assim um atars do outro espero ter ajudado.. Compartilhar este post Link para o post Compartilhar em outros sites
Usfe 8 Denunciar post Postado Julho 30, 2012 amigo pelo que entedir tu quer gerar um codigo para o numero do pedido certo? se for isso tu pode tentar assim <? $numeros = array(0,1,2,3,4,5,6,7,8,9); $total_num = count($numeros)-1; $numPedido = $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)]; $gerador = $numPedido; echo $gerador ?> ele gera codigos quanse inpussivel de gerar o mesmo codigo assim um atars do outro espero ter ajudado.. nossa bacana mesmo @Marcos_imasters gostei mas no meu caso gero comprovante para os clientes, como você mesmo disse "quase impossível gerar o mesmo código" mas acho que daria problema na hora de consultar pelo numero do pedido, caso gerasse algum repetido... tem como deixa esse numero unico? oque você acha? Compartilhar este post Link para o post Compartilhar em outros sites
Marcos_imasters 288 Denunciar post Postado Julho 30, 2012 mano tipo se tui quizer pode adiciona o numero do cliente mais nunca tentei nao mais achu que é possivel tenta ai tipo <? $numeros = array(0,1,2,3,4,5,6,7,8,9); $total_num = count($numeros)-1; $numPedido = $id . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)] . $numeros[rand(0,$total_num)]; $gerador = $numPedido; echo $gerador ?> Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Julho 31, 2012 Os exemplos que postaram usando rand() nao são seguros exceto esse ultimo no qual utiliza vários rands, diminuindo as possibilidades de repetir. No entanto, ainda há a possibilidade de repetição. A técnica com microtime() é mais segura do que rand() Particularmente também utilizo o microtime ou o simples time, pois gera 10 caracteres. O microtime gera uma string maior. É inconveniente para leitura humana, principalmente clientes durante um suporte via telefone. Até mesmo o uso do time() com 10 números é incômodo para situações como já expliquei acima. Veja se esse outro tópico pode ser útil: http://forum.imasters.com.br/topic/427112-criptografar-o-get-no-php/page__view__findpost__p__1686364 Nesse caso, o alphaid pode ser gerado a partir do id original da tabela de pedidos. O alphaid gera uma máscara curta de 5 caracteres. O unico incômodo é que são misturados com letras. A técnica é semelhante ao service tag, podendo inclusive reverter para o código original. Enfim, para essa situação, ainda prefiro a técnica do service tag Para quem ainda está boiando sobre o que é isso, veja algumas imagens: Compartilhar este post Link para o post Compartilhar em outros sites