Foros del Web » Programando para Internet » PHP »

Pasar Variable php con Rewrite

Estas en el tema de Pasar Variable php con Rewrite en el foro de PHP en Foros del Web. Hola a todos, llevo varios días con el mismo tema y no progreso. Quiero pasar url dinámicas a estáticas pero tengo problemas para pasar las ...
  #1 (permalink)  
Antiguo 04/03/2008, 05:53
 
Fecha de Ingreso: abril-2007
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Pasar Variable php con Rewrite

Hola a todos, llevo varios días con el mismo tema y no progreso. Quiero pasar url dinámicas a estáticas pero tengo problemas para pasar las variables. Voy a poneros un ejemplo a ver si alguien me puede pegar un empujón.

Tengo dos paginas, un index.php donde mostrare el previo de todas las noticias y después un archivo llamado noticia.php donde voy a mostrar el texto completo de la noticia.

Mi idea es en la url en vez de salir noticia.php?idnoticia=1 quiero que salga titulo-de-la-noticia.html. Pero configuro el rewrite, me crea bien la url pero la variable no la recibe la pagina noticia.php y entonces no muestra ningun noticia. Aquí tenéis el código de cada pagina, gracias


Archivo index.php
Código PHP:
<?
include("dinamic/conex_as.php");

$conexion=mysql_connect($host,$usuario_db,$pass_usuario_db);
$seldb=mysql_select_db($basedatos);

//Hago la consulta
$sop "SELECT * FROM noticias ORDER BY idnoticia ";
//Guardo el resultado
$result mysql_query($sop);
while (
$lista mysql_fetch_array($result)){ 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<a href="<?=$lista["url"];?>"><?=$lista["titulo"];?></a>
</body>
</html>
<?
}
mysql_close($conexion);
?>
Archivo noticia.php
Código PHP:
<?
include("dinamic/conex_as.php");

$conexion=mysql_connect($host,$usuario_db,$pass_usuario_db);
$seldb=mysql_select_db($basedatos);

//Hago la consulta
$sop "SELECT * FROM noticias WHERE url=".$_GET["url"]." ";
//Guardo el resultado
$result mysql_query($sop);
while (
$lista mysql_fetch_array($result)){ 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?=$lista["titulo"];?></title>
</head>

<body>


<?=$lista["titulo"];?>




</body>
</html>
<?
}
mysql_close($conexion);
?>
Archivo .htaccess
Código:
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ /noticia.php?url=$1 [QSA]
Gracias a todos....

Última edición por kk0rps; 04/03/2008 a las 08:57
  #2 (permalink)  
Antiguo 04/03/2008, 11:21
 
Fecha de Ingreso: abril-2007
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Re: Pasar Variable php con Rewrite

¿Nadie me puede ayudar?, siempre busco en Google, pero esta vez no encuentro la solución...
  #3 (permalink)  
Antiguo 04/03/2008, 12:05
Avatar de marweb  
Fecha de Ingreso: marzo-2007
Ubicación: Ciudad de Panama
Mensajes: 125
Antigüedad: 17 años
Puntos: 1
Re: Pasar Variable php con Rewrite

xq te enredas pasando el url , si puedes usar directamente el id de la noticia, y te recomiendo declarar las variables antes no en el mismo query.
__________________
Mario Rios - Webmaster
Diseño web en panama / Real Estate / Abogados de Panama
  #4 (permalink)  
Antiguo 04/03/2008, 15:11
 
Fecha de Ingreso: abril-2007
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Re: Pasar Variable php con Rewrite

Cita:
Iniciado por marweb Ver Mensaje
xq te enredas pasando el url , si puedes usar directamente el id de la noticia, y te recomiendo declarar las variables antes no en el mismo query.
Gracias por tu respuesta, lo acabo de cambiar por la idnoticia, pero no entiendo como voy a pasarle la idnoticia al noticia.php si en el vinculo por ejemplo pongo

<a href="<?=$lista["url"];?>.html">Ver noticia completa</a>

Como el archivo noticia.php va saber el idnoticia?

Si en el vinculo pongo

<a href="noticia.php?idnoticia=<?=$lista["idnoticia"];?>">Ver noticia Completa</a>

