Hola a todos,
Tengo un problema a la hora de añadir varios campos ocultos en un form. Concretamente, cuando añado una serie de variables al value de esos campos. El resultado es una ralentización considerable en las consultas y un bloqueo del apache.
Tengo una página con dos formularios. Uno de consulta con una serie de combos y campos, (estos son los que quiero mantener con cada recarga) y otro para añadir articulos a una tabla (Este segundo formulario muestra un listado de artículos en función de lo que el usuario ha filtrado en los combos y contiene un botón: "Añadir" para introducir en una tabla los articulos seleccionados.
El problema es que, si añado articulos a la tabla, no quiero perder los datos introducidos en los combos con cada recarga y me gustaría poder mantener el filtro. Es decir, si el usuario abre la pagina y selecciona marca: hp, categoria: impresoras, etc. al pulsar filtrar (boton del primer formulario), se hace una recarga y se muestran las impresoras hp. (Aquí sí que se mantienen los campos informados). Luego paso estos datos de filtro al segundo formulario por unos campos ocultos. Cuando el usuario selecciona varias impresoras de la lista y pulsa Añadir (botón del segundo formulario), se recarga la página y, recuperando los valores del filtro de los campos ocultos, consigo mantener estos datos en los combos del primer formulario para no tener que volver a filtrar y poder seguir añadiendo en esa misma búsqueda.
Mi problema es que, si no pongo values a los hidden todo va como la seda pero, si añado esos datos a los values, se ralentiza todo y llega a bloquearse el apache.
Código:
// Si se utiliza el Formulario de Consulta (Primer Formulario).
if (isset($_POST["Filtro"])) {
// Mantener los datos de los combos en cada consulta
$var_marca = $_POST['comboMarcas'];
$var_categoria = $_POST['comboCategorias];
….
$var_texto = $_POST['campoNombre'];
}
// POST del segundo formulario (Añadir artículos)
if (isset($_POST["Añadir"])) {
/*Recuperar los valores del Filtro que están en los campos ocultos y asignarlos a las variables asociadas en los combos para mantenerlos con cada recarga de página.*/
$var_ marca = $_POST['marca_hide'];
$var_ categoria = $_POST[categoria _hide'];
…
$var_texto = $_POST['texto_hide'];
}
<!-- FORMULARIO DE CONSULTA -->
<form style="margin: 0px;" name="consultaArticulos" method="POST" action="">
<SELECT class="combobox" NAME="comboMarcas">
<!-- Introducir todas las Ediciones en el ComboBox -->
<?
/*Seleccionar la primera marca del combo y almacenarla en una variable ($firstMarcaCombo).La primera vez que se cargue la página, $_POST['comboMarcas'] será igual a esta variable.
De esta forma, la consulta es más rápida porque no tiene que extraer todos los artículos, sino que siempre filtra. */
$firstMarcaCombo = $resultadoMarcas[0][‘marca’];
if( !($_POST['comboMarcas']) && !($_POST['edicion_hide']) ) {
$_POST['comboMarcas'] = $ firstMarcaCombo;
}
// Se mantiene la marca seleccionada en el combo después de Filtrar.
for ($i=0; $i < $fila3; $i++) {
/* Se utiliza la función str_replace para sustituir el carácter \ que utiliza el php para reconocer el '. De esta forma, las marcas con apóstrofe, son seleccionadas tras el filtro.*/
if(str_replace("\\","",$var_marca) == $ resultadoMarcas [$i][‘marca’])
echo "<option value=\"".$ resultadoMarcas [$i][‘marca’]."\"selected=\"selected\">".$ resultadoMarcas [$i][‘marca’]."</option>";
else
echo "<option value=\"".$ resultadoMarcas [$i][‘marca’]."\">".$ resultadoMarcas [$i][‘marca’]."</option>";
}
?>
</SELECT>
// 4 combos con el mismo código de este.
// Textfield
<input class="combobox" type='text' name="campoNombre" value="<?=$var_texto?>">
// Boton
<input class=BtnFiltrar name="Filtro" TYPE='submit' VALUE='Filtrar'>
</form>
<!-- FORMULARIO AÑADE ARTICULOS AL PEDIDO -->
<form style="margin: 0px;" name="addCartas" method="POST" action="">
// Añadir los values de estos campos oculto es lo que revienta el apache y ralentiza muchisimo las consultas
<input type="hidden" name="marca_hide" value="<?=$var_marca?>" />
<input type="hidden" name="categoria_hide" value="<?=$var_categoria?>" />
…
…
<input type="hidden" name="texto_hide" value="<?=$var_texto?>" />
// Crear el sql de consulta según los campos del primer formulario y lanzar la consulta para ver la tabla con los artículos filtrados.
$sqlListadoArticulos = "SELECT FROM articulos INNER JOIN marcas ON articulos.idmarca=marcas.idmarca INNER JOIN categorias ON...";
if ($_POST['comboMarca']) {
}
if ($_POST['comboCategoria']) {
}
etc... con los otros dos combos y textfield
// Mostrar la lista de artículos en una tabla con un for (recorre los valores de la consulta).
<input class=BtnAñadir name="addPedido" id="btnAddPedido" TYPE="submit" VALUE="Añadir">
</form>
//recorrer el array pedido y mostrar los articulos que se han ido añadiendo.
//Esta es la parte que va muy lenta si añado los 5 hidden al segundo formulario.
Este es exactamente el código que tengo, ¿ok?.
Caso A:
Al iniciar la página, se filtra por la primera marca. Se genera la consulta que muestra el listado de articulos filtrados por la primera marca y se muestra en la tabla.
Si el usuario tenía pedidos añadidos en otras sesiones, se mueatran también.
Caso B:
El usuario modifica los combos y el campo de texto que hay en el primer formulario y pulsa Filtrar.
Se recarga la página. Se almacenan en los var_XXXX los valores de los campos completados en el primer formulario. Se almacenan en los hide. Se genera la consulta, esta vez, filtrada por todos los campos y se muestra en la tabla.
Caso C:
El usuario selecciona del listado de artículos, varios de ellos con los checks y pulsa Añadir. (Segundo formulario).
Se almacenan en los var_XXXX los valores de los combos ocultos y, al recargar la página, se muestran en los campos del primer formulario.
Funciona bien!! Pero ralentiza muchísimo la consulta de los artículos añadidos anteriormente al pedido del usuario y, si dejo los cinco campos ocultos, llega a reventar el apache.
¿Se te ocurre algo con este código?
¿Qué debería cambiar?. Fíjate que todos estos problemas de lentitud y bloqueos en el navegador se dan, únicamente, cuando añado las variables a los values de los campos hidden.