Quantcast
No existe ninguna imagen

Como crear un juego de registro (recordset) sencillo o avanzado usando Dreamweaver CS5

agosto 22nd, 2010

Este artículo es parte de la serie de enfocada a Dreamweaver y es, a la vez, una continuación de artículo que explica como configurar una conexión entre DW y MySQL. Debido a ésto último voy a añadir también las instrucciones de como crear una tabla sencilla con 4 campos usando phpMyAdmin.

Crear una tabla usando phpMyAdmin

Primero abrimos phpMyAdmin, le damos click a la base de datos que vamos a usar y donde dice: Create new table on database *el nombre de tu database escribimos el nombre de la tabla que deseamos crear el campo “Name” y “Number of fields” especificamos el número de campos de la misma. Siempre puedes agregar o eliminar campos después:

En la próxima ventana introduces la información específica de los campos a crearse. En mi caso yo voy a crear 4 campos:

  1. id – el id de la tabla (integer, incremental).
  2. nombre – sevirá de título (varchar, allow null).
  3. descripción – descripción mas información (longtext, allow null)
  4. fecha – aquí se guardará la fecha en el que se hizo el insert (datime)

Una vez hecho puedes llegar a la tabla dando un click a la base de datos. Si le das click a icono de “Structure” se mostrarán los campos dentro de la tabla:

Ahora insertamos información en nuestra nueva tabla (Insert) para tener algo con qué trabajar. Vamos a la pestaña de “Insert” y agregamos información adecuada. En mi caso he puesto información genérica. También, en mi caso dejo los id en blanco ya que los he asignado como autoincremental:

Creación de un juego de registros (recordset) sencillo en Dreamweaver

Pasamos después a Dreamweaver y ahí podremos ver la nueva tabla en el panel de Base de Datos (Databases):

Para crear un Database vamos al panel de Vinculaciones (Bindings) y escogemos Juego de Registros (Recordset):

En la ventana de Recordset defines el tipo de información que quieres extraer dela base de datos:

  1. Nombre (Name): Se especifica el nombre del recordset. Se puede dejar el que viene ya puesto pero lo mejor es que se ponga un nombre mas descriptivo, ‘usuarios1′ por ejemplo. Los nombres de los recorset tienen que ser únicos por páginas y sólo pueden ser letras, números, guión (-) y underscore (_). Nada de caracteres especiales ni empezar el nombre con número.
  2. Conexión (Conection): Se escoge la conexión
  3. Tabla (Table): Se escoge la tabla de la base de datos.
  4. Columnas (Columns): En el campo columna se escogen los campos que se van a estar utilizando en el script. También se pueden escoger todos, aunque siempre es mejor sólo utilizar los campos necesarios.
  5. Filtros (Fiters): Con el campo filtro hacer que la información sea más específica, por ejemplo, si recoger la entrada donde el nombre del usuario sea “Juan” puedes fácilmente hacer que el campo nombre concuerde con el la valor entrado “Juan”. Puedes también utilizar valores como variables URL o variables enviados de un formulario.
  6. Ordenar (Sort): En el ‘sort’ se organiza el orden de los resultados, ascendente o descendente.

Este es un ejemplo de como escoger campos específicos y como usar los campos de filtro y sort. El la siguiente imagen se escogen sólo los campos “nombre” y “descripcion” de la tabla “tabla1″. Se le ha agregado un filtro para que la consulta solo devuelva los registros donde el valor del campo “id” sea igual a la variable de formulario “id” y también se ha especificado que el resultado se organice de forma descendente:

Consultas complejas (modo avanzado)

En el caso que se quiera hacer consultas complejas (más de un filtro y/o organizaciones de contenido complejas) se utiliza el modo avanzado (advanced). Para poder hacer este tipo de consultas es necesario tener claro como se construye una consulta SQL. Lo más recomendable es estudiar el lenguaje ya que el modo GUI del modo avanzado puede llegar a ser también bastante limitado a veces. Dicho esto, también puedo agregar que el modo avanzado resulta muy útil y es muy fácil de usar una vez se sabe usar. Para usarlo le damos al botón de “Avanzado” (Advanced):

Lo primero que vemos es que los dos primeros campos son iguales (nombre y conexión). Los otros campos ha sido removidos y ahora tenemos tres áreas nuevas:

  1. SQL: Área donde escribimos nuestra consulta SQL.
  2. Variables (Variables): Área donde creamos las variables que usaremos en los filtros.
  3. Elementos de base de datos (Database Items): Las tablas y los campos de la base de datos.

