Solicitar un fichero en html y guardarlo en el servidor con php


   En este pequeño ejemplo o tutorial vamos a ver como soliticar un fichero mediante un formulario en html y después con php guardarlo en el servidor.

   Para comenzar tenemos nuestro formulario en html:

  
FORMULARIO FICHEROS
@ SandritaSCS












   Después nuestro código php tiene lo siguiente:
$archivo = $_FILES['ficheroUsuario']['tmp_name'];
$nombre_archivo = $_FILES['ficheroUsuario']['name'];
$directorioNuevo ="ficheros/";

move_uploaded_file($archivo, $directorioNuevo.$nombre_archivo);

echo "OK";

   No se utiliza la variable $_POST aunque el método sea POST. La variable que almacena los datos del fichero que queremos guardar es $_FILE. Con esta variable podemos recuperar la siguiente información:

  • $_FILE['fichero_usuario']['tmp_name'] -> El nombre temporal que se le asigna al fichero que queremos subir.
  • $_FILE['fichero_usuario']['name'] -> Nombre original del fichero que se ha subido.
  • $_FILE['fichero_usuario']['type'] -> Tipo de fichero ( si el navegador lo proporciona). No se refiere a la extensión sino por ejemplo si es una imagen sería "image/png".
  • $_FILE['fichero_usuario']['size'] -> Tamaño del fichero
  • $_FILE['fichero_usuario']['error'] -> Error asociado al fichero que se intenta subir.
   La función move_uploaded_file guarda el fichero temporal (por eso se usa la variable guardada con tmp_name) con el nombre que le proporcionemos y la ruta donde queremos guardarlo ( en este caso el nombre es el mismo que el fichero que se sube).

   Si queremos guardar el archivo con otro nombre podemos hacerlo así:

$archivo = $_FILES['ficheroUsuario']['tmp_name'];
$nombre_archivo = $_FILES['ficheroUsuario']['name'];
$info = pathinfo($nombre_archivo)['extension'];
$directorioNuevo ="ficheros/";

move_uploaded_file($archivo, $directorioNuevo."nombreNuevo.".$info);

echo "OK";

   Con la función patchinfo($fichero) se puede recuperar la extensión del fichero, así como el nombre base etc.
   Para descargar el código lo podéis hacer en el siguiente enlace -> CÓDIGO.

Sandra Campos

Comparte si te gusta

Proyecto 1/52 semanas: foto 02 semana del 26 de Octubre al 1 de Noviembre

   Aún teniendo de por medio la fiesta de Halloween o el Día de todos los Santos, que es la fiesta de aquí de España, no he escogido una foto de ese día sino que me ha gustado mucho más una foto que he hecho hoy, el último día de la semana.

   La foto es de una gota de agua de una de mis suculentas del jardín. Con el objetivo macro es mucho más fácil y más bonito hacer este tipo de fotos. Me encanta como se ve el reflejo en la gota de lo que hay alrededor.

   Espero que os guste.

Foto 02 Proyecto 1/52 semanas
Sandra Campos

Comparte si te gusta

Proyecto 1/365 días y proyecto 1/52 semanas

  Vuelvo a empezar este maravilloso proyecto. La primera vez que lo empecé duré menos de dos meses y espero que esta vez lo consiga realizar.

   El proyecto 1/365 consiste en hacer al menos una foto al día en un año (366 si es bisiesto). Mucha gente elige un tema para tratar a lo largo de ese año, ya se autoretratos, comidas, paisajes, no sé lo que se le ocurra a uno. También hay gente que no opta por un tema específico sino que hace fotos de su día a día, fotos que representen algo importante en ese día o simplemente algo que ocurrió. Este es mi caso. No quiero hacer un tema concreto porque pienso que es incluso más difícil. Me gusta más ir haciendo una foto distinta cada día, pensar en qué puedo hacer, practicar técnicas, etc.

   En cambio el proyecto 1/52 es mucho más fácil ya que consiste en hacer una foto cada semana en un año. Como veis esto da más margen a que un día se nos olvide hacer una foto y no haya problema y así no nos estresamos tanto.

   Dado que mi idea principal era hacer el de 1/365, también he añadido el 1/52 en el cual elegiré una foto de todas las que he hecho a lo largo de la semana, puede coincidir con una del 1/365 o no, en mayor medida intentaré que no coincida.

   Las fotos las realizaré con cualquiera de las cámares que tengo, la reflex sony a380, otra cámara digital pequeña sony y mi móvil bq. Si en algún momento cambio de cámara también vale ;), el caso es hacer una foto, cualquiera que sea.

   También en cada foto que suba (las subo en flickr) pondré alguna pequeña descripción sobre ella, para saber por qué la hice o si me inspira cualquier cosa.

   Dejo de enrollarme y pongo las fotos que he hecho esta semana. Cabe decir que el proyecto lo he empezado el día 22 de Octubre de 2015 por lo que para la foto de la semana ( que es del 19-25 ) sólo he tenido 4 días, pero es suficiente.

