Foros del Web » Programando para Internet » PHP »

Página dinámica que varía según peticiones

Estas en el tema de Página dinámica que varía según peticiones en el foro de PHP en Foros del Web. Quiero reformular una duda que antes he expresado mal y que creo que pese a la buena voluntad de quien me quería ayudar no ha ...
  #1 (permalink)  
Antiguo 22/12/2010, 13:31
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Página dinámica que varía según peticiones

Quiero reformular una duda que antes he expresado mal y que creo que pese a la buena voluntad de quien me quería ayudar no ha podido ser respondida, por mi culpa, obvio.

Tengo una página web, que trata por ejemplo sobre la flora y la fauna, consta de tres partes: A (donde aparecen las diferentes especies animales con categorías y subcategorías según sean vertebrados, invertebrados, etc.), B (categorías y subcategorías de especies vegetales) y C una página dinámica en PHP que segun la subcategoría muestra la lista completa de especies con sus nombres en latín, descripción y tal.

Ahora bién, mientras que C es dinámica y en PHP, de momento A y B que yo sepa son estáticas mientras no sea necesario darles extensión .php.

Hay una base de datos y yo con una función predefinida creo un array asociativo y puedo imprimir sin problemas la información de 1, 2, 3... o todos los campos de la tabla. Sin embargo no se como hacer que unas veces la página dinámica muestre unos u otros cuando el usuario seleccióne en A o en B una subcategoría.

Entiendo que lo práctico es que al pulsar un enlace, hipervínculo o lo que se quiera considerar, no se, se envíe una orden de cargar la página C con la petición de un determinado campo.

Un usuario me ha hablado de hacer un get, pero me suena que no ha entendio la pregunta bien, o yo no lo he entendido a el. Gracias.
  #2 (permalink)  
Antiguo 22/12/2010, 14:26
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 14 años
Puntos: 13
Respuesta: Página dinámica que varía según peticiones

Si, lo que te dijo esta bien, enviar por get la categoria a tu pagina dinamica para cargar los tados. Un ejemplo de que es get, muy rápido es si creas un enlace a www.example.com/dinamica.php?categoria=1
Y en dinamica.php pones:
Código PHP:
<?php
echo ($_GET['categoria']);
?>
La salida sería un 1. Esto es muy básico, pero es para que veas que es lo que buscas, lee sobre el tema y te darás cuenta que es muy sencillo y sin demaciadas complicaciones.
  #3 (permalink)  
Antiguo 22/12/2010, 14:32
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 14 años
Puntos: 51
Respuesta: Página dinámica que varía según peticiones

Tal vez es algo así lo que buscas:

Código PHP:
switch($_GET['categoria']) {
  case 
1:include("A.php");break;
  case 
2:include("B.php");break;

Que la extensión sea php, es solo para ahorrarte problemas a la hora de incluir un .html.
  #4 (permalink)  
Antiguo 22/12/2010, 15:46
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Respuesta: Página dinámica que varía según peticiones

A ver muchas gracias, ya está solucionado.

Como decíais había que hacerlo con $_GET y probando probando he conseguido poner el enlace bién.


La cosa absolutamente quedaría así (en negrita la aportación):


mysql_connect($servidor, $usuario, $clave);

mysql_select_db('base_de_datos');


$categoria = $_GET['categoria'];


$sql = "SELECT * FROM tabla WHERE campo = '$categoria' ORDER BY id ASC LIMIT 0, 2";

$query = mysql_query($sql);

while($fila = mysql_fetch_assoc($query)) {
echo $fila['campo_general'];

________________________________________________

Luego el enlace en un archivo html que quedaría así:

<a href="dinamica.php?categoria=categoria">Enlace a página PHP</a>


PD: Os quiero :D jeje.
  #5 (permalink)  
Antiguo 22/12/2010, 16:01
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 14 años
Puntos: 13
Respuesta: Página dinámica que varía según peticiones

Código PHP:
$categoria mysql_real_escape_string($_GET['categoria']); 
Así nos evitamos las famosas inyecciones sql. Recordar la ley fundamental para evitar los hackeos, nunca confiar en las entradas, siempre hay que validar TODO lo que se pueda.
  #6 (permalink)  
Antiguo 23/12/2010, 00:18
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 14 años
Puntos: 11
Respuesta: Página dinámica que varía según peticiones

Cita:
Iniciado por areslepra Ver Mensaje
Código PHP:
$categoria mysql_real_escape_string($_GET['categoria']); 
Así nos evitamos las famosas inyecciones sql. Recordar la ley fundamental para evitar los hackeos, nunca confiar en las entradas, siempre hay que validar TODO lo que se pueda.
Vaya, gracias, he leído cosas sobre eso de las inyecciones sql.

Te agradezco que me des ese consejo porque yo no sabía que se pudiera mejorar la seguridad usando $_GET, cuando leí el tutorial de foros del web decían que get era peligroso porque no cifraba los datos que se enviaban, por lo tanto era más seguro el método post.

¿Sabes que hace la función mysql_real_escape_string ()?


[Edito]


Bueno he encontrado esto sobre la función que nombras:


"string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] )

Escapa caracteres especiales en la cadena no escapada, teniendo en cuenta el conjunto de caracteres actual de la conexión para que sea seguro usarla en mysql_query(). Si se van a insertar datos binarios, esta función debe ser usada.

mysql_real_escape_string() llama la función de la libreria de MySQL mysql_real_escape_string, la cual antepone backslashes a los siguientes caracteres: \x00, \n, \r, \, ', " y \x1a.

Esta función siempre debe (con pocas excepciones) ser usada para hacer los datos seguros, antes de enviar una consulta a MySQL. "


Aquí ponen un ejemplo de su uso, de lo cual deduzco que en la propia conexión y en cada query también hay que usarlo.

Example #1 Ejemplo simple de mysql_real_escape_string()

<?php
// Connect
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());

// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
?>

Example #2 Un ejemplo de ataque SQL Injection

<?php
// Query database to check if there are any matching users
$query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'";
mysql_query($query);

// We didn't check $_POST['password'], it could be anything the user wanted! For example:
$_POST['username'] = 'aidan';
$_POST['password'] = "' OR ''='";

// This means the query sent to MySQL would be:
echo $query;
?>

¿En mis query habría que usarlo cómo se podría hacer?

De todas maneras leeré más porque me falta mucho


* Note:

Si magic_quotes_gpc está habilitado, primero aplique stripslashes(). Si se usa esta función en datos que ya han sido escapados, se escaparian dos veces los datos.

Última edición por Gambinoh; 23/12/2010 a las 00:32
  #7 (permalink)  
Antiguo 23/12/2010, 09:12
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 14 años
Puntos: 13
Respuesta: Página dinámica que varía según peticiones

mysql_real_escape_string como dice escapa los caracteres que pueden ser "peligrosos". Si haces uso de esta función, en las variables no hace falta hacer stripslashes.
Con respecto a validar, como dije, simpre que sea información que no manejes vos (ingresada por usuario, envada por post o por get) se deben validar los datos SI o SI, sino el día de mañana te podes llevar sopresas no muy gratas como que mediante una inyección sql te borraron TODA la base de datos, o algún robo de información, por eso siempre que haces uso de información que puede ser manipulada por usuarios se debe validar. En caso de evitar inyecciones con esa función basta, en otros casos tendras que validar el tipo de dato y los caracteres ingresados, pero sobre elk tema hay mucha información, te recomiendo buscar en internet.

Etiquetas: peticiones
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 11:37.