Lo importante es saber que el modo avanzado funciona igual que el sencillo. Los botones que están en el área de Elementos de la base de datos son los que agregan elementos a la consulta.

  • El botón SELECT tiene que ver con la selección de columnas o de la tabla completa.
  • Con el botón WHERE añades uno o múltiples filtros.
  • Por último, el botón ORDER BY especifica uno o más tipo de como organizar el resultado.

SELECT

Si queremos hacer una selección de todos los campos de una tabla escogemos la tabla y después le damos click al botón de Select. Por ejemplo,en la siguiente imagen he seleccionado todos los campos de “tabla1″ :

De igual forma, si queremos escoger campos individuales damos click al campo y luego al botón SELECT con cada uno de los campos deseados. En el próximo ejemplo he escogido los campos “id”, “nombre” y “fecha”:

WHERE

Para agregar un filtro lo más recomendable es crear una variable primero. NO es realmente necesario para que funcione el script pero, de esa forma, DW crea el código necesario para validar los valores antes de que estos ínter-actúen con la base de datos. Creamos una variable dándole click al símbolo de más que está en la sección de variables:

En la ventana de “Añadir variable” (Add Variable) DW te pide varios campos:

  1. Nombre (Name): Nombre de la variable. Es el nombre que usará DW cuando crea la variable. El nombre debe obedecer las reglas de una variable (en este caso, una variable PHP). Sólo letras de la “a” a la “z“, números del 0 al 9, guiones ( – ) y “underscores” ( _ ). No caracteres especiales (ñ, acentos, etcétera).  Por último, se debe comenzar el nombre con una letra.
  2. Tipo (Type): El tipo SQL del valor de la variable. DW los agrupa según el tipo de código que va a crear.
  3. Valor Defecto (Default Value): Es el valor de la variable en caso de que no se especifique o llegue vacía al momento de ejecutar el script. DW usa “-1″ cuando en código creado usando el modo sencillo. Este valor asegura que la consulta no devuelva ningún resultado. Si necesitas que tu variable tenga un valor defecto puedes cambiarlo a lo que necesitas.
  4. Valor de ejecución (Runtime Value): Es el valor que se usará al momento de ejecución del script. En el modo sencillo DW crea el código dependiendo del tipo de variable. En el modo avanzado se debe agregar el código PHP además del nombre de la variable. Los tipos son los siguiente. Están acompañados con sus respectivos códigos PHP:
    • Variable URL (URL VAriable) (GET). Variable pasada a través del “query string
      $_GET['nombre_de_la_variable']
    • Variable de formulario (Form Variable) (POST). Variable pasada a través de un formulario.
      $_POST['nombre_de_la_variable']
    • Cookie (Cookie). Variable pasada a través de una cookie.
      $_COOKIE['nombre_de_la_variable']
    • Variable de sesión (Session Variable). Variable pasada a través de una sesión.
      $_SESSION['nombre_de_la_variable']
    • Variable de servidor (Server Variable) . Variable tomada de una de las variables del servidor.
      $_SERVER['nombre_de_la_variable']
    • Variable arbitraria. También se puede usar una variable que ya ha sido creada anteriormente o función PHP que devuelva un valor.
      $pedro
      date('Y-m-d H:i:s')

En el siguiente ejemplo, la variable “variable1″ es de tipo “texto”, su valor defecto es “-1″ y la variable es enviada vía un formulario:

Una vez creada la variable podemos agregar un filtro. Seleccionamos el campo que usaremos en el filtro y le damos clic al botón de WHERE:

Esto agregará el nombre del campo que vamos a usar. La variable y la condición la tenemos que agregar manualmente. Aquí usaremos el operador o condición correspondiente dependiendo de los valores que se quieren obtener de la base de datos . En ese caso he usado igual que “=” para que la consulta devuelva los registros donde el valor del campo ‘nombre” sea igual a la variable de formulario “nombre”:

Para usar una constante no es necesario crear una variable ya que esta no necesita ser validada. Solo tenemos que agregar manualmente. Por ejemplo, la siguiente consulta devuelve los registros donde el campo nombre es igual a la constante ‘Pedro’:

Lo bueno del modo avanzado es que podemos poner múltiples filtros. Sólo tenemos que seguir creando variables y agregando tablas y condiciones. El próximo ejemplo devuelve los registros donde el valor del campo nombre es igual a “pedro” y el valor del campo descripcion es igual a la variable de formulario “descripcion” (variable1):

DW sólo usa el operador lógico ”AND” (Y). Con este operador se tienen que cumplir todas las condiciones. En el último ejemplo se tienen que cumplir las dos condiciones (filtros). Para más información acerca de otros operadores lógicos visite la página de MySQL que trata ese tema.

*Nota: No se pueden crear variables  que no se van a utilizar. DW lanzará un error si existe alguna que no se está usando en la consulta.

ORDER BY

