Ir para conteúdo

POWERED BY:

Arquivado

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

acdestefani

[Resolvido] Gerar número de protocolo

Recommended Posts

Olá pessoal!

Onde trabalho estamos desenvolvendo um sistema em PHP/Mysql onde é necessária a geração de um número de procolo. A pessoa acessa o endereço e preenche o formulário de solicitação. Ao clicar em enviar, esse número de protocolo será gerado e mostrado na tela. Como no sistema tem um campo código (autoincrement)para cada solicitação e também um campo horas (grava automaticamente a hora do preenchimento do formulário), pensei em utilizá-los para gerar o número de protocolo, que ficaria da seguinte forma: hhmmsscodigosolicitação.

Mas como estou iniciando em php, não sei como posso fazer a junção desses dois campos. Alguém poderia me orientar de como fazer isso?

Desde já agradeço a ajuda de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o campo com o código é AUTOINCREMENT usa a função mysql_insert_id() para pegar o ultimo gerado, ou seja o que acabou de ser cadastrado.

 

aí é só pegar a hora e concatenar com o código.

 

Vale lembrar que você poderia usar direto o código como numero do Protocolo, já que o mesmo é único

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda pessoal!

Como ainda estou iniciando, vou dar uma pesquisada a respeito de como usar a função mysql_insert_id() e como concatená-la com o campo horas e depois como salvar o número gerado no banco de dados. Qualquer dúvida posto aqui.

Como esse sistema possuirá uma página de consulta à solicitação, achamos melhor utilizar os dois campos para obter um número maior para que somente quem possua o número do protocolo possa consultar.

Mais uma vez, muito obrigado a todos!

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função mysql_insert_id() só pode ser usada depois que gravo o registro no banco de dados? É que tenho um campo da minha tabela para gravar o número de protocolo gerado. Como faço para gravar esse número de protocolo?

Obrigado!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função mysql_insert_id() só pode ser usada depois dos dados do registro serem gravados no banco? Tenho um campo para gravar o número de protocolo no banco de dados, como faço pra gravar esse número depois de já ter salvo o registro?

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo, a função mysql_insert_id() retorna o id do último registro inserido.

Usa um UPDATE depois de inserir e pegar o id aí grava o numero do protocolo

 

Ou então nem precisa desse campo, poderia ser assim, por exemplo:

 

Já que você quer o numero do protocolo nesse formato hhmmsscodigosolicitação ficaria assim. Vamos supor que foi cadastrado um registro e a tabela seria, resumidamente assim:

 

cód | data_hora

00001 | 2009-11-10 18:40:10

 

Aí informa pro usuário que o protocolo é 18401000001, concatena a hora min seg e o resultado do mysql_insert_id(), sem precisar gravar em um campo separado.

 

Na hora que o usuário pesquisar nem precisa levar em considaração a hora pois o final do numero do protocolo (em vermelho) é o cód que é chave primária.

 

E mais uma vez vale lembrar que você poderia usar direto o código como numero do Protocolo, já que o mesmo é único.

 

Mas já que é requisito ter um numero grande como você falou "achamos melhor utilizar os dois campos para obter um número maior", qual o tipo de campo você tá usando para o código??? Com o tipo BIGINT usado como UNSIGNED ZEROFILL o id 1 seria 00000000000000000001 pois como tem em Manual de referência do MySQL

 

BIGINT[(M)] [uNSIGNED] [ZEROFILL]

Um inteiro grande. A faixa com sinal é de -9223372036854775808 a 9223372036854775807. A faixa sem sinal é de 0 a 18446744073709551615.

Mas, sinceramente eu faria de outra forma, muito número dificulta pro usuário, talvez eu criasse tipos de solicitação e para cada tipo uma sigla que o identificasse por exemplo INF e geraria o protocolo com essa sigla e o id tipo INF0001, ou pensaria em outra coisa.

 

Qlq dúvida posta aê. Flw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela ajuda Fernando Medrado! Finalmente consegui gerar o número do protocolo da maneira que estamos precisando, só não consegui ainda gravá-lo no banco de dados. Será que você poderia me explicar melhor como faço esse update? É que não tenho muita experiência e tô apanhando um pouco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho uma página com o formulário que ao clicar no botão enviar os dados vão para outra página que inseri o registro. Nessa página que inseri os registros está assim:

Recebo os dados

$postnome = $_POST['nome'];

$postrua = $_POST['rua'];

$postnumero = $_POST['numero'];

$postcomplemento = $_POST['complemento'];
...

Inseri os dados no banco

$sql1 = "insert into solicitacao (nome, rua, 
numero,
complemento,...) 
values ('$postnome', 
'$postrua', 
'$postnumero',
'$postcomplemento',...)";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esqueci de postar essa parte

"$inclusao = mysql_query($sql1);"

 

A inclusão de todos os campos está sendo feita normalmente, só não consegui fazer o UPDATE do número do protocolo, que é gerado depois da inclusão do registro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então poste o comando UPDATE.

Provavelmente é um erro de sintaxe

 

Antes de postar, execute a consulta assim:

 

$query = mysql_query( $sua_consulta ) or exit( mysql_error() );

 

