Ir para conteúdo

POWERED BY:

Arquivado

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

lucas_imasters

MySql relacionado a PHP - Auto Incremento e Update

Recommended Posts

Oiiiiiiii galera, aos veteranos, sou novo aqui :)

 

Bom é o seguinte, estou estudando php, comecei com html, passei pra css, to fazendo um site de contabilidade e nele vai ter uma area do cliente, onde nessa area o cliente faz login e acessa os documentos dele que por sua vez quem faz upload dos documentos é o administrador. Fiz uma modelagem de banco de dados. Não estou conseguindo fazer upload da imagem aki ¬¬. Mais entao fiz um DE-R assim: CLIENTE E ADMINISTRADOR FAZ LOGIN QUE ACESSA AREA

 

CLIENTE, ADMINISTRADOR, LOGIN são entidades e FAZ E ACESSA são os relacionamentos.

 

Como podem ver tentei fazer o diagrama aki, espero que entendam. Peço a ajuda de voces pois ja estou quebrando a cabeça dias no google e pensando e não consegui resolver meu problema. Agora vai o meu problema:

 

Eu criei a tabela cliente, e cada cliente tem um identificador que se chama "cli_id", eu coloquei como chave primaria e nao aceita nulo. Ate ai tudo bem fiz a minha pagina de administrador que tem, Cadastros, Inserir, Alterar, Excluir, Consultas. Em cadastros eu consigo vizualiza-los, Em Inserir eu consigo inseri-los, o problema é que por exemplo eu fiz 18 cadastros de teste, ai depois eu apaguei uns 16, ficaram só os dois primeiro ai quando eu fui criar o terceiro novamente, ao inves de "cli_id" dele ser "3" foi "19" como se os outros "cli_id" que eu apaguei dos cadastros tivessem guardados em algum lugar invisivel. Esse é o meu primeiro problema. O do Update eu falo depois senao vai embolar mt.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Lucas, tudo bem?!?

 

Também sou novo aqui no imasters mas algumas coisas a gente tenta cooperar e no seu caso é o seguinte:

Pelo que eu sei quando você grava algum dado no banco em sequencia como você fez e depois os deleta, o banco segue aquela numeração onde parou. Você selecionou auto_increment para o campo cli_id, certo? Ele gera uma sequencia automatica de ids para cada registro, e sendo assim se você inserir 10 registros, e deletar de 5 até o 10, o proximo registro será posterior ao ultimo que foi inserido, ou seja 11. Ele nunca vai verificar qual o ultimo id na tabela, mas sim o que foi gravado.

 

Acho que pra você fazer ele seguir uma sequencia mesmo que tenha excluido um intervalo, tem que ser no codigo mesmo sem usar o auto_increment.

 

Espero ter ajudado.

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Lucas, tudo bem?!?

 

Também sou novo aqui no imasters mas algumas coisas a gente tenta cooperar e no seu caso é o seguinte:

Pelo que eu sei quando você grava algum dado no banco em sequencia como você fez e depois os deleta, o banco segue aquela numeração onde parou. Você selecionou auto_increment para o campo cli_id, certo? Ele gera uma sequencia automatica de ids para cada registro, e sendo assim se você inserir 10 registros, e deletar de 5 até o 10, o proximo registro será posterior ao ultimo que foi inserido, ou seja 11. Ele nunca vai verificar qual o ultimo id na tabela, mas sim o que foi gravado.

 

Acho que pra você fazer ele seguir uma sequencia mesmo que tenha excluido um intervalo, tem que ser no codigo mesmo sem usar o auto_increment.

 

Espero ter ajudado.

abraços

 

Teu,

 

Obrigado pelo toque. Pesquisei um pouco mais de como zerar o auto incremento para voltar a começar cadastrar do 1 mais nao obtive sucesso. Meu codigo:

 

<?php

include ("conexao.php");
$id_cli				= $_POST["cli_id"];
$nome_cli 			= $_POST["nome_cli"];
$empresa_cli 		= $_POST["empresa_cli"];
$especialidade_cli 	= $_POST["especialidade_cli"];
$email_cli 			= $_POST["email_cli"];
$uf_cli 			= $_POST["uf_cli"];
$cidade_cli 		= $_POST["cidade"];
$endereco_cli 		= $_POST["endereco_cli"];
$cep_cli 			= $_POST["cep_cli"];
$tel_fixo_cli 		= $_POST["tel_fixo_cli"];
$tel_movel_cli 		= $_POST["tel_movel_cli"];
$sexo 				= $_POST["sexo_cli"];

