PHP - Convertir lista desplegable en variable

 
Vista:
sin imagen de perfil

Convertir lista desplegable en variable

Publicado por Danielo (2 intervenciones) el 20/01/2016 12:58:11
Hola, buenos días.

Mi nombre es Dani y vengo a haceros una consulta acerca de un cambio que me gustaría hacer en un formulario pero no sé muy bien como modificarlo.

El caso es que tengo un formulario que puede recuperar varias líneas de valores (pongamos por ejemplo 3 valores); cuando se muestra en pantalla aparece como una combo en donde se puede elegir los valores de 1 a 9, y si se detecta que hay algún cambio en ese valor que previamente se ha recuperado de tablas, se marca una check y se actualiza en la tabla con el nuevo valor.

La idea que tengo es sustituir esa lista desplegable por una caja en donde aparezca el valor previamente recuperado, y añadir un botón a la izquierda "-" y uno a la derecha "+" de dicha caja en donde el usuario pueda decrementar o incrementar el valor previamente recuperado, o bien sin añadir dichos botones, cuando el usuario haga click con el botón izquierdo aumentar en 1 dicho valor o disminuirlo si el click lo hace con el botón derecho.

He estado revisando el código que tengo y no sé bien que modificar, ya que para marcar la check de cuando detecta un cambio en el valor recuperado, no se como pasar el valor del campo modificado.

El código que tengo es el siguiente:

Para la check que se marca cuando detecta un cambio:

1
<input type="checkbox" name="repeatedcards[$card[ref]]" id="repeatedcard_$card[ref]" value="$card[ref]"  />

siendo $card[ref]" cada uno de los elementos recuperados ( en el ejemplo de los tres valores: ref001, ref002 y ref003)

A continuación de esta check tengo el código que quiero sustituir:

1
2
3
<select name="quantity[$card[ref]]" onchange="check_varios('$card[ref]')">   -->
$options   -->
</select>   -->

en la variable $options le paso el valor recuperado de tablas, mostrando al usuario ese valor por defecto al mostrar el desplegable con las opciones 1 a 9.


Ejemplo:

1
<option value="1">0</option><option value="2" selected="selected">1</option><option value="3">2</option><option value="4">3</option><option value="5">4</option><option value="6">5</option><option value="7">6</option><option value="8">7</option><option value="9">8</option><option value="10">9</option>

(en este caso muestro un 1 por defecto en el desplegable)

Cuando se produce un cambio de ese valor, se llama a la función check_varios que está codificada de la siguiente forma:

1
2
3
4
5
6
7
8
9
function check_varios(ref)
{
  var name="repeatedcards["+ref+"]";
  var quantityname="quantity["+ref+"]";
  var field = document.updaterepeatedform[name];
  var qfield = document.updaterepeatedform[quantityname];
  field.checked=true;
  field.value=qfield.value;
}

Lo que hace es marcar la check que comentaba antes cuando se detecta un cambio en el valor original.


Como he comentado, mi idea es cambiar el código que he comentado arriba por algo tipo:

1
2
3
4
5
6
7
8
9
10
11
<td class="alt1">
	<input type="button" id="restar_$card[ref]" value="-" class="button" onclick="sumaresta_varios(resta,$original)"/>
</td>
 
<td class="alt1">
	<input type="text" class="bginput" name="cantidad_$card[ref]" value="$original" />
</td>
 
<td class="alt1">
	<input type="button" id="sumar_$card[ref]" value="+" class="button" onclick="sumaresta_varios(suma,$original)"/>
</td>


y crear una nueva función, controlando el 0 como valor mínimo y el 9 como valor máximo, para que sume o reste según el botón pulsado y siga manteniendo el control sobre la check (para que se marque si ha habido algún cambio) que sea algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function sumaresta_varios(valor,$original) {
 
	if (valor == "suma")
	{
		if ($original<9)
		{
			$original++;
 
			value= $original;
			check_varios('$card[ref]');
		}
    	}
	else
	{
		if ($original>0)
		{
			$original--;
 
			value= $original;
			check_varios('$card[ref]');
		}
 
    	}
}

siendo $original el valor original recuperado de tablas (el cual es el que puede modificar el usuario sumando o restando uno).

A parte de la suma me gustaría que siguiese siendo controlado el cambio de valor llamando a la función check_varios.

No tengo idea de php pero me dá que el planteamiento es erróneo, no sé yo si ese código puede funcionar y si cuando el usuario pinche el valor de submit, cada uno de los tres elementos del formulario va a pasar a la tabla el nuevo valor que se haya modificado.

¿Alguna sugerencia de alguna forma sencilla de hacerlo, ya sea añadiendo los botones "+" y "-" a la página o activando algún control de click derecho/izquierdo de ratón?

Muchas gracias por adelantado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Convertir lista desplegable en variable

Publicado por Dani (2 intervenciones) el 25/01/2016 12:16:33
Después de varias pruebas fracasadas, he cambiado parte del formulario. quitando la lista desplegable por un campo simple (name="cantidad[$card[ref]] con los siguientes campos:

1
2
3
4
5
6
<td class="alt1">
	<input type="checkbox" name="repeatedcards[$card[ref]]" id="repecheck[$card[ref]]" value="$card[ref]"/>
</td>
<td class="alt1">
	<input type="text" size="5" tabindex="1" name="cantidad[$card[ref]]" id="repevalor" value="$repetido" maxlength="1">
</td>

Ahora me aparecen dos campos en pantalla: el primer que es una checkbox (por defecto desmarcada y que solo se debe marcar si el siguiente campo de la fila sufre algún cambio), y el segundo campo, un campo de texto de una posición (que en un futuro quiero controlar un valor mínimo de 0 y un máximo de 1), que toma el valor de la variable $repetido y que lo informo para cada registro que recupero de una tabla; en mi caso tengo 3 registros en una tabla que recupero y envío al formulario, mostrándome como resultado final tres filas con los valores 3, 5 y 8 en este segundo campo del formulario,

Estoy intentando hacer un bucle para que al pulsar una opción, me ponga esos tres valores a 0 o 1 (dependiendo del botón que pulse). He creado la siguiente función, siendo "fornname" el nombre del formulario (aunque creo que no lo uso para nada) y "value" al cual le paso 0 o 1 (dependiendo del botón pinchado):

1
2
3
4
5
6
7
8
9
10
11
12
13
function cambiar(formname,value)
{
	var form = document.getElementById(formname); --> esto me parece que sobra para lo que quiero hacer ¿no?
 
	var allParas = document.getElementsByTagName("repevalor");
	var num = allParas.length;
 
	for(i=0; i<num; i++)
	{
		var field = document.getElementsByTagName('repevalor')[i];
		field.value=value;
	}
}

Pero cuando pincho en los botones (de poner todos a 0 o poner todos a 1) no veo ningún cambio de los valores 3,5 y 8 en pantalla, sigo viendo los mismos valores. La función parece ejecutarse (digo "parece" porque en otras pruebas sobre esta función se me quedaba mostrada en la pantalla la opción selecionada, como si no se ejecutase, y ahora si parece que ejecutase algo)

¿Qué estoy haciendo mal en el bucle? ¿Cómo puedo sustituir el valor original $repetido (recuperado en la primera ejecución) por los valores 0 o 1 cuando tengo la información 3,5 y 8 en pantalla?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar