Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Como mando un array en PDO para usarlo en un {html_options} de smarty

Estas en el tema de Como mando un array en PDO para usarlo en un {html_options} de smarty en el foro de PHP en Foros del Web. Estoy actualizando una sección que usa mysql a PDO para desplegar en un {html_options} de Smarty , y algo que funciona bien en mysql no ...
  #1 (permalink)  
Antiguo 14/02/2017, 15:08
Avatar de CarlosMex  
Fecha de Ingreso: mayo-2005
Mensajes: 67
Antigüedad: 19 años, 7 meses
Puntos: 0
Como mando un array en PDO para usarlo en un {html_options} de smarty

Estoy actualizando una sección que usa mysql a PDO para desplegar en un {html_options} de Smarty, y algo que funciona bien en mysql no se cómo lograrlo con PDO

Este es el código original que funciona bien actualmente:

Código PHP:
//Mando estados
$q="SELECT id, estado FROM estados";
$data=$db->execute($q);
$idEstados=array();
$estados=array();
for (
$i=0$i<sizeof($data);$i++) {
    
array_push($idEstados,$data[$i]->id);
    
array_push($estados,$data[$i]->estado);
}
$smarty->assign('idEstados',$idEstados);
$smarty->assign('estados',$estados); 
Luego en el .tpl todo se muestra correctamente, incluyendo "selected" que es el me importa más, si no, haría un {foreach} para desplegar los estados.

Código HTML:
<select name="destino_idEstado" class="form-control">
    <option>Seleccione un Estado</option>   
    {html_options output="$estado" values="$idEstado" selected=$data->idEstado}
</select> 
Lo que estoy haciendo con PDO funciona bien si hago un {foreach}, pero necesito usar el "selected" y me es más fácil hacerlo con el {html_options} de smarty, pero no se cómo enviar el array desde PDO para que funcione.

Código PHP:
$sql1="SELECT id,estado FROM testados";

$stmt $dba->prepare($sql1); 
$stmt->execute(); 

while (
$row $stmt->fetch(PDO::FETCH_ASSOC)) {

    
$idEstado $row['id'];
    
$estado $row['estado'];

    
$smarty->assign('idEstado'$idEstado);
    
$smarty->assign('estado',$estado);

He estado haciendo pruebas y el array se muestra correctamente si uso:

Código PHP:
echo $idEstado .' '$estado .'<br>'
Sin embargo en el .tpl de smarty no marca error, sólo muestra el espacio en blanco
De esta forma NO marca error, sólo no despliega el correspondiente.

¿Alguien podría orientarme?
__________________
CarlosMex
  #2 (permalink)  
Antiguo 15/02/2017, 06:38
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 10 años, 5 meses
Puntos: 30
Respuesta: Como mando un array en PDO para usarlo en un {html_options} de smarty

Combina el foreach con el if. Es decir, cuando el estado que se vaya a imprimir sea igual al estado seleccionado, agrega "selected" y ya.
  #3 (permalink)  
Antiguo 15/02/2017, 12:11
Avatar de CarlosMex  
Fecha de Ingreso: mayo-2005
Mensajes: 67
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: Como mando un array en PDO para usarlo en un {html_options} de smarty

Triby2 gracias por tu sugerencia, ¿te refieres a que haga algo como esto?

Código HTML:
<select name="destino_idEstado" class="form-control">
    <option>Seleccione un Estado</option> 
     {foreach $estados as $es}
     <option value="{$es.id}" {if $estado_destino eq $es.estado}Selected{/if}>{$es.estado}</option>
     {/foreach}
</select> 
__________________
CarlosMex
  #4 (permalink)  
Antiguo 15/02/2017, 13:21
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Como mando un array en PDO para usarlo en un {html_options} de smarty

Lo primero que veo mal es que tienes $smarty->assign() dentro del while y en el primer ejemplo está después.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 15/02/2017, 13:51
Avatar de CarlosMex  
Fecha de Ingreso: mayo-2005
Mensajes: 67
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: Como mando un array en PDO para usarlo en un {html_options} de smarty

Gracias Tribi, eso ya lo modifiqué. En otro foro me recomendaron esto:

Código PHP:
$sql1="SELECT id,estado FROM estados";

$stmt $dba->prepare($sql1); 
$stmt->execute(); 
$idEstados=array();
$estados=array();
while (
$row $stmt->fetch(PDO::FETCH_ASSOC)) {

    
array_push($idEstados,$row['id']);
    
array_push($estados,$row['estado']);

}

$smarty->assign('idEstados'$idEstados);
$smarty->assign('estados',$estados); 
Sin embargo el resultado en el .tpl es el mismo. Y cuando intento mostrarlo con un echo o con un {$idEstados} {$estados}, el resultado es Array Array
__________________
CarlosMex
  #6 (permalink)  
Antiguo 15/02/2017, 14:15
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Como mando un array en PDO para usarlo en un {html_options} de smarty

Haz una pequeña prueba, comparando los valores obtenidos con el código original y los del nuevo.

Lo primero, asegúrate de tener las variables con los mismos nombres en ambos códigos; después agrega la siguiente línea antes de generar la salida con smarty:

Código PHP:
Ver original
  1. var_dump($data, $idEstados, $estados);

Hay diferencias?, ahí debe estar el problema.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 15/02/2017, 15:32
Avatar de CarlosMex  
Fecha de Ingreso: mayo-2005
Mensajes: 67
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: Como mando un array en PDO para usarlo en un {html_options} de smarty

Gracias de nuevo Triby. En la primera opción, con MySQL, sí despliega los array con estados y sus id.

Con la segunda opción, con PDO, despliega:

string '3' (length=1) este es de $data

array (size=0) este es de $idEstados
empty

array (size=0) este es de $estados
empty
__________________
CarlosMex
  #8 (permalink)  
Antiguo 15/02/2017, 17:22
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Como mando un array en PDO para usarlo en un {html_options} de smarty

Viendo tu código original
Código:
{html_options output="$estado" values="$idEstado" selected=$data->idEstado}
$data debería ser un objeto y no una cadena, aunque, supongo que esa parte podrías solucionarla así:

Código:
{html_options output="$estado" values="$idEstado" selected=$data}
Luego, te comentaba que es mejor si usas las mismas varíables, porque aquí veo $estado y $idEstado, en singular, mientras que en el otro código aparece en plural.

Finalmente, te recomiendo usar el ejemplo 2 del manual.
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 15/02/2017, 17:50
Avatar de CarlosMex  
Fecha de Ingreso: mayo-2005
Mensajes: 67
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: Como mando un array en PDO para usarlo en un {html_options} de smarty

Gracias Triby, el problema lo tenía en la consulta sql; hice los cambios necesarios y ahora todo funciona bien. Así es como quedó:

Código PHP:
            $sql1 "SELECT id,estado FROM testados ORDER By estado";
            
$stmt $dba->prepare($sql1); 
            
$stmt->execute(); 
            
$idEstados=array();
            
$estados=array();
            while (
$row $stmt->fetch(PDO::FETCH_ASSOC)) {
            
                
array_push($idEstados,$row['id']);
                
array_push($estados,$row['estado']);
                
            }
            
            
$smarty->assign('idEstados'$idEstados);
            
$smarty->assign('estados',$estados); 
Y en el .tpl de smarty:

Código HTML:
<select name="destino_idEstado" class="form-control">
           <option>Seleccione un Estado</option>
           {html_options output=$estados values=$idEstados selected=$destino.idEstado}
</select> 
Tu recomendación de verificar con var_dump me ayudó a encontrar el error.
__________________
CarlosMex

Etiquetas: arrays, pdo, smarty
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:30.