Foros del Web » Programando para Internet » PHP »

Como declarar un array con Var de Session

Estas en el tema de Como declarar un array con Var de Session en el foro de PHP en Foros del Web. Como se declara un array como variable de session, suponiendo que tengo una consulta a una tabla que me devuelve x cantidad de Filas. <? ...
  #1 (permalink)  
Antiguo 28/03/2003, 09:53
Avatar de Chuty  
Fecha de Ingreso: noviembre-2002
Ubicación: el bar de la esquina
Mensajes: 609
Antigüedad: 21 años, 5 meses
Puntos: 2
Como declarar un array con Var de Session

Como se declara un array como variable de session, suponiendo que tengo una consulta a una tabla que me devuelve x cantidad de Filas.

<?
// **** Se establece la conexión con la fuente de datos
$conex = odbc_connect( $_Server, $_user, $_passw);

if($conex ) {
// **** preparamos el query
$consulta = "select cod , des from mibase.onl_tabla";

// **** hacemos a la variable igual al data object
$resultado = odbc_do($conex, $consulta);

if( $resultado > 0 ) {
while ( odbc_fetch_row($resultado) ) {
$cod= odbc_result($resultado,1);
$des= odbc_result($resultado,2);
// echo "$cod - $des";
}
}
// **** Se liberan recursos y se cierra la conexión
odbc_free_result($resultado);
odbc_close($conex);
}
?>
Gracias y salu2
  #2 (permalink)  
Antiguo 28/03/2003, 10:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
"Declarar" se hace igual que cualquier variable .. solo q si vas a propagar un array en una session hay que "serializar" el array antes de "meterla" en la session y a su vez tienes que "deserializarla" al leer esa variable de sesión.

Tambien depende de que uses para registrar tu variable de sesión .. si no me equivoco . .si usas session_register() son serializadas "automáticamente" por PHP .. pero si usas el array superglobal $_SESSION .. lo tienes que hacer tu a mano .. (mm o era con objetos .. ahora no recuerdo xDDD)

Busca en el manual de PHP .. serialize() y unserialize() .. tambien es probable que te haga falta stripslashes() a la hora de usar unserialize() para quitar los \ de mas q añade ..

Ahora, .. mi pregunta es .. Que array quieres propagar en una session? ..