Con el botón de ORDER BY se controla la organización del resultado de la consulta. Por ejemplo, para que el resultado se organice con respecto al campo nombre escogemos el campo le damos clic al botón de ORDER BY.  Por alguna razón, DW no incluye una opción para controlar el modo de organización (Ascendente/Descendente) como en el modo sencillo. Si no lo especificamos  la organización siempre será ascendente. Para que sea descendente agregamos “DESC” después del nombre del campo. Podemos también agregar organización múltiple de la misma forma que con los filtros. Estas se separan por comas:

Conclusión

Como mencioné antes, la mejor forma de construir consultas exitosas es entendiendo como se construye una consulta SQL. DW provee funciones sencillas que ayudan a la construcción de consultas básicas, pero estas sólo pueden ayudar en un limitado número de casos. Conocimiento de los lenguajes envueltos (MySQL y PHP en este caso) son necesarios para consultas y sistemas más complejos. Yo recomiendo el foro de Base de datos de Foros del Web para cualquier tipo de duda relacionada no solo a MySQL, sino también otros servidores de bases de datos.

Como instalar WampServer e integrar con Dreamweaver CS5

agosto 5th, 2010
Nota*: Esta forma de conexión (paso 8 y paso 9 al final del tutorial), aunque pueda funcionar para otros tipos de paquetes tipo WAMP, sólo lo he probado para WampServer. No estaré seguro hasta que pruebe las otras dos que pienso cubrir.

Como ya había mencionado anteriormente, voy a estar trabajando en algunos artículos sencillos acerca de Dreamweaver los cuales preceden a otros más complicados que trabajaré en el futuro. Este artículo es el primero de una pequeña serie de como instalar tecnologías que nos permitan tener un ambiente local (o de desarrollo) donde trabajar nuestros websites. Yo personalmente trabajo con Apache, PHP y MySQL en Windows, así que pienso espero cubrir, además de WAMPServer, otros paquetes pre-copilados como easyPHP, XAMPP y, el método que siempre he usado, instalar estas tres tecnologías individualmente. También, aprovechando que estoy haciendo una serie de tutoriales acerca de Dreamweaver, explico como configurar esta instalación con DW para que podamos hacer uso de las funciones de Base de Datos de este editor. Vale la pena mencionar que estoy usando DWCS5 desde hace poco y me he dado cuenta que es bastante diferente en cuanto a configurar el servidor de prueba a la versión CS3, la cual usaba anteriormente.

Lo primero que vamos a hacer es descargar WAMPServer. Una vez descargado dar doble click al instalador. El instalador es bastante fácil de seguir, pero de todas formas aquí dejo algunas capturas de pantalla:

No creo que sea necesario, pero recomiendo que se le dé un “re-start” a la computadora después de la instalación. Yo en mi caso tuve que darlo porque tuve un pequeño conflicto con dropbox, pero después del re-start no tuve nigún problema. Una vez instalado podrán ver el icono de WampServer en la Barra de Tarreas. Si se le da click al icono el menú de opciones aparece.

Al escoger “Localhost” en el menú se abre el navegador defecto con la dirección: http://localhost mostrando la página index.php creada por el programa. En ella se desglosan la configuración de PHP así como también las herramientas disponibles.

Lo próximo es crear una base de datos y un usuario MySQL con el cual podamos conectar con DW. Para eso usamos phpMyAdmin. phpMyAdminn es una herramienta para trabajar con MySQL hecha en PHP, es por eso que trabajamos con el usando el navegador (Yo usualmente no uso phpMyAdmin para crear bases de datos y usuarios, pero ya que es el la aplicación incluida en este paquete la usaré como ejemplo). Podemos llegar a phpMyAdmin usando el enlace que estás en la imagen anterior o dando click al icono de WampServer y escoger phpMyAdmin:

La forma más fácil de crear una base de datos y un usuario es crear el usuario y escoger la opción de que phpMyAdmin cree la base de datos con el mismo nombre y con todos los permisos necesarios. Eso lo podemos hacer desde la pestaña o “tab” de “Privileges”.:

