Foros del Web » Programando para Internet » PHP »

pasar una variable en un mismo formulario

Estas en el tema de pasar una variable en un mismo formulario en el foro de PHP en Foros del Web. Hola, llevo toda la mañana con este tema y no encuentro solución. Tengo un formulario con este codigo: Código: <form name="form1" method="post" action="reserva-directa.php"> <b>Sala:</b><br /><br/> ...
  #1 (permalink)  
Antiguo 16/07/2009, 05:33
Avatar de jlmoreno31  
Fecha de Ingreso: mayo-2009
Ubicación: Barcelona
Mensajes: 174
Antigüedad: 15 años, 6 meses
Puntos: 2
pasar una variable en un mismo formulario

Hola, llevo toda la mañana con este tema y no encuentro solución.

Tengo un formulario con este codigo:

Código:
<form name="form1" method="post" action="reserva-directa.php">
     
	<b>Sala:</b><br /><br/>
    <? 
	$id=$_GET['id_centro'];
$sala ="select Nombre_sala, id_sala from salas where id_centro='$id'" or die(mysql_error());
$resultado=mysql_query($sala) or die( mysql_error() ); 


echo "<select name='salas' style='border:1px solid #f1f1e8; background:#fff; padding:5px;' >";

//Mostrar los registros en forma de men? desplegable
while ($row=mysql_fetch_array($resultado)){
echo '<option value="'.$row['id_sala'].'">'.$row["Nombre_sala"].'</option>';
}
echo "</select>";

?>
El problema que tengo es que quiero pasar la variable 'salas' a un input text, lo hago de la siguiente forma:

Código:
$sala ="select id_sala from salas where id_sala='$salas'" or die(mysql_error());
	$result=mysql_query($sala) or die(mysql_error());
	$row=mysql_fetch_array($sala);	
	$sala_reunion=$row["id_sala"];
	echo "<input type=\"text\" name=\"id_sala\" value=".$sala_reunion.">";
Pero el valor no sale en el input text. ¿? que es lo que falla?

Gracias por vuesta colaboración
  #2 (permalink)  
Antiguo 16/07/2009, 05:52
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 15 años, 5 meses
Puntos: 7
Respuesta: pasar una variable en un mismo formulario

Bueno, tengo una pregunta:
Donde tiene que estar el segundo codigo?
En la action del primer formulario?
  #3 (permalink)  
Antiguo 16/07/2009, 06:09
Avatar de jlmoreno31  
Fecha de Ingreso: mayo-2009
Ubicación: Barcelona
Mensajes: 174
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: pasar una variable en un mismo formulario

Si, es un mismo formulario, donde quiero pasar la variable $id_sala de la lista a un input type que está más abajo.

Pero todo está en el mismo formulario. Otra opción es pasar la $id_sala de la lista directamente al archivo que hace el insert, pero debería modificarlo. Por eso queria saber si se podría pasar dentro del mismo formulario.
  #4 (permalink)  
Antiguo 16/07/2009, 06:14
 
Fecha de Ingreso: julio-2009
Mensajes: 118
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: pasar una variable en un mismo formulario

yo lo que veo es que tiene sql injection y te podrían hackear el sistema:

Código PHP:
$id=$_GET['id_centro'];
$sala ="select Nombre_sala, id_sala from salas where id_centro='$id'" or die(mysql_error()); 

Para arreglarlo puedes hacer esto:

Código PHP:
$id=$_GET['id_centro'];
$id = (int) $id;
$sala ="select Nombre_sala, id_sala from salas where id_centro='$id'" or die(mysql_error()); 
  #5 (permalink)  
Antiguo 16/07/2009, 06:15
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 3 meses
Puntos: 139
Respuesta: pasar una variable en un mismo formulario

Si, se puede pasar dentro del mismo formulario,
De hecho te paso tu codigo modificado y sin error.

