Foros del Web » Programando para Internet » PHP »

Crear automáticamente variable para cada array

Estas en el tema de Crear automáticamente variable para cada array en el foro de PHP en Foros del Web. Básicamente eso. ¿Cómo podría crear una variable diferente para cada array que se me genere? Es para luego poder guardar los datos en una base ...
  #1 (permalink)  
Antiguo 22/02/2009, 06:01
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Crear automáticamente variable para cada array

Básicamente eso.
¿Cómo podría crear una variable diferente para cada array que se me genere?
Es para luego poder guardar los datos en una base de datos, ya que si no defino variables para cada array, al intentar guardar los diferentes array en la base de datos, me guarda solo el primero muchas veces.
Gracias a todos
  #2 (permalink)  
Antiguo 22/02/2009, 09:26
Avatar de jenusys  
Fecha de Ingreso: diciembre-2008
Ubicación: Ahí mismo.
Mensajes: 216
Antigüedad: 15 años, 4 meses
Puntos: 11
Respuesta: Crear automáticamente variable para cada array

Tienes que usar un bucle o iteración con un WHILE o FOR. Pero ¿Qué tipo de array tienes?
  #3 (permalink)  
Antiguo 22/02/2009, 09:38
 
Fecha de Ingreso: septiembre-2004
Mensajes: 324
Antigüedad: 19 años, 7 meses
Puntos: 13
Respuesta: Crear automáticamente variable para cada array

Efectivamente como dice jenusys, tendrás que iterar con un bucle.
Si nos pones parte del codigo nos ayudaría bastante.



Saludos
  #4 (permalink)  
Antiguo 22/02/2009, 09:43
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Crear automáticamente variable para cada array

En principio, esta es la matriz que me genera una tabla usando un bucle, con los diferentes array que se han ido seleccionando.

