Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Cambiar contenido de una variable mediante if

Estas en el tema de Cambiar contenido de una variable mediante if en el foro de PHP en Foros del Web. "...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 ...

  #31 (permalink)  
Antiguo 09/12/2013, 09:18
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 7 meses
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
  #32 (permalink)  
Antiguo 09/12/2013, 09:28
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 7 meses
Puntos: 83
Respuesta: Cambiar contenido de una variable mediante if

Y aun otra cosa: revisa algun manual de seguridad para consultas a la bdd; cuando recibes datos del usuario no puedes usarlos directamente dentro de una consulta, es decir si que puedes pero es un agujero de seguridad. En php tienes la funcion mysqli_real_escape_string, revisa la referencia de php para ver que hace esa funcion y porque es importante que la uses.

Saludos
vosk
  #33 (permalink)  
Antiguo 09/12/2013, 13:42
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Cambiar contenido de una variable mediante if

Bien..me he estado peleando con unos cuantos corchetes y he cambiado el $pagina=1 , en vez de 0.....ahora si funciona ufff!! vaya tardecita jejje

Ahora que tengo esta parte terminada y funcionando me planteo la que me comentáis, me parece interesante y puede que lo intente aunque me surgen dudas:

la mas importante es la seguridad, ¿existe algún tipo de riesgo (imagino que si) por tener en la barra de navegación ese texto? ¿o ese selectapar? ¿que cosas dañinas podrían llegar ha hacer sabiendo que eso existe en la barra de navegación?

Mis consultas a la base de datos muestran mi contraseña, usuario y tabla, en el código como es lógico pero...¿esto se podría observar por alguien que no debiera hacerlo?

He leído algo acerca de la funcion que me proporcionas mysqli_real_escape_string, si no he entendido mal ¿sirve para codificar sentencias sql?

"Esta función se usa para crear una cadena SQL legal que se puede usar en una sentencia SQL. La cadena dada es codificada a una cadena SQL escapada, tomando en cuenta el conjunto de caracters actual de la conexión."


Disculpad por tanto interrogante, estoy aprendiendo poco a poco y gracias a vosotros, youtube, google y manuales estoy en ello jejeje

Gracias de nuevo !!

Última edición por angel_xx_1990; 09/12/2013 a las 14:37
  #34 (permalink)  
Antiguo 09/12/2013, 15:54
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 7 meses
Puntos: 83
Respuesta: Cambiar contenido de una variable mediante if

Enhorabuena por conseguir que funcione tu sistema!

Lo de tener texto en la url en principio no es malo a nivel de uso, pero es poco profesional y si quieres antiestetico, ademas que propicia que algun usuario intente enviar su propio texto; mientras estas navegando desde el mapa de paginas en la url te sale el texto probablemente como url-encoded, aun así alguien puede cambiar una letra o una palabra o todo el campo selectapar directamente de la barra de navecacion (tambien se aplica a los datos que tienes en el select html, culquiera puede visualizar el codigo y la direccion del php a la que apunta el form y enviar datos modificados). Esto implica que deberas tener un mayor manejo de errores (por ejemplo que la ejecucion de tu php no arroje warnings con informacion util para el atacante) y un mayor control con todo lo que se envia a la bdd (por ejemplo usando la funcion de escapado). Si quieres probar en tu propio codigo el agujero de seguridad puedes buscar algun manual de inicio a las tecnicas de injection pero no para hacerlas en otras paginas sino para ver que puntos debiles tiene la tuya y comprobar la utilidad del escapado de caracteres reservados (real_escape_string). Hay mas tecnicas para proteger (encriptar contraseñas con md5, etc), tendrias que encontrar un manual por ahi y comprobar todos los puntos.

Saludos
vosk
  #35 (permalink)  
Antiguo 10/12/2013, 07:45
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Cambiar contenido de una variable mediante if

"...cualquiera puede visualizar el codigo y la direccion del php a la que apunta el form y enviar datos modificados..."

¿Enviar datos modificados? ¿a que te refieres?

