Foros del Web » Programando para Internet » PHP »

la url no toma la id

Estas en el tema de la url no toma la id en el foro de PHP en Foros del Web. Hola. Tengo este link: Código PHP: <a href=' <?php  echo  $oUrl -> makeProductURL ( ".$row[categoria_id]." );  ?> '> <?php  echo  $row [ 'categoria_id' ];  ?> </a> ...
  #1 (permalink)  
Antiguo 06/11/2009, 10:12
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Exclamación la url no toma la id

Hola.

Tengo este link:

Código PHP:

<a href='<?php echo $oUrl->makeProductURL(".$row[categoria_id]."); ?>'><?php echo $row['categoria_id']; ?></a>
pero al hacer click no muestra los resultados, me muestra la pagina en blanco, es decir, que el link no agarra la id que le estoy pasando.

class.seo.php
Código PHP:

function makeProductURL ($categoria_id) {
$scape_categoria_id $this->scapeURL($categoria_id);
$scape_subcategoria_id $this->scapeURL($subcategoria_id);
$scape_nombre $this->scapeURL($nombre);
$url 'http://127.0.0.1/productos/'.$scape_categoria_id.'.html';
return 
$url;
}


function 
getCategoryProductUrl() {
//Get id and category product
$categoria_id $_GET['categoria_id'];
$subcategoria_id $_GET['subcategoria_id'];
$nombre $_GET['nombre'];
$categoria_id "";
$subcategoria_id "";
$nombre "";
$url $this->makeProductURL($categoria_id);
return 
$url;


Para que me muestre los resultados tengo este codigo

subcategoria_show.php
Código PHP:

<?php require_once '../class.SEO.php';
$oUrl = new SEO;
$result mysql_query("SELECT * FROM subcategorias WHERE categoria_id='".$_GET['categoria_id']."' ORDER BY id ASC ");
while(
$row mysql_fetch_array($result)){ 

echo......

}

y en el htaccess tengo esto:
Código:
Options +FollowSymlinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . - [L]

RewriteRule ^(.*)\.html subcategoria.php?categoria_id=$1 [L]
RewriteRule ^(.*)\.html producto.php?subcategoria_id=$1 [L]
RewriteRule ^(.*)\.html detalle.php?nombre=$1 [L]
RewriteRule ^(.*)$ $1.php [L,QSA]
Que puede estar pasando ahi????


Gracias de antemano
  #2 (permalink)  
Antiguo 06/11/2009, 10:19
Avatar de Chupytoloco  
Fecha de Ingreso: julio-2007
Mensajes: 88
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: la url no toma la id

MAL

Código PHP:
<?php echo $oUrl->makeProductURL(".$row[categoria_id]."); ?>
BIEN

Código PHP:
<?php echo $oUrl->makeProductURL($row['categoria_id']); ?>
__________________
Creador de blackmoons.net
----------------------------------------------------------------------
  #3 (permalink)  
Antiguo 06/11/2009, 10:29
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: la url no toma la id

Hey gracias, por responder tan rapido y por la correccion, pero el problema persiste, me arroja la pagina en blanco.

Otra cosa que quiero acotar es que en la pagina en blanco, si elimino el guion y dejo el espacio en blanco, ahi si me dan los resultados, es decir, aca:

127.0.0.1/productos/Cannulated-Screws.html -----> resultados en blanco
127.0.0.1/productos/Cannulated Screws.html -----> resultados deseados

Esta es la otra parte de la clase que se me olvido poner:

Código PHP:

function scapeURL ($text) {
$text preg_replace('#[^-a-zA-Z0-9_ ]#'''$text);
$text trim($text);
$text preg_replace('#[-_ ]+#''-'$text);
return 
$text;
}

function 
categoryProductUrl() {
//Get URL
$redirected_url $this->getCategoryProductUrl();
//301 Redirection
if ("http://localhost" $_SERVER['REQUEST_URI'] != $redirected_url) {
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' $redirected_url);
exit();
}


Gracias chupytoloco
  #4 (permalink)  
Antiguo 06/11/2009, 10:38
Avatar de Chupytoloco  
Fecha de Ingreso: julio-2007
Mensajes: 88
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: la url no toma la id

si con espacio en blanco te funciona y con guion "-" no ponle "_"

creo que seria asi:

Código PHP:
function scapeURL ($text) { 
$text preg_replace('#[^-a-zA-Z0-9_ ]#'''$text); 
$text trim($text); 
$text preg_replace('#[-_ ]+#''_'$text); 
return 
$text

__________________
Creador de blackmoons.net
----------------------------------------------------------------------
  #5 (permalink)  
Antiguo 06/11/2009, 10:52
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: la url no toma la id

Nada sigue sin darme resultados.... :(
  #6 (permalink)  
Antiguo 09/11/2009, 17:55
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: la url no toma la id

Nadie puede ayudarme con esto?????
  #7 (permalink)  
Antiguo 09/11/2009, 18:32
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 2 meses
Puntos: 25
Respuesta: la url no toma la id

$text = trim($text);
$text = preg_replace('#[-_ ]+#', '-', $text);

cambialos d posición que queden así:

$text = preg_replace('#[-_ ]+#', '-', $text);
$text = trim($text);
__________________
Hospedaje Web al mejor costo!
  #8 (permalink)  
Antiguo 09/11/2009, 19:07
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: la url no toma la id

Gracias man por contestar pero igual sigue dandome el mismo problema, me sigue arrojando resultados en blanco...
  #9 (permalink)  
Antiguo 09/11/2009, 19:50
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 2 meses
Puntos: 25
Respuesta: la url no toma la id

te lo arroja por que pasa mal la URL... checate la función que genera la URL a la hora de imprimir...

Código PHP:
Ver original
  1. <?php echo $oUrl->makeProductURL($row['categoria_id']); ?>

al clickear ahí que url te aparece?
__________________
Hospedaje Web al mejor costo!
  #10 (permalink)  
Antiguo 09/11/2009, 20:26
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: la url no toma la id

si papa si aparece, tanto como cuando haces el rollOver, como cuando haces click y en la barra de direcciones aparece el url correcto, pero sin resultados.

este
127.0.0.1/productos/Cannulated-Screws.html -----> resultados en blanco

Ahora lo mas extraño es que si en la barra de direcciones le coloco un espacio en blanco por el guion o si sustituyo el guion por el %20, en ambos casos me da el resultado del query

127.0.0.1/productos/Cannulated%20Screws.html -----> resultados deseados

Pero ni con el guion, ni underscore, ni nada, solo el resultado lo da con el espacio en blanco...

Tengo mas de una semana tratando de resolver esto y de verdad no le encuentro la vuelta...

Gracias man!
  #11 (permalink)  
Antiguo 09/11/2009, 20:30
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 2 meses
Puntos: 25
Respuesta: la url no toma la id

q pasa si del .htaccess eliminas RewriteRule . - [L]

o lo pones RewriteRule .- [L]

???
__________________
Hospedaje Web al mejor costo!
  #12 (permalink)  
Antiguo 09/11/2009, 20:34
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: la url no toma la id

nada man, igualito, te pongo la clase completa de seo para que la chequees y el link donde pasa la url

class.seo.php

Código PHP:

<?php

    
class SEO {
        
/*
        Method to replace characters not accepted in URLs
        */
        
function str_replace($scapeURL) {
            
$p = array('-');
            
$r = array(' ');
            
$s=str_replace($p$r$s);
            
$s strtolower($s);
            return 
$scapeURL;
        }

        function 
scapeURL ($text) {
            
// Tranformamos todo a minusculas 
            
$text strtolower($text); 
            
//Rememplazamos caracteres especiales latinos 
            
$find = array('á''é''í''ó''ú''ñ'); 
            
$repl = array('a''e''i''o''u''n'); 
            
$text str_replace ($find$repl$text); 
            
// Añaadimos los guiones 
            
$find = array(' ''&''\r\n''\n''+'); 
            
$text str_replace ($find'-'$text); 
            
// Eliminamos y Reemplazamos demás caracteres especiales 
            
$find = array('/[^a-z0-9\-<>]/''/[\-]+/''/<[^>]*>/'); 
            
$repl = array('-''-''-'); 
            
$text preg_replace ($find$repl$text); 
            
$text trim($text); 
            return 
$text
        }


        function 
cleanurl($string)
            {
            
$cleanurl strtolower($string);
            
$patterns = array('/[^a-z0-9\s]/''/\s\s+/''/\s/''/^-/''/-$/');
            
$replacements = array(' '' ''-''''');
            
$cleanurl preg_replace($patterns$replacements$cleanurl);
            return 
$cleanurl;
        }

        
/*
        Make rich links
        */
        
function categoria ($categoria_id) {
          
$scape_categoria_id $this->scapeURL($categoria_id);
          
$url 'http://127.0.0.1/alpezmed/web/productos/'.$scape_categoria_id.'.html';
          return 
$url;
        }
        function 
subcategoria ($subcategoria_id) {
          
$scape_subcategoria_id $this->scapeURL($subcategoria_id);
          
$url 'http://127.0.0.1/alpezmed/web/productos/'.$scape_subcategoria_id.'.html';
          return 
$url;
        }
        function 
nombre ($nombre) {
          
$scape_nombre $this->scapeURL($nombre);
          
$url 'http://127.0.0.1/alpezmed/web/productos/'.$scape_nombre.'.html';
          return 
$url;
        }
        
/*
        Make URL with special characters
        */
        
function makeProductURLScape ($categoria_id) {
          
$cleanurl_categoria_id $this->cleanurl($categoria_id);
          
$url 'http://127.0.0.1/alpezmed/web/productos/'.$cleanurl_categoria_id.'.html';
          return 
$url;
        }
    }

class 
Redirect extends SEO {
        
/*
        Redirects URL
        */
        
function categoryProductUrl() {
          
//Get URL
          
$redirected_url $this->getCategoryProductUrl();
          
//301 Redirection
          
if ("'http://127.0.0.1/" $_SERVER['REQUEST_URI'] != $redirected_url) {
            
header('HTTP/1.1 301 Moved Permanently');
            
header('Location: ' $redirected_url);
            exit();
          }
        }
        
/*
        Get keyword-rich URL
        */
        
function getCategoryProductUrl() {
          
//Get id and category product
          
$categoria_id $_GET['categoria_id'];
          
$subcategoria_id $_GET['subcategoria_id'];
          
$nombre $_GET['nombre'];

          
/*
          If you have a database
          */
          
$categoria_id "";
          
$subcategoria_id "";
          
$nombre "";
          
//Keyword-rich URL
          
$url $this->categoria($categoria_id$subcategoria_id$nombre);
          return 
$url;
        }
        
/*
        Remove index.php using 301 redirection
        */
        
function removeIndexUrl() {
          
//if the request contains index.php redirect
          
if (preg_match('#(.*)index\.(html|php)$#'$_SERVER['REQUEST_URI'], $captures)) {
            
// 301 redirection
            
header('HTTP/1.1 301 Moved Permanently');
            
header('Location: ' $captures[1]);
          }
        }
    }

?>

categoria_show.php

Código PHP:

 <?php include('../conexion/conectar.php');?>
 <?php require_once '../class.SEO.php';
    
$oUrl = new SEO;
    
$oUrl = new Redirect();
    
    
 
        
$result mysql_query("SELECT * FROM categorias ORDER BY categoria_id ASC ");
            
$filas 5;//o las filas que quieras que tenga la tabla como máximo 
$columnas 4;//o las columnas que quieras  
$final 0;  
echo 
"<table>";  
for(
$i=1;$i<=$filas && $final==0;$i++){  
    echo 
"<tr>";  
    
$n 1;  
    while((
$n%($columnas+1)) != 0){  
        echo 
"<td>";           
        if(
$row mysql_fetch_array($result)){  
            echo 
"
<table width='136' border='0' cellpadding='0' cellspacing='0'>
  <!--DWLayoutTable-->
  <tr>
    <td width='128' height='157' valign='top'><table width='100%' border='1' cellpadding='0' cellspacing='0'>
      <!--DWLayoutTable-->
      <tr>
        <td width='128' height='33' valign='top'><table width='100%' border='0' cellpadding='0' cellspacing='0' bgcolor='#cccccc'>
          <!--DWLayoutTable-->
          <tr>
            <td width='128' height='33' valign='middle'>
              
<div align='center'>"
?><a href='<?php echo $oUrl->categoria("$row[categoria_id]"); ?>'><?php echo $row['categoria_id']; ?></a> <?php echo "</div></td>
          </tr>
            </table></td>
    </tr>
      <tr>
        <td height='97' valign='top'><table width='100%' border='0' cellpadding='0' cellspacing='0'>
          <!--DWLayoutTable-->
          <tr>
            <td width='128' height='97' valign='top'><img src='../img/categorias/$row[img]'></td>
          </tr>
          
          </table></td>
    </tr>
      <tr>
        <td height='19' valign='top'><table width='100%' border='0' cellpadding='0' cellspacing='0' bgcolor='#cccccc'>
          <!--DWLayoutTable-->
          
          <tr>
            <td width='128' height='19' valign='top'><div align='right'><a href='subcategoria.php?categoria_id=$row[categoria_id]' target='_self'>mas...</a></div></td>
          </tr>
          
          </table></td>
    </tr>
    </table>    </td>
    <td width='8'>&nbsp;</td>
  </tr>
  <tr>
    <td height='7'></td>
    <td></td>
  </tr>
  
  
  
  
  
</table>
"
;
        }
        echo 
"</td>";       
        
$n++;  
    }  
    echo 
"</tr>";  
}  

echo 
"</td></tr></table>"
    
?>

htaccess

Código:
Options +FollowSymlinks
RewriteEngine On

RewriteRule ^categoria.html categoria.php

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d


RewriteRule ^(.*)\.html$             subcategoria.php?categoria_id=$1 [L]
RewriteRule ^(.*)\.html$	 producto.php?subcategoria_id=$1 [L]
RewriteRule ^(.*)\.html$	 detalle.php?nombre=$1 [L]

<files .htaccess>
order allow,deny
deny from all
</files>
  #13 (permalink)  
Antiguo 09/11/2009, 20:49
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 2 meses
Puntos: 25
Respuesta: la url no toma la id

en la clase SEO

$find = array(' ', '&', '\r\n', '\n', '+');
$text = str_replace ($find, '-', $text);

noto que falta el array de reemplazo

deberia ser:
$find = array(' ', '&', '\r\n', '\n', '+');
$repl = array('-', '-', '-','-','-');
$text = str_replace ($find, $repl, $text);
__________________
Hospedaje Web al mejor costo!
  #14 (permalink)  
Antiguo 09/11/2009, 20:56
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: la url no toma la id

nada man, igualito... :S
  #15 (permalink)  
Antiguo 09/11/2009, 20:58
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 2 meses
Puntos: 25
Respuesta: la url no toma la id

categoria_show.php
es el archivo que te muestra los datos?
__________________
Hospedaje Web al mejor costo!
  #16 (permalink)  
Antiguo 09/11/2009, 21:03
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: la url no toma la id

si papa, ese archivo va incluido en otro que tiene la estructura de la pagina, de ahi saco el link y como me muestra la data.
Lo que me parece raro es lo que te comentaba arriba, que es que si le quitas el guion a la url, si funciona, es decir, que cannulated%20screws si me muestra los resultados, incluyendo el guion de la clase seo
  #17 (permalink)  
Antiguo 09/11/2009, 21:04
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 2 meses
Puntos: 25
Respuesta: la url no toma la id

y como es el otro file? es lo raro.... por que puede ser un error en la consulta... tienes alguna función que reemplace los guiones en otro file?
__________________
Hospedaje Web al mejor costo!
  #18 (permalink)  
Antiguo 09/11/2009, 21:11
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: la url no toma la id

no nada mas esos 3 codigos que te mostre arriba, solo esos, el que lleva el include es un archivo php, pero lleva son imagenes y texto en general, lo unico que tiene en las dos pimeras lineas es esto

Código PHP:

<?php session_start();?>
<?php 
include('../conexion/conectar.php');?>
y el include('categorias_show.php');
  #19 (permalink)  
Antiguo 09/11/2009, 21:50
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 2 meses
Puntos: 25
Respuesta: la url no toma la id

intenta reemplazar :

RewriteRule ^(.*)\.html$ subcategoria.php?categoria_id=$1 [L]
RewriteRule ^(.*)\.html$ producto.php?subcategoria_id=$1 [L]
RewriteRule ^(.*)\.html$ detalle.php?nombre=$1 [L]


por:
RewriteRule ^([a-zA-Z0-9_-]*).html subcategoria.php?categoria_id=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]*).html producto.php?subcategoria_id=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]*).html detalle.php?nombre=$1 [L]
__________________
Hospedaje Web al mejor costo!
  #20 (permalink)  
Antiguo 09/11/2009, 21:57
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: la url no toma la id

nada hermano, sigue igual.

cabe acotar que el archivo htaccess esta en la misma carpeta productos, donde se encuentran los demas archivos.
  #21 (permalink)  
Antiguo 10/11/2009, 07:52
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: la url no toma la id

Cual podra ser el error???
Por favor que alguien me ayude..... :s

Última edición por Watas; 10/11/2009 a las 08:32
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 01:55.