PHP - Sistema de noticias + Url amigables htaccess

 
Vista:
Imágen de perfil de Javier

Sistema de noticias + Url amigables htaccess

Publicado por Javier (11 intervenciones) el 20/12/2016 16:08:56
Buenas tardes a todos:

Estoy implementando un sistemas de noticias desde 0 y hasta ahora ha funcionado bastante bien. Todo funciona correctamente, eso sí, con la ur noticia.php?id=x Siendo X el ID que recoge de la busqueda.

Esto como digo funciona perfectamente. El problema viene al querer cambiar esa URL por una amigable. Y es que aunque la URL se me modifica, no me llega a cargar el contenido.

Me gustaría que la URL fuera noticia/titulo-de-la-noticia.
Por lo que he leido es más recomendable hacerlo con el ID por delante noticia/01/titulo-de-la-noticia.

Os dejo el código para que lo veáis mejor y podaís orientarme

.htaccess

1
2
3
4
5
6
7
8
9
# Activar RewriteEngine
RewriteEngine on
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
 
RewriteBase /
 
Rewriterule ^noticia/([0-9]+)/(.+) noticia.php?id=$1&titulo=$2


Blog (Aquí listo las noticias)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
function urls_amigables($url) {
 
// Tranformamos todo a minusculas
 
$url = strtolower($url);
 
//Rememplazamos caracteres especiales latinos
 
$find = array('á', 'é', 'í', 'ó', 'ú', 'ñ');
 
$repl = array('a', 'e', 'i', 'o', 'u', 'n');
 
$url = str_replace ($find, $repl, $url);
 
// Añaadimos los guiones
 
$find = array(' ', '&', '\r\n', '\n', '+');
$url = str_replace ($find, '-', $url);
 
// Eliminamos y Reemplazamos demás caracteres especiales
 
$find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/');
 
$repl = array('', '-', '');
 
$url = preg_replace ($find, $repl, $url);
 
return $url;
 
}
?>
 
 
 
<a href="noticia/'.$id.'/'.urls_amigables($titulo).'/"; "title="'.$titulo.'">'.$titulo.'</a>


Noticia (donde se muestra la noticia)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
!DOCTYPE html>
 
<html class="template-page-post-image">
 
	<head>
<base href="https://dominio.es" />
<?php
require('conexionBD.php');
 
$id=$_GET["id"];
$titulo=$_GET["titulo"];
 
if ($id=$_GET["id"]){
$con_articulos = "SELECT * FROM articulos inner join metas on articulos.id =  metas.id_articulo where articulos.id = $id";
$resultado = mysqli_query($conexion, $con_articulos);
 
while ($tabla= mysqli_fetch_array($resultado)){
variables...


¿Sabéis por qué no carga o qué está dando conflicto?

¡Muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Sistema de noticias + Url amigables htaccess

Publicado por xve (6935 intervenciones) el 20/12/2016 17:06:38
Hola Javier, has revisado que en la noticia llegue el $_GET["id"] correctamente?

Esta linea esta mal:
1
if ($id=$_GET["id"]){
tendria que ser:
1
if ($id==$_GET["id"]){
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Sistema de noticias + Url amigables htaccess

Publicado por kip (877 intervenciones) el 20/12/2016 17:21:45
Hola, supongo que en esta linea intentas verificar si esta definida la variable $_GET['id'] no?

1
if ($id=$_GET["id"]){

Si es asi debes usar isset() y tambien empty() para verificar que no este vacia, si no lo es y estas comparando (algo que no vel logico ya que mas arriba le asignas a $id el mismo valor de $_GET['id']) debes usar el doble ==.

Te lanza algun mensaje de error especifico o simplemente no muestra nada?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Javier

Sistema de noticias + Url amigables htaccess

Publicado por Javier (11 intervenciones) el 21/12/2016 08:34:03
Primero y antes de nada gracias.

He revisado lo que me habéis comentado y pasa algo cuanto menos curioso.

Cuando accedo a la noticia mediante el siguiente código, este pese a que no valide en el GET funciona.
1
<a href="noticia.php?id='.$id.'" title="'.$titulo.'">

Si lo hago con la Url amigable no carga.
1
<a href="noticia/'.$id.'/'.urls_amigables($titulo).'/"; "title="'.$titulo.'">'.$titulo.'</a>


Es decir, el GET si llega de una página a otra, el problema es cuando la URL cambia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Javier

Sistema de noticias + Url amigables htaccess

Publicado por Javier (11 intervenciones) el 22/12/2016 10:53:03
¿Sabemos algo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Javier

Sistema de noticias + Url amigables htaccess

Publicado por Javier (11 intervenciones) el 30/12/2016 09:18:19
He estado verificando, y es como si el .htaccess no cogiese las variables. ¿alguien más le ha ocurrido?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar