PDA

Ver la Versión Completa : Comprender este codigo (es teoria pura y dura)


papulo
20-12-2005, 13:46:37
Bien, navegando por el google buscando soluciones para mostrar una imagen blob, tras investigar y hacer las pertinentes pruebas, he comprobado que el siguiente codigo funciona a la perfeccion:

/* Mandando las cabeceras de la imagen */
Header("Content-type: image/jpg");
include("libreria_web.php");
/* Verificando la existencia de la imagen */
$query=("SELECT RESOURCE_ID, RESOURCE FROM RESOURCES");
$consulta=consulta_bd($query);
while ($fila = ibase_fetch_object ($consulta))
{
ibase_blob_echo($fila->RESOURCE);
}

Ahora vienen las preguntas.

¿Que es el HEADER? ¿Que funcion tiene exactamente? Es que no acabo de comprender su funcionamiento, si lo comento, deja de mostrarme la imagen.

Por otra parte, con esa consulta, solo me muestra 1 imagen de las 2 que hay que la tabla ¿por que? Si la ejecuto en el shell de SQL me devuelve las 2 celdas que hay en esa tabla con imagenes.


Si añado despues de ibase_blob_echo un "echo ($fila->RESOURCE_ID);"
no me lo muestra por pantalla.

De momento dejo de dar la brasa, y espero que me podais resolver estas dudas.

Gracias por leerlo y un saludete a tod@s.

Papulo.

dec
20-12-2005, 14:59:44
Hola,

NO soy el más indicado para explicar nada en este caso, por lo menos, pero, me atrevo a decir algo y aun algos al respecto:



¿Que es el HEADER? ¿Que funcion tiene exactamente? Es que no acabo de comprender su funcionamiento, si lo comento, deja de mostrarme la imagen.
Tiene que ver con el protocolo HTTP, si no estoy equivocado. Se trata de a "Header" o la "cabecera" que un Servidor de Internet manda al navegador y a este le sirve para X cosas. Por ejemplo, la cabecera que utilizas ahora está indicándole al navegador que ese documento es de tipo imagen: si la quitas no se lo estás diciendo y de ahí el problema.




Por otra parte, con esa consulta, solo me muestra 1 imagen de las 2 que hay que la tabla ¿por que? Si la ejecuto en el shell de SQL me devuelve las 2 celdas que hay en esa tabla con imagenes.
Bueno, esto ya no es atrevimiento, es meterme en camisas de once varas, como suele decirse. Me parece que todo funciona como se espera: no entiendo el bucle "while", o, por mejor decir, creo que al cabo solamente ves una imagen de las dos que hay porque la salida de la función "ibase_blob_echo" muestre primero una imagen y luego la otra, rápidamente, de forma que tú únicamente veas la última disponible. No sé. Dudo de este párrafo que ahora acabo.



Si añado despues de ibase_blob_echo un "echo ($fila->RESOURCE_ID);"
no me lo muestra por pantalla.
Creo que respecto a eso deberías escribir algo como:



echo $fila['RESOURCE_ID'];

kayetano
20-12-2005, 16:03:54
Hola

Lo primero y mas importante, te veo muy muy muy verde en php, y lo peor de todo es que no tienes ni siquiera un manual de PHP, lo digo porque no es lógico que preguntes que es "header" si tubieras un manual PHP.

Segundo, veo que no solo estas verde en PHP sino que también lo estas en programación, esto es mucho, ya que no entiendes realmente lo que estas haciendo y simplemente haces COPY/PASTE.

Por último, el código que has puesto no tiene ni pies ni cabeza, en principio solo se puede mostrar una imagen en una llamada este script, ¿porque? porque hay que mostrar la cabecera cada vez que se muestra una imagen y dicha cabecera se debe mostrar antes de nada. Por lo tanto si quieres mostrar varias imágenes tendrás que hacer varias llamadas a este script.

/* Mandando las cabeceras de la imagen */
header("Content-type: image/jpg");
// Estaría bien que pusieras alguna que otra cabecera mas
header( "Content-Length: ".$tamano );

include("libreria_web.php");
/* Verificando la existencia de la imagen */
$query=("SELECT RESOURCE_ID, RESOURCE FROM RESOURCES WHERE ID=$X");
$consulta=consulta_bd($query);
ibase_blob_echo($fila->RESOURCE);


No tengo ni idea de como van las funciones IBASE pero supongo que será algo parecido.

Tambien puedes utilizar las librerías GD para el tratamiento de imágenes.

El mejor consejo que te puedo dar es que te cojas algun manual de "metodología de la programación" y otro de "PHP".