Me carga bien la noticia completa pero en la url no aparece como yo quiero, es decir, con el nombre de la url que yo necesito.
  #5 (permalink)  
Antiguo 04/03/2008, 15:25
Avatar de marweb  
Fecha de Ingreso: marzo-2007
Ubicación: Ciudad de Panama
Mensajes: 125
Antigüedad: 17 años
Puntos: 1
De acuerdo Re: Pasar Variable php con Rewrite

asi mas o menos lo haria yo.

index.php
Código PHP:
<?php 
$caracteresespeciales 
= array(" ""/""*""!""$""%""&""/""("")""=""?""¿""'""á""é""í""ó""ú""ñ""Ñ","©","@","®");

//Hago la consulta
$sop "SELECT * FROM noticias";
//Guardo el resultado
$result mysql_query($sop);

while(
$rnews=mysql_fetch_array($result)) {
$title $rnews["titulo_noticia"];
$namenews str_replace($caracteresespeciales,"_",$title);
?>
<?php 
echo $title;?><br>
<a href="noticia-<?php echo $namenews?>-<?php echo $rnews["idnoticia"]; ?>.html" title="<?php echo $title?>">Ver noticia Completa</a>
<?php 
}                    
?>

noticia.php
Código PHP:
<?
include("dinamic/conex_as.php");

$idnoticia $_GET["idnoticia"];

$conexion=mysql_connect($host,$usuario_db,$pass_usuario_db);
$seldb=mysql_select_db($basedatos);

//Hago la consulta
$sop "SELECT * FROM noticias WHERE idnoticia=$idnoticia";
//Guardo el resultado
$result mysql_query($sop);
while (
$lista mysql_fetch_array($result)){ 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?=$lista["titulo"];?></title>
</head>

<body>


<?=$lista["titulo"];?>




</body>
</html>
<?
}
mysql_close($conexion);
?>

mod_rewrite .htaccess:


Código:
# .htaccess file 
Options FollowSymLinks
#activacion del motor de escritura
RewriteEngine On
#aca van las reglas de reescritura
RewriteRule ^noticia-(.*)-(.*).html$ noticia.php?idnoticia=$2
__________________
Mario Rios - Webmaster
Diseño web en panama / Real Estate / Abogados de Panama
  #6 (permalink)  
Antiguo 04/03/2008, 16:43
 
Fecha de Ingreso: abril-2007
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Re: Pasar Variable php con Rewrite

Gracias por tu respuesta, lo acabo de probar como me comentas, todo correcto pero al cargar la noticia completa no la muestra, por lo visto no llega la variable idnoticia para que muestre el contenido correctamente, la url la hace bien pero muestra la página en blanco...

En noticia.php estor recibiendo bien el idnoticia?, no se hace lio con el nombre de la url? Es como si se liara con .html, que lio!
  #7 (permalink)  
Antiguo 04/03/2008, 19:41
Avatar de marweb  
Fecha de Ingreso: marzo-2007
Ubicación: Ciudad de Panama
Mensajes: 125
Antigüedad: 17 años
Puntos: 1
Pregunta Re: Pasar Variable php con Rewrite

probaste con hacer un echo de $idnoticia?
__________________
Mario Rios - Webmaster
Diseño web en panama / Real Estate / Abogados de Panama
  #8 (permalink)  
Antiguo 04/03/2008, 20:02
Usuario no validado
 
Fecha de Ingreso: septiembre-2007
Ubicación: Cuba
Mensajes: 202
Antigüedad: 16 años, 7 meses
Puntos: 5
Re: Pasar Variable php con Rewrite

MIra mano lo ideal es crear un campo en la tabla de la Bd que se llame como ams te guste en este caso url_amigable (por poner un ejemplo)

debes de cojer el titulo de la noticia cuando la insertas y hacer una cadena para que te reemplase todos los caracteres especiales, espacio, etc por _ o - como mas gustes y el resultado de esa cadena es el del campo url_amigable en la pagina notica.php lo que debes es hacer una consulta donde esta va a mostrar todo el contenido de la consulta donde el parametro url = a $_Get['url']
mas o menos asi
Código PHP:
$url  =$_GET['url']
$consulta "SELECT titulo, noticia FROM mi_tabla WHERE url_amigable ='$url'"
luego en el .htaccess
Código:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^noticias/(.+)\.htm noticia.php&url=$1
Espero te sirva, yo lo tengo asi y me funciona la las mil maravillas

