Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RobertoSilva007

Gerar números automaticamente para mais de 1 usuário

Recommended Posts

Galera, o lance é o seguinte...tenho uma tabela onde existe um campo que o sistema deverá informar automaticamente. Até aqui tudo bem, o problema é que, preciso que o sistema gere um novo número para cada usuário que acessar o sistema, então se 2 ou 3 usuários acessar o sistema, o mesmo deverá informar números diferentes para cada usuário.

Mas...agora vem outra questão, se um número já estiver reservado para um usuário, o sistema deverá gerar o próximo número e assim por diante. Mas...como verificar se um um usuário já está utilizando determinado número, mesmo que ele ainda não tenha realizado a inserção no banco?

 

Alguém se habilita em informar alguma ideia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Lucas, grato pela atenção e sim...o problema é simples aqui, mas meio complicado de explicar então eu entendo a sua bola de cristal aí...rsss

 

Detalhe: Eu fiz uma tabela auxiliar com o último número que foi inserido para que o sistema pegue ele como referência para informar o próximo e também um campo status daquele número informando se ele já foi usado ou não.

cQ5T87G.jpg

Primeiro eu gravo nessa tabela o número que irei utilizar em uma outra tabela, e deixo o status dela com 0, ou seja, ainda está em uso. Então quando o usuario terminar o cadastro e mandar inserir no banco, volto nessa tabela e marco ela com 1. Mas e se....o usuário não terminar o cadastro ou desistir, o campo status sempre será 0 e o número referente à ele jamais irá ser utilizado eu não posso deixar números vagos.

 

Não sei se explique melhor agora...rssss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lucas
Quando o usuário entrar na tela de cadastro, primeiro irá consultar a tabela auxiliar_numero_pasta(imagem anexada no meu post anterior) e verificar qual o último número do campo numeroPasta e se o status dele é 1. Se o status for 1, significa que esse número está sendo utilizando, então basta eu gerar o próximo, caso for 0, ou alguém acabou de inserir este número e ainda está preenchendo os dados no formulário de cadastro(é um formulário bem grande, pois são dados de filiados de um sindicato) ou o usuário desistiu no meio do caminho e não mandou inserir os dados no formulário, caso isso tenha acontecido, então via sistema é meio complicado de voltar na tabela auxiliar_numero_pasta e zerar aquele numero ou marca-lo como 1.

 

Caio

Pois é, mas e se o usuário apenas fechar o sistema fechando diretamente pelo navegador? Desta forma o sistema não tem como controlar as ações do usuário.

 

Desde já, grato pela atenção...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para fazer números únicos recomendo usar o time() que o mesmo faz: "Retorna a hora atual medida no número de segundos desde a Era Unix".

 

assim poderá fazer com que recupere o ID do usuário que deseja logar e adiciona na mesma string ficando.

 

Exemplo de como ficaria.

 

<?php

$id_user = 3;

$hora = time() ."_". $id_user;
echo $hora;

?>

 

de como recuperaria os dados para mostrar qual usuário está com qual código.

 

 

<?php

$arrayUser = explode('_', $hora);
echo "Código gerado ao logar: ".$arrayUser[0];
echo '<br />';
echo "Usuário que logou: ".$arrayUser[1];
?>

 

 

Código simples completo.

 

<?php

$id_user = 3;
$hora = time() ."_". $id_user;
echo $hora;

echo '<hr />';

$arrayUser = explode('_', $hora);
echo "Código gerado ao logar: ".$arrayUser[0];
echo '<br />';
echo "Usuário que logou: ".$arrayUser[1];

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
Lucas me desculpe por não estar sendo mais claro...rsss


Bom, qual a necessidade disso?


Estou dando continuidade em um sistema já pronto e nesse sistema o desenvolvedor anterior fez um cadastro de arquivos bem dinâmico, onde um campo pode ser qualquer coisa, desde números até strings, boolenos e por aí vai.


O importante é que, esse cadastro servirá para armazenar os dados dos filiados(todos os dados em um único campo como um array) de um sindicato aqui do estado. E esse sindicado tem um arquivo enorme com todos os dados dos filiados separados por pastas.

O probema é que o processo de gerar esses números das pastas é manual e agora eles querem colocar automático.


Então onde antes era manual agora tem que ser automático. Quando o usuário entrar no sistema, tenho que gerar o próximo número de acordo com o último. Mas como fazer para não deixar esse campo em branco ou se repetir? Lembrando que o sistema será utilizado por mais de um usuário, então se o último registro inserido for 100, e entrar 2 usuários, os mesmos irão verificar o mesmo número e gerar o próximo número iguais, ou seja, 101, então é aí que entra a tabela auxiliar, para tipo, fazer uma verificação se existem mais de um usuário, ou sei lá como vou fazer isso, para não deixar que os números se dupliquem.


Como eu disse, é uma coisa bem simples, mas complicado de explicar devido à forma que o cara fez aqui.


Mas de toda forma, obrigado pela atenção...



E Paulinho, vou analisar sua sugestão.

E obrigado também...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você conhece o AUTO INCREMENT do SQL?

 

Se o número da pasta não tiver alguma regra específica, apenas deve ser incrementado a cada novo cadastro, ele deve resolver.

Sim Lucas, eu conheço o Auto Incriment, porém ele não serve, pois como eu disse, o campo é dinâmico podendo conter tanto um número, quanto uma string, boolean e por aí vai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você vai definir o próximo valor de uma string? Ou um boolean? :upset:

Esse é o ponto Lucas.

Esse valor que deveria gerar automático, eu irei fazer isso em outra tabela, a tabela auxiliar. E depois eu pego esse número e jogo "automaticamente" na outra tabela de filiados, pois o campo suporta numero também.

O lance de gerar o valor e jogar na tabela que eu quero, já está tranquilo, a única questão é com os acessos simultâneos.

Tipo, Fulano 1 acessa a tela de cadastro e na tabela auxiliar irei verificar qual é o último número e o status dele. Se o status for 1, então eu gero o proximo número. Só que o próximo número será iniciado com o status 0, dizendo que ainda está em edição. O problema é quando outro usuário acessar a mesma tela, ele irá ver o mesmo número e irá gerar o mesmo próximo número.

cQ5T87G.jpg

Agora o que eu tenho que fazer é...como fazer para verificar que o usuário Fulano 1 ainda está usando tal número e se caso o fulano 1 desistir do cadastro, como marcar aquele número que ele iria usar para voltar a ficar disponível. Esse é o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.