Migpal
20-12-2005, 21:51:00
Que buen link, hay que aprender ha publicar preguntas en los foros.

papulo
21-12-2005, 09:40:06
Lo primero de todo, gracias DEC por responder, gracias Kayetano por el toque de atencion.

Segundo, estoy aprendiendo, aprendiendo de verdad, chino chano y hay multitud de cosas que no se, que no entiendo y que probablemente sean autenticas burradas al preguntarlas, pero aun asi, prefiero un toque de Kayetano, y que me encamine hacia donde me ha de encaminar, que simplemente callarme y tirar hacia adelante acumulando fallos de base. Me gusta esto de programar (aunque no lo haga nada bien :(), pero quiero llegar a tener el mejor novel posible y pondre todo mi empeño en alcanzar esa meta.

Tercero, manuales tengo un par, siendo exactos son este (http://www.htmlpoint.com/php/guida/) y este (http://www.desarrolloweb.com/manuales/12/),me los he leido de pe a pa, pero no hablan de los headers y el tema de los campos blob dentro de las bases de datos, por poner solo dos ejemplos de cosas que van apareciendo y no encuentro en estos manuales. Luego hay otros que he visto pero estan desfasados, o cosas similares.

De todas formas, Kayetano, estaria encantado de que me indicaras links que, dada tu experiencia, creas que son realmente importantes y aleccionadores, sobre PHP y metodologia de la programacion.

Estoy aqui para aprender todo lo posible y mas, asi que espero con ganas toda ayuda.

Un saludo.

Papulo.


EDITO:
Leyendo la ultima parte de tu respuesta (la de despues del correctivo :D), veo que me dices que las imagenes las puedo motrar una a una, por lo que tendre que llamar a esa funcion cada vez que quiera mostrar una imagen. ¿Es correcto?

No tardes en responder, que estoy ansioso por saber que respondes a lo de los links :o.

Casimiro Notevi
21-12-2005, 10:26:52
Papulo, mira si te sirve este enlace (http://www.programacion.com/php/articulo/datos_blob/) sobre php y campos blob

papulo
21-12-2005, 10:31:54
Papulo, mira si te sirve este enlace (http://www.programacion.com/php/articulo/datos_blob/) sobre php y campos blob
Ahora mismo me pongo manos a la obra y lo leo.

Gracias, apañero.

kayetano
21-12-2005, 10:47:37
Hola

Este es un buen enlace de PHP http://www.php.net/docs.php, puedes descargarte una guia de referencia y en la documentación en línea suelen aparecer comentarios y propuestas de los usuarios sobre cada una de las funciones.

Leyendo la ultima parte de tu respuesta (la de despues del correctivo ), veo que me dices que las imagenes las puedo motrar una a una, por lo que tendre que llamar a esa funcion cada vez que quiera mostrar una imagen. ¿Es correcto?
Efectivamente se pueden mostrar varias imágenes en un mismo documento, pero debes llamar varias veces al script que muestra la imagen, yo utilizo un script que he llamado "dame_foto.php" y lo ejecuto tantas veces como fotos quiero mostrar de la siguiente forma:

<body>
...
<img src="dame_foto.php?id=1">
<img src="dame_foto.php?id=2">
...
</body>

Simplemente le paso el identificativo de la foto/imagen que quiero mostrar y actua como si fuera una imagen normal y corriente.

Perdona si te he molestado pero como comprenderás se hace muy dificil intentar explicar conceptos a alguien sin base (sobre todo en programación). Además lo que para ti son grandes dudas para mi son cosas triviales, como comer y beber, por lo que me desespero de vez en cuando. De todas formas insisto en que necesitas mucha formación y por lo general es mejor que te empapes de información antes de embarcarte en algún proyecto.

papulo
21-12-2005, 10:56:29
Triviales o no, hace bien poco que me he puesto con esto y me cuesta ir avanzando solo, por eso no dudo en postear mis dudas (por triviales que sean ahora). Solo espero ayuda por parte de la gente experimentada, para hacer yo lo mismo en un futuro por los que se encuentren en mi situacion.

Ese manual lo tengo ya, pero por la falta de base, no me resulta lo suficientemente util siempre (que mas de cinco y seis dudas me ha resuelto ya :eek:)

¿Consejos para tener una buena base? ¿Lecturas recomendadas? ¿Algun metodo milagroso rollo matrix+USB?

Gracias a todos por ir respondiendo.

Papulo.

kayetano
21-12-2005, 11:14:15
Hola

No es dificil encontrar informacion en internet, por ponerte un ejemplo puedes buscar en google (sin comillas):

"metodologia de la programacion apuntes"
"fundamentos de programacion apuntes"

yo en un vistazo rapido he encontrado esto (http://apuntes.rincondelvago.com/apuntes_universidad/ingeniero_tecnico_informatica_sistemas/metodologia_tecnologia_programacion)

papulo
21-12-2005, 11:38:49
Yo habia buscado por "manual metodologia programacion", sin comillas tambien. ¿Cual es la diferencia entre apuntes y manual? Me refiero a nivel de tipo de resultados y el valor de estos mismos.

EDITO: El tema de los fundamentos de programacion, aunque parezca lo contrario, no lo llevo mal. Si bien, hasta hace nada no me habia puesto a programar yo mismo las cosas y por eso me estoy dando de cabezazos con cosas tan triviales. Acostumbrado a diseñarlo sobre el papel y de forma mas generica, con un compañero que lo programaba todo.
Ahora me encuentro con que implementar las cosas me cuesta por no dominar ningun lenguaje. No me estoy justificando, solo intento dar explicacion a mis toneladas de post triviales (pero por lo menos intento seguir la guia de estilo y ponerles titulos coherentes para un futuro XD)

Casimiro Notevi
21-12-2005, 12:00:15
(pero por lo menos intento seguir la guia de estilo y ponerles titulos coherentes para un futuro XD)je,je,je... ;)

kayetano
21-12-2005, 12:30:21
Hola

Yo habia buscado por "manual metodologia programacion", sin comillas tambien. ¿Cual es la diferencia entre apuntes y manual? Me refiero a nivel de tipo de resultados y el valor de estos mismos.

Yo considero MANUAL un texto que explica como utilizar algo además suelen salir resultados de libros que se venden, por lo tanto en este caso buscaria por DOCUMENTACION, pero recordando mis años de estudiante, he considerado más apropieado buscar por APUNTES, ya que se pueden encontrar apuntes editados por las universidades, intitutos o por estudiantes.

Cuentan que si no esta en internet es que no existe, el problema radica en como encontrarlo ;)

papulo
21-12-2005, 12:40:21
Como conclusion del hilo, ahora estoy haciendo una funcion para mostrar la imagen por pantalla, llamare a los indices de las imagenes que desee mostrar, los guardare en un array, y desde alli los ire sacando y ejecutando en la funcioncilla para mostrar las imagenes.

Gracias a todos los que habeis aportado vuestro granito de arena, espero que esto le sirva a algun pececillo como yo en un futuro.

Saludetes.

EDITO: ¿Algun alma caritativa me explica que demonios son los HEADERS o me da un enlace que lo explique de forma extensa y detallada (por supuesto, tambien clara)?

Que la explicacion de DEC me aclara algo, pero quiero comprenderlo todo.

kayetano
21-12-2005, 12:47:32
Hola

No se, no se, no creo que te funcione como funcion, crea un archivo y llamalo como te he indicado antes.
<img src="ver_imagen.php?id=1">
Siendo "ver_imagen.php" el archivo con el script que muestre la imagen.
Te explico el porque, las cabeceras se deben mostrar al principio de cualquier comunicacion http, antes de enviar nada, por lo tanto si empiezas a cargar código HTML o la primera imagen o cualquier cosa, ya no puedes enviar otra cabecera en el mismo script php (no se si me explico). Debes realizar varias llamadas a un mismo archivo (esto generará diferentes conexiones HTTP) y no a una funcion.

papulo
21-12-2005, 13:03:05
Vale, ya lo entiendo.

Lo he hecho y funciona perfectamente. Postearia el codigo, pero mi autoestima tiene un limite de vapuleo, y hoy me han dado pero bien de bien (para mejorar, lo se lo se).

Vale, aun asi me siento masoca, ahi va:

Este es Imagenes.html, quiero mostrar dos imagenes de la DB.

<!doctype html public "-//W3C//DTD HTML 4.01//EN">

<html>

<head>
<title>Imagenes</title>
</head>

<body>
<img src="Imagenes2.php?id=1"><br>
<img src="Imagenes2.php?id=2">

</body>
</html>


Y aqui esta Imagenes2.php, se encarga de realizar la consulta a la BD en funcion del identificador que le paso previamente desde la otra pagina, capturar el elemento de la DB y mostrar el campo BLOB deseado.

<?php
/* Mandando las cabeceras de la imagen */
Header("Content-type: image/jpg");
include("libreria_web.php");
/* Verificando la existencia de la imagen */
$query=("SELECT RESOURCE_ID, RESOURCE FROM RESOURCES WHERE RESOURCE_ID=$id");
$consulta=consulta_bd($query);
$fila = ibase_fetch_object ($consulta);
ibase_blob_echo($fila->RESOURCE);
?>

Gracias tios, si algun dia hacemos una quedada os invito a unas rondas por compartir informacion.

Saludetes.

kayetano
21-12-2005, 14:17:06
Hola

Ok, ahora podrías pulir un poco mas Imagenes2.php, por ejemplo:
- Añadir las cabeceras y tamaño y nombre de la imagen.
- Controlar que el ID es correcto y existe dentro de tu base de datos.
- Filtrar la variable $id para eliminar codigo malicioso.

Y si te quieres complicar la vida puedes utilizar las librerías GD para recortar y redimensionar las imagenes.

PD no te mosquees, el problema es que yo soy muy exigente con todo.

papulo
21-12-2005, 16:11:10
Ok, ahora podrías pulir un poco mas Imagenes2.php, por ejemplo:
- Añadir las cabeceras y tamaño y nombre de la imagen.
Esta informacion no la necesito, ¿es realmente necesaria?

- Controlar que el ID es correcto y existe dentro de tu base de datos.
Esto es una practica que tengo que adoptar pero a la de ya mismo, siempre implemento las funciones y me olvido de añadir el codigo para comprobar que ha fallado, y por supuesto, si falla, no me entero nunca de donde.

- Filtrar la variable $id para eliminar codigo malicioso.
Esto simplemente no tengo ni papa, ¿que quieres decir exactamente?


PD no te mosquees, el problema es que yo soy muy exigente con
todo.No me mosqueo, para nada, agradezco el esfuerzo de todos y cada uno respondiendome.

Saludos.

Papulo.

kayetano
21-12-2005, 16:23:46
Esta informacion no la necesito, ¿es realmente necesaria?
Hombre .... puestos a trabajar poco te diré que no es totalmente necesario, pero yo soy de los que si hago algo quiero hacerlo bien, ademas:
- no cuesta nada poner las cabeceras
- estas aprendiendo y nunca biene mal conocer mas sobre las cabeceras.
- igual en un futuro lo necesitas y ya lo tienes hecho.
- cuanta mayor información proporciones mejor para el navegador (y las compatibilidades).

Esto es una practica que tengo que adoptar pero a la de ya mismo, siempre implemento las funciones y me olvido de añadir el codigo para comprobar que ha fallado, y por supuesto, si falla, no me entero nunca de donde.
Este punto no es aconsejable, es que casi es obligatorio.

Esto simplemente no tengo ni papa, ¿que quieres decir exactamente?
En internet existe gente que se aburre mucho, y de vez encuando uno de esos pasa por tu web y le da por trastearla o juguetear con ella.
Las tecnicas mas normales son intentar meter codigo, ya sea PHP o SQL, en las variables conocidas, en tu caso $id. Yo utilizo algunas funciones dependiendo del nivel de seguridad que necesite, por ejemplo

function seguridad( $valor ) {
return addslashes( strip_tags( $valor ) );
}

Con esto eliminas tags y añades comillas a todo lo que sea necesario, algo facil para empezar. Con esto puedes filtrar cualquier variable que no tenga una procedencia segura.

papulo
21-12-2005, 16:29:12
Hombre .... puestos a trabajar poco te diré que no es totalmente necesario, pero yo soy de los que si hago algo quiero hacerlo bien, ademas:
- no cuesta nada poner las cabeceras
- estas aprendiendo y nunca biene mal conocer mas sobre las cabeceras.
- igual en un futuro lo necesitas y ya lo tienes hecho.
- cuanta mayor información proporciones mejor para el navegador (y las compatibilidades).
Okis. Capto el mensaje, pero un ultimo favor con este tema. He mirado la ayuda oficial de PHP, esta funcion sale, pero la explicacion me deja un poco :confused:, asi que si me tuvieras que explicar por primera vez el tema de las cabeceras, ¿como lo harias? (si tienes un enlace que lo explique bien, lo pones y lo leo gustosamente)

En internet existe gente que se aburre mucho, y de vez encuando uno de esos pasa por tu web y le da por trastearla o juguetear con ella.
Las tecnicas mas normales son intentar meter codigo, ya sea PHP o SQL, en las variables conocidas, en tu caso $id. Yo utilizo algunas funciones dependiendo del nivel de seguridad que necesite, por ejemplo

function seguridad( $valor ) {
return addslashes( strip_tags( $valor ) );
}

Con esto eliminas tags y añades comillas a todo lo que sea necesario, algo facil para empezar. Con esto puedes filtrar cualquier variable que no tenga una procedencia segura.la variable $valor supongo que es la que paso del .html al .php ¿cierto? Es que tal y como lo has puesto, se que pone, como va, pero no se cuando la llamas.

Asias neng.

Papulo.

EDITADO: Lo siento si soy cansino preguntando, pero es que la programacion, cada dia me resulta mas y mas fascinante, eso unido a mi personalidad curiosa, hacen una combinacion explosiva. ¡Jejejeje!
Acabo de leerme las funciones addslashes y strip_tags en la ayuda de PHP, la primera sirve para anteponer la "\" a ciertos caracteres y la otra para eliminar las etiquetas HTML y PHP de la cadena dada. Aunque no entiendo bien el concepto de "seguridad" que le das a la web con esa funcion. Lo de introducir codigo en mi pagina a traves del navegador si me ha quedado claro.

REEDITO: ¿Cual es tu definion de "variable que no tenga una procedencia segura"? :confused: Y ya puestos, la de variable segura se agradeceria tambien. :D

kayetano
21-12-2005, 16:45:28
Hola
Okis. Capto el mensaje, pero un ultimo favor con este tema. He mirado la ayuda oficial de PHP, esta funcion sale, pero la explicacion me deja un poco , asi que si me tuvieras que explicar por primera vez el tema de las cabeceras, ¿como lo harias? (si tienes un enlace que lo explique bien, lo pones y lo leo gustosamente)
Algunos respuestas mas arriba te explicaban el concepto de cabecera, pero probaré a darte una explicación.
Las cabeceras sirven para proporcionar información al navegador ¿que tipo de información? pues hay cabeceras de todo tipo y color, desde indicar el nombre de un archivo/imagen a solicitar al navegador que no coga la pagina de la cache, version del protocolo HTTP, y más.
En tu caso como poco habría que indicar tres cabeceras:
- Nombre.
- Tamaño.
- Tipo (este es la que has puesto).

la variable $valor supongo que es la que paso del .html al .php ¿cierto? Es que tal y como lo has puesto, se que pone, como va, pero no se cuando la llamas.
vale, yo lo utilizo asi:

...
$id = seguridad( $id );
...

Claro esta antes de utilizar ese valor.

roman
22-12-2005, 17:28:50
Hola,

Este ha sido un hilo muy interesante. Muchas gracias al compañero kayetano por todas sus explicaciones. La verdad es que la "vapuleada" también me ha alcanzado. Mi conocimiento de los headers no va más allá de la explicación que dio David al principio y aunque ocasionalmente debo usarlos, siguen siendo un área oscura para mí con tantas variantes que tienen.

Yo lo de las imagenes no es que no lo supiera, es que ni siquiera me había pasado por la cabeza que se pudiera hacer algo así, de pasar en src un script.

Otra vez gracias kayetano, habrá que empezar el nuevo año estudiando más a fondo esta cuestión.

// Saludos

papulo
29-12-2005, 12:19:35
Como este hilo me parece muy, muy, muy, pero que muy, interesante, y como cn el titulo no me luci un pimiento, añado este POST con distintas palabras que puedan ayudar a encontrarlo cuando se realice una busqueda en el foro.

FIREBIRD, PHP, MOSTRAR, IMAGEN, IMAGENES, SEGURIDAD, CONSULTAR, INTERBASE.

A titulo personal, casi diria que me parece una buena idea y todo, :D ¡¡¡Feliz año a tod@s!!!

Casimiro Notevi
29-12-2005, 14:13:50
A titulo personal, casi diria que me parece una buena idea y todo, :D ¡¡¡Feliz año a tod@s!!!:D gracias, y también para tí ¡¡¡Feliz año a tod@s!!!

kayetano
12-01-2006, 17:47:58
Hola

hoy buscando cosas en el foro he encontrado estas preguntas y paso a contestar.

REEDITO: ¿Cual es tu definion de "variable que no tenga una procedencia segura"? Y ya puestos, la de variable segura se agradeceria tambien.

Cualquier variable con la que trabajes que porceda del exterior de tu página ya sea POST, GET, COOKIE, ... es una variable no segura, ¿por que? porque cualquier persona puede meter codigo, ¿que código? codigo SQL o PHP ¿como evitarlo? o lo eliminas o lo marcas como texto puro y duro.
Entonces una variable segura es aquella que, viniendo de fuera, ha sido filtrada o aquella que solo se usa internamente y que no se puede modificar desde el exterior de la página, por ejemplo sesiones, variables definidas en una funcion, variables definidas en cuarquier parte del PHP pero que son desconocidas para el usuario de la página (estas se puede decir que son de riesgo)