Contenido

Llenar un Select con datos Dinámicos

Contenido

En una ocasión, ‘ignatius73’, uno de mis lectores, me envió este post, y no puedo dejar de publicárselo:

PHP

He aquí la historia, gracias al maestro Miguel Ángel, me esclareció en un tema que me tenía trabado. Soy programador PHP pero no soy muy experto en objetos PHP, por lo que me mareo fácilmente, así cuando debía rellenar un select en un formulario con datos que provenían de una base de datos en drupal, me encontraba con que no podía, mis conocimientos no bastaban, así que le solicité asistencia al maestro y aquí pego la solución:

“Hace tiempo que implementé una especie de “frigorífico virtual”. De ahí te saco el siguiente código (si lo quieres, lo publico entero en la web, ya que debería estar ahí desde hace siglos):”

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
function virtualcoin_putbackedit_form ( $data, $putbackid=NULL )
{
  /* Lista de productos */
  $query = "SELECT id, name FROM {virtualcoin_products} p order by name";
  $queryResult =  db_query ( $query, $putbackid );
  $products = array ();
  while ( $p = db_fetch_object ( $queryResult ) )
  {
    $products[$p->id] = $p->name;
  }

  /* Datos del putback */
  $title = t("Editar una reposición");
  $button = t ("Guardar cambios");

  $query = "SELECT p.name, b.productid, b.prizeunit, b.quantity FROM {virtualcoin_products} p, {virtualcoin_putbacks} b WHERE b.id=%d and p.id = b.productid";
  $queryResult =  db_query ( $query, $putbackid );
  $putback = db_fetch_object ( $queryResult );

  $name = $putback->name;
  $prizeunit = $putback->prizeunit;
  $quantity = $putback->quantity;
  $productid = $putback->productid;
  $form = array
  (
    'purchase' => array
    (
      '#type' => 'fieldset',
      '#title' => t( $title ),
      'putbackid' => array ( '#type' => 'hidden', '#value' => $putbackid ),
      'product' => array ( '#type' => 'select', '#title' => 'Producto' ,'#options' => $products, '#default_value' =>  $productid ),
      'prizeunit' => array ( '#type' => 'textfield', '#title' => t('Precio por unidad'), '#default_value' => $prizeunit),
      'quantity' => array ( '#type' => 'textfield', '#title' => t('Cantidad'), '#default_value' => $quantity),
      'submit' => array ( '#type' => 'submit',  '#value' => $button,  ),
    ),
  );

  return $form;
}

/**
* Implementation of hook_submit().
*/
function virtualcoin_putbackedit_form_submit ( $form, &$form_state )
{
  $putbackid  = $form_state['values']['putbackid'];
  $productid  = $form_state['values']['product'];
  $prizeunit  = $form_state['values']['prizeunit'];
  $quantity   = $form_state['values']['quantity'];
  global $user;

  $query     = "UPDATE {virtualcoin_putbacks} set productid=%d, prizeunit=%f, quantity=%d where id = %d ";
  $queryResult = db_query ( $query, $productid, $prizeunit, $quantity, $putbackid );

  if ( $queryResult )
    drupal_set_message ( t ( "Se ha modificado el producto " . $name ) );
  else
    form_set_error ( '', t ('Error durante el guardado.') );

}
?>

Fíjense qué fácil era!

Y qué prolijo, caramba, si pudiera yo trabajar (laburar para este hemisferio) así…

Gracias Miguel Ángel, continúa así, con tus tutoriales que son fenomenales.

Saludos.

ignatius73

Ps.: Y encima me tuvo que crear el usuario!