Ir para conteúdo
Fórum Script Brasil
  • 0

Erro Sequencia Auto Increment


impossivel

Pergunta

Olá a todos, vou demonstrar minha tabela (DADOS)

--ID-----NOME-------SEXO------IDADE---

--1------João----------M----------25

--2------Maria---------F-----------20

--4------José----------M----------10

--5------Ana-----------F-----------30

--7------Fatima--------F----------28

...e assim pode ir ate uns mil registros.

Pois bem, tenho um script que faz uma busca pelo codigo

Mas reparem que precisei excluir o ID "3" e "6".

tenho outro codigo que mostra individualmente cada linha da tabela

$id= $_GET['id'];

$sql= mysql_query("SELECT * FROM dados where id=$id");

percebam que nesta ultima requisição, ele busca o ID de um POST de outra pagina, ex.

a pagina chama-se PESSOA.PHP e tem o codigo acima para mostras o resultado,

pessoa.php?id=1

--ID-----NOME-------SEXO------IDADE---

--1------João----------M----------25

pessoa.php?id=2

--ID-----NOME-------SEXO------IDADE---

--2------Maria---------F-----------20

pessoa.php?id=4

--ID-----NOME-------SEXO------IDADE---

--4------José----------M----------10

pois bem... quero inserir um codigo em cada pagina, tipo paginação, para ter um link para a PESSOA anterior e proximo

que também seria automatico.. ex.

PAGINA PESSOA

pessoa.php?id=2

--ID-----NOME-------SEXO------IDADE---

--2------Maria---------F-----------20

<< Anterior Proxima>>

>Link a ser coloca na anterior (este link aponta para ID 1)

<a href='pessoa.php?id=$id-1'>ANTERIOR

>Link a ser coloca para proxima (este aponta para ID 3-que não existe)

<a href='pessoa.php?id=$id+1'>PROXIMA

OK! estão entendendo? ate aqui tudo bem!

Mas ai lembramos que tive que excluir algumas ID, e como o campo é autoincrement ele vai seguinto a sequencia e aumentando um numero depois da ultima coluna e assim vai.

Ai este link daria invalido, pois estaria apontado para um link excluido.

Ufa, enfim, como faço para que este link aponte sempre para o ID sucessor ou antecessor?

Tem como o banco de dados preencher estes ID excluidos?

Obs. também exibo o resultado por ordem de cadastro, então ORDER BY id DESC

ai o ultimo cadastro sempre aparece em primeiro. Se a tabela completasse os ID que estão faltando me resolveria um problema, porem criaria outro.

Se possivel, me ajudem com as duas duvidas. Grato,

Desculpem por me alongar tanto.

Editado por impossivel
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Como o campo é do tipo autoincrement a idéia é mesmo que nenhum ID seja reaproveitado... o que você pode fazer é na hora de montar o link para o anterior e próximo fazer uma verificação (SELECT combinado com o mysql_num_rows) no banco de dados, se a verificação retornar 0 significa que o ID não existe, nesse caso você força ele a verificar o próximo ID se ele retornar zero você continua a verificar até o mysql_num_rows retornar 1 (que no caso significa que foi encontrado um resultado no banco de dados), claro que isso tudo vai ter que ser posto dentro de um laço de repetição (while... ou for...).

Link para o comentário
Compartilhar em outros sites

  • 0

to te entendo, realmente sua logica é perfeita, agora outra duvida, esta de iniciante.

Como faço este link?

tenho uma ideia, mas este negocio de php é foda, se esquecer que vai um ";" depois do "echo" ai já não aparece nada, tem como me ajudar?

Como o campo é do tipo autoincrement a idéia é mesmo que nenhum ID seja reaproveitado... o que você pode fazer é na hora de montar o link para o anterior e próximo fazer uma verificação (SELECT combinado com o mysql_num_rows) no banco de dados, se a verificação retornar 0 significa que o ID não existe, nesse caso você força ele a verificar o próximo ID se ele retornar zero você continua a verificar até o mysql_num_rows retornar 1 (que no caso significa que foi encontrado um resultado no banco de dados), claro que isso tudo vai ter que ser posto dentro de um laço de repetição (while... ou for...).

Link para o comentário
Compartilhar em outros sites

  • 0

Vou montar um exemplo, basedo no link "próximo registro"...

Bom, assumindo que o cidadão esteja no registro 4... logo isso terá que ser passado pela URL, e ela ficar algo do tipo:

www.seusite.com/pagina.php?registro=4

Para montar o próxima ficaria mais ou menos assim:

<?php
//faz as conexões com o banco de dados;

$pag_atual = $_GET['registro'];
$prox_pag = $pag_atual+1;
$controle = 0;
while ($controle == 0){

$sql = mysql_query("SELECT * FROM tabela WHERE id = '$prox_pag'");
if (mysql_num_rows($sql) == 1){
echo"<a href=\"pagina.php?registro=$prox_pag\">Próximo</a>";
$controle++;
}
else
{$prox_pag++;}
}
?>

Lembrando que isso é só o modus operandi, ou seja, é só como fazer, mas você tem que prever por exemplo uma rotina que veja se o prox_pag já não ultrapassou o último registro (ou seja, se a página atual já é a última não tem link para próxima página) e também a idéia é a mesma para a primeira página...