Código PHP:
//$registro=0;
while ( $row=odbc_fetch_array($resultado) ) {
$cod=$row[1];
$des$row[2];
 echo 
"$cod - $des";
// $consulta_array[$registro]['cod']=$row[1]; // array bidimensional asociativa ..
// $consulta_array[$registro]['des']=$row[2];
// $registro++;


mm tal vez si usases eso, .. el array $row ? .. o crear un array con los resultados de esa consulta (todos .. no solo el último registro como sería el caso de usar $row al final de ese bucle .. $consulta_array array bidimensinal)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 28/03/2003 a las 10:42
  #3 (permalink)  
Antiguo 28/03/2003, 11:26
Avatar de Chuty  
Fecha de Ingreso: noviembre-2002
Ubicación: el bar de la esquina
Mensajes: 609
Antigüedad: 21 años, 5 meses
Puntos: 2
Gracias Cluster
mira yo utilizo session_register() y la tabla que estoy leyendo es para metarla dentro de un <select name=><option> ya que esa tabla o bien ese select la utilizare en otras paginas paginas para otras consultas, que me aconcejas hacer o como hago el array para luego meterlo dentro del Select, y poder seleccionar un campo.
Nuevamente Gracias y salu2
  #4 (permalink)  
Antiguo 28/03/2003, 11:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues puedes hacer si quieres el array .. el ejemplo ya te lo puse .. son todas las líneas de código que puse // .. comentadas ... Así te evitas unas consultas a tu BD (a todo estó debes considerar que mientras que el usuario hace la consulta a la BD .. extrae esos datos y los deja en la session .. no se va a "enterar" si por otro lado esos datos son modificados .. si son mas bien "constantes" esos datos puedes usar sesiones con tranquilidad .. pero si son muy variables .. mejor no lo uses y haz la consulta constantemente en todas las páginas q lo requieras).

Como veras es un array bidimensinal .. aunque podrías usar tambien arrays asociativos tipo:

$array_select['clave']='valor';

Eso como mas te guste .. (con arrays asociativos . con un simple bulcle foreach (una vez "desserializada" tu array en session si lo requieres ..) sería:

Código PHP:
echo "<select ....>";
foreach (
$array_select as $clave => $valor){
echo 
"<option name=\"".$clave."\">".$valor."</option>";
}
echo 
"</select>"
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 28/03/2003, 12:23
Avatar de Chuty  
Fecha de Ingreso: noviembre-2002
Ubicación: el bar de la esquina
Mensajes: 609
Antigüedad: 21 años, 5 meses
Puntos: 2
Cluster estoy utilizando las lineas que vos me decis que utilice pero me da el siguiente error

Fatal error: Call to undefined function: odbc_fetch_array() in c:\inetpub\wwwroot\phptest\Sgfctr_sgftsb.php on line 16

Código PHP:
<?php  
      session_start
();

// **** Se establece la conexión con la fuente de datos
$conex odbc_connect$_Server$_user$_passw);

  if(
$conex ) {
  
// **** preparamos el query
  
$consulta "select cod , des from mibase.onl_tabla"
    
  
// **** hacemos a la variable igual al data object        
  
$resultado odbc_do($conex$consulta);

    if( 
$resultado ) {
                    
    while (
$row=odbc_fetch_array($resultado)) {
    
$cod=$row[1];
    
$des$row[2];
    echo 
"$cod - $des";
    
$consulta_array[$registro]['cod']=$row[1]; // array bidimensional asociativa ..
    
$consulta_array[$registro]['des']=$row[2];
    
$registro++;
    }
                        
  }       
  
// **** Se liberan recursos y se cierra la conexión
  
odbc_free_result($resultado);
  
odbc_close($conex);
}
?>
Que es lo que hice mal aparte de nacer...
y otra consulta para leer al array seria

Código PHP:
echo "<select name=valcta >" ;
foreach (
$array_select as $clave => $valor){
echo 
"<option name=\"".$clave."\">".$valor."</option>";
}
echo 
"</select>"
O como???
  #6 (permalink)  
Antiguo 28/03/2003, 12:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Parece que usas PHP inferior a la versión 4.1 .. ?

Bueno .. en el manual de PHP .. dan una alternativa (bueno .. implementan la función mysql_fetch_array() par esas versiones de PHP):

Código PHP:
function will exist on the next php update):
if (
function_exists(odbc_fetch_array))
 return;
function 
odbc_fetch_array($result$rownumber=-1) {
 if (
PHP_VERSION "4.1") {
   if (
$rownumber 0) {
     
odbc_fetch_into($result, &$rs);
   } else {
     
odbc_fetch_into($result, &$rs$rownumber);
   }
 } else {
   
odbc_fetch_into($result$rownumber, &$rs);
 }
 foreach (
$rs as $key => $value) {
   
$rs_assoc[odbc_field_name($result$key+1)] = $value;
 }
 return 
$rs_assoc;

Pero .. si quieres no es necesario que la uses .. sigue como lo hacias tu:

Código PHP:
<?php
 session_start
(); // inicio sessiones.
 
session_register("select_array"); // registras la variable (array) en la session

// **** Se establece la conexión con la fuente de datos
$conex odbc_connect$_Server$_user$_passw);

  if(
$conex ) {
  
// **** preparamos el query
  
$consulta "select cod , des from mibase.onl_tabla";

  
// **** hacemos a la variable igual al data object
  
$resultado odbc_do($conex$consulta);

    if( 
$resultado ) {

    while (
odbc_fetch_row($resultado)) {
    
$cod=odbc_result($resultado,1);
    
$des=odbc_result($resultado,2);
    
$select_array[$cod]=$des// array  asociativa ..
    
}

  }
  
// **** Se liberan recursos y se cierra la conexión
  
odbc_free_result($resultado);
  
odbc_close($conex);
}
?>
Y .. donde leas ese array de la sesion:

Código PHP:
<?
session_start
(); // Incio sessiones.

// principio de formulario ..
echo "<select name=\"valcta\">" ;
foreach (
$array_select as $clave => $valor){
echo 
"<option name=\"".$clave."\">".$valor."</option>";
}
echo 
"</select>";

// tu resto fomulario...
?>
Eso asumiendo que usas register_globals a ON .. (creo q así lo usas ..) Y esperando que PHP serialize el array por ty ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 05:06.