Foros del Web » Programando para Internet » PHP »

Vaciar variables y modificar URL

Estas en el tema de Vaciar variables y modificar URL en el foro de PHP en Foros del Web. Buenos días, Tengo una ventana, llamada, consulta_articulos, que muestra una lista con todos los articulos de una empresa. En esa misma ventana, tengo implementado un ...
  #1 (permalink)  
Antiguo 10/04/2010, 03:12
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
Vaciar variables y modificar URL

Buenos días,

Tengo una ventana, llamada, consulta_articulos, que muestra una lista con todos los articulos de una empresa.

En esa misma ventana, tengo implementado un formulario con dos campos y un botón para filtrar la lista, bien por marca o bien por nombre.
En este formulario, cuando el usuario selecciona, por ejemplo, una marca, la lista de articulos mostrada son los propios de esa misma marca.
Esta información la consigo enviando por POST la marca seleccionada y modificando la consulta.

Por otro lado, tengo una paginación fuera del formulario, con esta apariencia:
< 1 2 3 4 5 6 7 8 9 >

Cuando el usuario pulsa, por ejemplo, el enlace correspondiente a la página 2, envío por GET la pagina=2 y, si ha seleccionado previamente, por POST una marca y filtrado el total de articulos, también envío la marca para que me siga mostrando todos los artículos de esa marca, (ahora implementada la consulta por GET), PERO DE LA PÁGINA 2.

Todo esto funciona bien y me ha costado lo mío. Pero la fiesta empieza cuando, después de filtrar por marca, (enviando por POST), pulsar la pagina 2, (enviando por GET la página y la marca), ahora el usuario vuelve a seleccionar OTRA marca. Entonces se envía la información por post, (se hace submit con el botón), pero la URL mantiene la antigua marca y el valor de la antigua pagina.

¿Cómo hago para limpiar las variables de la URL para que, al hacer submit con el botón no me mantenga los valores de la pagina y marca del antiguo envío por GET?

Ahora mismo la URL está así:

"https://www.suresdata.es/consulta_art.php?logo=14&combo_marca=C.ITOH&campo_ nombre=&codigoFamilia=21&pagina=2"

Y necesitaría que se quedara así:
"http://www.suresdata.es/consulta_art.php?logo=14&codigoFamilia=21"

NOTA: Sólo quiero vaciar las variables combo_marca, campo_nombre y página. Vaciarlas y que desaparezcan de la URL Las variables logo y codigoFamilia necesito que se mantengan en la URL, SIEMPRE, con los mismos valores, (en este caso 14 y 21).

Un saludo.

Última edición por Tarzan; 10/04/2010 a las 03:22
  #2 (permalink)  
Antiguo 10/04/2010, 03:47
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Vaciar variables y modificar URL

Así como lo mencionas no es posible ayudarte ya que no muestras código, publica el código del formulario así como la página que procesa el formulario, también muestra el código el cual genera las pagina (paginador)
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 10/04/2010, 03:52
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Vaciar variables y modificar URL

<!-- En el action del formulario no escribimos nada para que coja toda la URL con cada recarga y no se pierda la variable logo que viene por GET -->

<form name='MostrarArticulos' method='POST' action=''>
<!--Variable que se pasa en la url, se escribe DENTRO del Form para que se reenvíe el valor con cada actualización (carga) de página.
Al cargar la página por primera vez, la variable logo, viene por GET, el resto de variables se pasan por POST con cada recarga (Botón Filtrar). -->

<input type='hidden' name='logo' value="<?=$_GET['logo'] ?>">
<?
/* Consulta de todas las marcas de esa Familia para Informar el Combobox */
$sqlMarcas="SELECT DISTINCT marcas.nombre FROM marcas, articulos WHERE marcas.idMarca=articulos.idMarca and articulos.codFamilia =".$IDFamilia."";

/* Se ejecuta la consulta y se obtienen las marcas en $resultadoMarcas */
$Data->ConsultaLibreCampos($sqlMarcas, $resultadoMarcas, $fila2, $columna2);


// Código para actualizar variables cuando se envían por POST (Formulario) o cuando se envían por GET(Paginación)