Código PHP:
Ver original
  1. <?php include("conectar.php") ?>
  2.  
  3. <script>
  4. function Send(){
  5.  
  6. document.forms[0].submit();
  7. }
  8. </script>
  9.  
  10. <!-- La funcion $_SERVER['PHP_SELF']  ( Aqui aprenderas mas sobre esta ) funcion http://us3.php.net/manual/es/reserved.variables.server.php -->
  11.  
  12. <form name="form1" method="post" action="<?=$_SERVER['PHP_SELF']?>">
  13.    
  14.     <b>Sala:</b>
  15.    
  16.   <select name='salas' style='border:1px solid #f1f1e8; background:#fff; padding:5px;' onChange='Send();'>
  17.   <option value="">--Seleccionar</option>
  18.     <?
  19.    
  20.     $_GET['id_centro'] = 2;
  21.     $id = $_GET['id_centro'];
  22.    
  23.     $sala = "SELECT Nombre_sala, id_sala FROM salas WHERE id_centro='$id'"; ## Solo especificamos el string de la consulta.
  24.     $resultado = mysql_query( $sala ) or die( mysql_error() ); ## Aqui corremos la consulta y en caso de error avisar.
  25.     ## En el select le pusimos que cada vez que cambien onChange , se envie el formulario
  26.    
  27.     //Mostrar los registros en forma de men? desplegable
  28.     while ($row = mysql_fetch_array( $resultado )){
  29.     echo "<option value=$row[id_sala]>$row[Nombre_sala]</option>";
  30.     }
  31.    
  32.     ?>
  33.    
  34.     </select>
  35.  
  36. </form>
  37. <?php
  38.  
  39.     ## Verificamos que hayas posteado desde el select y no desde una recarga de la pagina.
  40.     if( (isset($_POST['salas']) && !empty($_POST['salas'])) ){
  41.     $id_salas = $_POST['salas'];
  42.    
  43.     $sala = "select id_sala from salas where id_sala = '$id_salas'";
  44.     $result = mysql_query($sala) or die(mysql_error());
  45.     $row = mysql_fetch_array($result); 
  46.     $sala_reunion = $row["id_sala"];
  47.     echo "Resultado Final : <input type=\"text\" name=\"id_sala\" value=\"$sala_reunion\">";
  48.    
  49.     }
  50.     ?>

Para la prueba utilice la siguiente estructura de datos

