Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Vinny

[Resolvido] URLs amigáveis (Friendly URLs) com PHP e MySQL

Recommended Posts

Vinny

Olá pessoal, mas uma vez uma duvida. xD

Estou montando um site de classificados e todas as URLs são amigáveis (Friendly URLs). Porém ainda não consegui transformar as páginas dos anúncios em amigavel. Até o momento o URL é o seguinte:

site.com/index.php?page=anuncio&id=17

Eu quero transformar isso em:

site.com/anuncio-titulo-do-anuncio-postado

Bem, estou com muita duvida em relação a isso, primeiramente qual a melhor forma da transformação?

Primeiramente eu pensei em usar alguma função que capta o titulo do anúncio e substitui espaços e outros com "-", salvar o novo titulo substituido no banco de dados e depois fazer a consulta para retornar com o ID do registro e exibir acessando:

site.com/anuncio-titulo-do-anuncio-postado

Essa é a melhor forma? Qual função eu devo usar para criar o URL amigavel e salvar no banco de dados?

Como devo fazer a exibição para que quando o visitante clicar em site.com/anuncio-titulo-do-anuncio-postado ele seja direcionado para a página do anúncio.

Eu tentei fazer esse metodo mas não deu certo, então apaguei tudo e voltei com o site.com/index.php?page=anuncio&id=17.

Alguma indicação neste caso?

Share this post


Link to post
Share on other sites
brunoais

Para esse caso aconselho-te a usar a mesma ideia que o IP.B usa.

Usa um URL do tipo:

site.com/idAnuncio-anuncio-titulo-do-anuncio-postado.

Por exemplo:

Para:

site.com/index.php?page=anuncio&id=17

Fica:

site.com/17-anuncio-titulo-do-anuncio-postado.

Parece-te bem? (se sim, já te ajudo mais, se precisares)


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
Vinny

Parece bem melhor e ajuda a identificar o id do anuncio. Mais o problema é que eu não consigo fazer a exibição do anúncio acessanndo

site.com/17-anuncio-titulo-do-anuncio-postado

Apenas usando:

site.com/index.php?page=anuncio&id=17

Share this post


Link to post
Share on other sites
Vinny

Olá abolinhas,

Agradecido pela dica, mas o .htacees já está configurado. O que pretendo diferente do seu exemplo, é transformar isso:

site.com/index.php?page=anuncio&id=17

Em:

site.com/17-compro-playstation-3/

Nos meus testes eu ainda não adicionei o id do anuncio ao URL, porém eu consigo acessar:

site.com/compro-playstation-3/

Contudo retornar em branco o conteúdo onde deveria aparecer as informações do anuncio.

Eu acho que estou fazendo algo no codigo. Mas ainda tentando encontrar uma solução viavel.

Share this post


Link to post
Share on other sites
Vinny

Consegui um avanço. Ao acessar: site.com/index.php?page=anuncio&url=compro-playstation-3 e depois tentar site.com/compro-playstation-3 recebo esse errp:

Unknown column 'compro' in 'where clause'

Não to conseguindo o codigo reconhecer o campo compro-playstation-3 do banco de dados, o que fazer? Meu codigo é o seguinte:

<?php
$url = $_GET['url'];
//$id = $_GET['id'];

$sql = "SELECT * FROM anuncios WHERE url = {$url}";
$query = mysql_query($sql, $conn) or die(mysql_error());

while ($array = mysql_fetch_assoc($query))
{
if($array['vendido'] == 1){
echo '<div class="alert alert-error">
		<h4 style="text-align:center;">Atenção!</h4>
			Desculpe, mas o anunciante deste item marcou o anúncio como finalizado. Você não poderá mais interagir neste anúncio. Faça uma busca ou crie um novo anúncio.
	</div>';
}

echo '
<div>
<div class="userphoto">
<span class="label label-success">ANUCIANTE</span><br /><br />
<a href="http://facebook.com/'.$array['facebook'].'/"><img class="img-polaroid alt="" src="http://graph.facebook.com/'.$array['facebook'].'/picture?type=large" /></a>
	<br /><strong>'.$array['name'].'</strong> <br />
';

if (false === $registerOrLoginNeeded) {

if ($array['username'] === $_SESSION['username'] and $array['vendido'] == 0) {


echo '<br />

		<div class="btn-group">
			<a class="btn btn-small" href="#"><i class="icon-user icon-black"></i> Ações</a>
			<a class="btn btn-small dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span></a>
				<ul class="dropdown-menu">
					<li><a href="#"><i class="icon-pencil"></i> Atualizar</a></li>
					<li class="divider"></li>
				<li><a href="'.$excluir_anuncio.''.$array['id'].'"><i class="icon-trash"></i> Excluir</a></li>
					<li class="divider"></li>
					<li><a href="'.$vendido.''.$array['id'].'"><i class="icon-ban-circle"></i> Marcar como Vendido</a></li>
				</ul>
		</div>';
}
}

echo '</div>

<h3><span class="label label-warning">'.$array['tipo'].'</span> '.$array['titulo'].'</h3>';

if($array['vendido'] == 0){
echo '<div class="pull-right clearfix" id="redes_sociais">
<a href="https://twitter.com/share" class="twitter-share-button" data-url="'.$ver_anuncio.''.$array['id'].'" data-text="'.$array['titulo'].'" data-lang="pt">Tweetar</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<br />
<div class="fb-like" data-href="'.$ver_anuncio.''.$array['id'].'" data-send="false" data-layout="button_count" data-width="150" data-show-faces="false" data-font="verdana"></div>
</div>';
}	

echo '	
<strong>Preço:</strong> R$ '.$array['preco'].' <br />
<strong>Categoria:</strong> '.$array['categoria'].' <br />
<strong>'.$array['data'].'</strong> <br /><br />
<p>'.nl2br($array['descricao']).'</p>
'.$array['url'].'
</div>

<br />
';

if($array['vendido'] == 1){
echo '<div class="alert alert-error">Este anúncio já foi finalizado, você não pode enviar comentário.</div>';
} elseif ($registerOrLoginNeeded === true) {
echo '<div class="alert alert-error">Você deve estar logado para poder enviar comentários neste anúncio.</div>';
} else {
echo '<div class="fb-comments" data-href="'.$ver_anuncio.''.$array['id'].'" data-width="600" data-num-posts="5"></div>';
}

}
?>

Será que preciso mudar na estrutura da tabela para que reconheça todo o campo?

Share this post


Link to post
Share on other sites
HappyHippyHippo
$sql = "SELECT * FROM anuncios WHERE url = '{$url}'"; // <-------- string na comparação


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Vinny

HappyHippyHippo, perfeito. Muitoooo obrigado.

Ainda na questão das URLs, como faço para que o url retorne o ID do anuncio, exemplo:

site.com/17-compro-playstation-3/

Share this post


Link to post
Share on other sites
HappyHippyHippo

site.com/17-compro-playstation-3/ 
        \/ \----/ \-----------/
        ID  PAGE      URL

RewriteEngine On
RewriteRule ^([^-]*)-([^-]*)-([^-]*)$ /index.php?id=$1&page=$2&url=$3 [L]


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Vinny

Obrigado mas resolvi deixar como:

site.com/anuncio/compro-playstation-3/

Quem sabe eu mude de ideia e coloco o id num futuro.

Deixo meu agradecimento para HappyHippyHippo, abolinhas e brunoais pelas respostas e por me ajudar a resolver este problema. Isto que estava bloqueado os recursos do site, agora o que me resta é finalizar os detalhes. Muito obrigado.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.