tarlix 0 Denunciar post Postado Setembro 19, 2011 Bom dia, estou começando agora em php e estou tentando fazer uma paginação, eu até consegui, mas a primeira pagina acontece o seguinte erro: Notice: Undefined index: p in C:\Arquivos de programas\EasyPHP-5.3.8.0\www\Teste\index.php on line 35 Esse erro só acontece quando eu abro a pagina e mesmo assim ele puxa os dados do banco perfeitamente e com a formatação que eu pedi, mas depois de clicar no link "primeira pagina ou ultima pagina" a pagina carrega certinho e some o erro. Alguem poderia me auxiliar em como corrigir e por que aparece esse erro? Segue o codigo: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>CompanyName - PageName</title> <meta http-equiv="Content-Language" content="en-us" /> <meta http-equiv="imagetoolbar" content="no" /> <meta name="MSSmartTagsPreventParsing" content="true" /> <meta name="description" content="Description" /> <meta name="keywords" content="Keywords" /> <meta name="author" content="Enlighten Designs" /> <style type="text/css" media="all">@import "master.css";</style> </head> <body bgcolor="#000000"> <div id="page-container"> <div id="content"> <?php // Selecionar servidor $conectar = mysql_connect("localhost", "root", "") or die ("Erro ao logar no BD"); // Selecionar BD mysql_select_db("Ujoke", $conectar); // Pegar a página atual por $p = $_GET['p']; [b]O ERRO OCORRE NESSA LINHA[/b] // Verifica se a variável tá declarada, senão deixa na primeira página como padrão if(isset($p)) { $p = $p; } else { $p = 1; } // Defina aqui a quantidade máxima de registros por página. $qnt = 5; // O sistema calcula o início da seleção calculando: // (página atual * quantidade por página) - quantidade por página $inicio = ($p*$qnt) - $qnt; // Seleciona no banco de dados com o LIMIT indicado pelos números acima $sql_select = "SELECT * FROM posts where tipo='noticia' LIMIT $inicio, $qnt"; // Executa o Query $sql_query = mysql_query($sql_select); // Cria um while para pegar as informações do BD while($array = mysql_fetch_array($sql_query)) { // Variável para capturar o campo 'nome' no banco de dados $titulo = $array["titulo"]; $descricao = $array["descricao"]; $usuario = $array["user"]; $data = $array["data"]; // Exibe o nome que está no BD e pula uma linha echo "<h1 align='center'> ".$titulo."</h1><p><b>".$descricao."</b> <p>postado por: ".$usuario." ".$data."<br /> "; } // Depois que selecionou todos os nome, pula uma linha para exibir os links(próxima, última...) echo "<br />"; // Faz uma nova seleção no banco de dados, desta vez sem LIMIT, // para pegarmos o número total de registros $sql_select_all = "SELECT * FROM posts where tipo = 'noticia'"; // Executa o query da seleção acimas $sql_query_all = mysql_query($sql_select_all); // Gera uma variável com o número total de registros no banco de dados $total_registros = mysql_num_rows($sql_query_all); // Gera outra variável, desta vez com o número de páginas que será precisa. // O comando ceil() arredonda 'para cima' o valor $pags = ceil($total_registros/$qnt); // Número máximos de botões de paginação $max_links = 3; // Exibe o primeiro link 'primeira página', que não entra na contagem acima(3) echo "<a href='index.php?p=1' target='_self'>primeira pagina</a>"; // Cria um for() para exibir os 3 links antes da páginaaa atual for($i = $p-$max_links; $i <= $p-1; $i++) { // Se o número da página for menor ou igual a zero, não faz nada // (afinal, não existe página 0, -1, -2..) if($i <=0) { //faz nada // Se estiver tudo OK, cria o link para outra página } else { echo "<a href='index.php?p=".$i."' target='_self'>".$i."</a> "; } } // Exibe a página atual, sem link, apenas o número echo $p." "; // Cria outro for(), desta vez para exibir 3 links após a página atual for($i = $p+1; $i <= $p+$max_links; $i++) { // Verifica se a página atual é maior do que a última página. Se for, não faz nada. if($i > $pags) { //faz nada } // Se tiver tudo Ok gera os links. else { echo "<a href='index.php?p=".$i."' target='_self'>".$i."</a> "; } } // Exibe o link "última página" echo "<a href='index.php?p=".$pags."' target='_self'>ultima pagina</a> "; ?> </div> </div> </body> </html> Desde já, obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Setembro 19, 2011 $p = $_GET['p']; [b]O ERRO OCORRE NESSA LINHA[/b] // Verifica se a variável tá declarada, senão deixa na primeira página como padrão if(isset($p)) { $p = $p; } else { $p = 1; } @tarlix, No fragmento destacado você faz: 1. Define a variável $p com o conteúdo de $_GET['p']. 2. Verifica se $p foi definido. Agora veja só: define $p se $p estiver definido { ... } senao { ... } Como $p foi definido, a verificação será sempre verdadeira. O problema é que você está utilizando $_GET['p'] sem verificar se ele foi passado e, é justamente ai o erro no seu código. Corrija para: if ( isset( $_GET[ 'p' ] ) ) { $p = (int) $_GET[ 'p']; if ( $p < 1 ) { $p = 1; } } else { $p = 1; } Não vi o restante do seu código, mas faça essa modificação e verifique se está ok. Compartilhar este post Link para o post Compartilhar em outros sites
tarlix 0 Denunciar post Postado Setembro 19, 2011 Po, é isso mesmo!!! valeu cara, funcionou perfeitamente... Voce poderia me explicar melhor sobre esse _Get? o 'p' seria a variavel que eu criei? por exemplo, se fosse $a seria: $a = (int) $_GET['a']; ? Só mais uma coisa... o que significa esse "isset"? Valeu. Compartilhar este post Link para o post Compartilhar em outros sites