En php urls, ¿puedo usar algo como ?name=Item+Name?

El sitio que administro usa direcciones URL de php para mostrar un archivo detail.php dinámicamente para cada producto (todavía es nuevo en php, tenga paciencia conmigo).

actualmente se ven así:

domain.com/detail.php?id=123

¿Puedo usar un atributo diferente (no estoy seguro de si se llama así) para poder tener direcciones URL un poco más fáciles de usar?

Me gusta:

domain.com/detail.php?name=Product+Name

y si es así... ¿cómo? Por mi vida, no puedo descifrarlo o buscar los términos correctos (probablemente aún no sepa sus nombres correctos). Pensé que sería simple como un %20 en lugar de los espacios, pero como probablemente todos saben, esto no es suficiente.

Tengo el nombre establecido en varchar, y no tengo idea si eso hace la diferencia.

Cualquier ayuda es apreciada, esto no es algo urgente.

preguntado el 02 de mayo de 12 a las 19:05

¿Puedes mostrar el código que genera esta URL? -

">solo un ejemplo de una URL de lista de elementos destacados:

¿Y eso no funciona para ti, tal como es, dejando el espacio allí solo como un espacio y sin codificarlo ni decodificarlo? -

Desearía poder decir que entiendo completamente su pregunta. cuando lo hago de la misma manera reemplazando 'id' con 'nombre' e id= con nombre= todos los espacios van a %20's, y el contenido está vacío -

Echa un vistazo a mi respuesta debajo. -

5 Respuestas

Hay algunos métodos diferentes para lograr lo que quieres. Sin profundizar directamente en el código PHP para cambiar la lógica subyacente, podría echar un vistazo a habilitar y configurar mod_rewrite dentro de su implementación de Apache. Aquí hay un tutorial rápido y simple de mod_rewrite:

http://www.htmlist.com/how-to/a-simplemod_rewrite-tutorial/

contestado el 02 de mayo de 12 a las 19:05

He estado revisando todos los tutoriales de mod_rewrite que existen, y pensé que ese sería el siguiente paso. ¿No sería una regla mod_rewrite más simple si la URL ya tuviera el nombre del producto? - pablo_el_dino

Realmente no estoy seguro de dónde está teniendo problemas. Este ejemplo muy básico funciona bien para mí:

<?php
    if (isset($_GET["name"]))
        die("name = {$_GET["name"]}");    /* outputs "name = Product Name" */

    $row = "Product Name";
?><a href="test.php?name=<?php echo $row; ?>">Click here</a>

contestado el 02 de mayo de 12 a las 19:05

Puedo hacer que el nombre del producto salga bien en la URL, creo que Marc B conoce el problema, creo que es con mi consulta en mi página de detalles. - pablo_el_dino

Mira las funciones para trabajar con URLs en PHP: http://www.php.net/manual/en/ref.url.php.

contestado el 13 de mayo de 12 a las 19:05

Probablemente estés buscando el método PHP urlencode() para codificar una cadena para que pueda pasarse como una variable de cadena de consulta. A continuación, puede usuario urldecode() para decodificar la variable de cadena de consulta.

contestado el 02 de mayo de 12 a las 19:05

Entonces, ¿funcionaría algo como esto? '; ?> - pablo_el_dino

@paul_the_dino Sí, algo así. Esto probablemente funcionaría <?php echo '<a href="detail.php?name=' . urlencode($row_featuredItems['name']) . '">'; ?> - cristofer eliasson

Probablemente no esté creando su consulta correctamente, y eso significaría que es vulnerable a los ataques de inyección SQL. Recuperar un valor de cadena de una consulta no es diferente a recuperar un número entero, pero la forma en que usa esa cadena más adelante SÍ hace una gran diferencia:

$name = $_GET['name'];
$safe_name = mysql_real_escape_string($name);
$sql = "SELECT ... FROM yourtable WHERE name='$safe_name'";
$result = mysql_query($sql) or die($sql);

Cuando se usan cadenas en las consultas, DEBEN estar entre comillas. Si no lo son, se tratan como nombres de campos, nombres de tablas, etc.

contestado el 02 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.