La Web del Programador: Comunidad de Programadores
https://www.lawebdelprogramador.com/foros/PHP/1331438-Ayuda-formulario.html

Ayuda formulario

sin imagen de perfil

Ayuda formulario

Publicado por gerniracing (47 intervenciones) el 08/05/2012 00:11:09
Aupa,

Estoy bloqueado un un punto y no se como solucionarlo, espero que alguien me pueda echar una mano. Estoy creando un formulario el cual según la opción que seleccione en una casilla SELECT me tiene que mostrar X lineas (las cantidad de lineas a mostrar serian las que un campo numérico de la base de datos devolveria cuando se selecciona la opcion en el casilla SELECT)

Tengo lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
require("conexion.php");
$query = "SELECT * FROM T01Carreras LEFT JOIN T03Tramos ON T01Carreras.IDCarreraT01 = T03Tramos.IDCarreraT03 WHERE (((T01Carreras.CarreraTerminadaT01)=0) AND ((T03Tramos.IDTramoT03) Is Null))";
$queEmp = mysql_query($query, $conexion);
?>
</head>
<body>
<form id="frRegister" name="frRegister" method="post" action="guardar-carrera.php">
  <table width="400" border="0">
    <tr>
      <td>Seleccionar carrera: <br />
        <select name="carrera" id="carrera">
          <?php while ($resEmp = mysql_fetch_assoc($queEmp)){ ?>
          <option value="<?php $resEmp['IDCarreraT01']; ?>" selected="selected"><?php echo $resEmp['NombreCarreraT01']; ?></option>
          <?php } ?>
        </select></td>
    </tr>
	<?php
		// Me faltaria aqui el while, for... no lo se
    	<tr>
      		<td>Nombre TC-<br />
        		<input name="nombre" type="text" id="nombre" size="40" class="required" /></td>
    	</tr>
	<?php } ?>
  </table>
  <p>
    <input type="submit" name="enviar" id="enviar" value="Enviar" />
    <label>
    <input name="restablecer" type="reset" id="restablecer" value="Restablecer" />
    </label>
</p>
</form>
</body>
</html>


El campo de la base de datos se llama NumeroTramosCarreraT01, donde esta el numero de lineas que tendrían que salir al seleccionar en la SELECT.

Como hago para que salga la cantidad de lineas que estan en el campo de la base de datos del registro seleccionado y luego como hago para guardar esas lineas en un registro cada uno?

Muchisimas gracias.
Imágen de perfil de xve

Ayuda formulario

Publicado por xve (6935 intervenciones) el 08/05/2012 07:16:11
Hola, no entiendo muy bien lo que estas preguntando... lo que he entendido, es que quieres que al pulsar sobre una opción del <select> se realice una nueva consulta a la base de datos (select) buscando por el valor seleccionado y mostrándolo debajo del <select>?

Es esto lo que quieres hacer?
sin imagen de perfil

Ayuda formulario

Publicado por gerniracing (47 intervenciones) el 08/05/2012 08:48:32
Perdoname por lo explicarme bien, que me he liado a la hora de explicar.

Vas bien encaminado, espero que con la explicacion que te doy lo entiendas mejor.

Como dices tu, al pulsar sobre una opción del <select> quiero que se realice una nueva consulta a la base de datos (select) buscando por el valor seleccionado y mostrar debajo una tabla con X campos de texto donde introducir luego datos para guardarlos en la base de datos, donde X seria un valor de un campo que sera devuelto cuando se realice la consulta a la base de datos.

Muchas gracias
Imágen de perfil de xve

Ayuda formulario

Publicado por xve (6935 intervenciones) el 08/05/2012 10:05:10
Ok, entendido!!!

Esto lo puedes hacer a mi modo de ver de dos formas, una mas simple, que es refrescando la pagina, y otra un poco mas complicada que es utilizando ajax con jquery.

De que manera quieres hacerlo?
sin imagen de perfil

Ayuda formulario

Publicado por gerniracing (47 intervenciones) el 08/05/2012 11:19:43
Si te digo la verdad no lo tengo claro. Porque yo de programación se lo basico...si te digo la verdad no se como hacer para que me lea el campo <select> y de eso hacer una consulta a la base de datos para leer un campo numerico y mediante un while o no se como mostrar las lineas correspondientes para luego guardarlos.

Me sirve una cosa que funciona bien, si es mejor utilizando ajax con jquery, mismo, aunque me tenga que comer un poco la cabeza, teniendo el codigo basico luego ya jugaria yo hasta conseguirlo.

Muchas gracias
Imágen de perfil de xve

Ayuda formulario

Publicado por xve (6935 intervenciones) el 08/05/2012 11:55:05
Mira, una manera sencilla, es utilizando el evento onchange()... seria algo así:

1
2
3
4
5
6
7
8
9
10
<?php
echo $_POST["miSelect"]:
?>
<form action="<?php echo $_SERVER["PHP_SELF"]?>" method="POST">
    <select name="miSelect" onchange="submit()">
        <option value="0">Selecciona</option>
        <option value="1">Primer valor</option>
        <option value="2">Segundo valor</option>
    </select>
</form>

Pon este código en un archivo .php y veras como funciona... en el momento que selecciones una opción, del <select> hace el submit del formulario y envia el valor seleccionado. Con el echo $_POST["miSelect"]: que hay en la segunda linea mostramos el valor seleccionado en el <select>

si tienes cualquier duda...
sin imagen de perfil

Ayuda formulario