IF (!$_POST) {
$_POST['comboMarca'] = $_GET["combo_marca"];
$_POST['campoNombre'] = $_GET ["campo_nombre"];
} ELSE IF ($_POST){
$_GET["combo_marca"] = "";
$_GET ["campo_nombre"] = "";
$_GET ["pagina"] = 1;
$ini_pagina = 0;
$fin_pagina = 50;
$combo_marca = "";
$campo_nombre= "";
$pagina= 1;
}

// Código para el comboBox de las marcas, dentro del formulario
<SELECT class=combobox NAME='comboMarca'>
<?
echo "<option value='1'> Todas </option>";
for ($i=0; $i < $fila2; $i++) {
if( $_POST['comboMarca']==$resultadoMarcas[$i]['nombre'])
echo "<option value='".$resultadoMarcas[$i]["nombre"]."' selected>".$resultadoMarcas[$i]['nombre']."</option>";
else
echo "<option value='".$resultadoMarcas[$i]['nombre']."'>".$resultadoMarcas[$i]['nombre']."</option>";
}
?>
</SELECT>

/* Campo Nombre */
<input class=combobox type='text' name='campoNombre' value="<?=$_POST["campoNombre"]?>">

/* Botón Filtrar */
<input class=Formulario TYPE='submit' VALUE='Filtrar'>


<?
$sqlArticulos="SELECT refArticulo, descripcion, marcas.nombre FROM articulos INNER JOIN marcas ON marcas.idMarca=articulos.idMarca WHERE articulos.codFamilia =".$IDFamilia;

/* Consulta el número de artículos pertenecientes a la familia seleccionada */
$num_articulos = "SELECT COUNT(*) FROM articulos INNER JOIN marcas ON articulos.idmarca = marcas.idmarca WHERE codFamilia =".$IDFamilia."";

/* Si se está paginando y filtrando por marca y/o nombre del formulario a la vez.*/
IF (($_GET["pagina"] != "")&&(($_GET["combo_marca"] != "")||($_GET ["campo_nombre"] != ""))){
$marca = " AND marcas.nombre = '".$_GET["combo_marca"]."'";
$nombre= " AND articulos.refArticulo LIKE '%".$_GET ["campo_nombre"]."%'";
}
ELSE IF ( $_POST )
{
IF($_POST['comboMarca'])
IF($_POST['comboMarca'] != 1)
$marca = " AND marcas.nombre = '".$_POST["comboMarca"]."'";

IF($_POST['campoNombre'])
$nombre= " AND articulos.refArticulo LIKE '%".$_POST["campoNombre"]."%'";
}

$num_articulos.= $marca." ".$nombre;
$sqlArticulos .= $marca." ".$nombre;

/* Obtener el número de Artículos de la Familia seleccionada para controlar la Paginación. */
$Data->UnResSimple($num_articulos, $contadorArticulos, $n_articulos);
$num_paginas = ($n_articulos / $paginacion);

$sqlArticulos .= " LIMIT ".$ini_pagina.",".$paginacion;

// Ejecutar la Select General y almacenar el total de registros en la variable $resultadoArticulos.
$Data->ConsultaLibreCampos($sqlArticulos, $resultadoArticulos, $fila1, $columna1);


<?
// Cuando el número de página coincide con el último enlace numérico se mantiene el grupo
if (($pagina % $paginas_por_grupo) == 0) $g_actual = ($pagina / $paginas_por_grupo)-1;

else $g_actual = intval($pagina/ $paginas_por_grupo);

$inicio = $g_actual*$paginas_por_grupo+1;
$fin = $g_actual*$paginas_por_grupo + $paginas_por_grupo;

// Paginación descendente
if ($pagina > $paginas_por_grupo)
// En caso de pulsar el botón +, se realizará una paginación ascendente y se muestran las cartas correspondientes al último mazo del nuevo grupo.

echo "<td><div id='color'><div class='botonColor'><a class='pagina' href='consulta_art.php?logo=14&combo_marca=".$_POS T["comboMarca"]."&campo_nombre=".$_POST["campoNombre"]."&codigoFamilia=".$_GET["codigoFamilia"]."&pagina=".(($g_actual-1)*$paginas_por_grupo+15)."'> < </a></div></div></td>";