Fotos 1/365:

Foto 001 Proyecto 1/365 dias Foto 002 Proyecto 1/365 dias Foto 003 Proyecto 1/365 dias Foto 004 Proyecto 1/365 dias Foto 005 Proyecto 1/365 dias Foto 006 Proyecto 1/365 dias Foto 007 Proyecto 1/365 dias


Fotos 1/52 - Semana 19-25 Octubre 2015:

Foto 01 Proyecto 1/52 semanas

Sandra Campos

Comparte si te gusta

Generar imágenes QR con PHP usando qrlib.php

   
   Vamos a generar imágenes QR en PHP de una manera sencilla utilizando qrlib.php. Lo haremos de una manera muy fácil, usando la función QRcode::png.

   Lo primero, como siempre, es descargarnos la librería en este ENLACE. Una vez descargada, la descomprimimos y la añadimos a nuestro proyecto.


 En el código php tenemos que incluir la ruta al fichero qrlib.php que está en la carpeta que hemos añadido. El código más básico para generar una imagen qr, teniendo como datos una url, es el siguiente:

include_once dirname(__FILE__)."/phpqrcode/qrlib.php";

// --- url
$url = "https://es.wikipedia.org";

QRcode::png($url);

   A la función png le podemos pasar ciertos parámetros para cambiar la imagen del qr. Le podemos pasar una ruta para guardar la imagen, el tamaño de la imagen (ECC Level), los pixeles y el tamaño del frame. Los distintos valores para el tamaño de la imagen son los siguientes:

  • QR_ECLEVEL_L
  • QR_ECLEVEL_M
  • QR_ECLEVEL_Q
  • QR_ECLEVEL_H

   El L es el más pequeño y el H es el más grande. Jugando con estos niveles y los pixeles podemos obtener la imagen más grande o más pequeña y con más resolución o menos.

   Estos parámetros lo vemos con el siguiente código

include_once dirname(__FILE__)."/phpqrcode/qrlib.php";

// --- url
$url = "https://es.wikipedia.org";

QRcode::png($url,"temp/01.png",QR_ECLEVEL_L,3,1);
echo '<img src="temp/01.png"/>';

   El 3 corresponde a los pixels y el 1 al frame (el frame es como un margen blanco en la imagen en todos los lados). En tmp se guarda la imagen:

   Os voy a poner como se escribirian los datos para mandar un teléfono, sms, skype o email (la variable es $codigo, en los comentarios están las distintas formas del código para mandar teléfono, skype, etc):

include_once dirname(__FILE__)."/phpqrcode/qrlib.php";
// --- sms y telefono
//$codigo = "sms:568999666";
//$codigo = "tel:568999666";

// -- email
$email="sandritascs@gmail.com";
$subject="Test qr";
$body = "Comprobación del test qr";
$codigo="mailto:".$email."?subject=".urlencode($subject)."&body=".urlencode($body);

// --- skype
//$codigo = "skype:".urlencode("usuarioSkype")."?call";

// --- generar imagen
QRcode::png($codigo,"temp/01.png",QR_ECLEVEL_L,3,1);

echo '<img src="temp/01.png"/>';
 
En el video se puede ver una demostración del funcionamiento. Aquí teneis los ficheros del ejemplo del video junto con la librería --> DESCARGA

Sandra Campos

Etiquetas

, , , , , ,

Comparte si te gusta

Ciclo de vida de una actividad Android


   En este video os explico un poco como es el ciclo de vida de una actividad en una aplicación Android. Os puede ayudar a entender mejor como se ejecuta una actividad y cuando entra en un estado u otro.

   Los estados de una actividad son los siguientes:
  • onCreate: es cuando se crea la actividad. En este estado es donde se crean las estructuras de datos, la interfaz, eventos y donde se pueden recibir o enviar datos desde otra actividad. Por eso este es el método obligatorio que tenemos que implementar a la hora de hacer una aplicación.
  • onStart: después de onCreate pasamos a este estado, que indica que la actividad va a ser mostrada, es decir que se va a hacer visible.
  • onRestart: se llama cuando una actividad se paró y se vuelve a llamar de nuevo.
  • onResume: este estado se ejecuta cuando la actividad ya se ha cargado y el usuario ya puede interactuar con ella.
  • onPause: se ejecuta cuando el sistema va a lanzar una segunda actividad, por lo que los recursos van a ir a esta segunda actividad.
  • onStop: en este estado la actividad ya no es visible por el usuario, porque hay otra actividad que es visible.
  • onDestroy: a este estado se llama cuando la actividad es totalmente destruida. Puede ocurrir que por requerimientos de memoria, la actividad se destruya sin llamar a este método. 

    DETALLES A TENER EN CUENTA    

   Cuando se crea una actividad los métodos que se llaman son (en este orden):