Link para o comentário
Compartilhar em outros sites

  • 0

Estou tentando adpatar o script, o calculo dos codigos para a pagina com id antecessor ou posterior funciona, mas quando coloco o codigo todo, para ele verificar se o proximo id existe ai acontece um erro terrivel.

Na hora de exibir a pagina, ele nem carrega as informações, já da erro o recado

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Arquivos de programas\xampp\htdocs\jus\piadas\piada.php on line 36

e isto se repete por inumeras vezes, trava o navegador, tenho fechado e abrir de novo, esta resposta de erro não tem fim, tentei contar e tem mais de 200, não sei ate onde pode chegar, tenho somente 28 registro na tabela, então não sei o que aconteceu, estou testando trocar alguma coisas, mas vou postar aqui a sequencia com a LINHA 36, se alguém puder me ajudar serei grato.

30-

31-$pag_atual = $_GET['code'];

32-$prox_pag = $pag_atual+1;

33-$controle = 0;

34-while ($controle == 0){

35-$sql = mysql_query("SELECT * FROM contos WHERE id = '$prox_pag'");

36-if (mysql_num_rows($sql) == 1){

37-echo"<a href=\"pagina.php?registro=$prox_pag\">Próximo</a>";

38-$controle++;

39-}

40-else

41-{$prox_pag++;}

42}

Vou montar um exemplo, basedo no link "próximo registro"...

Bom, assumindo que o cidadão esteja no registro 4... logo isso terá que ser passado pela URL, e ela ficar algo do tipo:

www.seusite.com/pagina.php?registro=4

Para montar o próxima ficaria mais ou menos assim:

<?php
//faz as conexões com o banco de dados;

$pag_atual = $_GET['registro'];
$prox_pag = $pag_atual+1;
$controle = 0;
while ($controle == 0){

$sql = mysql_query("SELECT * FROM tabela WHERE id = '$prox_pag'");
if (mysql_num_rows($sql) == 1){
echo"<a href=\"pagina.php?registro=$prox_pag\">Próximo</a>";
$controle++;
}
else
{$prox_pag++;}
}
?>

Lembrando que isso é só o modus operandi, ou seja, é só como fazer, mas você tem que prever por exemplo uma rotina que veja se o prox_pag já não ultrapassou o último registro (ou seja, se a página atual já é a última não tem link para próxima página) e também a idéia é a mesma para a primeira página...

Link para o comentário
Compartilhar em outros sites

  • 0

Ele está repetindo até travar porque está entrando em looping... o problema não está de fato na linha 36 e sim na 35...

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Arquivos de programas\xampp\htdocs\jus\piadas\piada.php on line 36

Pois o argumento elencado no erro é o $sql, que na verdade é:

mysql_query("SELECT * FROM contos WHERE id = '$prox_pag'");

A sintaxe está correta, então o erro pode estar na conexão com o banco de dados ou com a escolha da tabela...

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Olá ESerra,

realmente, o erro era meu, não tinha acertado os codigos relativos ao banco de dados, na minha tabela eu uso o CODE, no lugar do ID. ai ficou tudo certo, exceto uma coisinha como você já citou, chegou na penultima pagina, ai o link aponta pra ultima, mas quando vai abrir ele demora um minuto pra carregar, e quando carrega a pagina da o erro

Fatal error: Maximum execution time of 60 seconds exceeded in C:\Arquivos de programas\xampp\htdocs\jus\piadas\piada.php on line 249

como não tem proximo id(no meu caso seria CODE) ele se perde em um loop ou sei la o que, mas trava o carregamento da pagina, deve ser este erro de 60 segundos, ai depois de uma espera a pagina abre, e tudo que existe deste codigo pra baixo não aparece, ai pagina acaba no erro.

alguma sugestão de como eu poderia concertar isto?

grato

Link para o comentário
Compartilhar em outros sites

  • 0

Você vai ter que testar isso também... tipo pegar o último ID existente no banco e testar com a página, se a página atual for igual ao último ID não imprime o próximo, se for diferente ai você coloca você testa qual o próximo ID para imprimir com o link "próximo"...

Link para o comentário
Compartilhar em outros sites

  • 0

Verdade, gostei da logica, vou fazer.

Muito obrigado pela força!

Vi que você conhece muito de php e tem um raciocinio rapido.

valeu

Você vai ter que testar isso também... tipo pegar o último ID existente no banco e testar com a página, se a página atual for igual ao último ID não imprime o próximo, se for diferente ai você coloca você testa qual o próximo ID para imprimir com o link "próximo"...

Link para o comentário
Compartilhar em outros sites

  • 0

que tal obter os valores do próximo id e do id anterior em uma consulta à base?

Tipo:

select if(max(id),max(id),0) from DADOS where (id < id_atual)

union

select if(min(id),min(id),0) from DADOS where (id > id_atual)

O resultado dessa consulta vai te informar, na primeira linha, o id do registro anterior, e na segunda linha, o id do próximo registro. Em ambos os casos, se o valor retornado for zero, é que você já está em um dos extremos da tabela.

Vlw?

Editado por CSML sistemas
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...