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();
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 );
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>
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 );
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>