// Lista de Paginación
for($i=$inicio;(($i<=$fin)&&($i<=$num_paginas));$i ++){
if ($pagina == $i)
echo "<td><div id='color'><div class='botonColor'><a class='paginaOn'>".$i."</a></div></div></td>";
else
echo "<td><div id='color'><div class='botonColor'><a class='pagina' href='consulta_art.php?logo=14&combo_marca=".$_POS T["comboMarca"]."&campo_nombre=".$_POST["campoNombre"]."&codigoFamilia=".$_GET["codigoFamilia"]."&pagina=" . $i ."'>".$i."</a></div></div></td>";
}

// Paginación ascendente
if (($num_paginas > $paginas_por_grupo)&&($pagina <= $paginas_por_grupo))

// En caso de pulsar el botón +, se realizará una paginación ascendente y se muestran las cartas correspondientes al primer mazo del nuevo grupo.
echo "<td><div id='color'><div class='botonColor'><a class='pagina' href='consulta_art.php?logo=14&combo_marca=".$_POS T["comboMarca"]."&campo_nombre=".$_POST["campoNombre"]."&codigoFamilia=".$_GET["codigoFamilia"]."&pagina=".(($g_actual+1)*$paginas_por_grupo+1)." '> > </a></div></div></td>";
?>

Última edición por Tarzan; 10/04/2010 a las 04:04
  #4 (permalink)  
Antiguo 10/04/2010, 03:56
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Vaciar variables y modificar URL

¬¬! Eso no dice nada..., osea, lo cargas en la misma página?, cuando haces la petición POST es a otra página....?, como reedireccionas?, haces un "header('location:url')"? se más especifico
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #5 (permalink)  
Antiguo 10/04/2010, 07:02
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Vaciar variables y modificar URL

Perdona Nemutagk,

Se me ha olvidado el inicio del archivo que es donde carga la página:
<?
$_GET["seccion_web"]=substr(strrchr($_SERVER["PHP_SELF"], "/"), 1);
?>

La variable seccion_web me dice en qué sección estoy y qué archivo debo cargar, en este caso sería consulta_art.php, y ya viene con el logo=14 y el códigoFamilia=21.

Lo que necesito saber es cómo quitar las variables de la URL marca_combo=XXXX?campo_nombre=XXXX cuando pulso el botón del formulario y envío los datos por POST.

El problema lo tengo porque estoy enviando por GET al paginar y por POST al cambiar la marca en el formulario.

¿Cómo puedo cambiar la URL?

Ahora mismo está funcionando bien, y muestra los artículos correctos, ya sea paginando o introduciendo datos en los campos del formulario, pero la URL se me queda mal. Quiero decir que, si pagino y envío la marca por GET, al cambiar después la marca desde el formulario y hacer submit, envío los datos por POST y la lista de artículos me la muestra bien, filtrando con la última marca introducida, PERO ME MANTIENE LA MARCA ANTERIOR ENVIADA POR GET (Al paginar) y quiero que no se vea esto.


Saludos,
  #6 (permalink)  
Antiguo 10/04/2010, 07:25
 
Fecha de Ingreso: febrero-2006
Mensajes: 134
Antigüedad: 18 años, 2 meses
Puntos: 10
Respuesta: Vaciar variables y modificar URL

Lo he leido por encima, pero..
Si el formulario se está enviando por POST, la razón de que tu URL incluya el query_string que traía de la petición anterior por GET es que... <form action=""> está vacío!

Primero: es muy poco recomendable dejar atributos (X)HTML de ubicación (src, href) vacíos. Si no quieres poner la URL completa (http://{servidor}/{path/to/}consulta_art.php) pon, al menos, el nombre del script.
Como es el mismo script, puedes utilizar, simplemente, <?php echo $_SERVER['SCRIPT_NAME'] ?>.

Ahora, como notas (E_NOTICE ^^) me gustaría decirte un par de cosillas:
Por ejemplo, para comprobar si una petición es GET o POST, en lugar de
if($_POST), deberías utilizar if($_SERVER['REQUEST_METHOD'] == 'POST'), por tres razones:
a) $_SERVER['REQUEST_METHOD'] siempre existe, solo se comprueba su valor.
b) if($_POST) a ti no te da errores porque tu error_reporting() o display_errors impiden que se muestren E_NOTICEs de que la variable todavía no ha sido inicializada (en caso de una petición GET).
c) Para comprobar que una variable no exista o esté vacía, se utiliza, no if(!_$POST) sino if(empty($_POST)) por aquello de que $_POST (de existir) es un array. ¿Por qué? Porque a PHP le cuesta menos procesar una comprobación entre valores iguales que entre valores distintos ( array == false <=> array [is] empty )

