<?php


	/*
			DEMOSTRACIÓN 
			Uso del manejador de base de datos JBDD
	*/

	
	
	
	
	// Incluye el manejador
	require ('jbdd.php');
	
	
	// Crea el objeto con los datos, nombre de base de datos, opcional usuario, clave y dirección
	$bd = new BDD('demo', 'root', '', 'localhost');
	
	// En este caso, es lo mismo...
	$bd = new BDD('demo');
	
	
	// Activa la visualización de comandos (para ver como funciona todo)	
	$bd->visor();
	
	// Crea la base de datos
	$bd->crear();
	
	// Conecta a la base de datos
	$bd->conectar();
		
	
	// Verifica si conectó
	if ($bd->desconectado())
		echo 'DESCONECTADO <BR/>';
	
	// Configura UTF-8
	$bd->utf8();
	
	
	
	
	
	// Crear tablas
	
	
	// Crea el objeto que tendrá información de la tabla usuarios	
	$usuario = new BDDTabla ('usuarios', $bd);
	
	// Define la estructura (para crear tablas)
	$usuario->tipo_columna('id'     , 'id'        );
	$usuario->tipo_columna('usuario', 'caracteres');	
	$usuario->tipo_columna('clave'  , 'caracteres');
	
	
	// Crea el objeto que tendrá información de la tabla comentarios
	$comentario = new BDDTabla ('comentarios', $bd);
		
	// Define la estructura (para crear tablas)
	$comentario->tipo_columna ('id'        , 'id'        );
	$comentario->tipo_columna ('usuario'   , 'caracteres');
	$comentario->tipo_columna ('comentario', 'texto'     );
	
	
	// Crear las tablas
	$bd->crearTabla($comentario);
	$bd->crearTabla($usuario   );
		
	// Como los constructores de $usuario y $comentario tienen una base de datos, se puede usar directamente...
	$usuario   ->crearTabla ();
	$comentario->crearTabla ();
		
	// Otra forma de hacer lo mismo...
	$bd->crearTabla($usuario, $comentario);
	
	// Si se quiere actualizar y crear columnas faltantes
	$usuario->tipo_columna('correo' , 'caracteres');
	$usuario->crearTablaYcolumnas ();
	
	
	


	// Insertar información
	
	// Ejemplo de información recibida por $_POST
	$POST = array ('usuario' => 'coco',
				   'clave'   => '1234',
				   'correo'  => 'coco@12.34');
	
		
	
	// Para agregar valores 
	$usuario->valor('usuario', $POST['usuario']);
	$usuario->valor('correo' , $POST['correo' ]);
	$usuario->valor('clave'  , $POST['clave'  ]);
	
	// Otra forma
	$usuario->valor('usuario', $POST['usuario'])
			->valor('correo' , $POST['correo' ])
			->valor('clave'  , $POST['clave'  ]);
	
	
	// Más simple
	// Los nombres de la columna en ESTE CASO deben tener el mismo nombre que las claves del arreglo
	$usuario->arreglo ($POST, 'usuario', 'clave', 'correo');
	
	
	// Para insertar el usuario	
	$bd->insertarSiNoExiste($usuario, 'usuario');
	
	// Como el constructor de $usuario tiene una base de datos, se puede usar directamente...
	$usuario->insertarSiNoExiste('usuario');
	
	
	
	// También se puede agregar valores e insertar directamente 
	$usuario->arreglo ($POST, 'usuario', 'clave', 'correo')
			->insertarSiNoExiste('usuario');
	
	
	// AVISO: ->insertarSiNoExiste(columnas...) mostrará (ejecutará) el comando insertar si luego de la consulta de selección el usuario no existe
	
	
	
	// Reutilizar el objeto $usuario
	$usuario->valor('usuario', 'kiko')->valor('clave', '1234')->insertarSiNoExiste();
	$usuario->valor('usuario', 'pipo')->valor('clave', 'hola')->insertarSiNoExiste();
	$usuario->valor('usuario', 'yiyo')->valor('clave', 'hola')->insertarSiNoExiste();
	$usuario->valor('usuario', 'pepe')->valor('clave', 'hola')->insertarSiNoExiste();
	
	
	
	
	
	
	// Consultar las tablas
	
	// La consulta
	$bd->seleccionar($usuario);
	
	// Otra forma
	$usuario->seleccionar();
		
	// Mostramos la tabla
	$bd->imprimir ();
	
	
	// Seleccionar algunas columnas
	$usuario->seleccion ('usuario');
	
	// Varios parámetros
	$usuario->seleccion ('clave', 'correo');
	
	// Consulta
	$bd->seleccionar($usuario);
		
	// Otra forma, más simple
	$usuario->seleccionar('usuario', 'clave');
	
	
	// Limitando...
	$usuario->limite (3);	
	
	// Ordenando...	
	$usuario->orden ('usuario');	
	
	// Agrupando...
	$usuario->grupo ('clave');
	
	// Realizar la consulta
	$usuario->seleccionar();	
	
	
	
	
	
	
	// Consultar si existe un usuario con una clave
	
	
	// AVISO: ->existe() compara por la tabla de valores, no por la tabla de comparaciones
	// es para usar antes de insertar tuplas
	
	// se crea el objeto que tendrá información de la tabla usuarios
	$usuario = new BDDTabla ('usuarios', $bd);
	
	
	// para agregar valores 
	$existe = $usuario->arreglo ($POST, 'usuario', 'clave')->existe();
	if ($existe)
		echo 'Usuario y clave correcto';
	else
		echo 'Usuario o clave incorrecto';
	 

	// otro ejemplo
	$usuario->valor('usuario', 'coco');
	$usuario->valor('clave'  , 'abcd');
	$existe = $usuario->existe();
	if ($existe)
		echo 'Usuario y clave correcto';
	else
		echo 'Usuario o clave incorrecto';
	



	// Unión
	
	// Insertar un comentario
	$comentario->valor ('usuario'   , 'pepe');
	$comentario->valor ('comentario', 'hola');
	$comentario->insertar();
	
	// Otro comentario de otro usuario
	$comentario->valor ('usuario'   , 'mima');
	$comentario->valor ('comentario', 'chau');
	$comentario->insertar();
	
	// Otro comentario de un tercer usuario
	$comentario->valor ('usuario'   , 'coco');
	$comentario->valor ('comentario', 'shhh');
	$comentario->insertar();
	
	
	// Nuevo objeto $usuario
	$usuario = new BDDTabla ('usuarios', $bd);
	
	// Relación de la tabla usuario con comentario 
	// sintaxis: $usuario ->relacion ($comentario, 'col-comentario', 'col-usuario');
	$usuario->relacion ($comentario, 'usuario', 'usuario');
	
	// Como el nombre de la columna es el mismo en ambas tablas....
	$usuario->relacion ($comentario, 'usuario');
	
	// Más parámetros
	$usuario->condicion ('correo', 'coco@12.34');
	
	// Ordenado por una columna de una tabla
	$usuario->orden ('clave');
	
	// Ordenado por una columna de otra tabla
	$comentario->orden ('usuario');
	
	// Proyección de comentario
	$comentario->seleccion ('comentario');
	
	// Proyección de usuario 
	$usuario->seleccion('usuario', 'correo');
	
	// Ejecutar la consulta
	$bd->seleccionar($usuario);
	
	// Otra forma de ejecutar la consulta
	$usuario->seleccionar();
	
	// Mostrar la tabla en pantalla
	$bd->imprimir ();
	
	// ¿Y las tuplas? aquí, varias formas de consular tuplas
	$tuplas = $bd     ->tuplas();
	$tuplas = $bd     ->seleccionar($usuario);
	$tuplas = $usuario->seleccionar();
	
	// Luego de las consultas se obtienen los datos...
	while ($resultado = $bd->siguienteTupla())
		echo ($resultado['usuario']);
	
	
	
	
	
	// Personalizar columnas
	
	// Nuevo objeto $usuario
	$usuario = new BDDTabla ('usuarios', $bd);
	
	// Creador de etiquetas
	$etiqueta = new BDDEtiqueta() ;
	$etiqueta->atributo ('href'       ); // atributo de la etiqueta
	$etiqueta->literal('pagina.php'   ); // valor del atributo: dirección
	$etiqueta->literal('?usuario='    ); // parámetros GET que se pasarán
	$etiqueta->columna('usuario'      ); // el valor de la columna Usuario
	$etiqueta->literal('&id='         ); // agrega otro parámetro 
	$etiqueta->columna('id'           ); // el valor de la columna ID
	$etiqueta->literal('&clave=123456'); // ejemplo de parámetro fijo
	$etiqueta->finAtributo ();
	
	$etiqueta->atributo ('class');       // otro atributo para la etiqueta
	$etiqueta->literal('enlace' );	     // valor del atributo
	$etiqueta->finAtributo ();

	$etiqueta->contenido();              // texto que se mostrará
	$etiqueta->literal('Borrar ');		 // valor fijo
	$etiqueta->columna('usuario');		 // mostrará el usuario 
	$etiqueta->finContenido ();
	
	$codigo =  $etiqueta->obtener('a');	 // obtiene la etiqueta 'A' (enlace)
	
	// código de concatenación y asignación de nombre a la columna
	$columnaPersonalizada = "concat ($codigo) as 'Borrar Usuario'";
	
	// Selecciona las columnas
	$usuario->seleccionar('id', 'usuario', $columnaPersonalizada);
	
	// Muestra en pantalla
	$bd->imprimir();
	
	
	// .... y listo
	$bd->desconectar();


?>