Se aparecer mensagem de erro, poste-a também

Compartilhar este post


Link para o post
Compartilhar em outros sites

... Será que você poderia me explicar melhor como faço esse update? ...

 

A idéia do UPDATE é para a tualizar o registro que acabara de ser inserido, no caso atualizar o campo com o número do protocolo. Aí ficaria +/- assim depois do INSERT

 

...
$idInsert =  mysql_insert_id()
$qyAtualizar = "UPDATE nome_tabela SET num_protocolo = '" . $numProtocolo . "' WHERE cod = " . $idInsert . " LIMIT 1";
...
Qlq coisa posta aí. Flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda pessoal!!!

 

O problema é que não sei como fazer esse comando UPDATE. Vou enviar, abaixo, o código da página para vocês entenderem melhor.

<link href="stilo.css" rel="stylesheet" type="text/css" />

<?php

require_once("ouvidoriaconecta.php");



$postnome = $_POST['nome'];

$postrua = $_POST['rua'];

$postnumero = $_POST['numero'];

$postcomplemento = $_POST['complemento'];

$postcep = $_POST['cep'];

$postbairro = $_POST['bairro'];

$posttelefone = $_POST['telefone'];

$postemail = $_POST['email'];

$posttipo = $_POST['tipo'];

$postdescricao = $_POST['descricao'];



//Validações de Campos Vazios ----------------------------------------------------

			if (!$postdescricao) {$mancada8 = 1;}

			if (!$posttipo) {$mancada7 = 1;}

			if (!$posttelefone) {$mancada6 = 1;}

			if (!$postbairro) {$mancada5 = 1;}						

			if (!$postcep) {$mancada4 = 1;}

			if (!$postnumero) {$mancada3 = 1;}						

			if (!$postrua)	{$mancada2 = 1;}			

			if (!$postnome) {$mancada1 = 1;}			

//--------------------------------------------------------------------------------



//Personalização das Mensagens de Erro ----------------------------------------------



   		if ($mancada8 == 1)

   			{$mensagem = "O campo descrição não foi preenchido.";} 	



   		if ($mancada7 == 1)

   			{$mensagem = "O campo tipo não foi preenchido.";}



   		if ($mancada6 == 1)

   			{$mensagem = "O campo telefone não foi preenchido.";}



   		if ($mancada5 == 1)

   			{$mensagem = "O campo bairro não foi preenchido";}



   		if ($mancada4 == 1)

   			{$mensagem = "O campo CEP não foi preenchido.";}



   		if ($mancada3 == 1)

   			{$mensagem = "O campo numero não foi preenchido.";}



 		if ($mancada2 == 1)

   			{$mensagem = "O campo rua não foi preenchido.";}



   		if ($mancada1 == 1)

   			{$mensagem = "O campo nome não foi preenchido.";}

	

//--------------------------------------------------------------------------------		



//Teste das Validações Realizadas ---------------------------------------------------

   		if (($mancada1 == 1) || ($mancada2 == 1) || ($mancada3 == 1) || ($mancada4 == 1) || ($mancada5 == 1) || ($mancada6 == 1) || ($mancada7 == 1) || ($mancada8 == 1))

    			{

    			echo "<center><h2>Ocorreu um ERRO!</h2></center>";

    			echo "<center><h1>$mensagem</h1></center>";

    			echo "</font>";

    			echo "<center>";

    			echo "<form name='retornasolicitacao' method='post' action='ouvidoriacadsolicitacao.php'>";  		    

     				echo "<input type='hidden' value='$postnome' 			name='nomeoculto'>";

    				echo "<input type='hidden' value='$postrua' 			name='ruaoculto'>";

    				echo "<input type='hidden' value='$postnumero' 			name='numerooculto'>";

					echo "<input type='hidden' value='$postcomplemento'		name='complementooculto'>";

    				echo "<input type='hidden' value='$postcep' 			name='cepoculto'>";

    				echo "<input type='hidden' value='$postbairro' 			name='bairrooculto'>";

    				echo "<input type='hidden' value='$posttelefone' 		name='telefoneoculto'>";

					echo "<input type='hidden' value='$postemail' 			name='emailoculto'>";

    				echo "<input type='hidden' value='$posttipo' 			name='tipooculto'>";

    				echo "<input type='hidden' value='$postdescricao'		name='descricaooculta'>";

    				echo "<input type='submit' value='        VOLTAR        '>";

    			echo "</form>";

    			echo "</center>";

    			exit;

   			}  			

//------------------------------------------------------------------------------------

$sql1 = "insert into solicitacao (			

			nome, 

			rua, 

			numero,

			complemento,			

			cep, 

			bairro, 

			telefone, 

			email, 

			tipo, 

			descricao,

			data,

			hora) 

	values (

			'$postnome', 

			'$postrua', 

			'$postnumero',

			'$postcomplemento',			 

			'$postcep', 

			'$postbairro', 

			'$posttelefone', 

			'$postemail', 

			'$posttipo', 

			'$postdescricao',	

			NOW(),

			NOW()

	)";



$inclusao = mysql_query($sql1);

