Foros del Web » Programando para Internet » PHP »

Enviar variable por <select>

Estas en el tema de Enviar variable por <select> en el foro de PHP en Foros del Web. Hola! Quiero editar por medio de un select un campo de varios registros a la vez. Tengo lo primero, el select: Código: <select name=categoria size=1> ...
  #1 (permalink)  
Antiguo 24/05/2008, 06:47
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Enviar variable por <select>

Hola!

Quiero editar por medio de un select un campo de varios registros a la vez.
Tengo lo primero, el select:
Código:
<select name=categoria size=1>
			<option value='".$row[27]."' selected>".$row[27]."</option>
          		<option value='primero'>primero</option>
		         <option value='segundo'>segundo</option>
      		  <option value='tercero'>tercero</option>";
guay, luego tengo un checkbox para seleccionar los registros que quiero editar

Código PHP:
echo "Seleccione para eliminar o agregar<input type=checkbox name='my_stuff[".$row[0]."]' value=".$row[0].">"
$row[0] la ID del registro.
lñuego como son varias opciones, al final tengo para eliminar el registro completo, para aprobarlo y que salga en la web o para editar el campo categoria:
Código:
<INPUT type=radio name=radiecito value=eliminar>Eliminar<BR>
   	<INPUT type=radio name=radiecito value=aceptar>Dar de Alta<BR>
	<INPUT type=radio name=radiecito value=editar>Editar Categoría<BR><BR><br>
	<INPUT TYPE=submit VALUE=ingresar></form>