"...que la ejecucicon de tu php no arroje warnings con informacion util para el atacante..."

¿Como se que mi código no arroja warnings? He probado ciertas acciones que pudiera hacer un usuario pero nunca me ha dado un warning...¿Cuando suele salir?

He encontrado un manual en php.net sobre inyección de SQL y la verdad que no tenía ni idea de como pueden digamos "piratear" las webs de esa manera o las bases de datos...

http://www.php.net/manual/es/securit...-injection.php


Mi mayor preocupacion es que pudieran acceder y modificar datos de mi base de datos...Leí hace tiempo creo recordar que los datos de acceso a la base de datos se encriptaban de manera automática, si tu descargas un web o pinchas en mostrar el código de la web que estas visitando no los mostraba, pero no estoy muy seguro es un recuerdo algo borroso que tengo...


Saludos!!

Última edición por angel_xx_1990; 10/12/2013 a las 07:54
  #36 (permalink)  
Antiguo 10/12/2013, 10:00
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 7 meses
Puntos: 83
Respuesta: Cambiar contenido de una variable mediante if

"...¿Enviar datos modificados? ¿a que te refieres?..."

Me refiero a que sin cookies de servidor ni https si yo cargo tu pagina y visualizo el codigo fuente podré ver a que php apunta el form y entrar manualmente la direccion en la barra de navegacion, y lo mismo pero sin ver el codigo fuente podre ver adonde apuntan los enlaces del mapa de paginas; con esto alguien con mala idea podria probar a enviar una url modificada para ver que responde tu php, p.ej. puede enviar moda.php?num=999999999 y a ver que pasa. Con este ejmplo del num no va a pasar nada, pero nunca se sabe. Es decir, si por lo que sea la query de la url lleva dos campos que dependen el uno del otro, el que uno indique una cosa no implica que el otro sea correcto o esté dentro de un rango esperado o lo que sea, es decir que todo lo que te llega del usuario tienes que comprobarlo: por ejemplo si esperas un numero entero usa las funciones para asegurarte de que realmente es un numero entero, no hagas calculos con lo que te llegó de fuera esperando que lo que no tenga sentido será rechazado por la propia bdd.


"...¿Como se que mi código no arroja warnings? He probado ciertas acciones que pudiera hacer un usuario pero nunca me ha dado un warning...¿Cuando suele salir? ..."

Esto va ligado con lo anterior, suele salir cuando estas trabajando con datos del usuario: puedes esperar que el usuario envie un dato determinado que pide p.ej. un formulario, pero no puedes estar seguro. En el php.ini se pueden habilitar o deshabilitar el volcado de errores (de todos los tipos, que hay varios), y en tu propia pagina puedes poner un ini_set para ocultar los errores (no se recomienda). Hay gente especializada en hacer saltar esos errores, que les proporcionan informacion util; si has estado probando lo mas habitual y todo va bien es que seguramente no deberías tener ningun problema.

Aun así es importante que escribas tu php con el manual de referencia abierto para conocer los valores de retorno de las funciones de php, y ante cualquier duda apliques los condicionales para saber si la funcion se ejecutó correctamente. Un ejemplo de buena practica lo tienes en tu propio codigo que colgaste en las lineas de la consulta a la bdd, donde terminan con 'or die()', la idea es correcta, solo que en caso de error la presentacion de la pagina finaliza en ese punto (como si quedara cortada). Dependiendo del diseño que tangas puede quedar poco profesional, esto depende de ti. Puedes solucionarlo comprovando manualmente el retorno de la funcion de query.


"...Leí hace tiempo creo recordar que los datos de acceso a la base de datos se encriptaban de manera automática..."