Publicado por gerniracing (47 intervenciones) el 08/05/2012 17:58:14
Muchas gracias. Primero he creado un PHP con el codigo proporcionado mas o menos es lo que me hace falta. A partir del código que me has proporcionado he realizado lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<form action="<?php echo $_SERVER["PHP_SELF"]?>" method="POST">
<table width="400" border="0">
  <tr>
    <td>Seleccionar numero tramos: <br />
    <select name="miSelect" onchange="submit()">
	<?php while ($resEmp = mysql_fetch_assoc($queEmp)){ ?>
          <option value="<?php $resEmp["NumeroTramosCarreraT01"]; ?>"><?php echo $resEmp['NombreCarreraT01']; ?></option>
    <?php } ?>
    </select>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
	<?php
		for ( $i = 1 ; $i <= $_POST["miSelect"] ; $i ++) {?>
	   	<tr>
      		<td>Nombre TC-<?php print $i ;?><br />
        		<input name="nombre" type="text" id="nombre" size="40" class="required" /></td>
      		<td>Kilometros:<br />
        		<input name="kilometros" type="text" id="kilometros" size="10" class="required" /></td>
      		<td>Entrenamiento:<br />
       		 	<select name="tipo" id="tipo">
          			<option value="1">Si</option>
          			<option value="0" selected="selected">No</option>
                </select>
			</td>
		<tr>
	<?php } ?>
   </table>
</form>


Una cosa. El
1
<option value="<?php $resEmp["NumeroTramosCarreraT01"]; ?>">
parece que esta algo mas porque no me devuelvo el valor del campo de la BD, por que en el for que tengo debajo no me sale ninguna linea. En cambio, si le pongo un numero en value, por ejemplo
1
<option value="5">
me muestra 5 lineas correctamente.

Luego tengo mas dudas, pero primero intentare arreglar este y luego seguir con los demas, que ya cuando tenga esto podre probarlo.

Un saludo!
Imágen de perfil de xve

Ayuda formulario

Publicado por xve (6935 intervenciones) el 08/05/2012 19:00:27
Ahora que me lo comentas lo he visto... estas utilizando mysql_fetch_assoc(), y de la manera que lo tienes, tendrías que utilizar mysql_fetch_array()
sin imagen de perfil

Ayuda formulario

Publicado por gerniracing (47 intervenciones) el 08/05/2012 19:46:05
muchas gracias.

El problema ese ya tengo resuelto. Ahora tengo otra duda. Con el FOR creo las lineas que me hace falta, pero que id o nombre le doy a cada casilla para luego guardar en la base de datos?

Me imagino que le tendre que poner nombre y detras el valor de la i del for, y por ejemplo quedaria:

nombre1
nombre2
nombre3
.........

pero como lo hago?

Muchas gracias!
sin imagen de perfil

Ayuda formulario

Publicado por gerniracing (47 intervenciones) el 08/05/2012 19:56:08
Lo que comento seria aqui, en input name y el id:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
		for ( $i = 1 ; $i <= $_POST["miSelect"] ; $i ++) {?>
	   	<tr>
      		<td>Nombre TC-<?php print $i ;?><br />
        		<input name="nombre" type="text" id="nombre" size="40" class="required" /></td>
      		<td>Kilometros:<br />
        		<input name="kilometros" type="text" id="kilometros" size="10" class="required" /></td>
      		<td>Entrenamiento:<br />
       		 	<select name="tipo" id="tipo">
          			<option value="1">Si</option>
          			<option value="0" selected="selected">No</option>
                </select>
			</td>
		<tr>
	<?php } ?>
sin imagen de perfil

Ayuda formulario

Publicado por gerniracing (47 intervenciones) el 08/05/2012 21:07:58
Olvidar lo anterior, que ya lo he solucionado poniendo:
1
<?php echo '<input  name="nombre_'.$i.'" type="text" size="40" class="required">';?></td>


Ahora solo me queda guardar los datos en la base de datos. Yo hasta ahora no hacia mediante el form en action podia en fichero guardar.php donde tenia el insert into........

pero como lo hago aqui?

Y aparte tengo una duda, al realizar onchange="submit()", me borra lo seleccionado en la casilla no? Es que tengo que pasar el valor ese tambien a la base de datos.
sin imagen de perfil

Ayuda formulario

Publicado por gerniracing (47 intervenciones) el 08/05/2012 23:11:18
He realizado lo siguiente para guardar en la base de datos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if(isset($_POST['enviar']))
{
	echo $_POST["miSelect"];
	for ( $i = 1 ; $i <= $_POST["miSelect"] ; $i ++) {
			echo $_POST["miSelect"];
			$id2 = sqlValue($_POST["'.$i.'"], "int");
			$idcarrera = sqlValue($_POST["miSelect"], "int");
			$nombre = sqlValue($_POST["nombre_'.$i.'"], "text");
			$fecha = sqlValue($_POST["fecha_'.$i.'"], "date");
			$metros = sqlValue($_POST["metros_'.$i.'"], "int");
			$entrena = sqlValue($_POST["entrena_'.$i.'"], "int");
 
			$sql = "INSERT INTO T03Tramos (ID2TramoT03, IDCarreraT03, NombreT03, FechaT03, KmT03, EntrenamientoT03)";
			$sql.= "VALUES (".$id2.", ".$idcarrera.", ".$nombre.", ".$fecha.", ".$metros.", ".$metros.")";
			mysql_query($sql, $conexion);
	}
}
}


Tengo el problema que al realizar el:

1
<select name="miSelect" onchange="submit()">


el valor de miSelect se queda en 0 con lo cual no entra en el for que tengo para introducir los datos en la BD.

Muchisimas gracias