if (!$inclusao)

	{

	echo"<hr>";

	echo"<center><h4>A Solicitação não foi cadastrada.</h4></center>";

	echo"<center><h5>Erro no comando SQL.</h5></center>";

	    			echo "<form name='retornasolicitacao' method='post' action='ouvidoriacadsolicitacao.php'>"; 			    			

    				echo "<input type='hidden' value='$postnome' 			name='nomeoculto'>";

    				echo "<input type='hidden' value='$postrua' 			name='ruaoculto'>";

    				echo "<input type='hidden' value='$postnumero' 			name='numerooculto'>";

    				echo "<input type='hidden' value='$postcep' 			name='cepoculto'>";

    				echo "<input type='hidden' value='$postbairro' 			name='bairrooculto'>";

    				echo "<input type='hidden' value='$posttelefone' 		name='telefoneoculto'>";

    				echo "<input type='hidden' value='$posttipo' 			name='tipooculto'>";

    				echo "<input type='hidden' value='$postdescricao'		name='descricaooculta'>";

	   				echo "<input type='submit' value='        VOLTAR        '>";

    		echo "</form>";

    		echo "</center>";

	exit;

	}

else

	{



//GERA O PROTOCOLO

//Obtém os segundos para ser utilizado no número de protocolo

$segundoprotocolo = date ("s");



//Obtém o ano para ser utilizado no número de protocolo

$anoprotocolo = date ("Y");



// captura o codigo de solicitação do registro que acabou de ser inserido

$id = mysql_insert_id();


//Preenche, com zeros a esquerda, o número do protocolo obtido através da função mysql_insert_id

$idprotocolo = str_pad($id, 6, "0", STR_PAD_LEFT); 



// Gera o número de protocolo

$protocolo = $segundoprotocolo.$idprotocolo.$anoprotocolo;



echo "$postsolicitacao";

	echo"<center><h1>Sua solicitação foi cadastrada com sucesso.</h1></center>";

	echo"<center><h1>O número de protocolo é</h1><h2>$senha</h2></center>";

	echo"<center><h2>$protocolo</h2></center>";	

	echo"<center><h1>Anote-o para pesquisar o andamento da sua solicitação.</h1></center>";

	echo "$postcodsolicitacao";

	}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara dá uma pesquisada em como validar os campos, tem formas mais simples e eficiente de fazer.

 

Em relação ao UPDATE, qual o campo da tabela "solicitacao" vai ser usado para armazenar o numero do protocolo???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim...

 

...
// Gera o número de protocolo

$protocolo = $segundoprotocolo.$idprotocolo.$anoprotocolo;

//---------------------

$qyAlterar = "UPDATE solicitacao SET protocolo = '" . $protocolo . "' WHERE codigo = " . $id . " LIMIT 1";
$resAlterar = mysql_query($qyAlterar);

//---------------------

echo "$postsolicitacao";
...
Logo depois de gerar o num do protocolo fa o UPDATE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou com um problema não estou conseguindo gerar o num de protocolo data e hora sair no protoclo. Meu codigo.

 

 

<?php
@require('banco_insc.php');
//Abaixo atribuímos os valores provenientes do formulário pelo método POST
$Denunciante = $_POST["Denunciante"];
$Email_Denunciante = $_POST["Email_Denunciante"];
$Tel_Denunciante = $_POST["Tel_Denunciante"];
$Local_Fato = $_POST["Local_Fato"];
$Nome_Denunciado = $_POST["Nome_Denunciado"];
$TipoPF_PJ = $_POST["TipoPF_PJ"];
$Creci = $_POST["Creci"];
$Data_Ocor = $_POST["Data_Ocor"];
$Mun_Fato = $_POST["Mun_Fato"];
$Fato = $_POST["Fato"];
date_default_timezone_set('America/Sao_Paulo');
$Data = date("y/m/d");
$hora = strftime("%H:%M:%S");
$string_sql = "INSERT INTO $tabela(Denunciante,Email_Denunciante,Tel_Denunciante,Local_Fato,Nome_Denunciado,TipoPF_PJ,Creci,Data_Ocor,Mun_Fato,Fato,Data,hora) VALUES('$Denunciante','$Email_Denunciante','$Tel_Denunciante','$Local_Fato','$Nome_Denunciado','$TipoPF_PJ','$Creci','$Data_Ocor','$Mun_Fato','$Fato','$Data','$hora')";
mysql_query($string_sql,$conn); //Realiza a consulta
"echo ('usuario Incluido com Sucesso!')";
// Gera o número de protocolo
$segundoprotocolo = date ("s");
$anoprotocolo = date ("Y");
$id = mysql_insert_id();
$idprotocolo = str_pad($id, 6, "0", STR_PAD_LEFT);
$protocolo = $idprotocolo.$segundoprotocolo.$anoprotocolo;
//---------------------
$qyAlterar = "UPDATE $tabela SET protocolo = '" . $protocolo . "' WHERE protocolo = " . $id . " LIMIT 1";
$resAlterar = mysql_query($qyAlterar);
//---------------------
echo "$postsolicitacao";
mysql_close($conn); //fecha conexão com banco de dados
?>
Grato!

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.