Una vez hecho esto estamos listos para crear una conexión.  Pasamos a DW y preparamos nuestro Sitio o “Site” y configuramos nuestro Servidor de Pruebas.  Hacemos lo siguente:

  1. Creamos una carpeta nueva dentro de la carpeta “www” que está dentro de la carpeta de instalación de WampServer (yo he llamando la mía “website1″ . Ésto lo hacemos para separar nuestros websites, así tendremos una carpeta por cada website. Recuerden no usar espacios, ni acentos, ni eñes (ñ) en ningún nombre de archivos. Carpetas incluidas.
  2. Creamos un nuevo Sitio:  Sitio -> Nuevo Sitio (Site -> New Site).
  3. En la primera ventana pestaña de Sitio (Site) agregamos el nombre del website. Puedes nombrarlo como quieras, es sólo para referencia. También especificas la carpeta que creaste en el paso 1. Como mencioné antes, esta carpeta va a contener todos los elementos de nuestro website.
  4. Vamos a la pestaña de Servidores (Servers). Esta parte, como mencioné anteriormente, es bastante diferente a DW CS3. Podemos asociar tanto servidores de prueba como servidores FTP. Para configurar un servidor  le damos click al botón de más (+) :
  5. Le damos un nombre al servidor. Escogemos Local/Network. Agregamos la carpeta donde está nuestro website. Por último, como URL ponemos “http://localhost/nombre_de_la_carpeta_del_website” en mi caso “website1″.
  6. Vamos a la pestaña de Avanzado (Advanced) y escogemos la tecnología del lado del servidor que vamos a utilizar. En este caso, ya que estamos usando WampServer, escogemos PHP MySQl y le damos a guardar (Save):
  7. Una vez en la ventana de Servidores (Servers) especificamos que el servidor que creamos es un Servidor de Prueba (Testing) y le damos a Guardar (Save).
  8. Ahora creamos la conexión. Vamos al panel de Database y le damos símbolo de más (+) para añadir una conexión:
  9. Por último creamos la conexión. Le damos un nombre (DW hace un archivo PHP con este nombre, así que las reglas de como nombrar un archivo aplican aquí).Ahora agregamos la información que usamos para crear el usuario y la base de datos y le damos a OK:

Y eso es todo. Si no tienes ningún error podrás ver que DW ha creado una nueva carpeta llamada Conexiones (Connections). Dentro de ella podrás ver un archivo PHP con el nombre de tu conexión. Ahora podrán usar las funciones de bases de datos de DW para crear un sistema CRUD sencillo, algo que también estaré cubriendo próximamente.

Resumen (julio 5 – julio 18)

julio 19th, 2010

Ya me he resignado a llamarle a este tipo de artículos “Resumen” y no “Resumen de la semana” porque me doy cuenta que la flojera del fin de semana es difícil de vencer. Lo primero es que, después de anunciar que la tienda de la editorial había sido terminada, nos piden que la des-habilitemos mientras hacen inventario (y yo que estaba tan emocionado). Esperamos que está activa para el próximo mes.

Todos se preguntarán por qué tengo el “intento” de galería de fotos al tope del foro si ni siquiera he puesto ni una foto… Bueno, estoy trabajando en eso. Mi principal dilema ha sido no tener cámara, pero ya pienso comprar una esta semana. Lo otro que me ha atrasado es mi intención de querer hacer un sistema para mostrar mis fotos de flikr o picasa en vez de usar el que ya tengo hecho para el website. Quiero tener todas mis fotos centralizadas en un sitio y ahorrar disco duro a la vez (por ahora estoy prefiriendo flikr). Quiero también poder  fotografiar mis dibujos y poder compartirlos con ustedes… ya veremos

Después de ver lo mucho que el artículo de como subir imágenes usando Dreamweaver está siendo visitado me queda claro que hacer los tutoriales de DW fue una buena idea. Espero poder escribirlos más a menudo. Esta vez pienso seguir con tutoriales más básicos y poco a poco pasar a los más complejos al igual que abundar más en el primero que he hecho.

Estoy bastante emocionado con el sistema de manejo de archivos que estoy haciendo para Don Q. jQuery me ha permitido hacer bastantes cosas las cuales nunca hubiera podido lograr con mis escasos conocimientos de javascript. También he encontrado mejores formas de manejar y organizar las categorías usando PHP. Una vez termine todo hago un artículo con el progreso del mismo.

En cuanto a mi tiempo de ocio, estoy aprovechando que tengo la segunda temporada de The Melancholy of Haruhi Suzumiya para ver las dos temporadas juntas, en orden cronológico esta vez. Ya me he dado cuenta por qué estaba tan perdido la primera vez que vi este anime. En cuanto a música, por fin he escuchado a M.I.A. después de tanto oír acerca de ella. También escuché el último disco de Korn (Korn III – Remember Who You Are), de Edenbridge (Solitaire) y el exquisito EP de Cynic (Re-Traced). Música que reviví: The Pharcyde, Atlantic y 椎名林檎 (Shiina Ringo… No me canso de ella).

Resumen de la semana (jun 28 – jul 04, 2010)

julio 5th, 2010

Aprovecho que tengo cosas que contar esta semana para empezar este nuevo tipo de post. Espero poder hacerlo al final de todas las semanas, o por lo menos mientras mi flojera de los fines de semana me lo permita.

Varias cosas que comentar acerca de esta pasada semana. Lo primero es que he empezado la serie de tutoriales de Dreamweaver con el artículo “Como crear un sistema para subir imágenes usando Dreamweaver, PHP y MySQL“. Creo que fue un error comenzar con algo que para los novatos de DW podría resultar complicado, pero es algo que creo que va a ser muy útil. Mi intención es seguir con tutoriales más sencillos y después pasar a los más complicados. Si hay alguno que les interese que cubra me pueden enviar un mensaje y trataré lo mejor posible de meterlo en el calendario.

En la compañía por fin hemos lanzado (después de unos 3 meses de trabajo) el Website de la Editorial UPR. Todavía se están trabajando algunos detalles pero ya la mayor parte está hecha. Bastante javascript (jQuery). Me gustó el hecho que pudimos aprovechar muchas de las funciones de jQuery UI, como el autoresponder, sorting, dialog, etc. @yadielar (el desarrollador del front end) utilizó jQuery TOOLS para los “sliders” de la página de inicio y para los “tabs” donde se presentan los detalles del producto, pero yo decidí utilizar jQuery UI para todo en el área administrativa. Creo que mi CMS costumizado empieza a tomar la forma que quiero que tome, o por lo menos va bien encaminado. He creado funciones para los formularios del área administrativa pero la mejor parte es que poco a poco me voy moviendo a POO (OOP). Esto me ha permitido crear un sistema de semi-friendly urls, el cual pienso llevar que funcione para todas las áreas del website. Los módulos relacionados ahora ahora funcionan mejor, ya que he optado tablas compartidas por todas las otras (categorías,imágenes, vídeos) .  Ya seguiré contando mis peripecias mientras vayan pasando.

Espero terminar un sistema de manejo de documentos para la compaña de ron Don Q esta semana. Estoy trabajándolo de forma que éste se comporte como una ventana de explorer (windows) o finder (mac). Estoy usando las funciones como Sortable, Droppable, Draggable de jQuery UI y AJAX para poder reproducir el efecto de mover, organizar y meter folders unos dentro de otros. Todavía está algo “buggie” pero espero resolverlo todo pronto.

En otra nota (♪), he escuchado bastante música esta pasada semana. Artistas/bandas que no conocía como St Helens (Australia), of Montreal (Canada) y …And You Will Know Us by the Trail of Dead (US), pero también he vuelto a varios artistas los cuales no me dejan de sorprender. Las canciones de rock argentino re-imaginadas por Alina Gandini, El último disco de Alice Cooper (que ya es algo viejo), Base Ball Bear, Ars Amandi y ASIAN KUNG-FU GENERATION entre otros.

Para los que me siguen en Twitter sabrán lo de #vinolosviernes. El vino de el pasado viernes no estuvo muy bueno que digamos. Sentía que se había pasado un poco, pero bueno. Si alguien conoce este vino en particular y tiene algo que decir soy todo oídos.

Como crear un sistema para subir imágenes usando Dreamweaver, PHP y MySQL

julio 4th, 2010

En el tiempo que llevo participando en la sección de Editores Web de Foros del Web la duda de cómo se pueden subir archivos al servidor  (imágenes principalmente) vía http usando Dreamweaver ha surgido múltiples veces. Mi respuesta has sido siempre la misma: “No se puede subir archivos usando funciones de Dreamweaver solamente”. Esta todavía es la realidad, por lo menos hasta el día de hoy que redacto este artículo, aunque reciente alguien volvió a preguntar lo mismo y yo decidí responder como siempre que respondo ese tipo de preguntas: haciendo todo lo que se pueda hacer usando funciones de DW y, el resto, trabajando el código lo mas claramente posible. En este caso decidí expandir un poco mi respuesta con un ejemplo más conciso aquí en mi blog.

En este tutorial estaré discutiendo como acoplar el código PHP necesario al código ya creado por Dreamweaver, osea, no entraré en detalles acerca del HTML/CSS. Tengo pensado hacer una serie de tutoriales de “buenas prácticas” al momento de usar HTML y CSS pronto y ahí pienso abundar más ese tema.

Dicho esto, este es el HTML:

<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
  <label for="imagen">nombre</label>
  <input type="text" name="nombre" id="nombre">
  <label for="imagen">imagen</label>
  <input type="file" name="imagen" id="imagen">
  <span class="enviar"><input type="submit" name="enviar" id="enviar" value="Enviar"></span>
  <input name="tipo" type="hidden" id="tipo" value="general">
</form>

Lo importante de ver aquí es el hecho que he escogido multipart/form-data para el atributo “enctype” del formulario. Esto permitirá al formulario enviar el archivo en la cabecera HTML. Puedes escoger este tipo de enctype seleccionando el formulario y escogiendo esa opción en el menú de Enctype:

También he incluido un input oculto llamado “tipo”. No es algo que normalmente haga, pero esta vez he utilizado las mismas tablas MySQL que de otro post.  De esa forma pudo usar una sola tabla de imágenes pero diferentes tipo. El archivo SQL lo he incluido en el archivo para descargar.

El CSS es también bastante sencillo, ya que no es el foco de este tutorial:

#form1{
	padding: 10px;
	width:250px;
	margin:0 auto;
	background: #F5F5F5;
	border: 1px solid #CCCCCC;
}
#form1 label{display:block;font-weight:bold;padding:5px 0;}
.enviar{display:block; padding:10px 0 5px;text-align:center;}