onCreate -> onStart -> onResume

   Una actividad está encima de la pila, es visible y tiene foco en estos dos estados:

onResume y onPause

   Los estados en que una actividad no es visible son:

onStart y onStop

  Si llamamos al método finish() cuando una actividad está activa y tiene foco, se ejecuta directamente el método/estado onDestroy sin pasar por onPause u onStop.

   No hace falta implementar todos los métodos de estos estados. Si hay algunos en los que nos viene muy bien ejecutar un tipo de acción u otro. Por ejemplo el método onPause podemos aprovecharlo para guardar datos, parar animaciones o recursos para que no se consuma CPU. Tenemos que tener cuidado porque hasta que no termine este estado, la siguiente actividad no se ejecutará (onResume), por lo que implementemos en este método no tiene que tardar mucho en ejecutarse.

   También podemos usar el método onStart comprobar ciertos aspectos del teléfono como si tiene activo el gps o no.

   En el vídeo podéis ver un ejemplo con una aplicación en la que se ve como se pasa de un estado a otro. Os recomiendo verlo. El proyecto que sale en el vídeo os lo podéis descargar AQUÍ.


Sandra Campos

Comparte si te gusta

JAVA: Conectar con una Base de Datos Access con JDBC

  

   En este tutorial vamos a ver como conectarnos a una base de datos de Microsoft Access mediante el driver JDBC en Java. Yo he utilizado Netbeans, pero se hace igual en Eclipse.

   El driver JDBC/ODBC está obseleto a partir de la versión 8 de java. Tuve muchos problemas al hacer una aplicación que se tenia que conectar con una base de datos antigua hecha en Microsoft Access. Al final lo conseguí con unos drivers hechos en java, en definitiva unas librerias. Se llama UCanAccess y la podéis descargar AQUÍ.

   Tenemos que elegir la opción que pone .bin de la versión más reciente:


   Cuando las descargamos y descomprimimos cogemos todos los .js (uno está en la raíz principal y los otros en la carpeta lib) y los ponemos todos juntos en una carpeta. Simplemente por comodidad a la hora de agregarlos al proyecto. También guardo la carpeta en la ruta donde están mis proyectos para tenerla siempre a mano, porque si luego se cambia de sitio habrá que volverlas a añadir al proyecto porque no encuentra la ruta.



   Ahora nos creamos un proyecto nuevo en Netbeans (File/New Project/Java/Java Application) o en Eclipse (File/New/Java project).

   En Netbeans nos aparece una carpeta Libraries y le damos botón derecho y pinchamos en Add JAR/Folder.


 
   Seleccionamos nuestra carpeta donde nos hemos descargado y copiado las librerías anteriores, marcamos todas y le damos a Abrir.



    En Eclipse es en botón derecho en el proyecto, Properties y las añadimos en esta pantalla:



  Con esto ya tenemos nuestras librerias en el proyecto. Ahora sólo queda crear el código para conectarnos. He realizado un pequeño proyecto donde tengo implementada la clase para la conexión. En el video podéis ver como se hace esa conexión. Os podéis descargar el proyecto en esta DIRECCIÓN.

   Aparecerán tres carpetas, una con las librerías, otra con la BD Access y otra con el proyecto.

   Os dejo una de las clases del proyecto, que es la clase de conexión a la base de datos. El resto como os digo lo podéis ver en el video y en los archivos que he subido.

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import javax.swing.JOptionPane;



/**

 *

 * @author Sandra

 */

public class connectBD {

   

    private Connection conexion;

    private Statement sentencia;

   

    private final String controlador;

    private final String nombre_bd;

    private final String usuarioBD;

    private final String passwordBD;

   

   

    public connectBD(){

        this.controlador="sun.jdbc.odbc.JdbcOdbcDriver";

        this.nombre_bd="C:\\Users\\Sandra\\Documents\\NetBeansProjects\\BD_Access\\Prueba_Java.accdb";

        this.usuarioBD="";

        this.passwordBD="";

       

    }

   

    public boolean EstablecerConexion() throws SQLException{

       

      

        try{

            conexion=DriverManager.getConnection("jdbc:ucanaccess://"+this.nombre_bd,this.usuarioBD,this.passwordBD);

        }catch (SQLException e){

             JOptionPane.showMessageDialog(null,"Error al realizar la conexion "+e);

             return false;

        }

       

        try {

            this.sentencia=this.conexion.createStatement(

            ResultSet.TYPE_SCROLL_INSENSITIVE,

                    ResultSet.CONCUR_READ_ONLY);

        }

        catch (SQLException e) {

            JOptionPane.showMessageDialog(null,"Error al crear el objeto sentencia "+e);

            return false;

        }

       

        return true;

       

    }

   

    public ResultSet EjecutarSentencia( String sql) throws SQLException{

       

        ResultSet rs;

        rs = this.sentencia.executeQuery(sql);

       

       

        return rs;

    }

}
Sandra Campos

Comparte si te gusta