Si, los de la tabla de usuarios propia de mysql se encripta por defecto pero todo lo demas si no le dices nada no encriptará nada, pero la tabla mysql.users no es la de los usuarios de tu sitio sino la de todos los accesos a toda la bdd, es decir que si hay algun problema en eso será competencia de los que te alojaron el sitio web y temproporcionaron acceso a una bdd (con soporte para php, ftp, cuentas de correo y no se que mas, es decir que esa encriptacion que viene por defecto a ti directamente no te preocupa porque no la puedes corregir). Por lo de ver el codigo de tu pagina, si el servidor soporta php no podras bajarte el codigo fuente de los php pero si del html resultante (eso con un cliente http o navegador).

En cambio hay algunas funciones utiles para encriptar datos, como las passwords de los usuarios que se registren a tu sitio. Con un MD5 nadie podrá conocer el password de ningun usuario (ni siquiera tu accediendo a la bdd) porque no hay forma de desencriptar el md5. Esta encriptacion ya te habras dado cuenta que solo vale cuando no quieres desencriptar nada (solo vale en validaciones de usuario, etc..), con lo que si quieres encriptar algo y que luego te sea util tendras que usar otras funciones. Algunas puefdes tenerlas en php, otras te las proporciona la propia MySQL. Tendrias que buscar algun manual para todo esto y decidir que es lo que te conviene.

Por defecto el servidor de mysql solo provee aceso a localhost (es decir al servidor donde tienes alojado tu php), por lo que desde casa ningun atacante podria acceder a la bdd (como norma general, eso no significa que tal vez no sea imposible). Lo otro es lo de las inyecciones, que con eso si que puedes modificar alguna cosa. Para ello te comenté lo del escapado de caracteres. Recuerda que el manual de inyecciones es para comprovar y mejorar la seguridad de tu propio sitio, no para aplicarla a otros.

Un resumen: por norma general el 90% de la genta que visitará tu sitio no se molestará en modificar urls ni en ver el codigo fuente, el 9% puede que modifique la url para ver que pasa y el 0.999% puede que incluso intenten una inyeccion en el campo 'selectapar' (que es el filtro que usas directamente en la bdd). Para controlar esos accesos con controlar los errores, los datos que envia el usuario, los retornos de las funciones y los datos que envias a la bdd tienes mas que suficiente. Para el 0.001% a menos que seas el jefe de programacion de una multinacional creo que no deberías preocuparte, o si, eso depende de ti (tendrias que comenzar cambiando a https, echale un vistazo y veras si te sale rentable). Ojo, esto no tiene ninguna base solida y los % me los he inventado; si tienes una web de moda recien instaurada, cuantos jaquers crees que dejaran de interesarse por facebok o por instagram para intentar modificar los colores de tu productos? La seguridad de un sitio depende de lo que maneje el sitio, y esto tienes que valorarlo tu mismo pero siempre teniendo presente que debes aplicar lo basico (lo que te he compentado varias veces: comprobar errores, datos que te llegan por url, datos que envias a la bdd, etc).

Saludos
vosk
  #37 (permalink)  
Antiguo 12/12/2013, 05:23
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Cambiar contenido de una variable mediante if

Bien, antes que nada gracias por toda esta información...!!! he estado probando y efectivamente al introducir un selectapar diferente en la barra de navegación me da un error de mysql en el cual explica una ruta concreta, en la cual aparece mi nombre de usuario en mi base de datos...no me parece muy seguro...asique e decido tirar por el camino mas corto y añadir lo siguiente después de todas las consultas:


if ($selectapar != "Todos los artículos" or "niños" or "etc" or "etc"){

echo "No hay artículos disponibles para mostrar";
exit();
}


se supone que la idea está clara si el selectapar no coincide con ninguna de las opciones disponibles para seleccionar que muestre "No hay artículos disponibles para mostrar", evitando así que muestre mi nombre de usuario.....pero no me funciona ya que cuando entro a la web directamente me muestra "No hay artículos disponibles para mostrar"

?¿

No entiendo por que...con lo sencillo que me parece..



Y otra cosa lo del https ¿encripta los datos mas relevantes? ¿es un servicio por el cual hay que pagar?


Gracias enormemente!!!
  #38 (permalink)  
Antiguo 12/12/2013, 11:58
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 7 meses
Puntos: 83
Respuesta: Cambiar contenido de una variable mediante if

