MODELO 111 | ||||||
I TRIMESTRE | II TRIMESTRE | III TRIMESTRE | IV TRIMESTRE | TIPO | ||
TRABAJADORES | LORENZO | 6000 | 6000 | 6000 | 6000 | 18,00% |
MARIA JOSE | 5000 | 5000 | 5500 | 5500 | 17,00% | |
JACOBO | 4800 | 4800 | 4800 | 4800 | 14,00% | |
MANU GORRIZ | 6200 | 6200 | 6400 | 6400 | 20,00% | |
PROFESIONALES | ISABEL | 10000 | 21,00% | |||
LOLA | 8000 | 2000 | 2000 | 21,00% | ||
PREMIO | VERONICA | 1000 | 21,00% | |||
CUOTAS | ||||||
LORENZO | 1080 | 1080 | 1080 | 1080 | ||
MARIA JOSE | 850 | 850 | 935 | 935 | ||
JACOBO | 672 | 672 | 672 | 672 | ||
MANU GORRIZ | 1240 | 1240 | 1280 | 1280 | ||
ISABEL | 2100 | 0 | 0 | |||
LOLA | 1680 | 420 | 420 | |||
VERONICA | 210 | |||||
SUBTOTALES | ||||||
TRABAJADORES | 3842 | 3842 | 3967 | 3967 | ||
PROFESIONALES | 2100 | 8000 | 2000 | 2000 | ||
PREMIO | 210 | |||||
MODELO 130 | ||||||
I TRIMESTRE | II TRIMESTRE | III TRIMESTRE | IV TRIMESTRE | |||
INGRESOS | 40000 | 42000 | 38000 | 50000 | ||
GASTOS | 35000 | 30000 | 25000 | 28000 | ||
MODELO 303 | ||||||
I TRIMESTRE | II TRIMESTRE | III TRIMESTRE | IV TRIMESTRE | |||
VENTAS 21% | 20000 | 21000 | 19000 | 25000 | ||
VENTAS 10% | 12000 | 13000 | 10000 | 20000 | ||
VENTAS 4% | 8000 | 8000 | 9000 | 5000 | ||
GASTOS CORRIENTES | ||||||
INTERIORES AL 21% | 19000 | 10000 | 8000 | 14000 | ||
INTERIORES AL 10% | 10000 | 15000 | 12000 | 6000 | ||
GASTOS IMPORTACIONES | ||||||
21,00% | 6000 | 3000 | 4000 | |||
10,00% | 2000 | 5000 | 4000 | |||
INVERSIONES 21% | 15000 | 10000 | ||||
Contenidos relacionados con el módulo de grado superior de Desarrollo de Aplicaciones Web.
viernes, 28 de febrero de 2014
EJEMPLOS DE MODELOS 111, 130 y 303
TEST 6, 7, 8 y 9 ANDROID
6.-Multimedia y ciclo de vida
¿Cuándo hay que utilizar los métodos del ciclo de vida?
Siempre que necesitemos utilizar el API multimedia
Para arrancar y detener servicios
x Cuando queramos que nuestra actividad se comporte de forma diferente cuando esté en estado: activa, visible, parada o destruida.
Todas las respuestas son correctas
Has arrancado una animación en el método onResume() ¿En qué método tendrías que detenerla?
x onPause()
onStop()
onDestroy()
Cualquier método sería valido
¿Qué tres métodos son llamados cuando se arranca por primera vez una actividad?
onStart(), onCreate() y onRestart()
onStart(), onCreate() y onResume()
x onCreate(), onStart() y onResume()
onRestart(), onStart() y onCreate()
¿Qué dos métodos del ciclo de vida de una activar pueden no ser llamados en caso de extrema necesidad de memoria? (selecciona dos)
onStart() y onStop()
x onStop() y onDestroy()
onResume() y onPause()
onRestart() y onPause()
________________________________________________________
El sistema Android necesita memoria ¿Qué aplicación será eliminada, conocido el estado de sus componentes?
Teléfono: 1 actividad ACTIVA
WhatsApp: 1 actividad VISIBLE y 1 servicio
x Contactos: 3 actividades PARADAS
Correo: 1 actividad PARADA y 1 servicio
¿Cuándo es interesante guardar el estado de una actividad?
Por si es destruida por falta de memoria y más tarde es vuelta a crear.
Si nuestra aplicación se visualiza en vertical y horizontal.
x Las dos respuestas anteriores son ciertas
¿Qué método utilizarías para guardar el estado de una actividad de forma totalmente fiable?
onSaveInstanceState()
onRestoreInstanceState()
x onPause()
onStop()
onDestroy()
_______________________________________________________
Cuál es la clase más importante en Android para reproducir todo tipo de formatos multimedia?
MediaControler
VideoView
x MediaPlayer
SoundPool
¿Cuál es la forma más fácil de incluir un video en un Layout?
MediaPlayer
MediaControler
x VideoView
SoundPool
Si usas SoundPool tienes que indicar con antelación la lista de ficheros a reproducir ¿Con que finalidad?
Para tenerlos cargados en memoria y reproducirlos más rápidamente
x Para decodificarlos antes de ser reproducidos
Para poder establecer las prioridades en la reproducción
Para verificar que los formatos son soportados
¿Cuándo indicamos la lista de ficheros a reproducir qué formatos admite SoundPool?
x Todos los formatos de audio soportados por MediaPlayer
PCM de 16 bits
Todos, con excepción de MIDI
_______________________________________________________
_______________________________________________________
7.-Seguridad y posicionamiento en Android
¿Cómo se garantiza la autoría de una aplicación en Android?
Al descargarla de un canal de distribución seguro como Android Market
Gracias al nombre del paquete de Java
x Gracias a la firma digital
Gracias al usuario Linux asignado a cada aplicación
¿Cuál de los siguientes sistemas es más seguro para un usuario sin ningún tipo de conocimiento en informática?
x iOS de Apple (iPhone/iPad)
Android
Antiguo Windows Mobile / Windows 7
Una aplicación solicita acceso para modificar/borrar los ficheros en la SD ¿Cómo podemos confiar en que una aplicación Android no borrará todos los ficheros?
x Descargándola de un canal de distribución seguro o verificando que otros usuarios no han tenido problemas.
Gracias a la firma digital.
Estudiando la lista de permisos que solicita la aplicación.
Gracias al usuario Linux asignado a la aplicación.
¿Cómo podemos conseguir que el código de dos aplicaciones se ejecute en un mismo proceso?
Para ello han que utilizar el mismo usuario Linux.
Hay que definir el mismo valor para sharedUserId en AndroidManifest.xml.
Para ello ambas aplicaciones han de estar firmadas con el mismo certificado digital.
x Todas las afirmaciones son ciertas.
¿Cuáles de las siguientes alternativas nos da pocas garantías de seguridad a la hora de instalar una aplicación en Android?
Usar un canal seguro, como Google Play, y un desarrollador de confianza.
Usar un canal de distribución no seguro, como Aptoide, pero la aplicación no solicita permisos de importancia para nosotros.
x Se trata de una aplicación muy conocida, como WhatsApp.
¿Cuándo se avisa al usuario de que una aplicación va a ejecutar una acción que puede comprometer la seguridad del sistema?
x Al instalar la aplicación
En el momento de realizar la acción
En el momento de arrancar la aplicación
¿Cuál es el mayor inconveniente del sistema de permisos en Android?
Impide a las aplicaciones realizar muchas de las acciones.
x Deja en el usuario decisiones para los que muchos usuarios no están preparados.
Solo podemos descargar aplicaciones de forma segura desde Android Market.
¿Para qué es interesante la creación de nuevos permisos?
Para permitir el acceso a ficheros de otras aplicaciones.
Para impedir el acceso al código de nuestras aplicaciones.
x Para permitir el acceso al código de nuestras aplicaciones, advirtiendo a los usuarios finales.
Todas las respuestas son correctas.
_______________________________________________________
_______________________________________________________
8. Servicios, notificaciones y receptores de anuncios
¿Qué diferencia hay entre un servicio y una actividad?
x Un servicio no interactúa de forma directa con el usuario
Una actividad no puede trabajar en segundo plano
Un servicio está siempre activo
En el ciclo de vida de un servicio ¿Qué ventajas ofrece el método onStartCommand() frente a onStart?
Podemos arrancar el servicio en un nuevo hilo de ejecución.
Esta disponible en todas las versiones de Android
x Podemos controlar como actuará el sistema en caso de tener que destruir el servicio
¿Cómo puedes detener un servicio?
Llamando a onDestroy()
Llamando a onStop()
x Llamando a stopService() o stopSelf()
¿Qué método hay que gastar para conectarnos a un servicio remoto?
startService()
x bindService()
createService()
--------------------------------------------------
¿Quién puede lanzar una notificación?
Un servicio
Una actividad
Un receptor de anuncios
x Todas las respuestas son ciertas
¿Hay que pedir un permiso para lanzar una notificación?
Siempre
Nunca
x Solo si queremos que vibre el teléfono
Solo si queremos que se encienda un LED
¿Qué finalidad tenía introducir android:launchMode=”singleTask” en AndroidManifest.xml?
Hacer que una actividad solo pueda lanzar una notificación una vez
Impedir que una notificación pueda lanzar una activad
x Impedir que una actividad se lance más de una vez
¿Cuándo desaparece una notificación de la barra de estado?
Cuando el componente que la creó es destruido
x Cuando el usuario la borra desde el listado de notificaciones.
Cuando se llama al método NotificationManager.destroy(int id)
--------------------------------------------------------------
¿Qué métodos tienen los receptores de anuncio en su ciclo de vida?
x onReceive()
onCreate()
onDestroy()
Todas las respuestas son correctas
Desde un receptor de anuncio podemos…
Unirnos a un servicio con bindService()
x Arrancar una actividad
Hacer operaciones largas que bloqueen el hilo de ejecución
Mostrar un Toast
¿Hay que pedir un permiso para recibir un anuncio broadcast?
Siempre (RECIVE_BROADCAST)
Nunca
x Solo con algunos
Es obligatorio registra un receptor de anuncios en AndroidManifest.xml
Si, igual que con servicios y actividades
x No, podemos hacerlo desde código con registerReceiver()
Si, si no lo hacemos provocaremos un error en ejecución
----------------------------------------------------------------
-----------------------------------------------------------------
Unidad 9-Almacenamiento de datos
¿En qué ruta se utiliza por defecto en los métodos openFileInput(), openFileOutput(),getFilesDir(), getDir(), deleteFile() y fileList()? Correcto Incorrecto
x /data/data/[nombre_del_paquete]/files
/Android/data/[nombre_del_paquete]/files
/archivos de programa/[nombre_del_paquete]
La raíz de la memoria interna
¿Que método es recomendable utilizar para leer un fichero de la memoria externa? Correcto Incorrecto
openFileInput()
openFileOutput()
getFilesDir()
x getExternalStorageDirectory()
Queremos almacenar un fichero en la memoria externa que sea eliminado cuando se desinstale la aplicación. ¿Qué tendremos que hacer?
Usar el método getExternalFilesDir(String file), indicando en el parámetro el nombre del fichero
Esto no es posible, tendríamos que almacenarlo en la memoria interna
Crearlo en la carpeta /sdcard/Android/data/[nombre_del_paquete]/files/. Aunque solo se eliminará si la aplicación se crea para una versión 2.2 o superior.
x Crearlo en la carpeta /sdcard/Android/data/[nombre_del_paquete]/files/. Aunque solo se eliminará si la aplicación se instala en un dispositivo con versión 2.2 o superior.
¿Por qué es interesante almacenar los ficheros en las carpetas Music, Podcast, Ringtones, Pictures.
Para asegurarnos que no sea borrados al desinstalar la aplicación
Todas las respuestas son correctas
x Para ayudar al escáner de medios
Para que otros usuarios puedan acceder a ellos
------------------------------------------------------------------
¿Cuál es la principal ventaja de utilizar ficheros en XML?
Es muy sencillo manipular un fichero en este formato
Ocupa muy poco espacio de almacenamiento
x Es un formato estándar ampliamente utilizado
Está optimizado para localizar rápidamente la información
¿Qué ventaja presenta DOM frente a SAX para manipular ficheros XML?
En caso de ficheros grandes, es más rápido.
Consume menos recursos.
x No es necesario definir una estructura para almacenar los datos.
Todas las respuestas son ciertas.
Utilizando SAX queremos procesar el siguiente fichero XML: ¿Qué método utilizaríamos para obtener el valor de atributo?
startDocument()
x startElement()
characters()
endElement()
endDocument()
Hemos creado un documento XML utilizando DOM ¿Qué clase utilizaríamos si queremos escribirlo en un fichero?
x Transformer (siempre que trabajemos con un nivel de API 8 o superior)
XmlSerializer
XMLReader
XMLWriter
_________________________________________________________________
¿Cuál es la principal ventaja de utilizar Bases de Datos? C
Podemos realizar búsquedas de forma muy rápida.
Podemos borrar o insertar información sin tener que rescribir toda la información.
Podemos organizar la información en forma de tablas y establecer relaciones entre los campos e diferentes tablas.
x Todas las respuestas son correctas
¿Qué método hay que utilizar si queremos escribir en una base de datos con SQLite?
SQLiteOpenHelper()
getDatabase()
x getWritableDatabase()
getReadableDatabase()
¿Cuáles de los siguientes métodos de la clase SQLiteDatabase tiene más parámetros?
x query()
rawQuery()
execSQL()
------------------------------------------------------
¿Cuál es la principal razón para crear un ContentProvider?
x Cuando quieras compartir datos con otras aplicaciones.
Si necesitas almacenar datos de forma persistente.
Para poder realizar búsquedas por medio de SQL.
¿Cuál de las siguientes URI es válida para indicar un ContentProvider?
Content://call_log/calls/2
contentProvider://browser/bookmarks)
provider://media/internal
x content://media/*/audio
Estas visualizando el registro de llamadas de un móvil ¿Quién puede haber escrito estas entradas?
El sistema cada vez que se recibe una llamada.
x Cualquier aplicación que haya pedido el permiso WRITE_CALL_LOG.
Cualquier aplicación que haya pedido el permiso READ_CALL_LOG.
Todas las respuestas son correctas.
Queremos crear un ContentProvider ¿Cuál de las siguientes tareas no es imprescindible?
Definir una estructura de almacenamiento persistente, que permite búsquedas con SQL
Extender la clase Content. En concreto hay que sobrescribir los métodos getType(), query(), insert(), delete() y update().
x Solicitar los permisos necesarios.
Declararlo en AndroidManifest.xml
¿Cuándo hay que utilizar los métodos del ciclo de vida?
Siempre que necesitemos utilizar el API multimedia
Para arrancar y detener servicios
x Cuando queramos que nuestra actividad se comporte de forma diferente cuando esté en estado: activa, visible, parada o destruida.
Todas las respuestas son correctas
Has arrancado una animación en el método onResume() ¿En qué método tendrías que detenerla?
x onPause()
onStop()
onDestroy()
Cualquier método sería valido
¿Qué tres métodos son llamados cuando se arranca por primera vez una actividad?
onStart(), onCreate() y onRestart()
onStart(), onCreate() y onResume()
x onCreate(), onStart() y onResume()
onRestart(), onStart() y onCreate()
¿Qué dos métodos del ciclo de vida de una activar pueden no ser llamados en caso de extrema necesidad de memoria? (selecciona dos)
onStart() y onStop()
x onStop() y onDestroy()
onResume() y onPause()
onRestart() y onPause()
________________________________________________________
El sistema Android necesita memoria ¿Qué aplicación será eliminada, conocido el estado de sus componentes?
Teléfono: 1 actividad ACTIVA
WhatsApp: 1 actividad VISIBLE y 1 servicio
x Contactos: 3 actividades PARADAS
Correo: 1 actividad PARADA y 1 servicio
¿Cuándo es interesante guardar el estado de una actividad?
Por si es destruida por falta de memoria y más tarde es vuelta a crear.
Si nuestra aplicación se visualiza en vertical y horizontal.
x Las dos respuestas anteriores son ciertas
¿Qué método utilizarías para guardar el estado de una actividad de forma totalmente fiable?
onSaveInstanceState()
onRestoreInstanceState()
x onPause()
onStop()
onDestroy()
_______________________________________________________
Cuál es la clase más importante en Android para reproducir todo tipo de formatos multimedia?
MediaControler
VideoView
x MediaPlayer
SoundPool
¿Cuál es la forma más fácil de incluir un video en un Layout?
MediaPlayer
MediaControler
x VideoView
SoundPool
Si usas SoundPool tienes que indicar con antelación la lista de ficheros a reproducir ¿Con que finalidad?
Para tenerlos cargados en memoria y reproducirlos más rápidamente
x Para decodificarlos antes de ser reproducidos
Para poder establecer las prioridades en la reproducción
Para verificar que los formatos son soportados
¿Cuándo indicamos la lista de ficheros a reproducir qué formatos admite SoundPool?
x Todos los formatos de audio soportados por MediaPlayer
PCM de 16 bits
Todos, con excepción de MIDI
_______________________________________________________
_______________________________________________________
7.-Seguridad y posicionamiento en Android
¿Cómo se garantiza la autoría de una aplicación en Android?
Al descargarla de un canal de distribución seguro como Android Market
Gracias al nombre del paquete de Java
x Gracias a la firma digital
Gracias al usuario Linux asignado a cada aplicación
¿Cuál de los siguientes sistemas es más seguro para un usuario sin ningún tipo de conocimiento en informática?
x iOS de Apple (iPhone/iPad)
Android
Antiguo Windows Mobile / Windows 7
Una aplicación solicita acceso para modificar/borrar los ficheros en la SD ¿Cómo podemos confiar en que una aplicación Android no borrará todos los ficheros?
x Descargándola de un canal de distribución seguro o verificando que otros usuarios no han tenido problemas.
Gracias a la firma digital.
Estudiando la lista de permisos que solicita la aplicación.
Gracias al usuario Linux asignado a la aplicación.
¿Cómo podemos conseguir que el código de dos aplicaciones se ejecute en un mismo proceso?
Para ello han que utilizar el mismo usuario Linux.
Hay que definir el mismo valor para sharedUserId en AndroidManifest.xml.
Para ello ambas aplicaciones han de estar firmadas con el mismo certificado digital.
x Todas las afirmaciones son ciertas.
¿Cuáles de las siguientes alternativas nos da pocas garantías de seguridad a la hora de instalar una aplicación en Android?
Usar un canal seguro, como Google Play, y un desarrollador de confianza.
Usar un canal de distribución no seguro, como Aptoide, pero la aplicación no solicita permisos de importancia para nosotros.
x Se trata de una aplicación muy conocida, como WhatsApp.
¿Cuándo se avisa al usuario de que una aplicación va a ejecutar una acción que puede comprometer la seguridad del sistema?
x Al instalar la aplicación
En el momento de realizar la acción
En el momento de arrancar la aplicación
¿Cuál es el mayor inconveniente del sistema de permisos en Android?
Impide a las aplicaciones realizar muchas de las acciones.
x Deja en el usuario decisiones para los que muchos usuarios no están preparados.
Solo podemos descargar aplicaciones de forma segura desde Android Market.
¿Para qué es interesante la creación de nuevos permisos?
Para permitir el acceso a ficheros de otras aplicaciones.
Para impedir el acceso al código de nuestras aplicaciones.
x Para permitir el acceso al código de nuestras aplicaciones, advirtiendo a los usuarios finales.
Todas las respuestas son correctas.
_______________________________________________________
_______________________________________________________
8. Servicios, notificaciones y receptores de anuncios
¿Qué diferencia hay entre un servicio y una actividad?
x Un servicio no interactúa de forma directa con el usuario
Una actividad no puede trabajar en segundo plano
Un servicio está siempre activo
En el ciclo de vida de un servicio ¿Qué ventajas ofrece el método onStartCommand() frente a onStart?
Podemos arrancar el servicio en un nuevo hilo de ejecución.
Esta disponible en todas las versiones de Android
x Podemos controlar como actuará el sistema en caso de tener que destruir el servicio
¿Cómo puedes detener un servicio?
Llamando a onDestroy()
Llamando a onStop()
x Llamando a stopService() o stopSelf()
¿Qué método hay que gastar para conectarnos a un servicio remoto?
startService()
x bindService()
createService()
--------------------------------------------------
¿Quién puede lanzar una notificación?
Un servicio
Una actividad
Un receptor de anuncios
x Todas las respuestas son ciertas
¿Hay que pedir un permiso para lanzar una notificación?
Siempre
Nunca
x Solo si queremos que vibre el teléfono
Solo si queremos que se encienda un LED
¿Qué finalidad tenía introducir android:launchMode=”singleTask” en AndroidManifest.xml?
Hacer que una actividad solo pueda lanzar una notificación una vez
Impedir que una notificación pueda lanzar una activad
x Impedir que una actividad se lance más de una vez
¿Cuándo desaparece una notificación de la barra de estado?
Cuando el componente que la creó es destruido
x Cuando el usuario la borra desde el listado de notificaciones.
Cuando se llama al método NotificationManager.destroy(int id)
--------------------------------------------------------------
¿Qué métodos tienen los receptores de anuncio en su ciclo de vida?
x onReceive()
onCreate()
onDestroy()
Todas las respuestas son correctas
Desde un receptor de anuncio podemos…
Unirnos a un servicio con bindService()
x Arrancar una actividad
Hacer operaciones largas que bloqueen el hilo de ejecución
Mostrar un Toast
¿Hay que pedir un permiso para recibir un anuncio broadcast?
Siempre (RECIVE_BROADCAST)
Nunca
x Solo con algunos
Es obligatorio registra un receptor de anuncios en AndroidManifest.xml
Si, igual que con servicios y actividades
x No, podemos hacerlo desde código con registerReceiver()
Si, si no lo hacemos provocaremos un error en ejecución
----------------------------------------------------------------
-----------------------------------------------------------------
Unidad 9-Almacenamiento de datos
¿En qué ruta se utiliza por defecto en los métodos openFileInput(), openFileOutput(),getFilesDir(), getDir(), deleteFile() y fileList()? Correcto Incorrecto
x /data/data/[nombre_del_paquete]/files
/Android/data/[nombre_del_paquete]/files
/archivos de programa/[nombre_del_paquete]
La raíz de la memoria interna
¿Que método es recomendable utilizar para leer un fichero de la memoria externa? Correcto Incorrecto
openFileInput()
openFileOutput()
getFilesDir()
x getExternalStorageDirectory()
Queremos almacenar un fichero en la memoria externa que sea eliminado cuando se desinstale la aplicación. ¿Qué tendremos que hacer?
Usar el método getExternalFilesDir(String file), indicando en el parámetro el nombre del fichero
Esto no es posible, tendríamos que almacenarlo en la memoria interna
Crearlo en la carpeta /sdcard/Android/data/[nombre_del_paquete]/files/. Aunque solo se eliminará si la aplicación se crea para una versión 2.2 o superior.
x Crearlo en la carpeta /sdcard/Android/data/[nombre_del_paquete]/files/. Aunque solo se eliminará si la aplicación se instala en un dispositivo con versión 2.2 o superior.
¿Por qué es interesante almacenar los ficheros en las carpetas Music, Podcast, Ringtones, Pictures.
Para asegurarnos que no sea borrados al desinstalar la aplicación
Todas las respuestas son correctas
x Para ayudar al escáner de medios
Para que otros usuarios puedan acceder a ellos
------------------------------------------------------------------
¿Cuál es la principal ventaja de utilizar ficheros en XML?
Es muy sencillo manipular un fichero en este formato
Ocupa muy poco espacio de almacenamiento
x Es un formato estándar ampliamente utilizado
Está optimizado para localizar rápidamente la información
¿Qué ventaja presenta DOM frente a SAX para manipular ficheros XML?
En caso de ficheros grandes, es más rápido.
Consume menos recursos.
x No es necesario definir una estructura para almacenar los datos.
Todas las respuestas son ciertas.
Utilizando SAX queremos procesar el siguiente fichero XML: ¿Qué método utilizaríamos para obtener el valor de atributo?
startDocument()
x startElement()
characters()
endElement()
endDocument()
Hemos creado un documento XML utilizando DOM ¿Qué clase utilizaríamos si queremos escribirlo en un fichero?
x Transformer (siempre que trabajemos con un nivel de API 8 o superior)
XmlSerializer
XMLReader
XMLWriter
_________________________________________________________________
¿Cuál es la principal ventaja de utilizar Bases de Datos? C
Podemos realizar búsquedas de forma muy rápida.
Podemos borrar o insertar información sin tener que rescribir toda la información.
Podemos organizar la información en forma de tablas y establecer relaciones entre los campos e diferentes tablas.
x Todas las respuestas son correctas
¿Qué método hay que utilizar si queremos escribir en una base de datos con SQLite?
SQLiteOpenHelper()
getDatabase()
x getWritableDatabase()
getReadableDatabase()
¿Cuáles de los siguientes métodos de la clase SQLiteDatabase tiene más parámetros?
x query()
rawQuery()
execSQL()
------------------------------------------------------
¿Cuál es la principal razón para crear un ContentProvider?
x Cuando quieras compartir datos con otras aplicaciones.
Si necesitas almacenar datos de forma persistente.
Para poder realizar búsquedas por medio de SQL.
¿Cuál de las siguientes URI es válida para indicar un ContentProvider?
Content://call_log/calls/2
contentProvider://browser/bookmarks)
provider://media/internal
x content://media/*/audio
Estas visualizando el registro de llamadas de un móvil ¿Quién puede haber escrito estas entradas?
El sistema cada vez que se recibe una llamada.
x Cualquier aplicación que haya pedido el permiso WRITE_CALL_LOG.
Cualquier aplicación que haya pedido el permiso READ_CALL_LOG.
Todas las respuestas son correctas.
Queremos crear un ContentProvider ¿Cuál de las siguientes tareas no es imprescindible?
Definir una estructura de almacenamiento persistente, que permite búsquedas con SQL
Extender la clase Content. En concreto hay que sobrescribir los métodos getType(), query(), insert(), delete() y update().
x Solicitar los permisos necesarios.
Declararlo en AndroidManifest.xml
sábado, 22 de febrero de 2014
ACTIVIDADES UNIDAD 1 REPASO DE JAVA.
Actividad 1.2
Relaciona la frase con un término: “Una clase ha de ocultar su implementación”
Polimorfismo
xEncapsulamiento
Enlace dinámico
Herencia
Relaciona la frase con un término: “A partir de una clase podemos crear una nueva, indicando solo las diferencias”
Polimorfismo
Encapsulamiento
Enlace dinámico
xHerencia
Relaciona la frase con un término: “Un objeto pertenece a la clase en la que se ha creado, pero también a todas las predecesoras”
xPolimorfismo
Encapsulamiento
Enlace dinámico
Herencia
Relaciona la frase con un término: “Los objetos pueden venir de cualquier sitio. El lincado se hace en ejecución”
Polimorfismo
Encapsulamiento
xEnlace dinámico
Herencia
Actividad 1.3
Versión Texto
¿Qué elemento no se incluye en el paquete ADT (Android Development Toolkit) ofrecido por Google?
Eclipse IDE con un plugin especial para Android.
Android SDK (Software Development Kit) y las herramientas de la plataforma.
xAndroid Studio
La última plataforma Android
Comprobar respuestas
xDesde Eclipse podemos acceder a la herramienta Android SDK Manager ¿Con que finalidad?
Descargar paquetes con nuevas versiones de la plataforma y herramientas.
Instalar el Plugin de Android en Eclipse.
Verificar si Java está instalado en el equipo.
Actividad 1.4
¿Cómo identificarías el siguiente elemento?
public Vehiculo() { … }
una Clase
un método
xun constructor
un atributo
¿Cuál de los siguientes elementos es un atributo?
public Vehiculo() { … }
public int vehiculo() { … }
xpublic int vehiculo;
class Vehiculo { … }
¿Cuál de los siguientes identificadores corresponde a una clase y no a un tipo simple?
xString
int
char
boolean
¿Para qué se utiliza la palabra reservada this en la siguiente sentencia?
this.variable = variable
Para indicar que el nombre de la clase es this.
xPara indicar que nos referimos a un atributo de la clase y no a una variable o parámetro con el mismo nombre.
Para indicar que estamos en un constructor
Actividad 1.5
Indica la forma correcta de declarar un objeto
Clase c = Clase(String, double);
xClase c = new Clase(“hola”, 3.0);
Clase c = new Clase(String, double);
public c = new Clase();
Indica la forma correcta de llamar al método, metodo, del objeto objeto.
metodo(objeto);
xobjeto.metodo();
objeto=>metodo;
Objeto objeto = new Objeto.metodo();
¿Qué finalidad tiene la siguiente construcción en Java?
public static void main(String[] main) {…}
xEs el método que se llama para comenzar la ejecución de un proyecto.
Declarar el método principal de inicio que ha de disponer toda clase.
Declarar un método público.
Actividad 1.7
¿Qué es el interface de una clase en Java?
La parte de la clase marcada con public
Los atributos y métodos accesibles desde fuera de la clase
La forma en que un objeto de esta clase puede ser utilizado
xTodas las respuestas son correctas
¿Qué visibilidad indica que un atributo o método ha de ser accesible sólo por la clase actual, sus descendientes y clases de nuestro paquete?
public
private
xprotected
no se indica nada
¿Cuál de los siguientes métodos es correcto?
public double setReal() {
return real;
}
public void setReal(double real) {
return real;
}
public void getReal() {
return real;
}
xpublic void setReal(double real) {
this.real = real;
}
Actividad 1.9
¿Cómo se llamaría al siguiente métodos desde una clase hija?
private void metodo() { … }
super.metodo();
xsuper();
No podría hacerse la llamada
¿Qué repercusión tiene poner los atributos como private en la herecia?
Hace que la herencia sea imposible, los hijos no podrán acceder a los atributos.
xObliga a los hijos a usar métodos getters y setters, lo cual es menos eficiente.
No está permitido
Todas las respuestas son correctas
En la práctica anterior de pide crear la clase GeoPuntoAlt a partir de la clase GeoPunto, añadiendo el atributo altura. ¿Cuál de las siguientes afirmaciones es cierta?
Un objeto de la clase GeoPuntoAlt ocupará menos memoria.
El método distancia() de la clase GeoPuntoAlt tardará menos en ejecutarse
xEl método distancia() de la clase GeoPunto tardará menos en ejecutarse
Actividad 1.11
Versión Texto
Recuerda que la clase ComplejoAmpliado es descendiente de Complejo y añade el método esReal(). Indica cuál de los siguientes fragmentos de código es correcto:
Complejo c = new ComplejoAmpliado(12.4);
if (c.esReal())…
ComplejoAmpliado c = new Complejo(12.4,3);
if (c.esReal())…
Complejo c = new Complejo(12.4);
if (c.esReal())…
Complejo c = new ComplejoAmpliado(12.4);
xif (((ComplejoAmpliado)c).esReal())…
Tras la siguiente declaración del objeto c ¿Qué expresión dará como resultado false?
Complejo c = new ComplejoAmpliado(12.4,-1);
if (c instanceof Object)...
if (c instanceof Complejo)...
if (c instanceof ComplejoAmpliado)...
xif ((ComplejoAmpliado)c).esReal())...
¿Qué error hay en el siguiente código? Supondremos la case Padre ya definida:
class Hijo extends Padre {
@Override
public String toString() {
return "soy un hijo";
}
}
...
Padre c = new Hijo;
System.out.println(c.toString());
Es posible que la clase Padre no tenga el método toString()
En la clase Hijo no se ha definido un constructor.
xLa inicialización del objeto c es incorrecta
Falta el tipecast para poder llamar al método toString()
Actividad 1.12
¿Cuál es la forma correcta de definir un enumerado en Java?
public enum Horario {MANANA(0), TARDE(1), NOCHE(2)}
public Horario enum (MANANA[0], TARDE[1], NOCHE[2])
xenum Horario {MANANA, TARDE, NOCHE}
Todas son incorrectas
Selecciona la respuesta correcta:
Los tipos enumerados siempre se definen en ficheros separados con extensión .java.
xUn tipo enum es considerado como una clase y cada constante del enum como un objeto de esta clase.
Cada constante de un enum es considerado como una clase descendiente de java.lang.Enum.
Todas las respuestas son ciertas.
Identifica los errores en la siguiente declaración de un enumerado:
public enum Genero {
HOMBRE("Don"), MUJES("Doña");
private int tratamiento;
private Genero(int tratamiento){
this.tratamiento = tratamiento;
}
int getTratamiento(){
return tratamiento;
> }
}
Sobra el ; de la segunda línea
No se puede usar private en el constructor
xEl tipo del parámetro del constructor tendría que ser String
Las tres respuestas anteriores son errores
Relaciona la frase con un término: “Una clase ha de ocultar su implementación”
Polimorfismo
xEncapsulamiento
Enlace dinámico
Herencia
Relaciona la frase con un término: “A partir de una clase podemos crear una nueva, indicando solo las diferencias”
Polimorfismo
Encapsulamiento
Enlace dinámico
xHerencia
Relaciona la frase con un término: “Un objeto pertenece a la clase en la que se ha creado, pero también a todas las predecesoras”
xPolimorfismo
Encapsulamiento
Enlace dinámico
Herencia
Relaciona la frase con un término: “Los objetos pueden venir de cualquier sitio. El lincado se hace en ejecución”
Polimorfismo
Encapsulamiento
xEnlace dinámico
Herencia
Actividad 1.3
Versión Texto
¿Qué elemento no se incluye en el paquete ADT (Android Development Toolkit) ofrecido por Google?
Eclipse IDE con un plugin especial para Android.
Android SDK (Software Development Kit) y las herramientas de la plataforma.
xAndroid Studio
La última plataforma Android
Comprobar respuestas
xDesde Eclipse podemos acceder a la herramienta Android SDK Manager ¿Con que finalidad?
Descargar paquetes con nuevas versiones de la plataforma y herramientas.
Instalar el Plugin de Android en Eclipse.
Verificar si Java está instalado en el equipo.
Actividad 1.4
¿Cómo identificarías el siguiente elemento?
public Vehiculo() { … }
una Clase
un método
xun constructor
un atributo
¿Cuál de los siguientes elementos es un atributo?
public Vehiculo() { … }
public int vehiculo() { … }
xpublic int vehiculo;
class Vehiculo { … }
¿Cuál de los siguientes identificadores corresponde a una clase y no a un tipo simple?
xString
int
char
boolean
¿Para qué se utiliza la palabra reservada this en la siguiente sentencia?
this.variable = variable
Para indicar que el nombre de la clase es this.
xPara indicar que nos referimos a un atributo de la clase y no a una variable o parámetro con el mismo nombre.
Para indicar que estamos en un constructor
Actividad 1.5
Indica la forma correcta de declarar un objeto
Clase c = Clase(String, double);
xClase c = new Clase(“hola”, 3.0);
Clase c = new Clase(String, double);
public c = new Clase();
Indica la forma correcta de llamar al método, metodo, del objeto objeto.
metodo(objeto);
xobjeto.metodo();
objeto=>metodo;
Objeto objeto = new Objeto.metodo();
¿Qué finalidad tiene la siguiente construcción en Java?
public static void main(String[] main) {…}
xEs el método que se llama para comenzar la ejecución de un proyecto.
Declarar el método principal de inicio que ha de disponer toda clase.
Declarar un método público.
Actividad 1.7
¿Qué es el interface de una clase en Java?
La parte de la clase marcada con public
Los atributos y métodos accesibles desde fuera de la clase
La forma en que un objeto de esta clase puede ser utilizado
xTodas las respuestas son correctas
¿Qué visibilidad indica que un atributo o método ha de ser accesible sólo por la clase actual, sus descendientes y clases de nuestro paquete?
public
private
xprotected
no se indica nada
¿Cuál de los siguientes métodos es correcto?
public double setReal() {
return real;
}
public void setReal(double real) {
return real;
}
public void getReal() {
return real;
}
xpublic void setReal(double real) {
this.real = real;
}
Actividad 1.9
¿Cómo se llamaría al siguiente métodos desde una clase hija?
private void metodo() { … }
super.metodo();
xsuper();
No podría hacerse la llamada
¿Qué repercusión tiene poner los atributos como private en la herecia?
Hace que la herencia sea imposible, los hijos no podrán acceder a los atributos.
xObliga a los hijos a usar métodos getters y setters, lo cual es menos eficiente.
No está permitido
Todas las respuestas son correctas
En la práctica anterior de pide crear la clase GeoPuntoAlt a partir de la clase GeoPunto, añadiendo el atributo altura. ¿Cuál de las siguientes afirmaciones es cierta?
Un objeto de la clase GeoPuntoAlt ocupará menos memoria.
El método distancia() de la clase GeoPuntoAlt tardará menos en ejecutarse
xEl método distancia() de la clase GeoPunto tardará menos en ejecutarse
Actividad 1.11
Versión Texto
Recuerda que la clase ComplejoAmpliado es descendiente de Complejo y añade el método esReal(). Indica cuál de los siguientes fragmentos de código es correcto:
Complejo c = new ComplejoAmpliado(12.4);
if (c.esReal())…
ComplejoAmpliado c = new Complejo(12.4,3);
if (c.esReal())…
Complejo c = new Complejo(12.4);
if (c.esReal())…
Complejo c = new ComplejoAmpliado(12.4);
xif (((ComplejoAmpliado)c).esReal())…
Tras la siguiente declaración del objeto c ¿Qué expresión dará como resultado false?
Complejo c = new ComplejoAmpliado(12.4,-1);
if (c instanceof Object)...
if (c instanceof Complejo)...
if (c instanceof ComplejoAmpliado)...
xif ((ComplejoAmpliado)c).esReal())...
¿Qué error hay en el siguiente código? Supondremos la case Padre ya definida:
class Hijo extends Padre {
@Override
public String toString() {
return "soy un hijo";
}
}
...
Padre c = new Hijo;
System.out.println(c.toString());
Es posible que la clase Padre no tenga el método toString()
En la clase Hijo no se ha definido un constructor.
xLa inicialización del objeto c es incorrecta
Falta el tipecast para poder llamar al método toString()
Actividad 1.12
¿Cuál es la forma correcta de definir un enumerado en Java?
public enum Horario {MANANA(0), TARDE(1), NOCHE(2)}
public Horario enum (MANANA[0], TARDE[1], NOCHE[2])
xenum Horario {MANANA, TARDE, NOCHE}
Todas son incorrectas
Selecciona la respuesta correcta:
Los tipos enumerados siempre se definen en ficheros separados con extensión .java.
xUn tipo enum es considerado como una clase y cada constante del enum como un objeto de esta clase.
Cada constante de un enum es considerado como una clase descendiente de java.lang.Enum.
Todas las respuestas son ciertas.
Identifica los errores en la siguiente declaración de un enumerado:
public enum Genero {
HOMBRE("Don"), MUJES("Doña");
private int tratamiento;
private Genero(int tratamiento){
this.tratamiento = tratamiento;
}
int getTratamiento(){
return tratamiento;
> }
}
Sobra el ; de la segunda línea
No se puede usar private en el constructor
xEl tipo del parámetro del constructor tendría que ser String
Las tres respuestas anteriores son errores
TEST 1
Cuando en una clase no permitimos que los atributos de una clase puedan ser accedidos desde el exterior, que característica de Java estamos utilizando.
Polimorfismo
x Encapsulamiento
Sobrecarga
Herencia
¿En cuál de los siguientes paquetes se incluye el entorno de desarrollo Eclipse?
x paquete ADT (Android Development Toolkit)
Android SDK (Software Development Kit)
Android Estudio
¿Qué define la siguiente línea en una clase?
public int libro(String titulo){…}
una Clase
x un método
un constructor
un atributo
¿Cuál de los siguientes identificadores corresponde a un tipo simple y no a una clase?
String
Complejo
x char
Boolean
¿Qué ventajas obtenemos si indicamos la visibilidad de los atributos de una clase con private?
x podemos cambiar la representación interna de la clase sin alterar el interface
El código resultante es más eficiente
Se generarán excepciones cada vez que se intente acceder a un atributo desde otras clases
Todas las respuestas son correctas
¿Qué visibilidad indica que un atributo o método antecedido de private?
accesible desde cualquier clase.
x sólo accesible desde la clase actual.
sólo desde la clase actual, sus descendientes y clases de nuestro paquete.
sólo accesible por clases de nuestro paquete.
¿Qué significa el siguiente código?
super();
x Para llamar al constructor de nuestro padre.
Para invocar el método super()
Para heredar todos los métodos y atributos de nuestro padre.
Para definir el constructor por defecto en una clase heredada.
El siguiente código da un error de compilación en la palabra @override ¿Cual podría ser la causa?
class Hijo extends Padre {
@Override
public String metodo() {
return "soy un hijo";
}
}
...
Hijo c = new Hijo();
System.out.println(((Padre)c).metodo());
x Es posible que en la clase Padre no exista el método metodo()
En la clase Hijo no se ha definido el constructor.
El tipeCast (Padre) es incorrecto
La inicialización del objeto c es incorrecta.
Identifica los errores en la siguiente declaración de un enumerado:
public enum Genero {
HOMBRE("Don"), MUJER("Doña");
private String tratamiento;
private Genero(String tratamiento){
this.tratamiento = tratamiento;
}
String getTratamiento(){
return tratamiento;
}
}
Sobra el ; de la segunda línea.
No se puede usar private en el constructor.
El tipo del parámetro del constructor es incorrecto.
x No hay ningún error.
Polimorfismo
x Encapsulamiento
Sobrecarga
Herencia
¿En cuál de los siguientes paquetes se incluye el entorno de desarrollo Eclipse?
x paquete ADT (Android Development Toolkit)
Android SDK (Software Development Kit)
Android Estudio
¿Qué define la siguiente línea en una clase?
public int libro(String titulo){…}
una Clase
x un método
un constructor
un atributo
¿Cuál de los siguientes identificadores corresponde a un tipo simple y no a una clase?
String
Complejo
x char
Boolean
¿Qué ventajas obtenemos si indicamos la visibilidad de los atributos de una clase con private?
x podemos cambiar la representación interna de la clase sin alterar el interface
El código resultante es más eficiente
Se generarán excepciones cada vez que se intente acceder a un atributo desde otras clases
Todas las respuestas son correctas
¿Qué visibilidad indica que un atributo o método antecedido de private?
accesible desde cualquier clase.
x sólo accesible desde la clase actual.
sólo desde la clase actual, sus descendientes y clases de nuestro paquete.
sólo accesible por clases de nuestro paquete.
¿Qué significa el siguiente código?
super();
x Para llamar al constructor de nuestro padre.
Para invocar el método super()
Para heredar todos los métodos y atributos de nuestro padre.
Para definir el constructor por defecto en una clase heredada.
El siguiente código da un error de compilación en la palabra @override ¿Cual podría ser la causa?
class Hijo extends Padre {
@Override
public String metodo() {
return "soy un hijo";
}
}
...
Hijo c = new Hijo();
System.out.println(((Padre)c).metodo());
x Es posible que en la clase Padre no exista el método metodo()
En la clase Hijo no se ha definido el constructor.
El tipeCast (Padre) es incorrecto
La inicialización del objeto c es incorrecta.
Identifica los errores en la siguiente declaración de un enumerado:
public enum Genero {
HOMBRE("Don"), MUJER("Doña");
private String tratamiento;
private Genero(String tratamiento){
this.tratamiento = tratamiento;
}
String getTratamiento(){
return tratamiento;
}
}
Sobra el ; de la segunda línea.
No se puede usar private en el constructor.
El tipo del parámetro del constructor es incorrecto.
x No hay ningún error.
TEST 0
¿Qué es Eclipse?
Una librería de Java
Una versión de Java especial para Android
x Un entorno de desarrollo de aplicaciones
Ninguna de las anteriores
¿Qué caracter es utilizado para hacer comentario de multiples lineas?
x /* y */
//
/*/ y /*/
* y *
¿Cuál de estos bucles NO existe en C ni en Java?
while
x repeat
do while
for
¿Qué valor es calculado en n?
int a=2;
n = 4 + a / 2;
2
3
4
x 5
¿Qué valor es calculado en n?
int n=0;
for ( i=0 ; i<5 ; i++ ) {
n= n+2;
}
0
2
6
x 10
¿En Java cuál de estos tipos de variable ocupa más espacio en la memoria?
byte
boolean
char
x int
¿Dónde está el error en el siguiente función?
int factorial (int n) {
if (n==0) return 1;
else return (n * factorial(n-1));
}
Falta un ; tras la primera línea
La variable n no ha sido inicializada
Una función no puede llamarse a sí misma
x No hay ningún error en esta función
¿Cuál es la descripción que crees que define mejor el concepto clase?
Es un concepto similar al de "array"
Es un tipo particular de variable
x Un tipo de objeto
Es una categoría de objetos ordenada secuencialmente
¿Qué característica de Java hace referencia a: “Una clase ha de ocultar su implementación”?
Polimorfismo
x Encapsulación
Enlace dinámico
Herencia
¿Qué característica de Java hace referencia a: “A partir de una clase podemos crear una nueva, indicando solo las diferencias”?
Polimorfismo
Encapsulación
Enlace dinámico
x Herencia
¿Qué código de los siguientes usarías para que Alumno sea una clase heredada de Persona?
x public class Alumno extends Persona
public class Alumno implements Persona
public class Alumno inherit Persona
public class Alumno belong to Persona
¿Cuándo se usa la palabra public?
Para que un atributo o método sea accesible desde nuestro paquete
Para que un atributo o método sea accesible desde nuestros descendientes
x Para que un atributo o método sea accesible desde cualquier clase
Para que un atributo o método sea accesible desde nuestra clase
Dado el código:
public class Alumno implements Persona
¿Que es Persona?
Una clase
Un objeto
x Un interface
Un método
¿Qué finalidad tiene la palabra synchronized?
Para indicar que el método pertenece a un objeto, de forma que este será el único con permisos para ejecutarlo
x Para bloquear la entrada a una parte del código, de manera que solo pueda entrar un hilo de ejecución
Para compartir información entre procesos
Para sincronizar los datos con un servidor
Si eres un auténtico experto en Java es posible que encuentres el error en el siguiente código. Supón la case Padre ya definida (NOTA: Si no tienes problema en resolver esta pregunta, puedes saltarte el siguiente unidad):
class Hijo extends Padre {
@Override
public String toString() {
return "soy un hijo";
}
}
...
Padre c = new Hijo();
System.println(c.toString());
Es posible que la clase Padre no tenga el método toString()
x La clase System no tiene el método estático println()
En la clase Hijo no se ha definido un constructor.
La inicialización del objeto c es incorrecta
Una librería de Java
Una versión de Java especial para Android
x Un entorno de desarrollo de aplicaciones
Ninguna de las anteriores
¿Qué caracter es utilizado para hacer comentario de multiples lineas?
x /* y */
//
/*/ y /*/
* y *
¿Cuál de estos bucles NO existe en C ni en Java?
while
x repeat
do while
for
¿Qué valor es calculado en n?
int a=2;
n = 4 + a / 2;
2
3
4
x 5
¿Qué valor es calculado en n?
int n=0;
for ( i=0 ; i<5 ; i++ ) {
n= n+2;
}
0
2
6
x 10
¿En Java cuál de estos tipos de variable ocupa más espacio en la memoria?
byte
boolean
char
x int
¿Dónde está el error en el siguiente función?
int factorial (int n) {
if (n==0) return 1;
else return (n * factorial(n-1));
}
Falta un ; tras la primera línea
La variable n no ha sido inicializada
Una función no puede llamarse a sí misma
x No hay ningún error en esta función
¿Cuál es la descripción que crees que define mejor el concepto clase?
Es un concepto similar al de "array"
Es un tipo particular de variable
x Un tipo de objeto
Es una categoría de objetos ordenada secuencialmente
¿Qué característica de Java hace referencia a: “Una clase ha de ocultar su implementación”?
Polimorfismo
x Encapsulación
Enlace dinámico
Herencia
¿Qué característica de Java hace referencia a: “A partir de una clase podemos crear una nueva, indicando solo las diferencias”?
Polimorfismo
Encapsulación
Enlace dinámico
x Herencia
¿Qué código de los siguientes usarías para que Alumno sea una clase heredada de Persona?
x public class Alumno extends Persona
public class Alumno implements Persona
public class Alumno inherit Persona
public class Alumno belong to Persona
¿Cuándo se usa la palabra public?
Para que un atributo o método sea accesible desde nuestro paquete
Para que un atributo o método sea accesible desde nuestros descendientes
x Para que un atributo o método sea accesible desde cualquier clase
Para que un atributo o método sea accesible desde nuestra clase
Dado el código:
public class Alumno implements Persona
¿Que es Persona?
Una clase
Un objeto
x Un interface
Un método
¿Qué finalidad tiene la palabra synchronized?
Para indicar que el método pertenece a un objeto, de forma que este será el único con permisos para ejecutarlo
x Para bloquear la entrada a una parte del código, de manera que solo pueda entrar un hilo de ejecución
Para compartir información entre procesos
Para sincronizar los datos con un servidor
Si eres un auténtico experto en Java es posible que encuentres el error en el siguiente código. Supón la case Padre ya definida (NOTA: Si no tienes problema en resolver esta pregunta, puedes saltarte el siguiente unidad):
class Hijo extends Padre {
@Override
public String toString() {
return "soy un hijo";
}
}
...
Padre c = new Hijo();
System.println(c.toString());
Es posible que la clase Padre no tenga el método toString()
x La clase System no tiene el método estático println()
En la clase Hijo no se ha definido un constructor.
La inicialización del objeto c es incorrecta
jueves, 30 de enero de 2014
INSTALACIONES
ANDROID http://www.itzgeek.com/featured/how-to-install-android-sdk-4-0-3-and-eclipse-adt-on-linux-mint-12-ubuntu-11-10.html#axzz2ru0AbioD
sudo apt-get install openjdk-7-jdk
XAMPP
XAMPP 1. apt-get install mysql-server mysql-client 2. apt-get install apache2 3. apt-get install php5 libapache2-mod-php5 4. /etc/init.d/apache2 restart 5. apt-get install php5-mysql php5-curl 6. /etc/init.d/apache2 restart 7. apt-get install phpmyadmin 8. PANTALLITA: http://sourceforge.net/apps/mediawiki/revealweb/nfs/project/r/re/revealweb/5/52/Apache2-config.png MARCAR APACHE2 CON EL ESPACIO PARA QUE SALGA UN ASTERISCO!!!!! OPCION NO 9. /etc/init.d/apache2 restart http://www.howtoforge.com/installing-apache2-with-php5-and-mysql-support-on-ubuntu-13.04-lamp
martes, 14 de enero de 2014
CUENTA DE PERDIDAS Y GANANCIAS
10.- BAHIS SL presenta a final de año las siguientes cuentas: venta de mercaderías 190.000; intereses por préstamos 18.000; ingresos extraordinarios 10.000; electricidad 18.000; devolución de compras 19.000; pago por servicios de abogados 21.000; gastos extraordinarios 8.000; seguridad social 16.000; compra de mercaderías 58.000; descuentos sobre ventas 15000; alquileres 27000; publicidad 35.000; amortización de inmovilizado 9.000; prestación de servicios a clientes 68.000; otros ingresos financieros 15.000. Elabora la cuenta de pérdidas y ganancias.
CUENTA DE PERDIDAS Y GANANCIAS:
A.- INGRESOS DE EXPLOTACION
709 RAPPEL SOBRE VENTAS 15000
700 VENTAS MERCADERIAS 190.000
705 PRESTACION DE SERVICIOS 68.000
770 INGRESOS EXCEPCION 10.000
253.000
B.- GASTOS DE EXPLOTACION
600 COMPRA DE MERCADERIAS 58.000
628 SUMINISTROS 18.000
608 DEVOLUCION COMPRAS -19.000
621 ARRENDAMIENTOS Y CANONES 27.000
623 SERVICIOS PROFESIONALES INDEPENDIENTES 21.000
627 PUBLICIDAD 35.000
642 SEGURIDAD SOCIAL 16.000
678 GASTOS EXTRAORDINARIOS 8.000
681 AMORTIZACION INMOVILIZADO 9.000
173.000
A-B RESULTADOS EXPLOTACION
80.000
C.- INGRESOS FINANCIEROS
769 OTROS INGRESOS FINANCIEROS 15.000
15.000
D.- GASTOS FINANCIEROS
662 INTERESES DEUDAS 18.000
18.000
C-D RESULTADO FINANCIERO
-3.000
BAI
80.000-3.000=77.000
IMPUESTO SOCIEDADES0
77.000%25= 19.250
RESULTADO NETO
77.000-19.250=57.75
8.- Dada la relación adjunta de elementos se pide ordenarlos y clasificarlos en su documento contable correspondiente (impuesto de sociedades 30%).
Realiza el análisis económico y patrimonial:
Venta de mercaderías 51.700
Resultado del ejercicio ?
Bancos 5.100
Otros gastos financieros 3.000
Equipos procesos de información 5.000
Otros ingresos financieros 100
Capital social ?
Sueldos y salarios 4.300
Préstamos a LP 12.400
Compra de mercaderías 22.700
Suministros 700
Aplicaciones informáticas 1.200
Mercaderías 38.500
Maquinaria 11.000
Proveedores 5.100
Terrenos 5.700
Impuesto de Sociedades 5.700
AAIM (4000)
Mobiliario 4.200
Clientes 5.500
Caja 1.000
Reserva legal 46.000
Construcciones 88.000
Dotaciones a la amortización 2.000
ACTIVO
ACTIVO NO CORRIENTE
206 APLICACIONES INFORMATICAS 1200
210 TERRENOS Y BIENES NATURALES 20.000
211 CONSTRUCCIONES 88000
213 MAQUINARIA 11000
216 MOBILIARIO 4200
280 AAIM -4000
120400
ACTIVO CORRIENTE
300 MERCADERIAS 38500
430 CLIENTES 5500
572 BANCO C/C 5100
570 CAJA 1000
SUBTOTAL 50100
TOTAL 170500
PASIVO
NETO
100 CAPITAL 93700
112 RESERVA LEGAL 46000
129 RESULTADO 13300
159900
PASIVO NO CORRIENTE
170 DEUDAS LP CON EC 12400
12400
CORRIENTE
400 PROVEEDORES 5100
SUBTOTAL 5100
TOTAL 170500
________________________________________
A
INGRESOS EXPLOTACION
700 VENTA MERCADERIAS 51700
SUBTOTAL 51700
B
GASTOS EXPLOTACION
600 COMPRAS 22700
628 SUMINISTROS 700
640 SUELDOS Y SALARIOS 4300
680 DOTACIONES A LA AMORTIZACION 2000
SUBTOTAL 29700
A-B RESULTADO EXPLOTACION=21900
C
INGRESOS FINANCIEROS
D
GASTOS FINANCIEROS
669 OTROS GASTOS FINANCIEROS 3000
C-D RESULTADO FINANCIERO = -3000
RESULTADO ACTIVIDAD = 18900
IMPUESTO SOCUEDADES 5700
B. NETO= 13.300
RATIO TESORERIA= EFECTIVO/PASIVO CORRIENTE
5100+1000/5100 = 1.2 CORRECTO
RATIO LIQUIDEZ = ACTIVO CORRIENTE / PASIVO CORRIENTE
50100/5100 = 9.82 DATO MALO PORQUE TIENE DEMASIADA LIQUIDEZ DEBERIA INVERTIR EN ALGUN TIPO DE ACTIVO
RATIO GARANTIA = ACTIVO REAL / EXIGIBLE TOTAL
170500/ 17500 = 9.74 EXCESO DE GARANTIA TIENE RECURSOS OCIOSOS
RENTABILIDAD ECONOMICA= BAII /ACTIVO= 22000/170500 * 100 = 12.9 % BUENA RENTABILIDAD
RENTABILIDAD FINANCIERA = RESULTADO EJERCICIO/ ACTIVO TOTAL *100 = 13300/170500 = 7.8%
9.- Dado el siguiente balance de Mercasa, s.l.
ACTIVO
Maquinaria 37.000
AAIM (6.000)
Materias Primas 23.000
Clientes 5.000
Bancos 6.300
Total: 65.300
PASIVO Y NETO
Capital Social 43.000
Préstamos a LP 10.000
Proveedores 8.300
Acreedores 4.000
Total: 65.300
a) Redacta el balance conforme el modelo de representación de submasas patrimoniales.
ACTIVO
NO CORRIENTE
213. MAQUINARIA 37.000
28. AAIM -6.000
31. MATERIAS PRIMAS 23.000
subtotal: 54.000
CORRIENTE
430. CLIENTES 5.000
572. BANCOS 6.300
subtotal:11.300
total: 65.300
PASIVO
NETO
100. CAPITAL 43.000
subtotal: 43.000
NO CORRIENTE
170. DEUDAS LP 10.000
subtotal: 10.000
CORRIENTE
400. PROVEEDORES 8.300
410. ACREEDORES 4.000
subtotal 12.300
b) Calcula el fondo de maniobra e interpreta la situación patrimonial.
FM= (PN+PNC)-ANC= 43.000+10.000-54.000= -1000
Concurso, estado de insolvencia: Existe un desquilibrio financiero.
c) Calcula los ratios financieros de tesorería, liquidez y garantía, interpreta los resultados y comenta las posibles soluciones en caso de que los valores se desvíen de sus valores óptimos.
Ratio Tesorería =Efectivo/Pasivo Corriente
6.300/12.300= 0.512
Ratio Liquidez=Activo Corriente / Pasivo Corriente
11.300/12.300=0.9187
Garantía= Activo Real / Exigible Total
65.300/22.300=2.92
11.- Dos empresas de ocio representan los siguientes datos:
EMPRESA: Pulgarcito
ACTIVO: 325.000
EXIGIBLE TOTAL: 208.000
BAII: 78.000
BAI: 65.000
VENTAS: 650.000
EMPRESA: Gato con botas
ACTIVO: 45.500
EXIGIBLE TOTAL: 15.600
BAII: 20.800
BAI: 5.200
VENTAS: 234.000
Calcula la rentabilidad económica y financiera de las dos empresas.
Rentabilidad Económica = BAII/ Activo Total x 100
P = 78.000/325.000=24%
G = 20.800/45.500=45.71%
Rentabilidad Financiera = beneficio neto/ Activo total x 100=
P= 65.000 / 325.000 = 20%
G= 5.200/ 45.500 = 11.43
4.- La empresa House, s.l. tiene el siguiente patrimonio:
Un local de consultas de 78.000 euros, una ambulancia que se adquirió por 65.520, diversas máquinas médicas valoradas en 29.160 y materiales quirúrgicos en el almacén por un importe de 2.640.
La empresa Lost le debe 7.800 por una compra efectuada.
Tiene un depósito en el Banco Bones de 3.360 euros.
La pérdida de valor de los diferentes integrantes del inmovilizado ha sido estimada en 10.800 euros.
Debe a un proveedor Break 3.840 euros por un préstamo a pagar en 3 meses.
Debe al banco Prisson 57.840 por un préstamo a pagar en 5 años.
Debe al banco Gray 7.200 por un préstamo a pagar en 9 meses.
La aportación de los propietarios de la empresa en el momento de su constitución fue de 82.800 y de los beneficios obtenidos se reinvirtieron 24.000.
Elabora el balance de esta empresa y analiza su estado financiero, a partir de su fondo de maniobra.
5.- Los balances de tres empresas dedicadas a la preparación de reuniones y eventos presentan las siguientes cifras expresadas en miles de euros:
Prepara reuniones:
ACTIVO:
Inmovilizado: 189.72
Existencias:10.20
Deudores comerciales:3.84
Efectivo:1.44
PASIVO:
Patrimonio neto:125.40
Pasivo no corriente:67.44
Pasivo corriente:12.36
Total activo/pasivo:205.20
Todo listo SAL:
ACTIVO:
Inmovilizado: 179.04
Existencias:19.70
Deudores comerciales:3.84
Efectivo:122.86
PASIVO:
Patrimonio neto:12.96
Pasivo no corriente:209.76
Pasivo corriente:155.28
Total activo/pasivo:378
Sin Problemas sl
ACTIVO:
Inmovilizado: 159.20
Existencias:17.28
Deudores comerciales:14.40
Efectivo:104.32
PASIVO:
Patrimonio neto:244.80
Pasivo no corriente:31.68
Pasivo corriente:18.72
Total activo/pasivo:295.20
_____________________________________________________________
BALANCE DE SITUACION
PERDIDAS Y GANANCIAS
ANALISIS FIANCIERO FM=AC-PC RT=E/PC RL=AC/PC RG=AR/ET
ANALISIS ECONOMICO RE=BAII/AT RF=BN/AT
Capital: ?¿
Beneficio no distribuido: 5.000
Resultado del ejercicio: ?¿
Deuda Bancaria LP: 30.000
Patente: 16.000
Maquinaria: 9.000
Mobiliario: 2.000
Vehículo: 20.000
67 Pérdidas Acumuladas del valor del inmovilizado: 8.000
Material: 500
Deuda con proveedor: 1.000
Deuda Luz: 500
Derecho cobro clientes: 2.000
Derecho cobro clientes letra cambio: 400
Deuda con Hacienda: 600
Inversión Acciones: 1.900
Caja: 200
Caja Madrid: 500
600 Compra Material Diverso: 2.000
608 Devolución de compra: 300
621 Alquiler: 6.000
625 Seguro de coche: 1.500
628 Luz: 2.000
640 Nóminas trabajadores: 25.000
642 Seguridad Social: 5.000
662 Intereses deuda: 2.000
68 Amortización Anual Inmovilizado: 1.000
705 Prestación de servicios: 50.000
766 Ingresos por dividendos: 100
762 Intereses C/C: 50
20% IMPUESTO SOCIEDADES.
BALANCE DE SITUACION
PERDIDAS Y GANANCIAS
ANALISIS FIANCIERO FM=AC-PC RT=E/PC RL=AC/PC RG=AR/ET
ANALISIS ECONOMICO RE=BAII/AT RF=BN/AT
ACTIVO
NO CORRIENTE
202 Patente: 16.000
213 Maquinaria: 9.000
216 Mobiliario: 2.000
218 Vehículo: 20.000
280 Pérdidas Acumuladas del valor del inmovilizado:( 8.000 )
SUBTOTAL 39.000
CORRIENTE
328 Material: 500
430 Derecho cobro clientes: 2.000
431 Derecho cobro clientes letra cambio: 400
540 Inversión Acciones: 1.900
570 Caja: 200
572 Caja Madrid: 500
SUBTOTAL 5.500
TOTAL ACTIVO 44.500
PASIVO
NETO
100 Capital: ?¿---> 2640
113 Beneficio no distribuido: 5.000
NO CORRIENTE
170 Deuda Bancaria LP: 50.000
SUBTOTAL 50.000
CORRIENTE:
400 Deuda con proveedor: 1.000
410 Deuda Luz: 500
475 Deuda con Hacienda: 600
SUBTOTAL 2100
TOTAL PASIVO 44.500
INGRESOS EXPLOTACION
705 Prestación de servicios: 50.000
SUBTOTAL 50.000
GASTOS EXPLOTACION
600 Compra Material Diverso: 2.000
608 Devolución de compra: (300)
621 Alquiler: 6.000
625 Seguro de coche: 1.500
628 Luz: 2.000
640 Nóminas trabajadores: 25.000
642 Seguridad Social: 5.000
680 Amortización Anual Inmovilizado: 1.000
SUBTOTAL 42200
RESULTADO EXPLOTACION 7800
INGRESOS FINANCIEROS
766 Ingresos por dividendos: 100
762 Intereses C/C: 50
SUBTOTAL 150
GASTOS FINANCIEROS
662 Intereses deuda: 2.000
SUBTOTAL 2000
RESULTADO FINANCIERO -1850
RDO ACTIVIDAD 5950
IMPUESTO 20% 1190
RESULTADO NETO 4760
ANALISIS FIANCIERO
FM=AC-PC
5500-2100=3400
RT=Ef/PC
700/2100= 0.33
RL=AC/PC
5500/2100=2.62
RG=AR/ET A/(PC+PNC)
44500/32100=1.39
ANALISIS ECONOMICO
RE=BAII/AT
7800/44500=17.53%
RF=BN/AT
4760/44500=10.70%
CUENTA DE PERDIDAS Y GANANCIAS:
A.- INGRESOS DE EXPLOTACION
709 RAPPEL SOBRE VENTAS 15000
700 VENTAS MERCADERIAS 190.000
705 PRESTACION DE SERVICIOS 68.000
770 INGRESOS EXCEPCION 10.000
253.000
B.- GASTOS DE EXPLOTACION
600 COMPRA DE MERCADERIAS 58.000
628 SUMINISTROS 18.000
608 DEVOLUCION COMPRAS -19.000
621 ARRENDAMIENTOS Y CANONES 27.000
623 SERVICIOS PROFESIONALES INDEPENDIENTES 21.000
627 PUBLICIDAD 35.000
642 SEGURIDAD SOCIAL 16.000
678 GASTOS EXTRAORDINARIOS 8.000
681 AMORTIZACION INMOVILIZADO 9.000
173.000
A-B RESULTADOS EXPLOTACION
80.000
C.- INGRESOS FINANCIEROS
769 OTROS INGRESOS FINANCIEROS 15.000
15.000
D.- GASTOS FINANCIEROS
662 INTERESES DEUDAS 18.000
18.000
C-D RESULTADO FINANCIERO
-3.000
BAI
80.000-3.000=77.000
IMPUESTO SOCIEDADES0
77.000%25= 19.250
RESULTADO NETO
77.000-19.250=57.75
8.- Dada la relación adjunta de elementos se pide ordenarlos y clasificarlos en su documento contable correspondiente (impuesto de sociedades 30%).
Realiza el análisis económico y patrimonial:
Venta de mercaderías 51.700
Resultado del ejercicio ?
Bancos 5.100
Otros gastos financieros 3.000
Equipos procesos de información 5.000
Otros ingresos financieros 100
Capital social ?
Sueldos y salarios 4.300
Préstamos a LP 12.400
Compra de mercaderías 22.700
Suministros 700
Aplicaciones informáticas 1.200
Mercaderías 38.500
Maquinaria 11.000
Proveedores 5.100
Terrenos 5.700
Impuesto de Sociedades 5.700
AAIM (4000)
Mobiliario 4.200
Clientes 5.500
Caja 1.000
Reserva legal 46.000
Construcciones 88.000
Dotaciones a la amortización 2.000
ACTIVO
ACTIVO NO CORRIENTE
206 APLICACIONES INFORMATICAS 1200
210 TERRENOS Y BIENES NATURALES 20.000
211 CONSTRUCCIONES 88000
213 MAQUINARIA 11000
216 MOBILIARIO 4200
280 AAIM -4000
120400
ACTIVO CORRIENTE
300 MERCADERIAS 38500
430 CLIENTES 5500
572 BANCO C/C 5100
570 CAJA 1000
SUBTOTAL 50100
TOTAL 170500
PASIVO
NETO
100 CAPITAL 93700
112 RESERVA LEGAL 46000
129 RESULTADO 13300
159900
PASIVO NO CORRIENTE
170 DEUDAS LP CON EC 12400
12400
CORRIENTE
400 PROVEEDORES 5100
SUBTOTAL 5100
TOTAL 170500
________________________________________
A
INGRESOS EXPLOTACION
700 VENTA MERCADERIAS 51700
SUBTOTAL 51700
B
GASTOS EXPLOTACION
600 COMPRAS 22700
628 SUMINISTROS 700
640 SUELDOS Y SALARIOS 4300
680 DOTACIONES A LA AMORTIZACION 2000
SUBTOTAL 29700
A-B RESULTADO EXPLOTACION=21900
C
INGRESOS FINANCIEROS
D
GASTOS FINANCIEROS
669 OTROS GASTOS FINANCIEROS 3000
C-D RESULTADO FINANCIERO = -3000
RESULTADO ACTIVIDAD = 18900
IMPUESTO SOCUEDADES 5700
B. NETO= 13.300
RATIO TESORERIA= EFECTIVO/PASIVO CORRIENTE
5100+1000/5100 = 1.2 CORRECTO
RATIO LIQUIDEZ = ACTIVO CORRIENTE / PASIVO CORRIENTE
50100/5100 = 9.82 DATO MALO PORQUE TIENE DEMASIADA LIQUIDEZ DEBERIA INVERTIR EN ALGUN TIPO DE ACTIVO
RATIO GARANTIA = ACTIVO REAL / EXIGIBLE TOTAL
170500/ 17500 = 9.74 EXCESO DE GARANTIA TIENE RECURSOS OCIOSOS
RENTABILIDAD ECONOMICA= BAII /ACTIVO= 22000/170500 * 100 = 12.9 % BUENA RENTABILIDAD
RENTABILIDAD FINANCIERA = RESULTADO EJERCICIO/ ACTIVO TOTAL *100 = 13300/170500 = 7.8%
9.- Dado el siguiente balance de Mercasa, s.l.
ACTIVO
Maquinaria 37.000
AAIM (6.000)
Materias Primas 23.000
Clientes 5.000
Bancos 6.300
Total: 65.300
PASIVO Y NETO
Capital Social 43.000
Préstamos a LP 10.000
Proveedores 8.300
Acreedores 4.000
Total: 65.300
a) Redacta el balance conforme el modelo de representación de submasas patrimoniales.
ACTIVO
NO CORRIENTE
213. MAQUINARIA 37.000
28. AAIM -6.000
31. MATERIAS PRIMAS 23.000
subtotal: 54.000
CORRIENTE
430. CLIENTES 5.000
572. BANCOS 6.300
subtotal:11.300
total: 65.300
PASIVO
NETO
100. CAPITAL 43.000
subtotal: 43.000
NO CORRIENTE
170. DEUDAS LP 10.000
subtotal: 10.000
CORRIENTE
400. PROVEEDORES 8.300
410. ACREEDORES 4.000
subtotal 12.300
b) Calcula el fondo de maniobra e interpreta la situación patrimonial.
FM= (PN+PNC)-ANC= 43.000+10.000-54.000= -1000
Concurso, estado de insolvencia: Existe un desquilibrio financiero.
c) Calcula los ratios financieros de tesorería, liquidez y garantía, interpreta los resultados y comenta las posibles soluciones en caso de que los valores se desvíen de sus valores óptimos.
Ratio Tesorería =Efectivo/Pasivo Corriente
6.300/12.300= 0.512
Ratio Liquidez=Activo Corriente / Pasivo Corriente
11.300/12.300=0.9187
Garantía= Activo Real / Exigible Total
65.300/22.300=2.92
11.- Dos empresas de ocio representan los siguientes datos:
EMPRESA: Pulgarcito
ACTIVO: 325.000
EXIGIBLE TOTAL: 208.000
BAII: 78.000
BAI: 65.000
VENTAS: 650.000
EMPRESA: Gato con botas
ACTIVO: 45.500
EXIGIBLE TOTAL: 15.600
BAII: 20.800
BAI: 5.200
VENTAS: 234.000
Calcula la rentabilidad económica y financiera de las dos empresas.
Rentabilidad Económica = BAII/ Activo Total x 100
P = 78.000/325.000=24%
G = 20.800/45.500=45.71%
Rentabilidad Financiera = beneficio neto/ Activo total x 100=
P= 65.000 / 325.000 = 20%
G= 5.200/ 45.500 = 11.43
4.- La empresa House, s.l. tiene el siguiente patrimonio:
Un local de consultas de 78.000 euros, una ambulancia que se adquirió por 65.520, diversas máquinas médicas valoradas en 29.160 y materiales quirúrgicos en el almacén por un importe de 2.640.
La empresa Lost le debe 7.800 por una compra efectuada.
Tiene un depósito en el Banco Bones de 3.360 euros.
La pérdida de valor de los diferentes integrantes del inmovilizado ha sido estimada en 10.800 euros.
Debe a un proveedor Break 3.840 euros por un préstamo a pagar en 3 meses.
Debe al banco Prisson 57.840 por un préstamo a pagar en 5 años.
Debe al banco Gray 7.200 por un préstamo a pagar en 9 meses.
La aportación de los propietarios de la empresa en el momento de su constitución fue de 82.800 y de los beneficios obtenidos se reinvirtieron 24.000.
Elabora el balance de esta empresa y analiza su estado financiero, a partir de su fondo de maniobra.
5.- Los balances de tres empresas dedicadas a la preparación de reuniones y eventos presentan las siguientes cifras expresadas en miles de euros:
Prepara reuniones:
ACTIVO:
Inmovilizado: 189.72
Existencias:10.20
Deudores comerciales:3.84
Efectivo:1.44
PASIVO:
Patrimonio neto:125.40
Pasivo no corriente:67.44
Pasivo corriente:12.36
Total activo/pasivo:205.20
Todo listo SAL:
ACTIVO:
Inmovilizado: 179.04
Existencias:19.70
Deudores comerciales:3.84
Efectivo:122.86
PASIVO:
Patrimonio neto:12.96
Pasivo no corriente:209.76
Pasivo corriente:155.28
Total activo/pasivo:378
Sin Problemas sl
ACTIVO:
Inmovilizado: 159.20
Existencias:17.28
Deudores comerciales:14.40
Efectivo:104.32
PASIVO:
Patrimonio neto:244.80
Pasivo no corriente:31.68
Pasivo corriente:18.72
Total activo/pasivo:295.20
_____________________________________________________________
BALANCE DE SITUACION
PERDIDAS Y GANANCIAS
ANALISIS FIANCIERO FM=AC-PC RT=E/PC RL=AC/PC RG=AR/ET
ANALISIS ECONOMICO RE=BAII/AT RF=BN/AT
Capital: ?¿
Beneficio no distribuido: 5.000
Resultado del ejercicio: ?¿
Deuda Bancaria LP: 30.000
Patente: 16.000
Maquinaria: 9.000
Mobiliario: 2.000
Vehículo: 20.000
67 Pérdidas Acumuladas del valor del inmovilizado: 8.000
Material: 500
Deuda con proveedor: 1.000
Deuda Luz: 500
Derecho cobro clientes: 2.000
Derecho cobro clientes letra cambio: 400
Deuda con Hacienda: 600
Inversión Acciones: 1.900
Caja: 200
Caja Madrid: 500
600 Compra Material Diverso: 2.000
608 Devolución de compra: 300
621 Alquiler: 6.000
625 Seguro de coche: 1.500
628 Luz: 2.000
640 Nóminas trabajadores: 25.000
642 Seguridad Social: 5.000
662 Intereses deuda: 2.000
68 Amortización Anual Inmovilizado: 1.000
705 Prestación de servicios: 50.000
766 Ingresos por dividendos: 100
762 Intereses C/C: 50
20% IMPUESTO SOCIEDADES.
BALANCE DE SITUACION
PERDIDAS Y GANANCIAS
ANALISIS FIANCIERO FM=AC-PC RT=E/PC RL=AC/PC RG=AR/ET
ANALISIS ECONOMICO RE=BAII/AT RF=BN/AT
ACTIVO
NO CORRIENTE
202 Patente: 16.000
213 Maquinaria: 9.000
216 Mobiliario: 2.000
218 Vehículo: 20.000
280 Pérdidas Acumuladas del valor del inmovilizado:( 8.000 )
SUBTOTAL 39.000
CORRIENTE
328 Material: 500
430 Derecho cobro clientes: 2.000
431 Derecho cobro clientes letra cambio: 400
540 Inversión Acciones: 1.900
570 Caja: 200
572 Caja Madrid: 500
SUBTOTAL 5.500
TOTAL ACTIVO 44.500
PASIVO
NETO
100 Capital: ?¿---> 2640
113 Beneficio no distribuido: 5.000
NO CORRIENTE
170 Deuda Bancaria LP: 50.000
SUBTOTAL 50.000
CORRIENTE:
400 Deuda con proveedor: 1.000
410 Deuda Luz: 500
475 Deuda con Hacienda: 600
SUBTOTAL 2100
TOTAL PASIVO 44.500
INGRESOS EXPLOTACION
705 Prestación de servicios: 50.000
SUBTOTAL 50.000
GASTOS EXPLOTACION
600 Compra Material Diverso: 2.000
608 Devolución de compra: (300)
621 Alquiler: 6.000
625 Seguro de coche: 1.500
628 Luz: 2.000
640 Nóminas trabajadores: 25.000
642 Seguridad Social: 5.000
680 Amortización Anual Inmovilizado: 1.000
SUBTOTAL 42200
RESULTADO EXPLOTACION 7800
INGRESOS FINANCIEROS
766 Ingresos por dividendos: 100
762 Intereses C/C: 50
SUBTOTAL 150
GASTOS FINANCIEROS
662 Intereses deuda: 2.000
SUBTOTAL 2000
RESULTADO FINANCIERO -1850
RDO ACTIVIDAD 5950
IMPUESTO 20% 1190
RESULTADO NETO 4760
ANALISIS FIANCIERO
FM=AC-PC
5500-2100=3400
RT=Ef/PC
700/2100= 0.33
RL=AC/PC
5500/2100=2.62
RG=AR/ET A/(PC+PNC)
44500/32100=1.39
ANALISIS ECONOMICO
RE=BAII/AT
7800/44500=17.53%
RF=BN/AT
4760/44500=10.70%
jueves, 12 de diciembre de 2013
EJERCICIO PHP
1.-LoginOk.php
-Recoger variables nombre y password.
$perro=$_post('canido');
-Hacer consulta: "select * from
casa where canido = '".$perro"' ...
-Hacer resultado:
mysql_query($consulta);
-Hacer fila:
mysql_fetch_array($consulta);
-Comprobar si existe el nombre en la
base de datos:
if ($fila==0) // no existe
header{redirigir a login.php para
que salga el mensaje:"El usuario y/o contraseña no existe."
else
if($password<>$fila['password'])
header{redirigir a login.php para
que salga el mensaje:"El usuario y/o contraseña no existe."
Recoger variables de sesión:
$_SESSION['id']=$fila['id']
$_SESSION['nombre']=$fila['nombre']
2.-Login.php
-Recoger el header (con GET) y mostrar
mensaje de "El usuario y / o contraseña no
existe".session_start();if(isset($_SESSION['noexiste']))
{echo "El usuario no
existe";unset($_SESSION['noexiste']);}
3.-Menu.php
Dar la bienvenida al usuario si está
conectado.
if (isset($_SESSION ['id']$perro =
$_SESSION['canido'];echo "Hola ".$canido;
echo Bienvenido $_SESSION['nombre'];
4.-CerrarSesion.php
Unset id de $_SESSION <?php// Cerrar
sesiónsession_start();unset($_SESSION['usuario']);header("location:login.php"
Unset nombre de $_SESSION
5.-ListadoCliente.php
poner en las celdas $row['perro']
Incluir paginacion:
6.-Editar.php // EditarOk.php -->
redirigir a listadocliente.php
$consulta="UPDATE perro SET campo
='".$campo."'WHERE id='".$id."'";
$resultado = mysql_query($consulta);
7.-Eliminar.php --> redirigir a
listadocliente.php
$consulta = "DELETE from loquesea
WHERE id='".$id."'";
8.-DetalleCliente.php
$consulta = "SELECT * from
loquesea as l inner join casas as c on c.combo = p.id WHERE
c.id='".$id."'";
rellenar <?php echo
$fila['loquesea']?>
9.-CrearCliente.php //
CrearCliente.php--> redirigir a listadocliente.php
rellenar desplegable $consulta =
"SELECT * FROM casetas";$resultado =
mysql_query($consulta);
{?><option value="<?php
echo $fila['id']?>"> <?php echo $fila['name']?>
</option><?php}?>
crearclienteOK.php
enlazar campos $perro =
$_POST['perro'];
¡$consulta = "INSERT INTO
caseta(perro)values('".$perro."')";
$resultado = mysql_query($consulta);
header("location:dondesea.php");?>
10.-CrearPDF.php -->Crear el pdf de
detallecliente.php
<?php
require_once("../include/dompdf/dompdf_config.inc.php");
// Crear pdf del detalle de un cliente
ob_start();
require_once('dondesea.php');$dompdf = new DOMPDF();
$dompdf->load_html(ob_get_clean());$dompdf->render();$dompdf->stream("archivo.pdf");
?>
NOTA: En cada php poner arriba
<?php
session_start();
?>
APUNTES PHP
Funciones de PHP para MySQL
mysql_connect: Abre una conexión a MySQL Server.
int mysql_connect(string[hostname [:port][:/path/to/socket]], string[username],string [password])
Esta función establece una conexión a un servidor mysql. Todos los argumentos son opcionales y los valores por defecto son localhost, el usuario dueño del proceso, sin password.
Si realizas dos veces una llamada a esta función con los mismos parámetros, devuelve el mismo identificador que para la llamada anterior.
Todas las conexiones terminan al terminar la ejecución del script, a no ser que se elimine la conexión llamando a la función mysql_close().
mysql_select_db: Selecciona una base de datos MySql.
int mysql_select_db(string database_name, int [identificador del link] )
Esta función asigna la base de datos activa en el servidor asociado al identificador del link.
mysql_query: Envía una consulta SQL a MySQL.
int mysql_query(string query, int [identificador del link] )
Envía una consulta a una base de datos activa en el servidor asociado al link que se especifica. En el caso de que no se especifique ninguna conexión abierta, la función intenta reestablecer una conexión con la función mysql_connect().
La función devuelve TRUE o FALSE si la consulta tiene éxito. Si el valor devuelto es TRUE, significa que la consulta puede ser realizada, no que existan datos que respondan a esa consulta.
Para consultar cuantas líneas responden a esa consulta, se puede utilizar la función mysql_affected_rows() y nos dirá cuantas líneas se han visto afectadas por la última operación INSERT, DELETE, REPLACE o UPDATE. En el caso de tratarse de una operación SELECT la función mysql_query() devuelve un identificador de resultado que se puede utilizar con la función mysql_result().
mysql_fetch_array: Introduce el resultado en un array asociativo.
array mysql_fetch_array(resource resultado, int [result type])
Esta función es una versión extendida de mysql_fetch_row(). Lo que hace es almacenar el resultado en un array indexado, almacenando así los datos en un índice asociativo utilizando los nombres de los campos como claves.
Si existen más de una columna con el mismo nombre, tendrá precedencia la última columna. Para acceder a las otras columnas con el mismo nombre, se debe indexar la columna o hacer un alias para ella.
Ejemplo:
select tabla1.precio as precio 1, tabla2.precio as precio2 from tabla1, tabla2
El segundo argumento, es una constante que puede tomar los siguientes valores.
MYSQL_ASSOC
MYSQL_NUM
MYSQL_BOTH
mysql_num_rows: Obtiene el número de líneas del resultado.
int mysql_num_rows(resource resultado)
Devuelve el número de líneas que contiene el parámetro resultado.
mysql_affected_rows: Obtiene el número de tuplas modificadas en la última operación MySql.
int mysql_affected_rows(resource resultado)
Devuelve el número de líneas afectadas por la última operación, INSERT, UPDATE o DELETE, asociadas con el identificador que se especifica.
Si no se especifica el link, se asume que se refiere al último.
Excepción: Si la última operación ha borrado todos los registros de una tabla, esta función devuelve 0.
Esta función no tiene efecto con ninguna operación SELECT, puesto que no modifican ninguna línea.
mysql_field_name: Devuelve el nombre de un campo especificado en un resultado.
string mysql_field_name(resource resultado, int field_index)
Devuelve el nombre del campo que se especifica, mediante el orden que ocupe dentro del resultado.
mysql_tablename: Obtiene el nombre de la tabla de un campo.
string mysql_tablename(resource resultado, int i)
Esta función devuelve el nombre de una tabla de un puntero de resultados que ha devuelto previamente la función mysql_num_rows.
mysql_close: Cierra la conexión MySql.
int mysql_close(resource resultado)
Esta función cierra la conexión permanente que mantiene el link. El parámetro es opcional. Si no se especifica, se cerrará la última conexión abierta.
Si una conexión no se cierra, el script la cierra automáticamente al terminar su ejecución.
Esta función no opera correctamente con las conexiones abiertas con la función mysql_pconnect().
-----------------------------------------------------------------------
$GLOBALS
Es un array asociativo que contiene las referencias a todas la variables que están definidas en el ámbito global del script. Los nombres de las variables son las claves del array.
Ejemplo
<?php
function test() {
$foo = "variable local";
echo '$foo en el ámbito global: ' . $GLOBALS["foo"] . "\n";
echo '$foo en el ámbito simple: ' . $foo . "\n";
}
$foo = "Contenido de ejemplo";
test();
?>
El resultado del ejemplo sería algo similar a:
$foo en el ámbito global: Contenido de ejemplo
$foo en el ámbito simple: variable local
$_GET
Un array asociativo de variables pasado al script actual vía parámetros URL.
Ejemplo
<?php
echo 'Hola ' . $_GET["nombre"] . '!';
?>
Asumiendo que el usuario introduzco http://example.com/?nombre=Hannes
El resultado del ejemplo sería algo similar a:
Hola Hannes!
$_POST
Un array asociativo de variables pasadas al script actual a través del método HTTP POST.
Ejemplo
<?php
echo 'Hola ' . $_POST["nombre"] . '!';
?>
Asumiendo que el usuario envió por el método POST a través de un formulario nombre=Juan
El resultado del ejemplo sería algo similar a:
Hola Juan!
$_REQUEST
Un array asociativo que por defecto contiene el contenido de $_GET, $_POST.
$_FILES
En PHP, la capacidad de carga de archivos es posible usando la siguiente función: move_uploaded_file(filename, destination) - mueve un archivo a un destino especificado en el servidor. Cuando un archivo se carga utilizando la función move_uploaded_file(),este es rápidamente almacenado en una ubicación temporal en el servidor web.
Para mover el archivo a su destino final y manipular sus diferentes propiedades, se utiliza la súper matriz global PHP $ _FILES.
La matriz $ _FILES utiliza el valor de nombre proporcionado por <input type="file" name="uploadFile"/> (en este caso 'uploadFile') para identificar el archivo que se cargó.
Las entradas asociadas con la matriz $ _FILES se describen a continuación.
* $_FILES['UploadFile']['tmp_name']: El directorio en el servidor web donde está temporalmente almacenado el archivo. Por defecto es el directorio uploadtemp ubicado en la carpeta de PHP.
* $_FILES['uploadFile']['name'] : nombre del archivo en el sistema del usuario.
* $_FILES['uploadFile']['size'] : tamaño del fichero en bytes.
* $_FILES['uploadFile']['type'] : el tipo MIME del archivo.
* $_FILES['uploadFile']['error'] : el código de error asociado a la carga de archivos (0 carga exitosa,1 - el archivo excede el máximo tamaño de carga, 2 - el archivo excede el tamaño máximo de archivo, 3 - fichero parcialmente cargado, 4 - No existe el fichero cargado)
$_SESSION
Es un array asociativo que contiene variables de sesión disponibles para el script actual
Funciones asociadas:
session_start() crea una sesión o reanuda la actual basada en un identificador de sesión pasado mediante una petición GET o POST
session_destroy() destruye toda la información asociada con la sesión actual. No destruye ninguna de las variables globales asociadas con la sesión, ni destruye la cookie de sesión. Para volver a utilizar las variables de sesión se debe llamar a session_start().
La función session_unset() libera todas las variables de sesión actualmente registradas.
-----------------------------------------------------------------------
Funciones básicas y ejemplos conexión con MySql:
mysql_connect
Se utiliza para conectarse con un servidor de bases de datos, se usa normalmente con 3 parámetros, el dominio del servidor, nombre de usuario y password.
Ejemplo:
$conexion = mysql_connect("localhost", "user","password");
mysql_select_db
Se utiliza para elegir la base de datos que queremos gestionar una vez que se ha realizado la conexión con mysql_connect..
Ejemplo:
$conexion = mysql_connect("localhost", "user","password");
mysql_select_db ("test");
mysql_query
Se utiliza para hacer “querys” o peticiones a la base de datos.
Ejemplo:
$conexion = mysql_connect("localhost", "user","password");
mysql_select_db ("test");
$consulta = "SELECT * FROM Departamentos";
$resultado = mysql_query($consulta);
mysql_fetch_array
Recupera una fila de resultados como un array asociativo, un array numérico o como ambos
Para leer las demás filas necesitamos un while y así leer todas las filas.
La sentencia mysql_fetch_array de php sirve para volcar datos, provenientes de una consulta mysql, dentro de un array php.
Ocurre que cuando hacemos una consulta a la base de datos, Mysql nos retorna el conjunto de datos que responde a nuestra consulta; pero éste conjunto de datos no es legible por php. Para poder manipular estos datos (leerlos y utilizarlos) necesitamos volcarlo en algún elemento manipulable por php, por ejemplo un array.
Entonces, por ejemplo, si hacemos una consulta que nos devuelve 10 filas de una tabla Mysql (conjunto de datos) y luego le aplicamos mysql_fetch_array; obtendremos cómo resultado un array multidimensional de 10 filas y tantas columnas haya en nuestro select.
Ejemplo:
while ($fila = mysql_fetch_array($resultado))
<tr> <td> <?php echo $fila['CodDpto']; ?> </td>
<td> <?php echo $fila['Descripcion']; ?> </td></tr>
mysql_close();
Cierra la conexión con la BD
----------------------------------------------------------
<?php
$dbhost = "localhost";
$dbusuario = "root";
$dbpassword = "";
$db = "rtb_bd";
$conexion = 0;
//$GLOBALS Significa simplemente que es una variable que está disponible en cualquier parte del script. Cuando quiero utilizar una variable declarada fuera de una función
function conectarBD()
{ $GLOBALS['conexion'] = mysql_connect($GLOBALS['dbhost'], $GLOBALS['dbusuario'], $GLOBALS['dbpassword']);
mysql_select_db($GLOBALS['db'], $GLOBALS['conexion']);}
function cerrarBD()
{ mysql_close($GLOBALS['conexion']); }?>
----------------------------------------------------------------
Modificar PHP, MySQL
Para modificar un registro en una base de datos MySQL necesitamos establecer una conexión con el servidor.
$conexion = mysql_connect("servidor" , "usuario" , "password");
seleccionamos la base de datos en la cual se insertaran los datos.
mysql_select_db("bd",$conexion);
Creamos la consulta de modificación.
$sql = "UPDATE agenda SET nombre='$nombre',direccion='$direccion',"telefono='$telefono', email='$email'";
Para ejecutar la consulta necesitamos escribir el siguiente código.
mysql_query($sql);
Ejemplo Procesar un formulario mediante PHP e modificar un registro en MySQL
Para modificar un registro en concreto será necesario conocer el id del registro que vayamos a modificar. Este id puede ser pasado por URL por ejemplo de un listado de 10 empleados pasar por href (URL) el id del empleado que queramos modificar
<a href='modificar.php?id=<?php echo $fila['CodEmp']?>'><img src="images/icono_modificar.gif"> </a>
Una vez tengamos el id ya podremos generar la pantalla para modificar.
<?php
//Establecimiento de la conexión
$conex = mysql_connect("localhost", "root", "bbdd")
or die("NO se pudo realizar la conexión");
// Selección de la base de datos
mysql_select_db("test")
or die("ERROR con la base de datos");
$id= $_GET['id'];
//Preparación y ejecución de la consulta
$consulta = "SELECT * FROM Empleados";
$consulta .= " WHERE CodEmp=$id";
$resultado = mysql_query($consulta);
$fila = mysql_fetch_array($resultado);?>
<form id="inserciones" action="modificarOk.php" method="POST">
<input type=hidden name="eCodEmp" value="<?php echo $fila['CodEmp']; ?>">
//hidden es para pasar un dato oculto al otro php
<table>
<tr>
<td>Nombre:</td>
<td><input type=text name="eNombre" value="<?php echo $fila['Nombre']; ?>"></td>
</tr>
<tr>
<td>Sueldo:</td>
<td><input type=text name="eSueldo" value="<?php echo $fila['Sueldo']; ?>"></td>
</tr>
<?php
$consulta2 = "SELECT * FROM Departamentos";
$resultado2 = mysql_query($consulta2);
?>
<tr>
<td>Departamento:</td> //Es un desplegable
<td>
<select id="CodDpto" name="eCodDpto">
<?php
while($fila2 = mysql_fetch_array($resultado2))
{
?>
<option value="<?php echo $fila2['CodDpto']; ?>"
<?php if ($fila['CodDpto'] == $fila2['CodDpto']) echo "selected"; ?> ><?php echo $fila2['Descripcion']; ?> </option>
//Queremos que en el desplegable nos salga el departamento que tiene ese determinado empleado que queremos modificar. Por eso hacemos la comparación entre los códigos de dpto. que obtenemos del Select primero que contiene los datos del empleado con id=X y otro select de donde ya sacaremos la descripción del departamento, en el momento que coincidan los códigos será ese el se pinte por defecto, eso se controla con el selected
<?
}
?>
</select>
</td>
</tr>
</table>
<input type="submit" value="Modificar">
</form>
Una vez tenemos la pantalla de modificar con los datos del empleado a modificar ya podremos recoger todos esos datos y las modificaciones q el usuario haga del empleado y hacer un update de todos los datos.
<?php
//Establecimiento de la conexión
$conex = mysql_connect("localhost", "root", "bbdd")
or die("NO se pudo realizar la conexi�n");
// Selección de la base de datos
mysql_select_db("test")
or die("ERROR con la base de datos");
//Preparación y ejecución de la consulta
$codEmp = $_POST['eCodEmp'];
$nombre = $_ POST ['eNombre'];
$sueldo = $_ POST ['eSueldo'];
$codDpto = $_ POST ['eCodDpto'];
$consulta = "UPDATE Empleados SET Nombre='$nombre', Categoria='$categoria', Sueldo='$sueldo', CodDpto='$codDpto'
WHERE CodEmp=$codEmp";
$resultado = mysql_query($consulta);
if ($resultado)
echo "<b>Empleado modificado!</b><br /><br />\n";
-------------------------------------------------------------------
Eliminar PHP, MySQL
Para eliminar un registro en una base de datos MySQL necesitamos establecer una conexión con el servidor.
$conexion = mysql_connect("servidor" , "usuario" , "password");
seleccionamos la base de datos en la cual se insertaran los datos.
mysql_select_db("bd",$conexion);
Creamos la consulta de eliminación.
$sql = "DELETE FROM tabla “;
Para ejecutar la consulta necesitamos escribir el siguiente código.
mysql_query($sql);
Ejemplo Procesar un formulario mediante PHP y eliminar el registro en MySQL
Previamente pasamos el id por URL del empleado a eliminar
<a href='eliminar.php?id=<?php echo $fila['CodEmp']?>'><img src="images/icono_modificar.gif"> </a>
Eliminar.php
<?php
//Establecimiento de la conexión
$conex = mysql_connect("localhost", "root", "bbdd")
or die("NO se pudo realizar la conexi�n");
// Selección de la base de datos
mysql_select_db("test")
or die("ERROR con la base de datos");
//Preparación y ejecución de la consulta
$codEmp = $_GET['id'];
$consulta = "DELETE FROM Empleados WHERE CodEmp=$codEmp";
$resultado = mysql_query($consulta);
if ($resultado)
header("Location: listado.php");
--------------------------------------------------------------------
BÚSQUEDAS PHP, MySQL
Para buscar un registro en una base de datos MySQL necesitamos establecer una conexión con el servidor.
$conexion = mysql_connect("servidor" , "usuario" , "password");
seleccionamos la base de datos en la cual se buscaran los datos.
mysql_select_db("bd",$conexion);
Creamos la consulta general
$sql="select * from tabla where condición '";
Y concatenamos con nuevas subconsultas para realizar la búsqueda dependiendo del valor a buscar
$sql = $sql . " WHERE campo LIKE '%$valor%'";
// concatena la consulta principal con la subconsulta
Las 2 búsquedas más convencionales son:
1. Buscar filas que contengan cierta palabra clave.
Para esto utilizamos el Operador Mysql LIKE
if ($campoBusqueda == 'categoria') //campoBusqueda es un desplegable con las opciones por las que puede buscar
$sql = $sql . " WHERE Categoria LIKE '%$valor%'";
//valor es el input donde escribe el usuario
2. Buscar filas que coincidan exactamente con cierta palabra clave.
Para esto utilizamos el Operador Mysql de igualdad
if ($campoBusqueda == 'sueldo')
$sql = $sql . " WHERE Sueldo = '$valor'";
Por último, para ejecutar la consulta necesitamos escribir el siguiente código.
mysql_query($sql);
----------------------------------------------------------
SESIONES
Las sesiones son una forma sencilla de almacenar datos para usuarios de manera individual usando un ID de sesión único. Esto se puede usar para hacer persistente la información de estado entre peticiones de páginas.
Lo primero que debemos hacer cuando el usuario introduzca su nombre y contraseña será comprobar que existen en la BD y todo es correcto almacenar el id_usuario y el nombre en variables de Sesión para poder usar esas variables en todas las páginas php de la aplicación.
Hay que tener en cuenta que cada vez que queramos usar esas variables habrá que iniciar sesión.
A continuación se detallan las funciones necesarias para trabajar con sesiones.
Para registrar una variable de sesión y establecer un valor usaremos $_SESSION["nombre_variable"].
En todas las páginas de nuestro sitio web donde necesitemos usar algún dato del usuario que ha iniciado sesión o mostrar alguna opción especial para el usuario deberemos añadir el siguiente código, siempre al principio del fichero (antes de cualquier etiqueta HTML de la página):
<?
session_start();
?>
Con el procedimiento "session_start()" iniciaremos la sesión, si ya está iniciada no hará nada.
Añadir un enlace para que el usuario pueda cerrar la sesión en cualquier momento
if (isset ($_SESSION["id_usuario"])){
echo "<b>Bienvenid@ " . $_SESSION['nombre_usuario'] . " <a href='logout.php'>[Cerrar Sesion]</a></b>";
}
Uso de la función session_destroy para cerrar la sesión en PHP
Crearemos un fichero de texto plano sin formato con el siguiente contenido, guardándolo con el nombre "cerrarsesion.php" y lo subiremos a nuestro sitio FTP:
<?
session_start();
unset($_SESSION["id_usuario"]);
unset($_SESSION["nombre_usuario"]);
session_destroy();
header("Location: index.php");
exit;
?>
-------------------------------------------------------
Generar PDF con Dompdf
Vamos a ver cómo generar PDF's desde PHP empleando una librería llamada DomPDF.
Esta librería nos permite convertir un documento HTML a PDF, con lo cual es muy sencillo el generar cualquier documento PDF, simplemente generando la página HTML e indicándole a la librería que genere el documento PDF.
Lo primero que tendremos que hacer es cargar la librería, y a partir de ahí podremos generar el documento HTML que luego imprimiremos.
Véase el siguiente ejemplo de utilización de dicha librería:
<?php
# Cargamos la librería dompdf.
require_once 'lib/pdf/dompdf_config.inc.php';
# Contenido HTML del documento que queremos generar en PDF.
$html='
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Ejemplo de Documento en PDF.</title>
</head>
<body>
<h2>Ingredientes para la realización de Postres.</h2>
<p>Ingredientes:</p>
<dl>
<dt>Chocolate</dt>
<dd>Cacao</dd>
<dd>Azucar</dd>
<dd>Leche</dd>
<dt>Caramelo</dt>
<dd>Azucar</dd>
<dd>Colorantes</dd>
</dl>
</body>
</html>';
# Instanciamos un objeto de la clase DOMPDF.
$mipdf = new DOMPDF();
# Definimos el tamaño y orientación del papel que queremos.
# O por defecto cogerá el que está en el fichero de configuración.
$mipdf ->set_paper("A4", "portrait");
# Cargamos el contenido HTML.
$mipdf ->load_html(utf8_decode($html));
# Renderizamos el documento PDF.
$mipdf ->render();
# Enviamos el fichero PDF al navegador.
$mipdf ->stream('FicheroEjemplo.pdf');
?>
-----------------------------------------------------------------
Convertir Fechas PHP y MySQL
El formato usado en las tablas de MySQL para representar las fechas, es distinto al usado en muchos países, como por ejemplo España. Mientras que MySQL usa el formato AAAA/MM/DD (ejemplo 2013/08/08); aquí, como en muchos lugares se usa el formato DD/MM/AAAA (ejemplo 08/08/2013).
Bien, para poder introducir fechas en MySQL, recogidas en formularios a los usuarios por ejemplo, debemos convertirlas a formato MySQL; y lo mismo si queremos mostrar una fecha obtenida de una tabla MySQL en nuestra web.
La mejor forma de realizar una conversión entre la fecha que nos devuelve MySQL a nuestro formato es utilizando DATE_FORMAT de MySQL . La siguiente consulta nos devolvería la fecha con el formato DD/MM/AAAA, aunque podríamos indicarle que nos la devolviera como a nosotros nos interese.
mysql_query("SELECT DATE_FORMAT(campo_fecha,'%d/%m/%Y') FROM tabla", $conexión);
// El resultado será devuelto con el formato DD/MM/AAAA
Con este método obtendríamos una fecha del formato MySQL al nuestro. Pero no es la única.
Tenemos otra opción que nos valdría para convertir desde MySQL al nuestro, y desde el nuestro a MySQL:
//Cambiar fecha a MySQL(almacenar en BD). Formato fecha en MySQL
function obtenerFechaMySql($fecha)
{ list($day, $month, $year) = explode('/', $fecha);
return "$year-$month-$day";}
En este caso, recogemos una variable $fecha con la fecha que ha introducido el usuario, o simplemente la que deseamos cambiar. Nos lista en las variables $dia $mes y $ano los valores resultantes de separar con la función ”explode” la variable $fecha. Una vez listadas las variables solo debemos montar la última variable $fecha a nuestro gusto.
OJO!! Como muchos sabréis la función “explode” lee una cadena de texto y separa en un array (o en este caso nos lista por variable) los valores de esa cadena de texto usando un separador común, como puede ser un espacio ” “, o en este caso una barra “/”. Dicho esto, si la fecha introducida tiene el formato 08-08-2013 no funcionaria, con lo cual debemos avisar al usuario a introducir la fecha como nosotros queramos.
Para pasar de MySQL a nuestro formato, sabiendo de nuevo la separación en la fecha (que normalmente es /) usamos la misma función que antes, pero recogiendo en la variable $fecha el dato obtenido de la tabla.
//Leer de BD. Formato fecha española
function obtenerFecha($fechaMySql)
{ list($year, $month, $day) = explode('-', $fechaMySql);
return "$day/$month/$year";}
mysql_connect: Abre una conexión a MySQL Server.
int mysql_connect(string[hostname [:port][:/path/to/socket]], string[username],string [password])
Esta función establece una conexión a un servidor mysql. Todos los argumentos son opcionales y los valores por defecto son localhost, el usuario dueño del proceso, sin password.
Si realizas dos veces una llamada a esta función con los mismos parámetros, devuelve el mismo identificador que para la llamada anterior.
Todas las conexiones terminan al terminar la ejecución del script, a no ser que se elimine la conexión llamando a la función mysql_close().
mysql_select_db: Selecciona una base de datos MySql.
int mysql_select_db(string database_name, int [identificador del link] )
Esta función asigna la base de datos activa en el servidor asociado al identificador del link.
mysql_query: Envía una consulta SQL a MySQL.
int mysql_query(string query, int [identificador del link] )
Envía una consulta a una base de datos activa en el servidor asociado al link que se especifica. En el caso de que no se especifique ninguna conexión abierta, la función intenta reestablecer una conexión con la función mysql_connect().
La función devuelve TRUE o FALSE si la consulta tiene éxito. Si el valor devuelto es TRUE, significa que la consulta puede ser realizada, no que existan datos que respondan a esa consulta.
Para consultar cuantas líneas responden a esa consulta, se puede utilizar la función mysql_affected_rows() y nos dirá cuantas líneas se han visto afectadas por la última operación INSERT, DELETE, REPLACE o UPDATE. En el caso de tratarse de una operación SELECT la función mysql_query() devuelve un identificador de resultado que se puede utilizar con la función mysql_result().
mysql_fetch_array: Introduce el resultado en un array asociativo.
array mysql_fetch_array(resource resultado, int [result type])
Esta función es una versión extendida de mysql_fetch_row(). Lo que hace es almacenar el resultado en un array indexado, almacenando así los datos en un índice asociativo utilizando los nombres de los campos como claves.
Si existen más de una columna con el mismo nombre, tendrá precedencia la última columna. Para acceder a las otras columnas con el mismo nombre, se debe indexar la columna o hacer un alias para ella.
Ejemplo:
select tabla1.precio as precio 1, tabla2.precio as precio2 from tabla1, tabla2
El segundo argumento, es una constante que puede tomar los siguientes valores.
MYSQL_ASSOC
MYSQL_NUM
MYSQL_BOTH
mysql_num_rows: Obtiene el número de líneas del resultado.
int mysql_num_rows(resource resultado)
Devuelve el número de líneas que contiene el parámetro resultado.
mysql_affected_rows: Obtiene el número de tuplas modificadas en la última operación MySql.
int mysql_affected_rows(resource resultado)
Devuelve el número de líneas afectadas por la última operación, INSERT, UPDATE o DELETE, asociadas con el identificador que se especifica.
Si no se especifica el link, se asume que se refiere al último.
Excepción: Si la última operación ha borrado todos los registros de una tabla, esta función devuelve 0.
Esta función no tiene efecto con ninguna operación SELECT, puesto que no modifican ninguna línea.
mysql_field_name: Devuelve el nombre de un campo especificado en un resultado.
string mysql_field_name(resource resultado, int field_index)
Devuelve el nombre del campo que se especifica, mediante el orden que ocupe dentro del resultado.
mysql_tablename: Obtiene el nombre de la tabla de un campo.
string mysql_tablename(resource resultado, int i)
Esta función devuelve el nombre de una tabla de un puntero de resultados que ha devuelto previamente la función mysql_num_rows.
mysql_close: Cierra la conexión MySql.
int mysql_close(resource resultado)
Esta función cierra la conexión permanente que mantiene el link. El parámetro es opcional. Si no se especifica, se cerrará la última conexión abierta.
Si una conexión no se cierra, el script la cierra automáticamente al terminar su ejecución.
Esta función no opera correctamente con las conexiones abiertas con la función mysql_pconnect().
-----------------------------------------------------------------------
$GLOBALS
Es un array asociativo que contiene las referencias a todas la variables que están definidas en el ámbito global del script. Los nombres de las variables son las claves del array.
Ejemplo
<?php
function test() {
$foo = "variable local";
echo '$foo en el ámbito global: ' . $GLOBALS["foo"] . "\n";
echo '$foo en el ámbito simple: ' . $foo . "\n";
}
$foo = "Contenido de ejemplo";
test();
?>
El resultado del ejemplo sería algo similar a:
$foo en el ámbito global: Contenido de ejemplo
$foo en el ámbito simple: variable local
$_GET
Un array asociativo de variables pasado al script actual vía parámetros URL.
Ejemplo
<?php
echo 'Hola ' . $_GET["nombre"] . '!';
?>
Asumiendo que el usuario introduzco http://example.com/?nombre=Hannes
El resultado del ejemplo sería algo similar a:
Hola Hannes!
$_POST
Un array asociativo de variables pasadas al script actual a través del método HTTP POST.
Ejemplo
<?php
echo 'Hola ' . $_POST["nombre"] . '!';
?>
Asumiendo que el usuario envió por el método POST a través de un formulario nombre=Juan
El resultado del ejemplo sería algo similar a:
Hola Juan!
$_REQUEST
Un array asociativo que por defecto contiene el contenido de $_GET, $_POST.
$_FILES
En PHP, la capacidad de carga de archivos es posible usando la siguiente función: move_uploaded_file(filename, destination) - mueve un archivo a un destino especificado en el servidor. Cuando un archivo se carga utilizando la función move_uploaded_file(),este es rápidamente almacenado en una ubicación temporal en el servidor web.
Para mover el archivo a su destino final y manipular sus diferentes propiedades, se utiliza la súper matriz global PHP $ _FILES.
La matriz $ _FILES utiliza el valor de nombre proporcionado por <input type="file" name="uploadFile"/> (en este caso 'uploadFile') para identificar el archivo que se cargó.
Las entradas asociadas con la matriz $ _FILES se describen a continuación.
* $_FILES['UploadFile']['tmp_name']: El directorio en el servidor web donde está temporalmente almacenado el archivo. Por defecto es el directorio uploadtemp ubicado en la carpeta de PHP.
* $_FILES['uploadFile']['name'] : nombre del archivo en el sistema del usuario.
* $_FILES['uploadFile']['size'] : tamaño del fichero en bytes.
* $_FILES['uploadFile']['type'] : el tipo MIME del archivo.
* $_FILES['uploadFile']['error'] : el código de error asociado a la carga de archivos (0 carga exitosa,1 - el archivo excede el máximo tamaño de carga, 2 - el archivo excede el tamaño máximo de archivo, 3 - fichero parcialmente cargado, 4 - No existe el fichero cargado)
$_SESSION
Es un array asociativo que contiene variables de sesión disponibles para el script actual
Funciones asociadas:
session_start() crea una sesión o reanuda la actual basada en un identificador de sesión pasado mediante una petición GET o POST
session_destroy() destruye toda la información asociada con la sesión actual. No destruye ninguna de las variables globales asociadas con la sesión, ni destruye la cookie de sesión. Para volver a utilizar las variables de sesión se debe llamar a session_start().
La función session_unset() libera todas las variables de sesión actualmente registradas.
-----------------------------------------------------------------------
Funciones básicas y ejemplos conexión con MySql:
mysql_connect
Se utiliza para conectarse con un servidor de bases de datos, se usa normalmente con 3 parámetros, el dominio del servidor, nombre de usuario y password.
Ejemplo:
$conexion = mysql_connect("localhost", "user","password");
mysql_select_db
Se utiliza para elegir la base de datos que queremos gestionar una vez que se ha realizado la conexión con mysql_connect..
Ejemplo:
$conexion = mysql_connect("localhost", "user","password");
mysql_select_db ("test");
mysql_query
Se utiliza para hacer “querys” o peticiones a la base de datos.
Ejemplo:
$conexion = mysql_connect("localhost", "user","password");
mysql_select_db ("test");
$consulta = "SELECT * FROM Departamentos";
$resultado = mysql_query($consulta);
mysql_fetch_array
Recupera una fila de resultados como un array asociativo, un array numérico o como ambos
Para leer las demás filas necesitamos un while y así leer todas las filas.
La sentencia mysql_fetch_array de php sirve para volcar datos, provenientes de una consulta mysql, dentro de un array php.
Ocurre que cuando hacemos una consulta a la base de datos, Mysql nos retorna el conjunto de datos que responde a nuestra consulta; pero éste conjunto de datos no es legible por php. Para poder manipular estos datos (leerlos y utilizarlos) necesitamos volcarlo en algún elemento manipulable por php, por ejemplo un array.
Entonces, por ejemplo, si hacemos una consulta que nos devuelve 10 filas de una tabla Mysql (conjunto de datos) y luego le aplicamos mysql_fetch_array; obtendremos cómo resultado un array multidimensional de 10 filas y tantas columnas haya en nuestro select.
Ejemplo:
while ($fila = mysql_fetch_array($resultado))
<tr> <td> <?php echo $fila['CodDpto']; ?> </td>
<td> <?php echo $fila['Descripcion']; ?> </td></tr>
mysql_close();
Cierra la conexión con la BD
----------------------------------------------------------
<?php
$dbhost = "localhost";
$dbusuario = "root";
$dbpassword = "";
$db = "rtb_bd";
$conexion = 0;
//$GLOBALS Significa simplemente que es una variable que está disponible en cualquier parte del script. Cuando quiero utilizar una variable declarada fuera de una función
function conectarBD()
{ $GLOBALS['conexion'] = mysql_connect($GLOBALS['dbhost'], $GLOBALS['dbusuario'], $GLOBALS['dbpassword']);
mysql_select_db($GLOBALS['db'], $GLOBALS['conexion']);}
function cerrarBD()
{ mysql_close($GLOBALS['conexion']); }?>
----------------------------------------------------------------
Modificar PHP, MySQL
Para modificar un registro en una base de datos MySQL necesitamos establecer una conexión con el servidor.
$conexion = mysql_connect("servidor" , "usuario" , "password");
seleccionamos la base de datos en la cual se insertaran los datos.
mysql_select_db("bd",$conexion);
Creamos la consulta de modificación.
$sql = "UPDATE agenda SET nombre='$nombre',direccion='$direccion',"telefono='$telefono', email='$email'";
Para ejecutar la consulta necesitamos escribir el siguiente código.
mysql_query($sql);
Ejemplo Procesar un formulario mediante PHP e modificar un registro en MySQL
Para modificar un registro en concreto será necesario conocer el id del registro que vayamos a modificar. Este id puede ser pasado por URL por ejemplo de un listado de 10 empleados pasar por href (URL) el id del empleado que queramos modificar
<a href='modificar.php?id=<?php echo $fila['CodEmp']?>'><img src="images/icono_modificar.gif"> </a>
Una vez tengamos el id ya podremos generar la pantalla para modificar.
<?php
//Establecimiento de la conexión
$conex = mysql_connect("localhost", "root", "bbdd")
or die("NO se pudo realizar la conexión");
// Selección de la base de datos
mysql_select_db("test")
or die("ERROR con la base de datos");
$id= $_GET['id'];
//Preparación y ejecución de la consulta
$consulta = "SELECT * FROM Empleados";
$consulta .= " WHERE CodEmp=$id";
$resultado = mysql_query($consulta);
$fila = mysql_fetch_array($resultado);?>
<form id="inserciones" action="modificarOk.php" method="POST">
<input type=hidden name="eCodEmp" value="<?php echo $fila['CodEmp']; ?>">
//hidden es para pasar un dato oculto al otro php
<table>
<tr>
<td>Nombre:</td>
<td><input type=text name="eNombre" value="<?php echo $fila['Nombre']; ?>"></td>
</tr>
<tr>
<td>Sueldo:</td>
<td><input type=text name="eSueldo" value="<?php echo $fila['Sueldo']; ?>"></td>
</tr>
<?php
$consulta2 = "SELECT * FROM Departamentos";
$resultado2 = mysql_query($consulta2);
?>
<tr>
<td>Departamento:</td> //Es un desplegable
<td>
<select id="CodDpto" name="eCodDpto">
<?php
while($fila2 = mysql_fetch_array($resultado2))
{
?>
<option value="<?php echo $fila2['CodDpto']; ?>"
<?php if ($fila['CodDpto'] == $fila2['CodDpto']) echo "selected"; ?> ><?php echo $fila2['Descripcion']; ?> </option>
//Queremos que en el desplegable nos salga el departamento que tiene ese determinado empleado que queremos modificar. Por eso hacemos la comparación entre los códigos de dpto. que obtenemos del Select primero que contiene los datos del empleado con id=X y otro select de donde ya sacaremos la descripción del departamento, en el momento que coincidan los códigos será ese el se pinte por defecto, eso se controla con el selected
<?
}
?>
</select>
</td>
</tr>
</table>
<input type="submit" value="Modificar">
</form>
Una vez tenemos la pantalla de modificar con los datos del empleado a modificar ya podremos recoger todos esos datos y las modificaciones q el usuario haga del empleado y hacer un update de todos los datos.
<?php
//Establecimiento de la conexión
$conex = mysql_connect("localhost", "root", "bbdd")
or die("NO se pudo realizar la conexi�n");
// Selección de la base de datos
mysql_select_db("test")
or die("ERROR con la base de datos");
//Preparación y ejecución de la consulta
$codEmp = $_POST['eCodEmp'];
$nombre = $_ POST ['eNombre'];
$sueldo = $_ POST ['eSueldo'];
$codDpto = $_ POST ['eCodDpto'];
$consulta = "UPDATE Empleados SET Nombre='$nombre', Categoria='$categoria', Sueldo='$sueldo', CodDpto='$codDpto'
WHERE CodEmp=$codEmp";
$resultado = mysql_query($consulta);
if ($resultado)
echo "<b>Empleado modificado!</b><br /><br />\n";
-------------------------------------------------------------------
Eliminar PHP, MySQL
Para eliminar un registro en una base de datos MySQL necesitamos establecer una conexión con el servidor.
$conexion = mysql_connect("servidor" , "usuario" , "password");
seleccionamos la base de datos en la cual se insertaran los datos.
mysql_select_db("bd",$conexion);
Creamos la consulta de eliminación.
$sql = "DELETE FROM tabla “;
Para ejecutar la consulta necesitamos escribir el siguiente código.
mysql_query($sql);
Ejemplo Procesar un formulario mediante PHP y eliminar el registro en MySQL
Previamente pasamos el id por URL del empleado a eliminar
<a href='eliminar.php?id=<?php echo $fila['CodEmp']?>'><img src="images/icono_modificar.gif"> </a>
Eliminar.php
<?php
//Establecimiento de la conexión
$conex = mysql_connect("localhost", "root", "bbdd")
or die("NO se pudo realizar la conexi�n");
// Selección de la base de datos
mysql_select_db("test")
or die("ERROR con la base de datos");
//Preparación y ejecución de la consulta
$codEmp = $_GET['id'];
$consulta = "DELETE FROM Empleados WHERE CodEmp=$codEmp";
$resultado = mysql_query($consulta);
if ($resultado)
header("Location: listado.php");
--------------------------------------------------------------------
BÚSQUEDAS PHP, MySQL
Para buscar un registro en una base de datos MySQL necesitamos establecer una conexión con el servidor.
$conexion = mysql_connect("servidor" , "usuario" , "password");
seleccionamos la base de datos en la cual se buscaran los datos.
mysql_select_db("bd",$conexion);
Creamos la consulta general
$sql="select * from tabla where condición '";
Y concatenamos con nuevas subconsultas para realizar la búsqueda dependiendo del valor a buscar
$sql = $sql . " WHERE campo LIKE '%$valor%'";
// concatena la consulta principal con la subconsulta
Las 2 búsquedas más convencionales son:
1. Buscar filas que contengan cierta palabra clave.
Para esto utilizamos el Operador Mysql LIKE
if ($campoBusqueda == 'categoria') //campoBusqueda es un desplegable con las opciones por las que puede buscar
$sql = $sql . " WHERE Categoria LIKE '%$valor%'";
//valor es el input donde escribe el usuario
2. Buscar filas que coincidan exactamente con cierta palabra clave.
Para esto utilizamos el Operador Mysql de igualdad
if ($campoBusqueda == 'sueldo')
$sql = $sql . " WHERE Sueldo = '$valor'";
Por último, para ejecutar la consulta necesitamos escribir el siguiente código.
mysql_query($sql);
----------------------------------------------------------
SESIONES
Las sesiones son una forma sencilla de almacenar datos para usuarios de manera individual usando un ID de sesión único. Esto se puede usar para hacer persistente la información de estado entre peticiones de páginas.
Lo primero que debemos hacer cuando el usuario introduzca su nombre y contraseña será comprobar que existen en la BD y todo es correcto almacenar el id_usuario y el nombre en variables de Sesión para poder usar esas variables en todas las páginas php de la aplicación.
Hay que tener en cuenta que cada vez que queramos usar esas variables habrá que iniciar sesión.
A continuación se detallan las funciones necesarias para trabajar con sesiones.
Para registrar una variable de sesión y establecer un valor usaremos $_SESSION["nombre_variable"].
En todas las páginas de nuestro sitio web donde necesitemos usar algún dato del usuario que ha iniciado sesión o mostrar alguna opción especial para el usuario deberemos añadir el siguiente código, siempre al principio del fichero (antes de cualquier etiqueta HTML de la página):
<?
session_start();
?>
Con el procedimiento "session_start()" iniciaremos la sesión, si ya está iniciada no hará nada.
Añadir un enlace para que el usuario pueda cerrar la sesión en cualquier momento
if (isset ($_SESSION["id_usuario"])){
echo "<b>Bienvenid@ " . $_SESSION['nombre_usuario'] . " <a href='logout.php'>[Cerrar Sesion]</a></b>";
}
Uso de la función session_destroy para cerrar la sesión en PHP
Crearemos un fichero de texto plano sin formato con el siguiente contenido, guardándolo con el nombre "cerrarsesion.php" y lo subiremos a nuestro sitio FTP:
<?
session_start();
unset($_SESSION["id_usuario"]);
unset($_SESSION["nombre_usuario"]);
session_destroy();
header("Location: index.php");
exit;
?>
-------------------------------------------------------
Generar PDF con Dompdf
Vamos a ver cómo generar PDF's desde PHP empleando una librería llamada DomPDF.
Esta librería nos permite convertir un documento HTML a PDF, con lo cual es muy sencillo el generar cualquier documento PDF, simplemente generando la página HTML e indicándole a la librería que genere el documento PDF.
Lo primero que tendremos que hacer es cargar la librería, y a partir de ahí podremos generar el documento HTML que luego imprimiremos.
Véase el siguiente ejemplo de utilización de dicha librería:
<?php
# Cargamos la librería dompdf.
require_once 'lib/pdf/dompdf_config.inc.php';
# Contenido HTML del documento que queremos generar en PDF.
$html='
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Ejemplo de Documento en PDF.</title>
</head>
<body>
<h2>Ingredientes para la realización de Postres.</h2>
<p>Ingredientes:</p>
<dl>
<dt>Chocolate</dt>
<dd>Cacao</dd>
<dd>Azucar</dd>
<dd>Leche</dd>
<dt>Caramelo</dt>
<dd>Azucar</dd>
<dd>Colorantes</dd>
</dl>
</body>
</html>';
# Instanciamos un objeto de la clase DOMPDF.
$mipdf = new DOMPDF();
# Definimos el tamaño y orientación del papel que queremos.
# O por defecto cogerá el que está en el fichero de configuración.
$mipdf ->set_paper("A4", "portrait");
# Cargamos el contenido HTML.
$mipdf ->load_html(utf8_decode($html));
# Renderizamos el documento PDF.
$mipdf ->render();
# Enviamos el fichero PDF al navegador.
$mipdf ->stream('FicheroEjemplo.pdf');
?>
-----------------------------------------------------------------
Convertir Fechas PHP y MySQL
El formato usado en las tablas de MySQL para representar las fechas, es distinto al usado en muchos países, como por ejemplo España. Mientras que MySQL usa el formato AAAA/MM/DD (ejemplo 2013/08/08); aquí, como en muchos lugares se usa el formato DD/MM/AAAA (ejemplo 08/08/2013).
Bien, para poder introducir fechas en MySQL, recogidas en formularios a los usuarios por ejemplo, debemos convertirlas a formato MySQL; y lo mismo si queremos mostrar una fecha obtenida de una tabla MySQL en nuestra web.
La mejor forma de realizar una conversión entre la fecha que nos devuelve MySQL a nuestro formato es utilizando DATE_FORMAT de MySQL . La siguiente consulta nos devolvería la fecha con el formato DD/MM/AAAA, aunque podríamos indicarle que nos la devolviera como a nosotros nos interese.
mysql_query("SELECT DATE_FORMAT(campo_fecha,'%d/%m/%Y') FROM tabla", $conexión);
// El resultado será devuelto con el formato DD/MM/AAAA
Con este método obtendríamos una fecha del formato MySQL al nuestro. Pero no es la única.
Tenemos otra opción que nos valdría para convertir desde MySQL al nuestro, y desde el nuestro a MySQL:
//Cambiar fecha a MySQL(almacenar en BD). Formato fecha en MySQL
function obtenerFechaMySql($fecha)
{ list($day, $month, $year) = explode('/', $fecha);
return "$year-$month-$day";}
En este caso, recogemos una variable $fecha con la fecha que ha introducido el usuario, o simplemente la que deseamos cambiar. Nos lista en las variables $dia $mes y $ano los valores resultantes de separar con la función ”explode” la variable $fecha. Una vez listadas las variables solo debemos montar la última variable $fecha a nuestro gusto.
OJO!! Como muchos sabréis la función “explode” lee una cadena de texto y separa en un array (o en este caso nos lista por variable) los valores de esa cadena de texto usando un separador común, como puede ser un espacio ” “, o en este caso una barra “/”. Dicho esto, si la fecha introducida tiene el formato 08-08-2013 no funcionaria, con lo cual debemos avisar al usuario a introducir la fecha como nosotros queramos.
Para pasar de MySQL a nuestro formato, sabiendo de nuevo la separación en la fecha (que normalmente es /) usamos la misma función que antes, pero recogiendo en la variable $fecha el dato obtenido de la tabla.
//Leer de BD. Formato fecha española
function obtenerFecha($fechaMySql)
{ list($year, $month, $day) = explode('-', $fechaMySql);
return "$day/$month/$year";}
Suscribirse a:
Entradas (Atom)