Ir para conteúdo

Arquivado

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

Gustavuh

Como tratar URL corretamente

Recommended Posts

Saudações.

 

Estou com um pequeno problema, tenho uma página de postagens de um blog como index, e essa página sofre paginação (?pagina=).

 

E quando coloco (propositalmente) "index.php?pagina=" na URL, ele me traz erro de banco "Erreur de syntaxe près de '-5, 5' à la ligne 1".

 

Como faço isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, irmão!

 

Ele ta dando esse erro pq a URL não tá tratada. E eu quero trata-la. Em vez de aparecer esse erro, quero jogar pra uma página Error404.

 

Essa é minha ideia.

 

Como faço isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, mas o que acontece é o seguinte.

 

Fiz isso que vc falou e não deu certo!

 

Eu to fazendo isso na index.php, então na hora que acessa(index.php), em vez de carregar as postagens do banco, tá indo direto pra pagina Error404.php.

 

Como faço pra fazer essa validação após o carregamento da página?

 

Ou quem sabe fazer essa validação a partir da paginação=2 em diante?

 

Ou outra ideia pra fazer isso?

 

Pq não posso mostrar esse erro pro usuario, caso ele tente mudar a URL!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tchê, sem ver o teu script só se gente adivinhar o que você está fazendo...

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
$link = DBConnect();
$quantidade = 5;
$pagina = (isset($_GET['pagina'])) ? (int)$_GET['pagina'] : 1;
$inicio = ($quantidade * $pagina) - $quantidade;
$query = @mysqli_query($link, "SELECT p.postagemID, p.titulo, p.conteudo, p.usuario, p.data, c.categoria FROM blog_postagem as p INNER JOIN blog_categoria as c ON p.categoriaID = c.categoriaID WHERE status = 1 ORDER BY data DESC LIMIT $inicio, $quantidade") or die (mysqli_error($link));
$totalquery = mysqli_num_rows($query);
if ( !$query )
echo '<h2>Nenhuma postagem encontrada!</h2>';
else
while($data = mysqli_fetch_array($query)){
?>
.
.
.
<?php }
$postagens = @mysqli_query($link, "SELECT * FROM blog_postagem") or die(mysqli_error($link));
$numTotal = @mysqli_num_rows($postagens);
$totalPagina= ceil($numTotal/$quantidade);
$anterior = (($pagina - 1) == 0) ? 1 : $pagina - 1;
$posterior = (($pagina+1) >= $totalPagina) ? $totalPagina : $pagina+1;
if($numTotal > 5){
if($pagina <= 1){
echo "<div style='text-align: right; color: #CC3300;'><a href='?pagina=$posterior' style='color: #CC3300; font-weight:bold;'>Próxima ></a></div>";
}elseif($pagina == $totalPagina){
echo "<div style='text-align: right; color: #CC3300;'><a href='?pagina=$anterior' style='color: #CC3300; font-weight:bold;'>< Anterior</a></div>";
}else{
echo "<div style='text-align: right; color: #CC3300;'><a href='?pagina=$anterior' style='color: #CC3300; font-weight:bold;'>< Anterior</a> | ";
echo "<a href='?pagina=$posterior' style='color: #CC3300; font-weight:bold;'>Próxima ></a></div>";
}
}
DBClose($link); ?>

 

 

Minha index.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troque:

$pagina = (isset($_GET['pagina'])) ? (int)$_GET['pagina'] : 1;

Por:

$pagina = ($_GET['pagina'] < '1' OR !ctype_digit($_GET['pagina']))?'1':(int)$_GET['pagina'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na hora que carrego a pagina index.php, da o seguinte erro "Undefined index: pagina".

 

Quando mexo na URL e coloco index.php?pagina=1 não dá mais o erro.

 

Como poderia consertar isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, eu acabei usando da seguinte forma:

 

$pagina = (isset($_GET['pagina']) < '1' OR !ctype_digit($_GET['pagina']))?'1':(int)$_GET['pagina'];

 

Funciona mas não é o que eu gostaria, pois se o usuario tentar colocar na URL, por exemplo "index.php?pagina=" ele encaminha pra primeira pagina. Penso que o usuario ficara meio perdido pois não mostra nenhuma mensagem.

 

O desejavel por minha parte se ele alterasse a URL o site encaminhasse ele pra uma pagina ERROR404.

 

Deixa assim, mas se tiver alguma ideia que possa usar, ficarei grato em saber.

 

Por enquanto não marcarei o post como resolvido!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu faria mais simples.

Troque essa linha inteira por algo assim:

 

 

$pagina = isset($_GET['pagina']) ? (int) $_GET['pagina'] : 0; 
 
if ($pagina == 0)
{
    //  valor inválido
}
else
{
    // mostra a página $pagina
}

 

O "(int)" força que seja inteiro. Se for 0, vazio ou uma string, ele força o valor a ser 0. Então o if verifica se é 0. Se for, mostra o "erro". Caso contrário, mostra a página

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.