Código PHP:
<?
class carrito {
    
//atributos de la clase
       
var $num_productos;
       var 
$array_id_prod;
       var 
$array_nombre_prod;
       var 
$array_precio_prod;

    
//constructor. Realiza las tareas de inicializar los objetos cuando se instancian
    //inicializa el numero de productos a 0
    
function carrito () {
           
$this->num_productos=0;
    }
    
    
//Introduce un producto en el carrito. Recibe los datos del producto
    //Se encarga de introducir los datos en los arrays del objeto carrito
    //luego aumenta en 1 el numero de productos
    
function introduce_producto($id_prod,$nombre_prod,$precio_prod){
        
$this->array_id_prod[$this->num_productos]=$id_prod;
        
$this->array_nombre_prod[$this->num_productos]=$nombre_prod;
        
$this->array_precio_prod[$this->num_productos]=$precio_prod;
        
$this->num_productos++;
    }

    
//Muestra el contenido del carrito de la compra
    //ademas pone los enlaces para eliminar un producto del carrito
    
function imprime_carrito(){
        
$suma 0;
        echo 
'<table border=1 cellpadding="3">
              <tr>
                <td><b>Nombre producto</b></td>
                <td><b>Precio</b></td>
                <td>&nbsp;</td>
              </tr>'
;
        for (
$i=0;$i<$this->num_productos;$i++){
            if(
$this->array_id_prod[$i]!=0){
                echo 
'<tr>';
                echo 
"<td>" $this->array_nombre_prod[$i] . "</td>";
                echo 
"<td>" $this->array_precio_prod[$i] . "</td>";
                echo 
"<td><a href='eliminar_producto.php?linea=$i'>Eliminar producto</td>";
                echo 
'</tr>';
                
$suma += $this->array_precio_prod[$i];
            }
        }
        
//muestro el total
        
echo "<tr><td><b>TOTAL:</b></td><td> <b>$suma</b></td><td>&nbsp;</td></tr>";
        
//total más IVA
        
echo "</table>";
    }
    
    
//elimina un producto del carrito. recibe la linea del carrito que debe eliminar
    //no lo elimina realmente, simplemente pone a cero el id, para saber que esta en estado retirado
    
function elimina_producto($linea){
        
$this->array_id_prod[$linea]=0;
    }

//inicio la sesión
session_start();
//si no esta creado el objeto carrito en la sesion, lo creo
if (!isset($_SESSION["ocarrito"])){
    
$_SESSION["ocarrito"] = new carrito();
}
?>
¿Cómo harias para guardar en una base de datos los productos seleccionados, teniendo en cuenta que puede variar mucho el número de productos seleccionados?
¿Sería tener una base de datos con un montón de campos para los posibles productos, o es mejor que se actualice la tabla añadiéndose el número de campos en función del número de productos seleccionados?
  #5 (permalink)  
Antiguo 22/02/2009, 10:04
Avatar de jenusys  
Fecha de Ingreso: diciembre-2008
Ubicación: Ahí mismo.
Mensajes: 216
Antigüedad: 15 años, 4 meses
Puntos: 11
Respuesta: Crear automáticamente variable para cada array

Te podría sugerir esta solución a nivel teórico y no con código.

Crea UN solo campo en donde se guardarán los productos seleccionados CONCATENADOS pero separados por una coma o un punto y coma u otro separador al cual luego le podrías dar una función EXPLODE para volver a separarlos cuando lo necesites.
  #6 (permalink)  
Antiguo 22/02/2009, 12:57
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Crear automáticamente variable para cada array

Ok gracias, voy a investigar. Te comentaré por aquí mis progresos.
  #7 (permalink)  
Antiguo 22/02/2009, 13:46
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Crear automáticamente variable para cada array

No sé como hacerlo, alguien me ayudaría por favor?
¿Me podeis poner un ejemplo de como concatenar un array para que me pueda hacer uan idea?
  #8 (permalink)  
Antiguo 22/02/2009, 13:51
Avatar de jenusys  
Fecha de Ingreso: diciembre-2008
Ubicación: Ahí mismo.
Mensajes: 216
Antigüedad: 15 años, 4 meses
Puntos: 11
Respuesta: Crear automáticamente variable para cada array

Cuando ingreses tus datos en la sentencia SQL separas cada variable con, por ejemplo, una coma así:

..... _query("INSERT INTO ............ productos='$array[1],$array[2],$array[3]' ........
  #9 (permalink)  
Antiguo 22/02/2009, 14:41
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Crear automáticamente variable para cada array

Aaa vale vale, y de la misma forma podría guardar todos los datos con algo así ¿no?:
INSERT INTO ............ productos='$array[1],$array[2],$array[3]'... precios='$precio[1]','$precio[2]','$precio[3]'...

De todas formas me hace falta alguna sentencia que me genere una variable ($array[1]) por cada array diferente ¿no? y ademas en la propia inserción decirle que me guarde tantas variables como arrays existan ¿no?

Disculpa mi desconocimiento pero nunca he usado los arrays, solo consultas sencillas.
  #10 (permalink)  
Antiguo 23/02/2009, 10:45
Avatar de jenusys  
Fecha de Ingreso: diciembre-2008
Ubicación: Ahí mismo.
Mensajes: 216
Antigüedad: 15 años, 4 meses
Puntos: 11
Respuesta: Crear automáticamente variable para cada array

Mira XEMATICK, de acuerdo al código que pusiste yo podría darte la solución fácil, pero así no aprenderías y te lo digo con respeto, por eso no te doy la solución de una vez.
Lo que sucede es que el tema de los arrays es bastante extenso, pero para que puedas entenderlo mejor te lo voy a poner así:

//Esta es la manera larga, pero la más explicativa.
//Tengo una cantidad grande de datos convertidos a cadenas(variables), por ejemplo traídas
//de un formulario:

$unon = Null;
$uno1 = $_POST['clave01'];
$uno2 = $_POST['clave02'];
$uno3 = $_POST['clave03'];
$uno4 = $_POST['clave04'];
$uno5 = $_POST['clave05'];
$uno6 = $_POST['clave06'];
$uno7 = $_POST['clave07'];
$uno8 = $_POST['clave08'];
$uno9 = $_POST['clave09'];
$uno10 = $_POST['clave10'];
$uno11 = $_POST['clave11'];
$uno12 = $_POST['clave12'];
$uno13 = $_POST['clave13'];
$uno14 = $_POST['clave14'];
$uno15 = $_POST['clave15'];
$uno16 = $_POST['clave16'];
$uno17 = $_POST['clave17'];
$uno18 = $_POST['clave18'];
$uno19 = $_POST['clave19'];
$uno20 = $_POST['clave20'];
$uno21 = $_POST['clave21'];
$uno22 = $_POST['clave22'];
$uno23 = $_POST['clave23'];
$uno24 = $_POST['clave24'];
$uno25 = $_POST['clave25'];
$uno26 = $_POST['clave26'];
$uno27 = $_POST['clave27'];
$uno28 = $_POST['clave28'];
$uno29 = $_POST['clave29'];
$uno30 = $_POST['clave30'];

//Y ahora los meto todos en un ARRAY
$contenido = array($unon, $uno1, $uno2, $uno3, $uno4, $uno5, $uno6, $uno7, $uno8, $uno9, $uno10, $uno11, $uno12, $uno13, $uno14, $uno15, $uno16, $uno17, $uno18, $uno19, $uno20, $uno21, $uno22, $uno23, $uno24, $uno25, $uno26, $uno27, $uno28, $uno29, $uno30,);

//Así $contenido[0] sería igual a lo que tenga la variable $unon
//$contenido[1] sería igual a lo que tenga la variable $uno1
//Y así sucesivamente.

echo $contenido[3];

Última edición por jenusys; 23/02/2009 a las 19:22
  #11 (permalink)  
Antiguo 23/02/2009, 14:30
 
Fecha de Ingreso: junio-2008
Mensajes: 76
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Crear automáticamente variable para cada array

La única forma que YO se como hacer variables de forma automática a través de un arreglo, es usando la función extract().

La función te permitiría convertir el nombre de la llave de un elemento en el arreglo en una variable. Ejemplo:

$array = array('key_1' => 'llave uno', 'key_2' => 'llave dos', ...);
extract($array);
echo $key_1; // ESTA VARIABLE SE FORMÓ CON EL NOMBRE DE LA LLAVE DENTRO DEL ARREGLO SIN HABERLA ESCRITO ANTES EN TU CODIGO.

¿Es esta la solución que buscas?
  #12 (permalink)  
Antiguo 23/02/2009, 14:37
 
Fecha de Ingreso: febrero-2009
Mensajes: 2
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Crear automáticamente variable para cada array

Cita:
Iniciado por jenusys Ver Mensaje

//Esta es la manera larga, pero la más explicativa.
//Tengo una cantidad grande de datos convertidos a cadenas(variables), por ejemplo traídas
//de un formulario:

$unon = Null;
$uno1 = $_POST['clave01'];
$uno2 = $_POST['clave02'];
$uno3 = $_POST['clave03'];
$uno4 = $_POST['clave04'];
$uno5 = $_POST['clave05'];
$uno6 = $_POST['clave06'];
$uno7 = $_POST['clave07'];
$uno8 = $_POST['clave08'];
$uno9 = $_POST['clave09'];
$uno10 = $_POST['clave10'];
$uno11 = $_POST['clave11'];
$uno12 = $_POST['clave12'];
$uno13 = $_POST['clave13'];
$uno14 = $_POST['clave14'];
$uno15 = $_POST['clave15'];
$uno16 = $_POST['clave16'];
$uno17 = $_POST['clave17'];
$uno18 = $_POST['clave18'];
$uno19 = $_POST['clave19'];
$uno20 = $_POST['clave20'];
$uno21 = $_POST['clave21'];
$uno22 = $_POST['clave22'];
$uno23 = $_POST['clave23'];
$uno24 = $_POST['clave24'];
$uno25 = $_POST['clave25'];
$uno26 = $_POST['clave26'];
$uno27 = $_POST['clave27'];
$uno28 = $_POST['clave28'];
$uno29 = $_POST['clave29'];
$uno30 = $_POST['clave30'];

//Y ahora los meto todos en un ARRAY
$contenido = array($unon, $uno1, $uno2, $uno3, $uno4, $uno5, $uno6, $uno7, $uno8, $uno9, $uno10, $uno11, $uno12, $uno13, $uno14, $uno15, $uno16, $uno17, $uno18, $uno19, $uno20, $uno21, $uno22, $uno23, $uno24, $uno25, $uno26, $uno27, $uno28, $uno29, $uno30,);

//Así $contenido[0] sería igual a lo que tenga la variable $unon
//$contenido[1] sería igual a lo que tenga la variable $uno1
//Y así sucesivamente.
Bueno bueno y si hacemos un FOR y no liamos tanto la perdiz jejeje

Propongo:
$total=sizeof($_POST);
for($i=0;$i<=$total;$i++){
$uno.$i=$_POST['VALOR QUE NECESITES'.$i];
}



Ale asi creo que se ahorra un poco de faena el chaval

Saludos
  #13 (permalink)  
Antiguo 23/02/2009, 14:43
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Crear automáticamente variable para cada array

O.o Es mas facil hacerlo directamente desde el formulario.

Darle un nombre tipo array al campo:
<input type="text" name="esto_es_un_array[]" />
<input type="text" name="esto_es_un_array[]" />

Y si haces un print_r($_POST['esto_es_un_array']) veras que crea 1 llave por cada campo.
  #14 (permalink)  
Antiguo 24/02/2009, 02:23
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Crear automáticamente variable para cada array

Bufff ahora si tengo material para trabajar.
La idea principal de jenusys fué muy buena, lo que pasa es que como tengo cantidad de productos me llevaría algo de trabajo hacerlo todo así.
La de Zico y Carot me parecen la solución, voy a probar con las dos, ya que la de Ronbury supone rehacer todos los form, que son muchos, aunque hecho desde el principio así estaría bastante bien.
Bueno, muchas gracias a todos chicos, ya os comento mis avances o problemas!!
Gracias!
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 00:31.