[RESOLVIDO] Script Criando URL's amigáveis em PHP

Visualizei a vídeo aula e fiz tudo certinho, deu tudo certo como o demonstrado, só que faltou a demonstração de como usar a URL cadastrada no banco de dados funcionar.
Eu tô criando um pequeno sistema de notícia e tenho um banco de dados tudo funcionando perfeitamente, mas quero mudar a minha URL, acredito que com a explicação melhor e exemplos de funcionamento eu possa resolvê-la. Obrigado.

Comentários

  • Ola amigo tudo bem? Bom a simples você vai precisar criar um lançador para esta url usando a tag de ancora "a". 

    Exemplo:

    Página 1 - Onde está o titulo da notícia:

    Vc vai criar da sua maneira o HTML, aqui só vou te explicar o PHP. No meu caso vou criar um Link:

    <a href="noticia.php?title=noticia-sobre-um-assunto" >Noticia sobre um assunto </a>

    Está linha acima é que vai ficar para seu usuário, mais por traz dela o seu servidor vai interpretar o php que é mais ou menos assim:

    Vc vai dar um SELECT no banco de dados puxando as notícias por ordem de id ou data da maneira que quiser, ai vc vai criar as variáveis para receber estes dados, vamos como exemplo dizer que vc criou uma variável chamada $url para receber o url amigável gravado no banco e a variavel $titulo para pegar o titulo.

    Aquela mesma linha acima ficara assim +-:

    <a href="noticia.php?title=<?php echo $url ?>" ><?php echo $titulo ?> </a>

    Assim concluímos a página que contem o lançador, não estou entrando em detalhes do select e do loop para puxar as notícias por que estou partindo do ponto que vc já conhece este assunto.

    Ai agora vamos para a página 2 - Onde está a noticia:

    A primeira coisa é criar uma variável para receber o GET do title correto?

    $pegaURL= $_REQUEST['title'];

    Feito isto agora é só vc construir o select e colocar no WHERE assim:

    WHERE url = '$pegaURL'

    Sendo assim sua página só ira pegar a noticia que conter aquela url que está no navegador.

    Importante:

    - É de extrema importância blindar o sistema contra URL Injection, temos aulas no canal especificas para isto.
    - Outra coisa a duplicação de url pode causar conflitos, então sugiro pegar a data atual e gravar junto da url amigável fincando algo mais ou menos assim: 

    $url=  url_amigavel($titulo)."-".date("d-m-Y", strtotime($data));

    Lembrando que a variável data pode ser puxada do sistema ou do próprio campo input para cadastrar a data da notícia.

    Espero que tenha te ajudado e aguardo retorno!





    area
    area
    area
    area
    area

    image
  • Muito obrigado Emerson, vou colocar em prática. Qualquer coisa volto a perguntar...rsrs  ;)
  • Não consegui êxito... :(

    Meu código abaixo:
    <?php
                    include('admin/conn.php');
                   
                    mysql_select_db($basedados, $conn);
                    //SELECT * FROM noticias ORDER BY id DESC | WHERE id='1'
                    $resultado = mysql_query("SELECT * FROM noticias WHERE id='7'");
                   
                    while($linha = mysql_fetch_array($resultado)) {
                    echo   "<h1><a href='#'>".$linha['titulo']."</a></h1>";
                    echo   "<br />";
                    echo   "<h2>Postado por: ".$linha['autor']." | em ".$linha['data']."</h2>"; //Linha do Autor e Data
                    echo "<br />";
                    //echo  "<p>".$linha['texto']."</p>"; //Linha do corpo da notícia
                    echo "<img src='imagens/noticias/".$linha['imagem']."' alt='Imagem' align='left' width='225' height='162' />"; //Linha da imagem da notícia
                    echo   "<br />";
                    }
               
                    mysql_close($conn);
    ?>

    Coloquei como seu exemplo acima mas apareceu um erro.
  • <a href='#'> o href ainda está com a tralha.... 

    area
    area
    area
    area
    area

    image
  • Mas eu mudei e continuou dando erro.
  • Qual erro retorna?

    area
    area
    area
    area
    area

    image
  • Cara eu tentei de todas as formas, pesquisei e não encontrei a solução, mas voltei aqui e fui analisar o seu exemplo e tive outras lógicas próprias e juntei tudo e coloquei em prática e funcionou perfeitamente.
    Só tenho a agradecer pela sua paciência de me mostrar o caminho o resto eu consegui na persistência. Obrigado!
    :)>-
  • Isto ai amigo parabéns! Minha ideia é esta mesmo, fazer com que você pense no que disse e transforme isto em ação. Se puder postar sua solução para outras pessoas que talvez tenham o mesmo problema ficarei agradecido.

    area
    area
    area
    area
    area

    image
  • MEU CÓDIGO MODIFICADO

    As linhas com as cores vermelhas foram as modificadas e criadas para receber e enviar a URL Amigável.
    <?php

                    include('admin/conn.php');
                    
                    mysql_select_db($basedados, $conn);
                    //SELECT * FROM noticias ORDER BY id DESC | WHERE id='1'
                    $resultado = mysql_query("SELECT * FROM noticias WHERE id='7'");
                    while($linha = mysql_fetch_array($resultado)) {
                        $url = $linha['url']; //Variável criada para capturar a URL do banco de dados
                    echo   "<h3><a href='noticias/2015/03/03.php?title=$url'>".$linha['titulo']."</a></h3>"; // Esta linha foi modificada
                    echo   "<br />";
                    echo   "<h2>Postado por: ".$linha['autor']." | em ".$linha['data']."</h2>"; //Linha do Autor e Data
                    echo "<br />";
                    //echo  "<p>".$linha['texto']."</p>"; //Linha do corpo da notícia
                    echo "<img src='imagens/noticias/".$linha['imagem']."' alt='Imagem' align='left' width='225' height='162' />"; //Linha da imagem da notícia
                    echo   "<p><a href='#'>".$linha['detalhe']."</a></p>";
                    
                    echo   "<br />";
                    }
                
                    mysql_close($conn);
                ?>

    PÁGINA QUE RECEBE A NOTÍCIA QUANDO O USUÁRIO CLICA.
    <?php
                   
    mysql_select_db($basedados, $conn);
                    //SELECT * FROM noticias ORDER BY id DESC | WHERE id='1'
                    $pegaURL = $_REQUEST['title']; //Pega a requisicao do GET
                    $resultado = mysql_query("SELECT * FROM noticias WHERE url = '$pegaURL'"); //Pega a url passada pelo método GET
                   
                    while($linha = mysql_fetch_array($resultado)) {
                    echo   "<h1>".$linha['titulo']."</h1>";
                    echo   "<h2>".$linha['detalhe']."</h2>";
                    echo   "<h3>Postado por: ".$linha['autor']." | em ".$linha['data']." | Fonte: ".$linha['fonte']."</h3>"; //Linha do Autor e Data
                    echo   "<br />";
                    echo  "<p>".$linha['texto']."</p>"; //Linha do corpo da notícia
                    echo   "<br />";
                    }
               
                    mysql_close($conn);

                   
                ?>


    Já o restante recebe a noticia cadastrada no banco de dados...
    Bom tive que fazer testes e testes para reduzir ao máximo e deixar o código mais limpo e ficou assim, como demonstrado acima....

    No meu caso funcionou perfeitamente, espero que nos outros funcionem também.
    Ainda vou fazer melhorias afim de ficar bem perfeito....
    :)>-
Este tópico está fechada.