"...Y otra cosa lo del https ¿encripta los datos mas relevantes? ¿es un servicio por el cual hay que pagar?..."

Si y si; pero este ultimo si puede ser un no, depende de si sabes como crear un certificado e instalarlo en tu propio servidor de validacion; normalmente los servidores de alojamiento no te dejaran instalar tus propios certificados sino que tendras que comprarselos, puede que haya alguna excepcion, pero si que permiten la direccion de la validacion. Si tienes la web en tu propio servidor puedes obtener algun certificado gratis (buscando por ahi seguro que encontraras alguna web que lo haga) e instalartelo en tu propio servidor. Puedes buscar mas informacion acerca de todo esto.

Ahora lo otro: planteate usar indices para las busquedas y olvidar los textos. Si aun asi quieres seguir usando textos en teoria comprovando lo basico no tendría que saltarte ningun error, y ademas son las mismas comprovaciones que tendrias que hacer si usaras indices.

Replantea tu sistema: evita las comparaciones contra texto entrado manualmente:

Código PHP:
Ver original
  1. if ($selectapar != "Todos los artículos" or "niños" etc...

Esto no vale, es decir que funciona pero mejor no lo hagas. Usa un array o mejor usa una nueva tabla donde tengas definidos los tipos, cada tipo con un indice y una descripcion. Luego implementas una funcion que determine si el tipo solicitado existe en la lista.

Si te da un error de mysql es que no has validado correctamente los valores de retorno. En cualquier consulta SELECT debes esperar que retorne 2 tipos de dato: o un result o un boleano falso:

Código PHP:
Ver original
  1. //construyes la query con los datos escapados
  2. $selectapar = $mysqli->real_escape_string($selectapar);
  3. $query = sprintf("SELECT * FROM tabla WHERE selectapar=\"%s\"", $selectapar);
  4.  
  5. //ejecutas y evaluas la consulta
  6. if(($result = $mysqli->query($query)) === FALSE) {
  7.     //se produjo un error
  8. }
  9. else {
  10.     while($fila = $result->fetch_array(MYSQLI_ASSOC)) {
  11.         //volcado de datos
  12.     }
  13.     $result->free();
  14. }

Saludos
vosk
  #39 (permalink)  
Antiguo 15/12/2013, 08:55
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Cambiar contenido de una variable mediante if

Esto no vale, es decir que funciona pero mejor no lo hagas

¿por que? Algun motivo concreto para no usarlo...es que en los manuales y demás aparece que se hace así, por eso te lo pregunto

tengo un array el cual contiene las opcines:

Código PHP:
$opciones = array(
        
"Todos los artículos",
        
"Hombre - Ropa",
        
"xxxxxx",
        
"xxxxx",
        
"etc",
        ); 

He probado con ello a escribir:


Código PHP:
if ($selectapar!=$opciones
{    
    
        echo 
"No hay artículos disponibles para mostrar";
        exit();
    
        } 

Pero me ocurre lo mismo desde que entro a la web me escribe:

"No hay artículos disponibles para mostrar"

Luego me dices que: usa una nueva tabla donde tengas definidos los tipos, cada tipo con un indice y una descripcion


¿Tabla te refieres en mi base de datos, a las tablas que se pueden crear allí?

no se ni como empezar ni a que es lo que te refieres exactamente...

te comento también que los datos que muestro los obtengo de un formulario rellenado por un cliente que lo sube a la web, (mi base de datos) y desde ayí lo imprimo...entonces me resulta my fácil comparar una variable con una de las celdas de mi base de datos para filtrar los datos....también creo que para evitar el uso de texto se puede poner [0], [1], [2], etc para referirnos a los campos de la base de datos y no tener que escribirlos, pero aún así ,si el numero se modificara por el usuario seguirá apareciendo el mismo error....

He estado googleando un rato y no encuentro nada acerca de "datos escapados" no se a que te refieres...(mi nivel es muy muy básico aun jejej) y siento que no entiendo bien el funcionamiento del código que me has escrito, yo lo he copiado tal cual y no funciona imagino que debo introducir cosas para adaptarlo a mi código pero no lo comprendo bien

Gracias vosk!
  #40 (permalink)  
Antiguo 15/12/2013, 11:48
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 7 meses
Puntos: 83
Respuesta: Cambiar contenido de una variable mediante if

"...Algun motivo concreto para no usarlo..."

Cuando una misma cosa (en este caso un texto) vas a usarlo en varias partes de un codigo tienes que declarar algo que referencie a esa cosa de forma que cuando quieras usarla (para mostrarlo, para comprararlo, para lo que sea) usarás la referencia y no codigo picado hardcoded. Que ventajas tiene? La mas importante es que si quieres modificarlo por lo que sea solo con modificar la declaracion se modificará automaticamente todas las referencias que tengas en todo el codigo.

Ahora el array:

Código PHP:
Ver original
  1. $opciones = array(
  2.         "Todos los artículos",
  3.         "Hombre - Ropa",
  4.         "xxxxxx",
  5.         "xxxxx",
  6.         "etc"
  7.         );

Dependiendo de como tengas la tabla en la base de datos no es necesaria esta comprovacion, aunque si la haces te ahorras tiempo de trabajo en la base de datos, es decir que está bien. La comprovacion quieres hacerla para el contenido del array, no contra el array como objecto:

Código PHP:
Ver original
  1. if(in_array($selectapar, $opciones)) {
  2.     //ejecutas la busqueda en la bdd
  3. }
  4. else {
  5.     //no hay resultados
  6. }

Esto va junto con lo de arriba: la lista $opciones solo la tienes declarada una vez, es la que usaras para esta comprovacion y tambien la que usaras para popular el select html:

Código PHP:
Ver original
  1. <select name="selectapar">
  2. <?php
  3. foreach($opciones as $opcion) {
  4.     echo "<option value=\"".$opcion."\">".$opcion."</option>";
  5. }?>
  6. </select>

En cualquier otro sitio donde uses estas opciones has de trebajar tambien sobre el array $opciones; de esta forma ante cualquier cambio solo tienes que tocar el objeto $opciones.

Hasta aqui ok?

Ahora los tipos definidos en las tablas: si, me refiero a las tablas de la base de datos. Creas una tabla que se llame 'filtros' (es un ejemplo que me invento, puedes poner lo que quieras). Ahi tienes dos campos: id int, text varchar(50). El id es el identificador de tipo, el text es lo que se muestra al usuario (puedes poner tambien otro campo para una descripcion de cada tipo). Añades algunos tipos:

Código PHP:
Ver original
  1. 1, 'Todos los artículos'
  2. 2, 'Hombre - Ropa'
  3. 3, 'xxxxxxx'
  4. 4, 'etc'

La parte php de tu pagina quedaría sería algo asi:

Código PHP:
Ver original
  1. <?php
  2. //descargas todo lo que necesitas
  3. //en este caso solo quieres los filtros
  4. $mysqli = mysqli_connect("host", "user", "pass", "dbnm");
  5. $result = $mysqli->query("SELECT * FROM filtros");
  6.  
  7. //lo conviertes a algo de facil manejo, un array
  8. $filtros = array();
  9. while($row = mysqli_fetch_array($result)) {
  10.     $filtros[] = array('id'=>$row['id'], 'text'=>$row['text']);
  11. }
  12. $result->close();
  13.  
  14. //selectapar por defecto
  15. $default_selectapar = $filtros[0]['id'];
  16.  
  17. //recuperas selectapar
  18. if(($selectapar = (isset($_POST['selectapar']))? $_POST['selectapar'] : NULL) === NULL) {
  19.     if(($selectapar = (isset($_GET['selectapar']))? $_GET['selectapar'] : NULL) === NULL) {
  20.         $selectapar = $default_selectapar;
  21.         $pagina = 0;
  22.     }
  23.     else {
  24.         $pagina = $_GET["num"];
  25.     }
  26. }
  27. else {
  28.     $pagina = 0;
  29. }
  30.  
  31. //no hace falta que compruebes si existe algo o no
  32. //buscas resultados
  33. $query = sprintf("SELECT * FROM articulos etc etc");
  34. $resultados = $mysqli->query($query);
  35. //aqui transormaria el objeto mysqli_result a array para que sea mas manejable
  36. //finalizo el trabajo con la bdd
  37. $mysqli->close();
  38. ?>
  39. <html>
  40. <body>
  41.     <form method="POST">
  42.     <select name="selectapar">
  43.     <?php
  44.     foreach($filtros as $filtro) {
  45.         echo "<option value=\"".$filtro['id']."\">".$filtro['text']."</option>";
  46.     }
  47.     ?>
  48.     </select>
  49.     </form>
  50. </body>
  51. </html>

Falta lo del mapa de paginas, solo es para que veas lo basico. Como ves solo estoy picando a mano los nombres de los campos, ningun texto, ni ningun filtro ni nada. Todo está en la bdd, si quiero añadir o quitar filtros, voy a la bdd y lo hago allí, luego esta pagina solo trabajará con lo que reciba de la bdd. El valor de $seletapar será el indice del tipo de filtro, es decir que tal como describimos la tabla de ejemplo para 'Todos los articulos' el selectapar será 1, para 'Hombre ropa' será 2, etc... Luego cuando contruyas el mapa de paginas en los links tendras selectapar=1 o selectapar=3 o el que corresponda con la seleccion que inicio el usuario. De la misma forma en el select html los value de las opciones son indices que terminaran siendo el valor del selectapar.

Luego en la tabla de articulos de la bdd tendras algo del tipo id int, articulo varchar(100), descripcion varchar(255), precio float, selectapar int; si obtienes un selectapar = 1 haces la consulta completa (sin WHERE), si recibes un selectapar > 1 usas el WHERE para filtrar por ese dato. Aqui es donde vas a tener en cuenta que selectapar puede no ser un valor esperado, por eso haces algunas comprovaciones: sabes que tiene que ser un entero pues puedes usar alguna funcion de php que valide el selectapar como entero. Como no será de tipo texto no es necesario escapar los caracteres porque los convertiras a entero:

Código PHP:
Ver original
  1. if(!is_int($selectapar)) {
  2.     //algo pasa
  3. }
  4. else {
  5.     $query = sprintf("SELECT * FROM articulos WHERE selectapar=%d", $selectapar);
  6. }

Puede que te parezca mas complejo, pero a la larga te será mas facil implementar opciones y corregir errores.

Saludos
vosk
  #41 (permalink)  
Antiguo 20/12/2013, 09:26
Avatar de angel_xx_1990  
Fecha de Ingreso: junio-2013
Ubicación: Guadalajara
Mensajes: 236
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Cambiar contenido de una variable mediante if

Verdaderamente me parece más complejo aunque tienes toda la razón en cuanto a que a futuras modificaciones sea mas sencillo...uff me encuentro en un dilema nose si cambiar todo otra vez (ahora que me funciona bien) jeje

Estoy pensando que para ver si mi "idea" con esta web funciona puede valer según está por supuesto podría una vez publicada y terminada seguir trabajando en ella y mejorarla poco a poco, por ejemplo añadiendo esto que me comentas...

(me e copiado lo que me has dicho...por si acaso)

E estado visitando otras webs y probando a cambiar en la barra de navegación lo que pone, efectivamente al cambiar salta un breve error en cuanto a la consulta en la base de datos...¿No podría hacer algo así? es decir comparar o ver que si se introduce código en el selectapar de la barra de navegación diferente a las opciones que existen muestre en un breve error en cuanto a la consulta...??

Nose estoy un poco liado...si me recomiendas al 100% el cambio me pongo a ellos y la dejo como me has dicho


Gracias Vosk!

Etiquetas: contenido, mediante, select, variable
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 03:07.