Mucho he visto en el foro que preguntan como pueden obtener el "label" de un control <select>, por defecto esto no es posible, ya que el explorador no envía este dato, sin embargo podemos jugar un poco con la fuente de datos para obtener el label.
Por eso presento el siguiente aporte, sirve para dibujar controles <select> y poder obtener varias caracteristicas del control una vez que lo procesamos en PHP.
Antes de poner el código y como usarlo, debo de mencionarles que la fuente de datos esta separada del control, esto le da mucha flexibilidad ya que no es necesario que la fuente de datos sea una base de datos, puede ser un array, o un archivo de texto con tal de que implemente la interfaz necesaria.
Primero lo primero, y es que hay que darle una fuente a los datos:
Código PHP:
/** Primero creamos nuestro access layer a los datos y conectamos **/
$db = new DBAccess( "localhost", "root", "", "" );
$db->Connect();
/** Luego creamos nuestra fuente de datos **/
$ds = new SQLDataSource( $db, "SELECT `id`, `nombre` FROM `nombres`" );
$ds->bind();
En $ds ya tenemos una fuente de datos que podemos meter a nuestro control:
Código PHP:
/** El select se llamara "nombres" y lo podemos rescatar como $_POST['nombres'] aunque más abajo veremos una forma mas efectiva **/
$sel = new Select( "nombres" );
$sel->setDataSource( $ds );
El ultimo paso es construir el control y mostrarlo en nuestro formulario esto lo hacemos sencillo:
Código PHP:
<?php
$sel->buildControl();
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="demo">
<?php echo $sel->getControl(); ?> <input type="submit" name="enviar" value="Enviar" />
</form>
Ahora más arriba mencione que es posible rescatar más opciones del control y esto es leyendo sus propiedades:
Código PHP:
$selected = $sel->getSelectedValue();
$label = $sel->getSelectedLabel();
$name = $sel->getName();
printf( "Del control %s, usted selecciono el valor %s, que corresponde a %s", $name, $selected, $label );
Con esto podemos tener un acceso OOP a un control de una forma más limpia y de forma 100% OOP.
Aquí esta el archivo final:
Código PHP:
<?php
require( 'DBAccessInterface.php' );
require( 'DBResultInterface.php' );
require( 'DBAccess.php' );
require( 'DBResult.php' );
require( 'DataSourceInterface.php' );
require( 'SQLDataSource.php' );
require( 'Select.php' );
$db = new DBAccess( "localhost", "root", "", "" );
$db->Connect();
$ds = new SQLDataSource( $db, "SELECT `id`, `nombre` FROM `nombres`" );
$ds->bind();
$sel = new Select( "nombres" );
$sel->setDataSource( $ds );
if( strtolower( $_SERVER['REQUEST_METHOD'] ) == 'post' ) {
$selected = $sel->getSelectedValue();
$label = $sel->getSelectedLabel();
$name = $sel->getName();
printf( "Del control %s, usted selecciono el valor %s, que corresponde a %s", $selected, $label );
}
$sel->buildControl();
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="demo">
<?php echo $sel->getControl(); ?> <input type="submit" name="enviar" value="Enviar" />
</form>
En los próximos posts pondre el Source Code de toda la aplicación para que lo puedan probar en sus servers.