Hacemos una carpeta para las imágenes y la ponemos en la raíz (root) de nuestro sitio (site) y le damos permisos para leer y escribir (777). Yo la he llamado “imagenes” (Acuérdense que no pueden usar acentos ni eñes (ñ) en los nombres de los archivos, ya sea HTML, imágenes, etc.):

Empezamos creando un “Recordset” escogiendo la tabla de las imágenes.  (Yo tengo DW en inglés, pero espero que sea evidente en la imagen lo que estoy haciendo). En el panel de “applications” vamos a la pestaña de Bindings, hacemos click en el signo de más (+) y escogemos “Recordset (Query)”:

Una vez en la ventana de Recordset se especifica la siguiente información:

  1. El nombre de tu recordset
  2. Tu conexión
  3. La tabla archivos (si usas la tabla creada por el archivo sql que provisto en este tutorial)
  4. Escoges todas las columnas
  5. El filtro que escogeremos es el tipo_archivo. Esta la igualaremos al valor “general”, el cual es el que enviamos en el input “tipo”
  6. En ell ‘Sort’ escogemos organizar los “records” de acuerdo a la fecha de manera descendiente.

Una vez creado el recordset arrastramos el campo del nombre del archivo al cuerpo de la página. Vamos a hacer un listado de las imágenes que hemos subido al servidor:

Luego creamos la imagen dinámica. Insertamos un “image placeholder”, no importa el tamaño por ahora. Para escoger el source (src) le escogemos el placeholder y le damos click al icono de la carpeta en el panel de propiedades:

Cuando salga la ventana de “Select Image Source” escoges “Data Source” y seleccionas el campo “archivo_archivo” de la base de datos. En ese campo se almacenará en nuevo nombre que le daremos a la imagen. También necesitas añadir “imagenes/” al principio del campo URL. Esa es la carpeta donde almacenaremos las imágenes.

Metes tanto el nombre como la imagen en una lista (<ul>) escogiendo ambos y dándole al botón de “unordered list”:

El HTML debe ser el siguiente:

<ul>
  <li><img name="" src="imagenes/<?php echo $row_Recordset1['archivo_archivos']; ?>" alt=""> <?php echo $row_Recordset1['nombre_archivos']; ?></li>
</ul>

Con ven el “alt” de la imagen está vacío. Para proveer una información alternativa de la imagen podemos usar el mismo nombre:

<ul>
  <li><img name="" src="imagenes/<?php echo $row_Recordset1['archivo_archivos']; ?>" alt="<?php echo $row_Recordset1['nombre_archivos']; ?>"> <?php echo $row_Recordset1['nombre_archivos']; ?></li>
</ul>

Necesitamos hacer dos cosas mas con la lista: 1- hacer que se repitan los elementos conforme con el número de imágenes que se han subido y 2- hacer que la lista solo se muestre si existen imágenes que se han subido.