$sql = "
ALTER TABLE cliente CHANGE cli_id INT( 11 ) DEFAULT NULL AUTO_INCREMENT;
INSERT INTO cliente(cli_id, cli_nome, cli_empresa, cli_especialidade, cli_email, cli_uf, cli_cidade, cli_endereco, cli_cep, cli_tel_fixo, cli_tel_movel, cli_sexo);
VALUES('', '$nome_cli', '$empresa_cli', '$especialidade_cli', '$email_cli', '$uf_cli', '$cidade_cli', '$endereco_cli', '$cep_cli', '$tel_fixo_cli', '$tel_movel_cli', '$sexo');
";

$query = mysql_query($sql) or die("Houve um erro na gravação dos dados, verifique os valores passados.");


header("location:admin.php?selecao=cadastros");
?>

 

Eu tento cadastrar e ele morre = ("Houve um erro na gravação dos dados, verifique os valores passados.");

 

Se eu retirar aquela primeira linha da variavel $sql= "ALTER TABLE cliente CHANGE cli_id INT( 11 ) DEFAULT NULL AUTO_INCREMENT;"........ E deixar o resto ai ele faz o cadastro só que faz do ultimo id registrado que é 27, porque como eu ja apaguei o 26, ele vai para o 27 ao inves de voltar para o 1 mesmo eu tendo apagado todos os registros. Quem souber me ajuda por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que você nao vai conseguir usar um id que já foi registrado,

o que você pode fazer , é criar um campo "ativo" do tipo boolean , e entao quando for excluir um usuário , alterar seu status para "false", assim você vai garantir que você tenha sempre numeros id sequenciais. Com isso você mantem um historico de quais usuários foram apagados, pra efeito estatistico isso é otimo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que você nao vai conseguir usar um id que já foi registrado,

o que você pode fazer , é criar um campo "ativo" do tipo boolean , e entao quando for excluir um usuário , alterar seu status para "false", assim você vai garantir que você tenha sempre numeros id sequenciais. Com isso você mantem um historico de quais usuários foram apagados, pra efeito estatistico isso é otimo...

 

No caso ao inves de meu campo cli_id ser inteiro e chave primaria com auto incremento eu o modifico para tipo boolean sem auto incremento e crio um codigo para quando excluir ou cadastrar um novo usuario ?

 

Galera pesquisando um pouco mais vi a resposta de um cara em um forum e ele disse isso:

 

"ai deixa de ser auto-increment.

sinceramente eu nao aconselho.

nao vejo problema nenhum se a informação não seguir uma seguquencia.

ate pq, se daqui a 1 ano usando o seu sistema, o autoincremtne esta em 1000 e você resolve deletar o registro com id5, na sequencia o proximo seira 5 e nao 1001, o que quebra um pouco a ordem cronologia.

 

porém, se você preferir usar assim, aconselho controlar na aplicação."

-----------------

 

Vocês concordam com ele?

 

Minha outra duvida é que eu não consigo fazer alteração no campo especifico, Vejam o codigo do meu form:

 

<?php
//Exibi o conteúdo de acordo com o click
$link= $_GET["selecao"];

include ("Data.fcn");

//Inclui a conexão com o banco de dados
include ("conexao.php");

//Exibi os dados dos clientes para alteração
$cliente_alterar = $_POST["selecao_cliente"]; //Pega o cliente escolhido para fazer a alteração
$sql= "SELECT * FROM cliente WHERE cli_nome='$cliente_alterar'"; //Faz uma consulta
$resultado = mysql_query($sql) or die ("Não foi possível fazer a consulta."); //Executa o comando da consulta
$registro = mysql_fetch_array($resultado); //Cria um array para todos os dados do cliente selecionado

$identificador			= $registro[cli_id];
$nome_alterar			= $registro[cli_nome];
$empresa_alterar		= $registro[cli_empresa];
$especialidade_alterar	= $registro[cli_especialidade];
$email_alterar			= $registro[cli_email];
$uf_alterar				= $registro[cli_uf];
$endereco_alterar		= $registro[cli_endereco];
$cidade_alterar			= $registro[cli_cidade];
$cep_alterar			= $registro[cli_cep];
$tel_fixo_alterar		= $registro[cli_tel_fixo];
$tel_movel_alterar		= $registro[cli_tel_movel];
$sexo_alterar			= $registro[cli_sexo];
?>


<form method="post" action="alterar_cadastro.php">
<fieldset>
<legend>Alterar Dados dos Clientes - <?php echo data(); ?> - <span id="timer"></span></legend>


<input type="text" size="4" name="identificar" value="<?php echo "$identificador"; ?>">

<label class="label">Nome: </label>
	<input type="text" size="70" name="nome_novo" value="<?php echo"$nome_alterar"; ?>"><br>

