Ver Mensaje Individual
  #31 (permalink)  
Antiguo 09/12/2013, 09:18
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 1 mes
Puntos: 83
Respuesta: Cambiar contenido de una variable mediante if

"...culpa mía a veces me centro tanto en una cosa que olvido lo demás..."

No eres el unico :))

Cuando recibes el filtro por POST es que has usado el select (porque está en el form con method POST), en cambio recibes el filtro por GET es que estas en el mapa de paginas. Esto te permite reiniciar el contador de paginas cuando recibes por POST; en el miniselector que te puse mas arriba solo has de añadir el else para cuando lo recibido por POST no es nulo, de la misma forma puedes hacer mas cosas cuando recibes por GET o cuando aplicas el filtro que hay por degfecto

Código PHP:
Ver original
  1. if(($selectapar = (isset($_POST['selectapar']))? $_POST['selectapar'] : NULL) === NULL) {
  2.     //si el anterior resultado fue nulo pruebas con el GET
  3.     if(($selectapar = (isset($_GET['selectapar']))? $_GET['selectapar'] : NULL) === NULL) {
  4.         //y si el anterior vuelve a ser nulo asignas el que hay por defecto
  5.         $selectapar = $default_selectapar;
  6.         $pagina = 0;
  7.     }
  8.     else {
  9.         //has recibido $selectapar por GET
  10.         $pagina = $_GET["num"];
  11.     }
  12. }
  13. else {
  14.     //has recibido $selectapar por POST, puedes reinicar el contador de paginas
  15.     $pagina = 0;
  16. }

Observa como lo aplico: cuando recibo por POST o cuando aplico el filtro porn defecto (no recibo ni POST ni GET) reinicio el contador de paginas (y todo lo relacionado, es decir como si ni tuvieras nada); en cambio cuando recibo por GET recupero los contadores de paginas y todo lo necesario.


Una cosa: lo que te comenta herzbazi es correcto; deberias plantearte mostrar las opciones que tengas en la bdd en vez de ponerlas manualmente. En la programacion una de las cosas basicas es que si modifica un dato repercuta automaticamente en el resto del codigo, es decir que si por lo que sea de la bdd quitas la opcion "Hombre -ropa" en tu caso tendras que modificar tambien este php; de la otra forma el contenido de las opciones se define desde la bdd. Junto con esto tienes lo que tambien te comenté mas arriba: plantea usar indices de filtro como valores para el 'selectapar ' en vez de texto literal: en la base de datos puedes definir filtros con un indice (seria el value del select html) y una descripcion humanamente inteligible (seria el texto de la opcion del select html); con esto tienes suficiente para crear el sistema. Luego en la tabla de articulos tendras un campo extra que será el tipo asignado al filtro, de forma que el selectapar que recibes no es un texto sino un indice. Con esto evitas que algun usuario le entren ganas de escribir manualmente filtros en la barra de direcciones cuando navegas por el mapa de paginas. No es imprescindible pero si recomendable.

Si acaso primero soluciona el sistema tal como lo tienes y luego plantea la posibilidad de modificarlo de esa forma.

Saludos
vosk

p.s. una ultima cosa: ya te habia comentado que no accedas directamente a elementos de un array que dependen de datos externos, y eso se aplica a $_POST, $_GET, y cualquier otro array; eso significa que debes cambiar el acceso directo a $_GET['num'] por un isset($_GET['num']), con esto evitas obtener un warning de php cuando algun usuario modifique manualmente la query de la url quitando el campo num obtendras un error del php.

Última edición por vosk; 09/12/2013 a las 09:23