Salu2
reyvi
  #9 (permalink)  
Antiguo 05/03/2008, 02:48
 
Fecha de Ingreso: abril-2007
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Re: Pasar Variable php con Rewrite

Cita:
Iniciado por reyvi Ver Mensaje
MIra mano lo ideal es crear un campo en la tabla de la Bd que se llame como ams te guste en este caso url_amigable (por poner un ejemplo)

debes de cojer el titulo de la noticia cuando la insertas y hacer una cadena para que te reemplase todos los caracteres especiales, espacio, etc por _ o - como mas gustes y el resultado de esa cadena es el del campo url_amigable en la pagina notica.php lo que debes es hacer una consulta donde esta va a mostrar todo el contenido de la consulta donde el parametro url = a $_Get['url']
mas o menos asi
Código PHP:
$url  =$_GET['url']
$consulta "SELECT titulo, noticia FROM mi_tabla WHERE url_amigable ='$url'"
luego en el .htaccess
Código:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^noticias/(.+)\.htm noticia.php&url=$1
Espero te sirva, yo lo tengo asi y me funciona la las mil maravillas

Salu2
reyvi
Hola, gracias por tu respuesta, lo estoy probando como dices pero sigue sin recibir la variable, te pongo el código a ver si puedes ver algún error, gracias.

index.php

Código PHP:
<?
include("dinamic/conex_as.php");

$conexion=mysql_connect($host,$usuario_db,$pass_usuario_db);
$seldb=mysql_select_db($basedatos);


//Hago la consulta
$sop "SELECT * FROM noticias ORDER BY idnoticia DESC ";
//Guardo el resultado
$result mysql_query($sop);

while(
$lista=mysql_fetch_array($result)) { 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Noticias</title>
</head>

<body>
<a href="<?=$lista["url"];?>" title="<?=$lista["titulo"];?>">Ver noticia Completa</a> 
</body>
</html>
<?
}
?>
Noticia.php
Código PHP:
<?
include("dinamic/conex_as.php");

$url $_GET["url"]; 


$caracteresespeciales = array(" ""/""*""!""$""%""&""/""("")""=""?""¿""'""á""é""í""ó""ú""ñ""Ñ","©","@","®","-","html"); 

$nombre_url str_replace($caracteresespeciales,"_",$url); 

$conexion=mysql_connect($host,$usuario_db,$pass_usuario_db);
$seldb=mysql_select_db($basedatos);

//Hago la consulta
$sop "SELECT * FROM noticias WHERE url='$nombre_url'";  
//Guardo el resultado
$result mysql_query($sop);
while (
$lista mysql_fetch_array($result)){ 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?=$lista["titulo"];?></title>
</head>

<body>


<?=$lista["titulo"];?>




</body>
</html>
<?
}
mysql_close($conexion);
?>
y el .htaccess
Código:
# .htaccess file 
Options FollowSymLinks
#activacion del motor de escritura
RewriteEngine On
#aca van las reglas de reescritura
RewriteRule ^(.*)-(.*).html$ noticia.php?url=$2
  #10 (permalink)  
Antiguo 05/03/2008, 03:02
 
Fecha de Ingreso: abril-2007
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Re: Pasar Variable php con Rewrite

Lo acabo de conseguir, me dado cuenta que el .htaccess le faltaba el ?, ahora ya me funciona, muchas gracias
  #11 (permalink)  
Antiguo 03/05/2008, 08:40
 
Fecha de Ingreso: mayo-2007
Mensajes: 348
Antigüedad: 16 años, 11 meses
Puntos: 9
Re: Pasar Variable php con Rewrite

Una pequeña pregunta:

Para mostra la noticia completa es sencillo (tengo una select y muestro todo el campo ) pero...

Que debo hacer para mostrar solo una pequeña información de la noticia en un index por ejemplo.


Gracias!!

PD:
Tenia pensado hacer 2 campos (id=1 --> para una pequeña parte de la noticia que seria mostrada en el index y id=2 --> que seria toda la noticia completa y sería la que mostraria en "Leer más" por ejemplo ) la verdad es que esta solución es un poco coñaza
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:41.