Y otra cosa, cuando compruebes si las variables vienen por GET o POST, no cambies sus valores en PHP a menos que sea necesario:
$_GET['cualquierCosa'] = 'abc';
solo sirve para que luego no puedas acceder al valor original de $_GET['cualquierCosa'] con echo $_GET['cualquierCosa'];

Es mucho mejor práctica hacer algo como
$cosa = $_GET['mivariable'];
if(this_is_not_awesome($cosa)) $cosa = 'otroValor a mano';

Espero haberte ayudado, y no te tomes a mal mi "crítica" constructiva.
Tus scripts seguirán funcionando sin hacerme ni caso a ello, pero son recomendaciones del PHP Group.

Un saludo!
__________________
Si te ha gustado lo que he dicho, puedes darme algún punto de reputación, que no te cuesta nada ^_^.

Di no a los juicios de valor!
  #7 (permalink)  
Antiguo 10/04/2010, 07:30
 
Fecha de Ingreso: diciembre-2009
Mensajes: 612
Antigüedad: 14 años, 4 meses
Puntos: 16
Respuesta: Vaciar variables y modificar URL

no sé como lo tienes, pero puedes mandar por get también el elemento que quieras ordenar, e incluso si es orden asc o desc, te lo puse como sugerencia
  #8 (permalink)  
Antiguo 10/04/2010, 07:39
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Vaciar variables y modificar URL

Muchísimas gracias Santhy,

voy a probar lo que me dices y te cuento.
Pero tengo una duda, lo que dices de no utilizar $_POST = "LO QUE SEA"
Lo hago porque necesito que en el comboBox que hay dentro del formulario, mantenga el valor de la marca seleccionada, después de paginar.