1- Escogemos el <li> (podemos usar el “code inspector”:

y en panel de Data le damos un comportamiento de repetir. Una vez salga la ventana de repetir escoges el único recordset que existe en la página y escoges enseñar todos los records (no haremos paginación para este ejemplo)

2- Escogemos la lista (el ul , usamos el “code inspector”), y en la panel de Data le damos un comportamiento de mostrar si el recordset no está vacío. Escoges el único recordset y le das al botón de OK:

El HTML se debe ver como sigue:

<?php if ($totalRows_Recordset1 > 0) { // Show if recordset not empty ?>
<ul>
    <?php do { ?>
      <li><img src="imagenes/<?php echo $row_Recordset1['archivo_archivos']; ?>" alt="<?php echo $row_Recordset1['nombre_archivos']; ?>" height="100"> <?php echo $row_Recordset1['nombre_archivos']; ?></li>
      <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
</ul>
<?php } // Show if recordset not empty ?>

En este caso le damos un alto a la imagen de 100 pixels para que aparezca pequeña. Usualmente uso la clase PHPImagen de okram para crear los thumbnails, pero eso es algo no explicaré como hacerlo en este tutorial.

Ya que tenemos el listado preparado podemos agregar el comportamiento del “insert”. Vale la pena mencionar que se puede hacer de dos formas, usando el panel de “Application” como también con en las herramientas  de “Data” en el panel de “insert”:

1 – Aplicación: Sever Behaviors -> Signo de mós (+) Insert Record

2 – Data: Botón de Insert -> Insert Record:

Una vez en la ventana de “insert record” seleccionas lo siguiente:

  1. El formulario del insert
  2. Tu conexión.
  3. La tabla de archivos o la que estés usando para almacenar la información de las imágenes.
  4. Las columnas de la base de datos (Columns) tienes que hacerlas coincidir con el valor del formulario (Value). En este caso sólo hacemos coincidir dos de ellos: di_tipo = tipo y nombre_archivo = nombre. Los otros campos los agregaremos después de procesar la imagen

Este debe ser el código PHP resultante del insert:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {

  $insertSQL = sprintf("INSERT INTO archivos (tipo_archivos, nombre_archivos) VALUES (%s, %s)",
                       GetSQLValueString($_POST['tipo'], "text"),
                       GetSQLValueString($_POST['nombre'], "text"));

  mysql_select_db($database_Juaniq_codigo_con, $Juaniq_codigo_con);
  $Result1 = mysql_query($insertSQL, $Juaniq_codigo_con) or die(mysql_error());
}

Ahora a esa parte le añadimos la parte PHP que se encarga de procesar las imágenes. Después de:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {

Se agrega el siguiente código:

////////////// Parte añadida 1 //////////////

  //carpteta donde vamos a guardar la imagen
  $carpeta = 'imagenes/';
  //recibimos el campo de imagen
  $imagen = $_FILES['imagen']['tmp_name'];
  //guardamos el nombre original de la imagen en una variable
  $nombrebre_orig = $_FILES['imagen']['name'];
  //el proximo codigo es para ver que extension es la imagen
  $array_nombre = explode('.',$nombrebre_orig);
  $cuenta_arr_nombre = count($array_nombre);
  $extension = strtolower($array_nombre[--$cuenta_arr_nombre]);
  //creamos nuevo nombre para que tenga nombre unico
  $nombre_nuevo = time().'_'.rand(0,100).'.'.$extension;
  //nombre nuevo con la carpeta
  $nombre_nuevo_con_carpeta = $carpeta.$nombre_nuevo;
  //por fin movemos el archivo a la carpeta de imagenes
  $mover_archivos = move_uploaded_file($imagen , $nombre_nuevo_con_carpeta);
  //de damos permisos 777
  chmod($nombre_nuevo_con_carpeta,0777);

  ///////////////////////////////////////////

El código lo he comentado lo mejor posible para que se pueda entender que hace cada línea. También, la consulta MySQL, osea, donde dice:

$insertSQL = sprintf("INSERT INTO archivos (tipo_archivos, nombre_archivos) VALUES (%s, %s)",

Se cambia por los siguiente:

// se agrega "archivo_archivos, extension_archivos y la fecha" a la consulta y dos extra %s separados por comas
  $insertSQL = sprintf("INSERT INTO archivos (tipo_archivos, nombre_archivos, archivo_archivos, extension_archivos, fecha_archivos) VALUES (%s, %s, %s, %s, NOW())",

Aquí hemos añadido los campos archivo_archivos, extension_archivos y fecha_archivos a la consulta, dos extra %s para que los valores del sprintf creado por DW correspondan con los campos agregados y también la función “NOW()” de MySQL para que se  inserte la fecha que cuando se subió el archivo. Por último, agregamos los dos valores al que correspondan con los campos en el sprintf. Después de:

GetSQLValueString($_POST['nombre'], "text")

Y antes del paréntesis y el punto y coma agregamos:

GetSQLValueString($nombre_nuevo, "text"),
GetSQLValueString($extension, "text")

El código completo del insert queda así:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {

  ////////////// Parte añadida 1 //////////////

  //carpteta donde vamos a guardar la imagen
  $carpeta = 'imagenes/';
  //recibimos el campo de imagen
  $imagen = $_FILES['imagen']['tmp_name'];
  //guardamos el nombre original de la imagen en una variable
  $nombrebre_orig = $_FILES['imagen']['name'];
  //el proximo codigo es para ver que extension es la imagen
  $array_nombre = explode('.',$nombrebre_orig);
  $cuenta_arr_nombre = count($array_nombre);
  $extension = strtolower($array_nombre[--$cuenta_arr_nombre]);
  //creamos nuevo nombre para que tenga nombre unico
  $nombre_nuevo = time().'_'.rand(0,100).'.'.$extension;
  //nombre nuevo con la carpeta
  $nombre_nuevo_con_carpeta = $carpeta.$nombre_nuevo;
  //por fin movemos el archivo a la carpeta de imagenes
  $mover_archivos = move_uploaded_file($imagen , $nombre_nuevo_con_carpeta);
  //de damos permisos 777
  chmod($nombre_nuevo_con_carpeta,0777);

  ///////////////////////////////////////////

   // se agrega "archivo_archivos, extension_archivos y la fecha" a la consulta y dos extra %s separados por comas
  $insertSQL = sprintf("INSERT INTO archivos (tipo_archivos, nombre_archivos, archivo_archivos, extension_archivos, fecha_archivos) VALUES (%s, %s, %s, %s, NOW())",
					   GetSQLValueString($_POST['tipo'], "text"),
					   GetSQLValueString($_POST['nombre'], "text"),
					   ////////////// Parte añadida //////////////
					   GetSQLValueString($nombre_nuevo, "text"),
					   GetSQLValueString($extension, "text"))
					   ///////////////////////////////////////////
					   ;

  mysql_select_db('NOMBRE DE TU DATABASE', 'NOMBRE DE TU CONNECCION AQUI');
  $Result1 = mysql_query($insertSQL, 'INCLUIR TU CONNECCION AQUI') or die(mysql_error());

}

Y listo. Una vez finalizado el sistema se le puede aplicar el HTML/CSS que sea necesario. Algo adicional (y muy recomendado) que podemos hacer es limitar los tipos de archivos que los usuarios van a subir para que solamente puedan subir imágenes. Esto lo podemos hacer creando un Array con los valores de las extensiones que son permitidas. De esa forma podremos comparar los valores del array con el archivo subido por el usuario. En este caso permitimos los siguientes archivos :jpg, jpeg, gif y png. Este es el array:

$archivos_disp_ar = array('jpg', 'jpeg', 'gif', 'png');

Validamos el tipo de archivo de esta forma:

//validamos la extension
if(!in_array($extension, $archivos_disp_ar)) $error = "Este tipo de archivo no es permitido";

Después usamos una condicional para ver si la variable $error está vacía o no. Al final el código queda así:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {

  ////////////// Parte añadida 1 //////////////
  //array de archivos disponibles
  $archivos_disp_ar = array('jpg', 'jpeg', 'gif', 'png');
  //carpteta donde vamos a guardar la imagen
  $carpeta = 'imagenes/';
  //recibimos el campo de imagen
  $imagen = $_FILES['imagen']['tmp_name'];
  //guardamos el nombre original de la imagen en una variable
  $nombrebre_orig = $_FILES['imagen']['name'];
  //el proximo codigo es para ver que extension es la imagen
  $array_nombre = explode('.',$nombrebre_orig);
  $cuenta_arr_nombre = count($array_nombre);
  $extension = strtolower($array_nombre[--$cuenta_arr_nombre]);

  //validamos la extension
  if(!in_array($extension, $archivos_disp_ar)) $error = "Este tipo de archivo no es permitido";

  if(empty($error)){

	  //creamos nuevo nombre para que tenga nombre unico
	  $nombre_nuevo = time().'_'.rand(0,100).'.'.$extension;
	  //nombre nuevo con la carpeta
	  $nombre_nuevo_con_carpeta = $carpeta.$nombre_nuevo;
	  //por fin movemos el archivo a la carpeta de imagenes
	  $mover_archivos = move_uploaded_file($imagen , $nombre_nuevo_con_carpeta);
	  //de damos permisos 777
	  chmod($nombre_nuevo_con_carpeta,0777);

	  ///////////////////////////////////////////

	   // se agrega "archivo_archivos, extension_archivos y la fecha" a la consulta y dos extra %s separados por comas
	  $insertSQL = sprintf("INSERT INTO archivos (tipo_archivos, nombre_archivos, archivo_archivos, extension_archivos, fecha_archivos) VALUES (%s, %s, %s, %s, NOW())",
						   GetSQLValueString($_POST['tipo'], "text"),
						   GetSQLValueString($_POST['nombre'], "text"),
						   ////////////// Parte añadida //////////////
						   GetSQLValueString($nombre_nuevo, "text"),
						   GetSQLValueString($extension, "text"))
						   ///////////////////////////////////////////
						   ;

	  mysql_select_db('NOMBRE DE TU DATABASE', 'NOMBRE DE TU CONNECCION AQUI');
	  $Result1 = mysql_query($insertSQL, 'INCLUIR TU CONNECCION AQUI') or die(mysql_error());
	}
}

Para mostrar el error cuando la condición se cumpla ponemos esto encima de la forma:

<?php if(!empty($error)) echo $error; ?>

El próximo tutorial relacionado a este será como borrar los records de la base de datos y las imágenes físicas.