bien, eso me lleva al archivo de proceso.php donde tengo un case para ver si se edita, se elimina o se aprueba:
Código PHP:
$key $_POST["radiecito"];
   switch(
$key) {                                   
            case 
"editar":
while (list (
$key$value) = each ($my_stuff)) {
                    
$query_numPosts "UPDATE pre_esposas SET categoria = '".$categoria."' WHERE ID ='".$key."'";
                    
mysql_query($query_numPosts$link);
echo 
"Categoría actualizada en mensaje # '".$Key."' ('".$categoria."') <br> <a href=index.php>regresar a administración</a> <br><a href=../index.php>ir a contactos</a>";
                    }
                    break;
case 
"eliminar:
blah blah
break;
case "
aprobar":
blah blah
break; 
el caso es que por alguna extraña razon, la variable que envio cno el select (categoria) no sale. sale vacia, y no entiendo porque. Alguna idea?
__________________
Cool Village
@Wakkos
  #2 (permalink)  
Antiguo 24/05/2008, 08:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Enviar variable por <select>

seria $_POST['categoria'] ... weno, para comprobar esto... usa un print_r($_POST) para comprobar lo que dices.. vale?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/05/2008, 09:28
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Respuesta: Enviar variable por <select>

me imprime:

Código PHP:
Array ( [categoria] => tercero [my_stuff] => Array ( [401] => 401 [400] => 400 ) [radiecito] => editar categoria3401,
categoria3400
Osea, no hace el array con las categorias:

Categoria => tercero en vez de Categoria => array(categoria1, categoria2, categoria3)
porque? =((
__________________
Cool Village
@Wakkos
  #4 (permalink)  
Antiguo 24/05/2008, 10:31
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Respuesta: Enviar variable por <select>

Como hago por ejemplo para que el select entre en el Array? porque lo qeu hace es colocar el valor de la última categoría aseleccionada...
__________________
Cool Village
@Wakkos
  #5 (permalink)  
Antiguo 24/05/2008, 11:40
Avatar de cfranco  
Fecha de Ingreso: enero-2008
Ubicación: Barcelona - España
Mensajes: 182
Antigüedad: 16 años, 3 meses
Puntos: 6
Respuesta: Enviar variable por <select>

En tu select le hace falta un </select> quizá ese es el error

Salud y Éxito
Franco
  #6 (permalink)  
Antiguo 24/05/2008, 13:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Enviar variable por <select>

Hola Wakkos,

Tu select se deberia en ese caso llamar categorias[] y le tendrias que dar un atributo de multiple para que se pudiera seleccionar varias categorias:
Código HTML:
<select name="categorias[]" multiple="multiple"> 
Saludos.
  #7 (permalink)  
Antiguo 24/05/2008, 17:18
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Respuesta: Enviar variable por <select>

nono, si quiero que se seleccione solo una categoría.
__________________
Cool Village
@Wakkos
  #8 (permalink)  
Antiguo 24/05/2008, 19:14
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Respuesta: Enviar variable por <select>

Si quieres que se seleccione sólo una ¿de dónde va a salir el array con tres elementos?

Al script llega la variable $_POST['catergoria'] con el valor que se eligió en el <select>. Eso es lo que dice ahí... pero parece que no es eso lo que esperas que pase.

Entonces la pregunta sería ¿qué esperas obtener?

Saludos,
  #9 (permalink)  
Antiguo 24/05/2008, 19:19
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Respuesta: Enviar variable por <select>

mmm tengo una consulta, de esa consulta quiero editar un campo en algunos registros, no todos, para lo qeu utilizo un checkbox que me dice que registros voy a modificar, el unico campo que voy a modificar es el de "categorias", cuyas opciones se eligen de un drop down box (menu desplegable). La variable $categoria que me pasa cuando proceso es la del último registro con checkbox, necesitaría que me imprima todas, para hacer un update en la base de datos, no se si me explico...
__________________
Cool Village
@Wakkos
  #10 (permalink)  
Antiguo 24/05/2008, 19:25
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Respuesta: Enviar variable por <select>

Veamos...
Lo que quieres es construir otro <select>, con todas sus opciones y que venga por defecto seleccionado lo que está en la BD... así, están todas las opciones por si se quiere cambiar.

¿Es así?

Si es así, no tienes que enviar nada de un lado a otro más que el identificador (id) del registro que quieres modificar.
Luego construyes todos los campos tal como (creo que) lo hiciste en la página anterior.
  #11 (permalink)  
Antiguo 24/05/2008, 19:34
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Respuesta: Enviar variable por <select>

y si envio solo el ID como se que variable se ha cambiado en el cambpo del select? xD
__________________
Cool Village
@Wakkos
  #12 (permalink)  
Antiguo 24/05/2008, 23:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Enviar variable por <select>

Hola Wakkos,

Lo que haces es comparar en la otra pagina, haces un SELECT a la base de datos y ves el campo original y lo comparas vs el valor que te entrega del otro select, así puedes saber si cambio o no el campo.

Saludos.
  #13 (permalink)  
Antiguo 25/05/2008, 03:57
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Respuesta: Enviar variable por <select>

peor es que ya lo sé =( no lo cambia .
__________________
Cool Village
@Wakkos
  #14 (permalink)  
Antiguo 25/05/2008, 10:43
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Respuesta: Enviar variable por <select>

Creo que voy entendiendo.

Quieres un array con los ids que se van a editar (del checkbox) y otro array con los valores que tendrán (del select).

Si quieres un array "categorias", pues tienes que definirlo como tal (más o menos como te había puesto GatorV):
Código PHP:
<select name="categorias[]" size=1
Aunque, seguramente se pierda el id, así que quedaría mejor con id=>valor... algo así:
Código PHP:
<select name="categorias[<?php echo $row[0]; ?>]" size=1>
Vamos por mejor camino?
  #15 (permalink)  
Antiguo 26/05/2008, 04:00
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Respuesta: Enviar variable por <select>

No me funciona. No entiendo porque, pero el ID no se peirde porque la envio con la variable del chckbox:
<input type=checkbox name='my_stuff[".$row[0]."]' value=".$row[0].">

Osea, creoq ue es eso lo que necesito, porque queiro que al hacer el while me imprima cada ID con su valor de CATEGORIA correspondiente pero no me funciona.
__________________
Cool Village
@Wakkos

Última edición por Wakkos; 26/05/2008 a las 04:02 Razón: Typo
  #16 (permalink)  
Antiguo 26/05/2008, 09:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Enviar variable por <select>

Hola Wakkos,

No se si pudieras explicar un poco más lo que necesitas ya que no termino de entender que es lo que requieres...

Saludos.
  #17 (permalink)  
Antiguo 26/05/2008, 10:07
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Respuesta: Enviar variable por <select>

Cita:
Iniciado por Wakkos Ver Mensaje
No me funciona. No entiendo porque, pero el ID no se peirde porque la envio con la variable del chckbox:
<input type=checkbox name='my_stuff[".$row[0]."]' value=".$row[0].">
En los checkbox, la variable solamente pasa si es que la casilla está marcada. O sea, al otro lado llegarán solamente los ids marcados.

Si marcaste el 400 y el 402... tendrás un array (400, 402). El 401 no aparecerá para nada.

Pero el select no discrimina. Aquí sí pasarán todos y cada uno de los registros. (categoría5, categoría3, categoría1).

¿Cómo sabrás a qué id corresponden categoría5, categoría3 y categoría1.... si sólo tienes un array que te dice que los que cambian son el 400 y el 402?

Cita:
Iniciado por Wakkos Ver Mensaje
Osea, creoq ue es eso lo que necesito, porque queiro que al hacer el while me imprima cada ID con su valor de CATEGORIA correspondiente pero no me funciona.
Con lo que te puse anteriormente debería funcionar, de tal manera que el <select> te envíe un array id=>categoria_seleccionada.

Tal vez hay un error que no estamos viendo.

Por favor agrega la línea
Código PHP:
<?php error_reporting(E_ALL); ?>
Al comienzo de tus scripts. Además postea los cambios que le has hecho al código. No nos lo cuentes... postea código.

Saludos,
  #18 (permalink)  
Antiguo 26/05/2008, 20:42
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Respuesta: Enviar variable por <select>

cambios he hecho pocos, ya que pruebo y no funciona y vuelvo a lo de antes. Re-explico:

Tengo un resultado, varios registros, entre esos registros quiero tener las opciones de aprobar varios a la vez para que sean publicados, eliminar varios a la vez o editar la categoría de varios a la vez; con un checkbox elijo que registro selecciono para la operación, y con un radio button elijo la operacion a ahcer: eliminar, editar o aprobar (a todos los seleccionados con el checkbox). Eliminar y aprobar funciona de maravilla, cuando quiero editar es el problema, que hago? pues imprimo un combo box con las categorías disponibles para seleccionar elijo una, selecciono mi opcion de "editar" y doy a aceptar.

Código PHP:
<FORM action=procesar.php method=post>
$query "SELECT * FROM pre_registros order by ID desc";
$result mysql_query($query$link) or trigger_error("SQL"E_USER_ERROR);
while (
$row mysql_fetch_array($result)) {
 echo 
$row[nombre];

<
select name='categoria[]'>
        <
option value='".$row[27]."' selected>".$row[27]."</option>
              <
option value='cat1'>cat1</option>
        <
option value='cat2'>cat2</option>
              <
option value='cat3'>cat3</option>

echo 
"Seleccione para eliminar, editar o agregar<input type=checkbox name='my_stuff[".$row[0]."]' value=".$row[0].">";
 }

<
INPUT type=radio name=radiecito value=eliminar>Eliminar<BR>
<
INPUT type=radio name=radiecito value=aceptar>Dar de Alta<BR>
<
INPUT type=radio name=radiecito value=editar>Editar Categoría<BR><BR><br>

<
INPUT TYPE=submit VALUE=ingresar></form
el procesar.php:
Código PHP:
$key $_POST["radiecito"];
   


     switch(
$key) {
case 
"agfregar":
blah blah blah
beark
;

case 
"editar":
while (list (
$key$value) = each ($my_stuff)) {
                    
$query_numPosts "UPDATE pre_registros SET categoria = '".$categoria."' WHERE ID ='".$key."'";
                    
mysql_query($query_numPosts$link);
                    echo 
"Categoría actualizada en mensaje # '".$Key."' ('".$categoria."') <br>
                    }
break; 
eso es básicamente lo qeu llevo.
__________________
Cool Village
@Wakkos
  #19 (permalink)  
Antiguo 26/05/2008, 21:52
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Respuesta: Enviar variable por <select>

ok... hasta ahí se entiende.

Ahora haz un

print_r($_POST['my_stuff']);

y un

print_r($_POST['categoria']);

y dinos qué obtienes
  #20 (permalink)  
Antiguo 27/05/2008, 02:43
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Respuesta: Enviar variable por <select>

print_r($_POST['my_stuff']); = Array ( [527] => 527 )
print_r($_POST['categoria']); = Array ( [0] => cat1 [1] => cat2 )

Me sale el error:
Warning: Variable passed to each() is not an array or object in procesar.php on line 390
__________________
Cool Village
@Wakkos
  #21 (permalink)  
Antiguo 27/05/2008, 08:27
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 22 años, 6 meses
Puntos: 59
Respuesta: Enviar variable por <select>

mmmm
Array ( [527] => 527 )
no deberian ser dos variables? xd
__________________
Cool Village
@Wakkos
  #22 (permalink)  
Antiguo 27/05/2008, 14:24
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Respuesta: Enviar variable por <select>

Cita:
Iniciado por Wakkos Ver Mensaje
mmmm
Array ( [527] => 527 )
no deberian ser dos variables? xd
No entiendo tu pregunta.

Tú estás definiendo dos arrays:
$_POST['categoria']
$_POST['my_stuff']

El error que te sale es porque no reconoce $my_stuff directamente en el each(). Utiliza each($_POST['my_stuff']).

Volvamos a los arrays...
$_POST['categoria'], viene en el <select>. la variable se llama categoria[], así que los índices serán numéricos y se irán generando consecutivamente a partir del cero. Así, tendrás que al otro lado llega:
Código:
$_POST['categoria']
	= Array(
		[0]=>cat elegida en el 1er select
		[1]=>cat elegida en el 2do select
		[2]=>cat elegida en el 3er select
	)
$_POST['my_stuff'], viene definida en chekboxes. La variable la defines como my_stuff[".$row[0]."]' value=".$row[0]. Así que el array tendrá como índice al id del registro ($row[0]) y como valor también tendrá al id.

Por eso obtienes
Código:
$_POST['my_stuff']
	= Array ( 
		[527] => 527
		[532] => 532
	)
Lo que te decía es que no tienes manera de relacionar ambos arrays. La única manera sería por el número de id. Pero el primer array no lo guarda.

Por eso te dije que hagas que el select genere un array [id]=>categoriaSeleccionada

Y my_stuff sí puede tener índices automáticos, total lo que interesa es la lista de ids que vas a a editar.
[]=>id

Te repito lo que te puse:
Código PHP:
<select name="categorias[<?php echo $row[0]; ?>]">
Código PHP:
echo "Seleccione para eliminar, editar o agregar
    <input    type=\"checkbox\"
        name=\"my_stuff[]\"
        value="
.$row[0].">"
Y para leer estos registros, haces lo siguiente:
- Lees el primer id de $_POST['my_stuff'].
- Buscas el índice que corresponda a ese id en $_POST['categoria'].
- Obtienes el valor seleccionado y lo escribes en la BD.

Código PHP:
case "editar":

foreach(
$_POST['my_stuff'] as $id){
    
$query_numPosts "UPDATE pre_registros SET categoria = '".$_POST['categoria'][$id]."' WHERE ID ='".$id."'";
    
mysql_query($query_numPosts$link);
    echo 
"Categoría actualizada en mensaje # '".$id."' ('".$_POST['categoria'][$id]."') <br>";
}
                    }
break; 
Claro... faltaría hacer alguna validación. Pero, en general, funciona así.

Saludos,
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 08:32.