<label class="label">Empresa: </label>
	<input type="text" size="70" name="empresa_novo" value="<?php echo"$empresa_alterar"; ?>"><br>

<label class="label">Especialidade: </label>
	<input type="text" size="70" name="especialidade_novo" value="<?php echo"$especialidade_alterar"; ?>"><br>

<label class="label">Email:</label>
	<input type="text" size="70" name="email_novo" value="<?php echo"$email_alterar"; ?>"><br>

<label class="label">UF:</label> 
	<select size="1" name="uf_novo" value="<?php if($uf_alterar=="selected") echo"selected"; ?>">
		<option value="VZ" checked>...</option>
		<option value="AC">AC</option>
		<option value="AL">AL</option>
		<option value="AP">AP</option>
		<option value="AM">AM</option>
		<option value="BA">BA</option>
		<option value="CE">CE</option>
		<option value="DF">DF</option>
		<option value="ES">ES</option>
		<option value="GO">GO</option>
		<option value="MA">MA</option>
		<option value="MT">MT</option>
		<option value="MS">MS</option>
		<option value="MG">MG</option>
		<option value="PA">PA</option>
		<option value="PB">PB</option>
		<option value="PR">PR</option>
		<option value="PE">PE</option>
		<option value="PI">PI</option>
		<option value="RJ">RJ</option>
		<option value="RN">RN</option>
		<option value="RS">RS</option>
		<option value="RO">RO</option>
		<option value="RR">RR</option>
		<option value="SC">SC</option>
		<option value="SP">SP</option>
		<option value="SE">SE</option>
		<option value="TO">TO</option>
	</select><br>

<label class="label">Cidade: </label>
       <input type="text" size="70" name="cidade_novo" class="input3" value="<?php echo"$cidade_alterar"; ?>"><br>

<label class="label">Endereço: </label>
	<input type="text" size="70" name="endereco_novo" class="input3" value="<?php echo"$endereco_alterar"; ?>"><br>

<label class="label">Cep: </label>
	<input type="text" size="70" name="cep_novo" class="input3" value="<?php echo"$cep_alterar"; ?>"><br>

       <label class="label2">Telefone Fixo:</label><br>
	<input type="text" size="8" name="tel_fixo_novo" class="input" Maxlength="8" value="<?php echo"$tel_fixo_alterar"; ?>"><br>

<label class="label2">Telefone Móvel:</label><br>
	<input type="text" size="8" name="tel_movel_novo" class="input" Maxlength="8" value="<?php echo"$tel_movel_alterar"; ?>"><br>

<label class="label">Sexo: </label>
	<input type="radio" name="sexo_novo" value="M" <?php if ($sexo_alterar=="M") echo "checked";?>>Masculino
	<input type="radio" name="sexo_novo" value="F" <?php if ($sexo_alterar=="F") echo "checked";?>>Feminino
	<br><br>
	<input type="submit" value="Salvar" name="salvar" class="input">
	<input type="reset" value="Cancelar" name="cancelar">
</fieldset>
</form>

 

Essa foi a página de editar e a de alterar é esta--->>>>>>

 

<?php

include ("conexao.php");
$identificador		= $_POST["identificar"];
$nome_cli 			= $_POST["nome_novo"];
/*$empresa_cli 		= $_POST["empresa_cli"];
$especialidade_cli 	= $_POST["especialidade_cli"];
$email_cli 			= $_POST["email_cli"];
$uf_cli 			= $_POST["uf_cli"];
$cidade_cli 		= $_POST["cidade"];
$endereco_cli 		= $_POST["endereco_cli"];
$cep_cli 			= $_POST["cep_cli"];
$tel_fixo_cli 		= $_POST["tel_fixo_cli"];
$tel_movel_cli 		= $_POST["tel_movel_cli"];
$sexo 				= $_POST["sexo_cli"];*/

$query = "
UPDATE cliente SET 
	cli_nome 			= '$nome_cli';
WHERE cli_id = $identificador;
";

$exec= mysql_query($query) or die("Erro ao alterar o cadastro.  ". mysql_error() );

echo "$identificador , $nome_cli";
//header("location:admin.php?selecao=cadastros");WHERE cli_id = '$identificador'
?>

 

Não consigo fazer esta alteração somente no cliente com o codigo desejado ele morre se eu tentar isso. Mais se eu tirar o WHERE ele faz a alteração em todos os clientes e eu quero em apenas o que eu escolher editar.

 

Erro que ocorre:

 

Erro ao alterar o cadastro. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; WHERE cli_id = 5' at line 2

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.