Código:
CREATE TABLE  `prueba`.`salas` (
  `Codigo` int(10) unsigned NOT NULL auto_increment,
  `Id_sala` tinyint(3) unsigned NOT NULL default '0',
  `Nombre_Sala` varchar(30) NOT NULL default '',
  `Id_centro` tinyint(3) unsigned NOT NULL default '0',
  PRIMARY KEY  (`Codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  #6 (permalink)  
Antiguo 16/07/2009, 06:16
Avatar de jlmoreno31  
Fecha de Ingreso: mayo-2009
Ubicación: Barcelona
Mensajes: 174
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: pasar una variable en un mismo formulario

hola albert que es (int) $id;?

El tema de sql injection lo estamos mirando ahora tb, lo teniamos en mente pero no ha dado tiempo a hacerlo todo
  #7 (permalink)  
Antiguo 16/07/2009, 06:18
Avatar de jlmoreno31  
Fecha de Ingreso: mayo-2009
Ubicación: Barcelona
Mensajes: 174
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: pasar una variable en un mismo formulario

gjx2 Muchas gracias, voy a probarlo enseguida.

Gracias
  #8 (permalink)  
Antiguo 16/07/2009, 06:22
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 15 años, 5 meses
Puntos: 7
Respuesta: pasar una variable en un mismo formulario

O sea quires tener un menu despegable que muestre todas lòas salas, despues el usuario elige la sala y quieres pasar este valo al input text que esta despues?
Pues
1. haces el submit del primer formulario que recarga la misma pagina, coges el valor salas asi:
$salas = $_POST['salas'];
Luego esto no se entiende:
Cita:
$sala ="select id_sala from salas where id_sala='$salas'" or die(mysql_error());
$result=mysql_query($sala) or die(mysql_error());
$row=mysql_fetch_array($sala);
$sala_reunion=$row["id_sala"];
o sea seleccionas algo que ya tienes, selecionas $row['id_sala'] donde id_sala=$salas, o sea selecionas $salas.
Entonces si haces asì es suficiente:
$sala_reunion = $_POST['salas'];
2. Utilizas el javascript:
<select name='salas' style='border:1px solid #f1f1e8; background:#fff; padding:5px;' onchange='function() {document.getElementById(\'id_sala\').value = this.value;}'>
y pones el id del input text
<input type=\"text\" name=\"id_sala\" id=\"id_sala\" value=".$sala_reunion.">
Ciao!
  #9 (permalink)  
Antiguo 16/07/2009, 06:45
Avatar de jlmoreno31  
Fecha de Ingreso: mayo-2009
Ubicación: Barcelona
Mensajes: 174
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: pasar una variable en un mismo formulario

Ok. Gracias por el codigo. Lo probaré a ver que tal. Si me he dado cuenta que tengo que tener dos formularios, uno para el submit de las salas y el segundo para enviar el formulario al archivo php.
Gracias.
  #10 (permalink)  
Antiguo 16/07/2009, 06:45
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 3 meses
Puntos: 139
Respuesta: pasar una variable en un mismo formulario

Aqui te dejo algo un poco mas funcional.

Código PHP:
Ver original
  1. <?php include("conectar.php") ?>
  2.  
  3. <script>
  4. function Send(){
  5.  
  6. document.forms[0].submit();
  7. }
  8. </script>
  9. <h3>Centros De pruebas</h3>
  10. <table cellpadding="0" cellspacing="0" width="300" border="1">
  11. <tbody>
  12. <tr>
  13. <th>Centros</th>
  14. <th>Opciones</th>
  15. </tr>
  16.  
  17. <?php
  18. $sql = "SELECT * FROM centros";
  19. $resultado = mysql_query($sql) or die(mysql_error());
  20. ?>
  21.  
  22. <?php while($row = mysql_fetch_array($resultado)){?>
  23.  
  24. <tr>
  25. <td><?php echo $row["Nombre"]?></td>
  26. <td><a href="<?=$_SERVER['PHP_SELF']."?id_centro=$row[Id]"?>">Listar</a></td>
  27. </tr>
  28. <?php } ?>
  29.  
  30. </tbody>
  31. </table>
  32.  
  33.  
  34. <?php
  35. if(isset($_GET['id_centro'])){
  36. ?>
  37.  
  38. <!-- La funcion $_SERVER['PHP_SELF']  ( Aqui aprenderas mas sobre esta ) funcion http://us3.php.net/manual/es/reserved.variables.server.php -->
  39.  
  40.  
  41.    
  42.    
  43.    
  44.  
  45.  
  46.     <?php
  47.    
  48.     ## Supongamos que id_centro vale 1;
  49.     $id = $_GET['id_centro'];
  50.    
  51.     $sala = "SELECT Nombre_sala, id_sala FROM salas WHERE id_centro='$id'"; ## Solo especificamos el string de la consulta.
  52.     $resultado = mysql_query( $sala ) or die( mysql_error() ); ## Aqui corremos la consulta y en caso de error avisar.
  53.     ## En el select le pusimos que cada vez que cambien onChange , se envie el formulario
  54.    
  55.    
  56.     $Total_num = mysql_num_rows($resultado);
  57.     ## Verificamos que la consulta arrojo registros.
  58.     if ( $Total_num ){
  59.    
  60.     echo "
  61.     <form name=\"form1\" method=\"post\" action=\"{$_SERVER['PHP_SELF']}\">
  62.     <p>Se encontraron <b>$Total_num</b> resultados</p>
  63.     <p><b>Sala:</b> <select name='salas' style='border:1px solid #f1f1e8; background:#fff; padding:5px;' onChange='Send();'>
  64.     <option value=\"\">--Seleccionar</option>
  65.     ";
  66.    
  67.     while ($row = mysql_fetch_array( $resultado )){
  68.     echo "<option value=$row[id_sala]>$row[Nombre_sala]</option>";
  69.     }
  70.     echo "</select></p></form>";
  71.     }else ## De lo contrario Imprimo un mensaje de que no hubo registrs.
  72.     {
  73.     echo "<p>No se encontraron registros para este campo.</p>";
  74.     }
  75.    
  76.     ?>
  77.    
  78.  
  79.  
  80.  
  81. <?php } ?>
  82. <?php
  83.  
  84.     ## Verificamos que hayas posteado desde el select y no desde una recarga de la pagina.
  85.     if( (isset($_POST['salas']) && !empty($_POST['salas'])) ){
  86.     $id_salas = $_POST['salas'];
  87.    
  88.     $sala = "select id_sala from salas where id_sala = '$id_salas'";
  89.     $result = mysql_query($sala) or die(mysql_error());
  90.     $row = mysql_fetch_array($result); 
  91.     $sala_reunion = $row["id_sala"];
  92.     echo "<p>Resultado Final : <input type=\"text\" name=\"id_sala\" value=\"$sala_reunion\"></p>";
  93.    
  94.     }
  95.     ?>

Aqui te dejo la tabla que use para los centros

Código:


CREATE TABLE  `tabla`.`centros` (
  `Id` smallint(5) unsigned NOT NULL auto_increment,
  `Nombre` varchar(45) NOT NULL default '',
  PRIMARY KEY  (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO centros (Nombre) values ('Demo1');
INSERT INTO centros (Nombre) values ('Demo2');
INSERT INTO centros (Nombre) values ('Demo3');

Suerte !
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 12:07.