Foros del Web » Programando para Internet » PHP »

Utilizar el array $_POST en una función

Estas en el tema de Utilizar el array $_POST en una función en el foro de PHP en Foros del Web. Hola a todos. Estoy haciendo un formulario en el que tengo varios selects. Bien, he hecho una función que necesito a la hora de ingresar ...
  #1 (permalink)  
Antiguo 13/03/2006, 11:17
Avatar de franquero  
Fecha de Ingreso: julio-2005
Mensajes: 179
Antigüedad: 18 años, 9 meses
Puntos: 1
Utilizar el array $_POST en una función

Hola a todos.

Estoy haciendo un formulario en el que tengo varios selects. Bien, he hecho una función que necesito a la hora de ingresar los datos en Mysql. Pero de la forma que lo he hecho tengo que escribir la función específica para cada uno de los selects.
La función empieza así:
Código PHP:
function getvalor() {
     
$recibimos $_POST['categoria'];
      ...

El problema es que no sé cómo tomar una determinada clave del array POST. Algo que funcionara más o menos así:
Código PHP:
function getvalor($campo) {
     
$recibimos $_POST[$campo];
      ...



Bueno, espero que como siempre habéis hecho, en esta ocasión me volváis a echar una mano

SALUDOS ! ! !
__________________
Es una suerte que la sociedad libre sea más productiva, porque de no haberlo sido jamás se habría tolerado.
  #2 (permalink)  
Antiguo 13/03/2006, 11:21
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
No queda claro tu duda ,,, te refieres al uso de $_POST[]?
En el caso del nombre de tus selects seria

Código PHP:
<?
$select1 
$_POST["nombredelselect1"];
$select2 $_POST["nombredelselect2"];
$select3 $_POST["nombredelselect3"];
.
.
.
?>
  #3 (permalink)  
Antiguo 13/03/2006, 12:04
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Yo uso un bucle asociativo:

for ($_POST as $item => $dato) $item = $dato;

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 13/03/2006, 12:52
 
Fecha de Ingreso: diciembre-2005
Mensajes: 165
Antigüedad: 18 años, 3 meses
Puntos: 4
Cita:
Iniciado por caricatos
Hola:

Yo uso un bucle asociativo:

for ($_POST as $item => $dato) $item = $dato;

Saludos
Eso es un foreach
  #5 (permalink)  
Antiguo 13/03/2006, 13:32
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Cita:
Iniciado por Cubatron
Eso es un foreach
Tienes toda la razón:

foreach ($_POST as $item => $dato) $item = $dato;

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 14/03/2006, 11:31
Avatar de franquero  
Fecha de Ingreso: julio-2005
Mensajes: 179
Antigüedad: 18 años, 9 meses
Puntos: 1
Gracias a todos por sus respuestas.

Caricatos, entiendo cómo funciona un foreach, pero no llego a comprender cómo utilizarlo en este caso.
¿Serías tan amable de enseñarme cómo lo aplicarías en este caso concreto?
Código PHP:
<?php

function getvalor($campo) {
     
$recibimos $_POST[$campo];
      ...
}

?>
__________________
Es una suerte que la sociedad libre sea más productiva, porque de no haberlo sido jamás se habría tolerado.
  #7 (permalink)  
Antiguo 14/03/2006, 11:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por franquero
Gracias a todos por sus respuestas.

Caricatos, entiendo cómo funciona un foreach, pero no llego a comprender cómo utilizarlo en este caso.
¿Serías tan amable de enseñarme cómo lo aplicarías en este caso concreto?
Código PHP:
<?php

function getvalor($campo) {
     
$recibimos $_POST[$campo];
      ...
}

?>
No entendí el problema que tienes concreto.

En tu caso de tu función .. accedes directamente a un indice concreto del array $_POST (como si de cualquier otra se tratase).

El hecho de acceder a todos los valores del array que es $_POST por un bucle tipo foreach() es tal vez para aplicar un proceso sobre cada elemento del mismo ..

Por ejemplo:
Validaciones:

Código PHP:
<?
// Campos requeridos (todos)
$campos_requeridos=Array('campo1','campo2');
    
foreach (
$campos_requeridos as $campo){
    if (empty(
$_POST[$campo])){
        echo 
"Error: vacio campo: ".$campo."<br>";
    }
}

?>
Un saludo,
  #8 (permalink)  
Antiguo 14/03/2006, 13:02
Avatar de franquero  
Fecha de Ingreso: julio-2005
Mensajes: 179
Antigüedad: 18 años, 9 meses
Puntos: 1
Aclaración del problema

Buenas. Creo que no me he explicado bien. Así que voy a intentar ser lo más claro que pueda.

- Tengo un formulario con varios selects.
- Los valores de los selects son extraídos de tablas Mysql
- En cada tabla hay dos columnas ID y valor. Por ejemplo ID:1 valor:presencial o ID:2 valor:a distancia
- Por cuestiones de validación del formulario, los valores de los options son el campo ID de la tabla.
-Bien, pues la siguiente función la utilizo para que al insertar un nuevo registro en la base de datos inserte el valor y no el ID:

Código PHP:
function getmodaildad() {
    
$recibimos $_POST['modalidad'];
        include(
"conexion.php");
        
$conec mysql_connect($servidor$usuario$clave);
        
mysql_select_db($db$conec);
        
$query mysql_query("SELECT valor FROM modalidad WHERE ID = '$recibimos' LIMIT 1"$conec);
            if (
$row=mysql_fetch_array($query)) {
                
$valor_ok $row['valor'];
            }
        return (
$valor_ok);

Bien, esta función funciona perfectamente. Lo que pasa es que la tengo que repetir para cada uno de los selects cambiando el nombre de la función, el $_POST[''] y la tabla de la consulta.

Y mi intención es hacer algo así:
Código PHP:
function getvalor($select) {
    
$recibimos $_POST[$select];
        include(
"conexion.php");
        
$conec mysql_connect($servidor$usuario$clave);
        
mysql_select_db($db$conec);
        
$consulta "SELECT valor FROM" $select "WHERE ID = '$recibimos' LIMIT 1";
        
$query mysql_query($consulta$conec);
            if (
$row=mysql_fetch_array($query)) {
                
$valor_ok $row['valor'];
            }
    return (
$valor_ok);

Pero utilizándola de la siguiente manera: $modalidad = getvalor(modalidad);
me da el error:
Código:
Notice: Use of undefined constant tematica - assumed 'tematica' in  (ruta)
Y usándola así:
$valor = 'modalidad';
$modalidad = getvalor($valor);

No me da el error anterior pero no funciona bien y y al no hacer bien la consulta me falla el mysq_fetch_array().

Creo que está suficientemente explicado. Mi script funciona bien escribiendo la función tantas veces como selects tengo. Pero tengo curiosidad y ganas de seguir aprendiendo, por eso os he planteado esta duda, que seguramente será debida a algún error de concepto.

Muchas gracias a todos por la atención y ayuda que siempre recibo en este foro, del cual me siento miembro. Estoy aprendiendo mucho, y de vez en cuando he respondido a alguna duda, jeje.

Saludos !!
__________________
Es una suerte que la sociedad libre sea más productiva, porque de no haberlo sido jamás se habría tolerado.
  #9 (permalink)  
Antiguo 14/03/2006, 15:28
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
yo lo que hago es tomar el indice de otro componente

esto en caso de que envies todos los selects


<form>
<table width="434" border="1">
<tr>
<td><select name="uno[]" id="uno">
</select>
<input type="hidden" name="indice[]"></td>
</tr>
<tr>
<td><select name="uno[]" id="uno">
</select>
<input type="hidden" name="indice[]">
</td>
</tr>
<tr>
<td><select name="uno[]" id="uno">
</select>
<input type="hidden" name="indice[]">
</td>
</tr>
</table>
</form>

una vez que des el submit
se haria algo asi


foreach ($_POST['indice'] as $posicion=>$valor)
{
//aqui imprimo lo que trae cada select
echo $_POST['uno'][$posicion]."<br>";

}

saludos
a ver si me entendi
__________________
gerardo
  #10 (permalink)  
Antiguo 14/03/2006, 15:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Creo que deberías replantear el tema ..

En principio en SQL tienes funciones como IN(lista de valores) para extraer (consultar) por cierto rango o ID's en tu caso individuales (justos los que seleccionas en tus select's y así los obtienes como un array de valores).

Esto optimizaría mucho tu proceso .. en el cual en esa función nada menos y nada más que conectas cada vez a tu BBDD haces todas las operaciones y obienes un resultado cuando podrías hacer que tu función "devuelva" un array de resultados.

Código PHP:
<?php 
        
include("conexion.php"); 
        
$conec mysql_connect($servidor$usuario$clave); 
        
mysql_select_db($db$conec); 

function 
getvalores($select) {
    
// se inicializa el array que vamos a poblar.
    
$valor_ok=array(); 
    
// concateno todos los "id" recibidos en un string separados por comas. Así lo define la sintax SQL de "IN()" en Mysql:
    
$recibimos implode(',',$_POST['id']); 
        
// Ejecutas tu consulta SQL 
        
$consulta "SELECT valor FROM" $select "WHERE ID IN(".$recibimos.")"
        
$query mysql_query($consulta$conec) or die (mysql_error());
             
// Recorres los resultados si hay más de 0 .. 
            
if (mysql_num_rows($query) > 0){ 
              while (
$row=mysql_fetch_array($query)) { 
                  
// creamos un array con los resultados (valores).
                  
$valor_ok[] = $row['valor']; 
              } 
            }
    
// devuelves un array con los resultados .. si no hay resultados, obtendras un array con ningún elemento en ella.
    
return ($valor_ok); 
}
Su uso:

Código PHP:
<?
foreach (getvalores($select) as $valor){
  echo 
$valor."<br>";
}
?>
Como generamos un array .. así lo tratamos (lo leemos) o accedemos a sus resultados (por los que se obtubieron).

Ya que quieres usar funciones y al parecer separar "procesos" .. esta sería una técnica. Por otro lado podrías llamar a otro proceso en el bucle que ya se hace en esa función.

No está de más decir que todo esto depende de que tu generes esos N "<select>" como un array (no pusistes el código de como lo haces actualmente).

Algo así:

<select name="id[]">
<option value="1">blabala</option>
<option value="2">blabala</option>
</select>

<select name="id[]">
<option value="1">blabala</option>
<option value="2">blabala</option>
</select>

<select name="id[]">
<option value="1">blabala</option>
<option value="2">blabala</option>
</select>

Un saludo,
  #11 (permalink)  
Antiguo 16/03/2006, 10:52
Avatar de franquero  
Fecha de Ingreso: julio-2005
Mensajes: 179
Antigüedad: 18 años, 9 meses
Puntos: 1
De acuerdo print $solucionado . $nueva_duda;

$solucionado = "
Hola de nuevo.

Ya he resuelto el problema. La verdad es que era un lapsus de los gordos: al escribir la consulta: $sql = "SELECT * FROM " . $nombre . " WHERE..."; no dejaba espacio entre FROM y " ni entre " y WHERE, y por eso no me funcionaba. Al final queda así:
Código PHP:
<?php
function getvalor($nombre) {
    
$recibimos $_POST[$nombre];
        include(
"conexion.php");
        
$conec mysql_connect($servidor$usuario$clave);
        
mysql_select_db($db$conec);
        
$consulta "SELECT valor FROM " $nombre " WHERE ID = '$recibimos' LIMIT 1";
        
$query mysql_query($consulta$conec);
            if (
$row=mysql_fetch_array($query)) {
                
$valor_ok $row['valor'];
            }
        
mysql_free_result($query);
        
mysql_close($conec);
        return (
$valor_ok);
}
?>
";

$nueva_duda = "
Es muy interesante lo que me planteas, Cluster. Eso de que la función devuelva un array con todos los resultados y no tener que hacer tantas consultas.
Mi problema para hacer eso es que extraigo los datos de diferentes tablas. Me explico. Yo tengo cuatro selects, y luego tengo cuatro tablas con el campo 'ID' y el campo 'valor'. Me estoy dando cuenta de que quizás sea una estructura errónea, y sería más conveniente crear una única tabla con los campos 'ID', 'valor' y 'select'. Así sólo tendría que hacer una consulta. Este proceso me iría de lujo con la función getvalores() con la que obtengo el valor de cada ID, pero a la hora de imprimir los selects en el formulario tendría que seguir utilizando varias consultas, ¿no? Para que en cada select me imprima los que en el campo select tienen 'x' "SELECT * FROM selects WHERE select='$select'" Hay alguna forma de conseguir este resultado con una única consulta?.

Ésta es la función con la que imprimo cada select:
Código PHP:
<?php
function imprimir_select($nombre) {
    include(
"conexion.php");
    
$conec mysql_connect($servidor$usuario$clave);
    
mysql_select_db($db$conec);
        
$datos mysql_query("SELECT * FROM " $nombre " ORDER BY valor ASC"$conec);
            print 
"<select name=\"$nombre\" class=\"formulario\">";
            while (
$row=mysql_fetch_array($datos)) {
                if (
$_POST[$nombre] == $row['ID']) {
                    
$selected "selected=\"selected\"";
                } else {
                    
$selected '';
                }
                print 
"<option value=\"$row[ID]\" $selected>" $row['valor'] . "</option>";
            }
            print 
'</select>';
        
mysql_free_result($datos);
        
mysql_close($conec);
    }
?>
¿En qué web puedo informarme sobre las funciones MYSQL? ¿Existe alguna al estilo de php.net? He buscado pero no he encontrado gran cosa.
";

Muchas gracias a todos.
__________________
Es una suerte que la sociedad libre sea más productiva, porque de no haberlo sido jamás se habría tolerado.
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 17:58.