Quiero decir que, cuando cambio la marca desde el comboBox, seleccionando otra y pulso el botón submit, se recarga la página y me deja en el combo la marca que he seleccionado, (correcto), pero si pagino, es decir, pulso el link 3 para ir a la pagina 3 de la lista de articulos de esa marca, entonces el comboBox pierde el valor de la marca que tenía antes. (En este caso se envía todo por GET.

Por eso, antes de crear el formulario:

<SELECT class=combobox NAME='comboMarca'>
<?
<echo "<option value='1'> Todas </option>";
for ($i=0; $i < $fila2; $i++) {
if( $_POST['comboMarca']==$resultadoMarcas[$i]['nombre'])

echo "<option value='".$resultadoMarcas[$i]["nombre"]."'selected>".$resultadoMarcas[$i]['nombre']."</option>";


else
echo "<option value='".$resultadoMarcas[$i]['nombre']."'>".$resultadoMarcas[$i]['nombre']."</option>";
}
?>
</SELECT>

Si te fijas aquí, cuando la marca enviada por $_POST, coincide con $resultadoMarcas, entonces deja selected la marca en el combo. Por eso cuando la he enviado por GET la ASIGNO previamente haciendo esto:

IF (!$_POST) {
$_POST['comboMarca'] = $_GET["combo_marca"];
}

otra forma de hacerlo?

Para nada me molestan tus críticas. Al contrario. Quiero aprender a programar y a realizar un código óptimo y eficiente.

Saludos,
  #9 (permalink)  
Antiguo 10/04/2010, 08:56
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Vaciar variables y modificar URL

A ver, son varios puntos a ver aquí, todo lo que te comenta @santy es correcto, verifica eso, en el código que enviaste nunca encuentro el...
Código HTML:
Ver original
  1. </form>
... hay mas código despues de...
Código PHP:
Ver original
  1. // En caso de pulsar el botón +, se realizará una paginación ascendente y se muestran las cartas correspondientes al primer mazo del nuevo grupo.
  2. echo ....

Ahora, teóricamente, los problemas que estas teniendo son porque estas utilizando mal la asignación de variables..
Código PHP:
Ver original
  1. $_GET['mi_variable'] = 'nuevo valor';
  2. $_POST['mi_variable'] = 'nuevo valor';

esta mal, porque, muy simple, nunca vas a saber que paso con el valor original, venia vacio?, tenia valor?, para eso se asigna el valor de la variable (sea GET O POST) a una nueva variable

Código PHP:
Ver original
  1. if (isset($_POST['mi_variable'])) {
  2. $mi_variable = $_POST['mi_variable'];
  3. }else {
  4. $mi_variable = 'nuevo valor';
  5. }

Te falta mucho para generar un código optimo, lee mas tutoriales/cursos...

Ahora, por lo que entendí, tu problema es que cuando envías la petición POST se sigue enviando el valor asignado anteriormente, sinceramente vas a tener que cambiar varias cosas para tener mas control sobre tu código, te sugiero que cambies todas las variables $_POST y $_GET y estas las almacenes en variables locales....
Código PHP:
Ver original
  1. if (isset($_POST)) {
  2. $comoMarca = $_POST['comboMarca'];
  3. $campoNombre = $_POST['campoNombre'];
  4. } else {
  5. $comoMarca = $_GET['comboMarca'];
  6. $campoNombre = $_GET['campoNombre'];
  7. $pagina = 1;
  8. $ini_pagina = 0;
  9. $fin_pagina = 50;
  10. $combo_marca = "";
  11. $campo_nombre= "";
  12. $pagina= 1;
  13. }
  14.  
  15. //Despues cambia las variables dentro de tu código, por ejemplo, el siguiente código
  16. IF($_POST['comboMarca'] != 1)  {
  17. //acciones a seguir
  18. }
  19.  
  20. //Cambialo por
  21.  
  22. if ($comoMarca != 1) {
  23. //acciones a seguir
  24. }
  25.  
  26. //También cambia todos los "if" que no están comprobando nada como el siguiente
  27. if ($_POST['mi_variable']) {
  28. //acciones...
  29. }
  30. //A menos que "$_POST['mi_variable']" contenga un valor boleano (true/false) ese if no funciona para nada, para que verifique si tiene un valor asignado se utiliza
  31. if (empty($_POST['mi_variable'])) {
  32. //acciones si esta vacía
  33. }else {
  34. //acciones si NO esta vacía
  35. }

La mayoría de problemas surgen porque el código no tiene ni pies ni cabeza, y como dijo @santy, no tomes a mal el comentario, veras que si sigues estas practicas en futuros casos te evitaran muchos dolores de cabeza (como este), has los cambios y publica tu nuevo código y posibles problemas que tengas
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #10 (permalink)  
Antiguo 10/04/2010, 17:39
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Vaciar variables y modificar URL

Gracias a todos por los consejos,

voy a revisar bien todo lo que me habéis puesto y trataré de implementarlo en mi código. SIn embargo, no me habéis respondido, o yo no lo he sabido entender así, a la cuestión que planteaba.

Independientemente de que, realmente, estoy utilizando erróneamente las variables por POST Y GET, necesito saber cómo modificar la URL o vaciar las variables contenidas en la misma en un momento determinado.

Sabiendo eso y, corrigiendo todo el código siguiendo vuestros consejos, creo que podré realizar la funcionalidad que estoy buscando.

¿Podéis por favor, explicarme como puedo modificar la URL de forma dinámica y vaciar las variables cuando recargo la página por POST?

Por GET sé que las recalcula, pero por POST me mantiene los mismos valores anteriores y no quiero que estos aparezcan.

Me valdría cualquiera de estas soluciones, o bien si puedo escribir directamente una URL como cadena estática, (porque conozco cual es la URL inicial y ya me valdría con esto), o bien modificando las varialbes que hay escritas.

Saludos,
  #11 (permalink)  
Antiguo 10/04/2010, 17:47
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Vaciar variables y modificar URL

Lo mas aconsejable es que hicieras los cambios indicados primero y luego vieras si sigues teniendo los problemas y te vuelvo a repetir tu problema con el "url" como tu le llamas es posible que sea por la razón ya planteada osea, el mal uso de la asignación de variables
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #12 (permalink)  
Antiguo 10/04/2010, 18:09
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Vaciar variables y modificar URL

No No. He cambiado el código y he creado dos variables para el envío de los campos por POST y otras dos para el envío de los campos por GET.

Ahora mismo está funcionando correctamente y muestra los artículos, bien al hacer submit o al paginar. Todo correcto, excepto lo que trato de explicar.

// Utilizar dos variables para la información enviada por POST.
$marca_POST = $_POST['comboMarca'];
$nombre_POST = $_POST['campoNombre'];
// Utilizar dos variables para la información enviada por GET
$marca_GET = $_GET['combo_marca'];
$nombre_GET = $_GET['campo_nombre'];

Creo que no me estáis entendiendo del todo bien. mi problema es el siguiente.
Yo entro en la página para consultar una serie de artículos de una familia concreta. la familia la he seleccionado en otra página que no tiene nada que ver con esta.

Digamos que, cuando se muestra la página, la URL es así:

"https://XXXXX.com/consulta_art.php?codigoFamilia=21"

El código de Familia 21 se refiere, imaginemos, a las impresoras.

Bien. Ahora tengo todas las impresoras de todas las marcas. Aparece un listado de 50 impresoras (máximo número de artículos que tengo definido presentar en la página de consulta).

Puedo hacer dos cosas. Tengo un formulario en la parte superior donde puedo seleccionar la MARCA, EPSON, por ejemplo. Si selecciono Epson y pulso el botón. Este hace submit y envío por POST la marca epson. Las variables se actualizan bien y cambio la consulta a la Base de Datos. Entonces la página se recarga y aparecen todas las impresoras EPSON.

La otra opción de la que hablaba era pulsar uno de los links para la paginación. En la parte inferior de la ventana hay una fila de enlaces para paginar. Cuando aparecen todas las impresoras, (50 por página), también tengo una lista como esta:

1 2 3 4 5 6 7 >

Donde puedo mostrar, si pulso en el 2, las siguiente 50 impresoras.
Imaginemos que yo he filtrado la marca EPSON, como he dicho antes, y ahora, pulso en el link 2 de la paginación.
Pues envío por GET LA MARCA EPSON Y LA url cambia a esta:

"https://XXXXX.com/consulta_art.php?codigoFamilia=21&marca_combo=EPSO N&PAGINA=2"

¿Vale?
No pienses que las variables estan mal, quiero decir, que esto funciona correctamente y el listado que me aparece está bien.

Ahora viene lo IMPORTANTE, si yo ahora cambio la marca desde el formulario, (combobox), y selecciono LEXMARK. Al pulsar el botón, se hace submit y se envía correctamente la marca LEXMARK por POST. y los artículos mostrados son los correctos, es decir, todas las impresoras lexmark, PERO LA URL CONTINÚA MANTENIENDO QUE ESTOY EN LA PAGINA 2 Y QUE LA MARCA ES EPSON.
¿Entiendes lo que quiero decir?
Los artículos que aparecen están bien pero la URL ES LA QUE HABÍA ANTES AL PAGINAR Y HACER EL GET. No se ha actualizado al hacer el último submit.

necesito cambiarla de forma manual o quitar esa marca y poner la correcta.
Ése es mi problema ahora mismo.

Saludos,
  #13 (permalink)  
Antiguo 10/04/2010, 20:08
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Vaciar variables y modificar URL

A ver, ya me perdí con tu problema, según tu ultimo comentario, dices que cuando envías la segunda petición POST en adelante en la barra de direcciones sigue mostrando el url anterior PERO en el código HTML si muestra los cambios?, osea, tomando como muestra tu propio ejemplo, en el primer submit seleccionas Epson y en la barra de direcciones aparece "&marca_combo=EPSON" y cuando vuelves a enviar la petición POST ahora con el valor Lexmark te sigue apareciendo en el url "&marca_combo=EPSON"??

Si es lo que entendí es la misma razón que te di yo y que te dio @santhy y es porque no estas indicando un 'action="url"' al formulario, al estar vacio el "action" toma la dirección de la pagina en ese momento, con sus variables GET, para que me entiendas, es como si agregaras manualmente en el 'action="https://XXXXX.com/consulta_art.php?codigoFamilia=21&marca_combo=EPSO N&PAGINA=2"', así no importa cuantos submit hagas, siempre en la barra de direcciones aparecerán las variables GET, es por eso que te dije que hicieras los cambios que te comente yo, así como los que te comento @santhy...

Espero que ahora si se entienda que en si ya resolvimos tu problema, de hecho si hubieras hecho los cambios desde un comienzo verías que ya no tendrías ese problema
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 10/04/2010 a las 20:14
  #14 (permalink)  
Antiguo 11/04/2010, 11:35
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Vaciar variables y modificar URL

Hola Nemutagk,

El problema es un caso particular de enviar por POST, LUEGO POR get y finalmente por POST.
Verás, al principio selecciono epson desde el formulario y pulso el botón para filtrar la consulta. (Primer Submit).

Después, (una vez que aparecen todos los artículos epson, le doy al link 3 de la paginación (fuera del formulario), y me muestra la página 3 de los articulos epson.
Aquí, para mantener los articulos epson he tenido que enviar por GET, la marca epson.
Y me ha cambiado la url.

"https://XXXXX.com/consulta_art.php&codigofamilia=21&marca=epson&pagi na=3"

El paso tercero, es cambiar, ahora desde el formulario, la marca y seleccionar lexmark. Al pulsar el botón se envía, ahora por POST, la nueva marca y se recarga la pagina mostrando todos los articulos lexmark.
Pero la url continua en la pagina 3 y marca =epson por el get anterior.

El funcionamiento es correcto, porque los articulos mostrados son los correctos y la paginación también funciona bien, pero la url es engañosa.

Empiezo a entender que, lo del action del formulario, sea la solución que necesito aplicar. Pero tengo una duda. Cuando entro, por primera vez en la pagina, la url es así:

"https://XXXXX.com/consulta_art.php&codigofamilia=21"


Ahora bien. Estoy probando la solución que me planteasteis de modificar el action del formulario y no dejarlo vacío.
Lo suyo es que me aparezca la URL incial siempre que haga POST. Es decir:
"https://XXXXX.com/consulta_art.php&codigofamilia=21"

Aquí no especifica la pagina en la que nos encontramos ni la marca. Simplemente la familia.
Pero es precisamente esta familia la que no puedo recuperar o no sé cómo recuperar.

Nada más entrar en la página, yo tengo esta asignación:
$IDFamilia = $_GET['codigoFamilia'];

y tengo esto también:
Utilizo un campo oculto en el formulario para capturar el codigoFamilia inicial.
<input type='hidden' name='codigoFamilia' value="<?=$_GET['codigoFamilia']?>">
$IDFamilia_POST = $_POST['codigoFamilia'];

$url_POST = "http://localhost/suresdata/consulta_art.php?logo=14&codigoFamilia=".$IDFamili a_POST;

Esto funciona perfectamente y la variable $url_POST vale:
"http://localhost/suresdata/consulta_art.php?logo=14&codigoFamilia=21"

Ya funciona!!! Con el ACTION de la etiqueta form puedo indicarle la ruta que quiero que cargue con cada POST.
Ahora ya no tengo ninguna url engañosa!!
Muchísimas gracias por todo!!!

Última edición por Tarzan; 11/04/2010 a las 12:28
  #15 (permalink)  
Antiguo 13/04/2010, 17:41
 
Fecha de Ingreso: febrero-2006
Mensajes: 134
Antigüedad: 18 años, 2 meses
Puntos: 10
Respuesta: Vaciar variables y modificar URL

Cita:
Iniciado por santhy Ver Mensaje
Primero: es muy poco recomendable dejar atributos (X)HTML de ubicación (src, href) vacíos. Si no quieres poner la URL completa (http://{servidor}/{path/to/}consulta_art.php) pon, al menos, el nombre del script.
Como es el mismo script, puedes utilizar, simplemente, <?php echo $_SERVER['SCRIPT_NAME'] ?>.
Sí, eso incluye <form action="<?php echo $_SERVER['SCRIPT_NAME'] ?>"
A eso me refería
Pero más en general, a todo lo que tenga enlaces, que nada que vaya a la misma página quede vacío ;)
__________________
Si te ha gustado lo que he dicho, puedes darme algún punto de reputación, que no te cuesta nada ^_^.

Di no a los juicios de valor!

Etiquetas: modificar, url, variables
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 22:08.