Foros del Web » Programando para Internet » PHP »

[Duda] Formularios conflictivos

Estas en el tema de [Duda] Formularios conflictivos en el foro de PHP en Foros del Web. Buenos dias, que es lo primero, despues os comento haber si podemos solventar esta duda que tengo y que llevo un par de dias dandole ...
  #1 (permalink)  
Antiguo 31/10/2008, 02:36
 
Fecha de Ingreso: marzo-2008
Ubicación: En casa
Mensajes: 252
Antigüedad: 16 años, 1 mes
Puntos: 4
Pregunta [Duda] Formularios conflictivos

Buenos dias, que es lo primero, despues os comento haber si podemos solventar esta duda que tengo y que llevo un par de dias dandole vueltas.

Las ideas empiezan por separado, y asi estas no dan problema, el problema bien cuando intentamos usar las juntas.

1. Pues Primero creamos un formulario que sirve para crear alabaranes, funciona correcto y es la ostia, no es que lo haya hecho yo, es que funciona bien

2. Tenemos un listado en el que tras selecionar algo nos deja una nueva selecion, cosa que usa un formulario con self. (aqui os dejo el codigo para curiosos, y porque es bastante util para estas cosillas).

Bien el problema es que cuando quiero usar los dos a la vez, el segundo llama al primer formulario, y la pregunta es sencilla, hay algun a forma de evitar que auto envie el primer formulario en vez de el segundo y que solo envie el primero cuando yo clikeo en enviar ?

Código PHP:
<?php
$servidor  
="localhost";
$usuario   ="root"
$clave     ="123456";
$basedatos ="erp";

if (!empty(
$_POST['enviado'])){

echo 
"Procesando formulario:<br>";
echo 
"Recibido id_departamentos: ".$_POST['id_padre']."<br>";
echo 
"Recibido id_areas: ".$_POST['id_hija']."<br>";
echo 
"Recibido id_profesores: ".$_POST['id_hija2'];

} else {
   
$conexion mysql_connect($servidor$usuario$clave) or die(mysql_error());
   
mysql_select_db($basedatos$conexion) or die(mysql_error());
   
$id_padre=$_POST['id_padre'];
   
$id_hija=$_POST['id_hija'];
   echo 
"<form name=\"self\" action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n\n";
   echo 
"<select name=\"id_padre\" onChange=\"this.form.submit()\">\n";
   echo 
"<option value=\"\"> Seleccione un Item </option>\n";
   
$SQLconsulta_padre="SELECT * FROM departamentos";
   
$consulta_padre mysql_query($SQLconsulta_padre,$conexion) or die(mysql_error());
   While   (
$registro_padre=mysql_fetch_assoc($consulta_padre)){
      if (
$id_padre == $registro_padre['id']){
         echo 
"<option value=\"".$registro_padre['id']."\" selected>".$registro_padre['nombre']."</option>\n";
      } else {
         echo 
"<option value=\"".$registro_padre['id']."\">".$registro_padre['nombre']."</option>\n";}
    }
   echo 
"</select>\n\n";

   
mysql_free_result($consulta_padre);

   echo 
"<select name=\"id_hija\" onChange=\"this.form.submit()\">\n";
   echo 
"<option value=\"\"> Seleccione un Item </option>\n";
   if (!empty(
$id_padre)){
       
$SQLconsulta_hija="SELECT * FROM areas WHERE dependencia='$id_padre'";
       
$consulta_hija mysql_query($SQLconsulta_hija,$conexion) or die(mysql_error());
    While   (
$registro_hija=mysql_fetch_assoc($consulta_hija)){
          if (
$id_hija == $registro_hija['id']){
         echo 
"<option value=\"".$registro_hija['id']."\" selected>".$registro_hija['nombre']."</option>\n";
      } else {
         echo 
"<option value=\"".$registro_hija['id']."\">".$registro_hija['nombre']."</option>\n";}
    }
   echo 
"</select>\n\n";}

    
mysql_free_result($consulta_hija);

   echo 
"<select name=\"id_hija2\">\n";
   echo 
"<option value=\"\"> Seleccione un Item </option>\n";
   if (!empty(
$id_hija)){
       
$SQLconsulta_hija2="SELECT * FROM profesores WHERE dependencia='$id_hija'";
       
$consulta_hija2 mysql_query($SQLconsulta_hija2,$conexion) or die(mysql_error());
       if (
mysql_num_rows($consulta_hija2) != 0){
          While   (
$registro_hija2=mysql_fetch_assoc($consulta_hija2)){
            echo 
"<option value=\"".$registro_hija2['id']."\">".$registro_hija2['nombre']."</option>\n";
          }
        } else {
            echo 
"<option value=\"\"> No hay registros para este Item </option>";
        }
    }

    
mysql_free_result($consulta_hija2); // Liberar memoria usada por consulta.
    
    
echo "</select>\n\n";
    echo 
"<input type=\"submit\" name=\"enviado\" value=\" Enviar \" >\n\n";
    echo 
"</form>\n";

?>
__________________
Ayudar cuesta mucho, dar las gracias no tanto, tenlo en cuenta siempre.
  #2 (permalink)  
Antiguo 31/10/2008, 02:56
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: [Duda] Formularios conflictivos

con otro IF como este

if (!empty($_POST['enviado'])){

pero no veo los form y no me hago una idea clara de lo que quiers hacer

Un saludo
  #3 (permalink)  
Antiguo 31/10/2008, 03:09
 
Fecha de Ingreso: marzo-2008
Ubicación: En casa
Mensajes: 252
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: [Duda] Formularios conflictivos

esto es una version resumida de todo el codigo que utilizo, como se puede ver llamo al otro fomulario usando el metodo de include.

Muchas gracias por vuestro tiempo.

Código PHP:
<?php $fechadate "j/n/Y" ); ?>
<html>
<head>
<title>- Administrar albaranes</title>
<link href="template/estyle.css" rel="stylesheet" type="text/css">
</head>
<body>
<form name="form1" method="post" action="build.php" target="_blank">
<table width="100%" height="26%" id="tabla">
<tr>
<td width="20%" height="21">Cliente</td>
<td width="6%"><?php
$hand 
mysql_connect('localhost''root''123456');
mysql_select_db("erp"$hand);
$qry mysql_query("select * from clientes"$hand);
$opt "";
while (
$rec mysql_fetch_array($qry))
{
if ( 
$rec['cif'] == )
$opt .= "<option value=".$rec['cif']." selected>".$rec['razonsocial']."</option>\n";
else
$opt .= "<option value=".$rec['cif'].">".$rec['razonsocial']."</option>\n";
}  
echo <<< HTML
<select size="1" name="clientes" tabindex="0">
 $opt
</select>
HTML;
?></td>
<td width="10%"></td><td width="31%" colspan="2">&nbsp;</td>
</tr>
<tr>
<td height="21" align="center">
<?php include ('lista.php');?></td>
<td align="center">Proyectos<br /><?php
$qry4 
mysql_query("select * from proyectos"$hand);
$opt4 "";
while (
$rec4 mysql_fetch_array($qry4))
{
if ( 
$rec4['id'] == )
$opt4 $opt4."<option value=".$rec4['id']." selected>".$rec4['nombre']."</option>\n";
else
$opt4 $opt4."<option value=".$rec4['id'].">".$rec4['nombre']."</option>\n";
}
echo <<< HTML
<select size="1" name="proyectos" tabindex="0">
 $opt4
</select>
HTML;
?></td>
<td></td></tr>
<tr><td height="21">Producto 1</td><td>
<a target="_blank" onClick="window.open('search.php', 'searcher', 'scrollbars=yes,height=600,width=800', false);">Buscar</a>
<?php
$qry5 
mysql_query("select * from articulos order by id"$hand);
$opt5 "";
while (
$rec mysql_fetch_array($qry5))
{
if ( 
$rec['id'] == )
$opt5 .= "<option value=".$rec['id']." selected>".$rec['articulo']."</option>\n";
else
$opt5 .= "<option value=".$rec['id'].">".$rec['articulo']."</option>\n";
}  
echo <<< HTML
<select size="1" name="articulos1" id="articulos1" tabindex="0">
 $opt5
</select>
HTML;
?></td>
<td><input name="pr1" type="text" id="pr1" value="1" size="3"></td><td>Articulo
  <input name="obejofalso1" type="text" id="obejofalso1" size="20" /></td><td width="33%">Precio editado
<input name="preciofalso1" type="text" id="preciofalso1"  size="7" /></td>
</tr>
<tr><td height="21">Producto 2</td><td><?php
$qry5 
mysql_query("select * from articulos order by id"$hand);
$opt5 "";
while (
$rec mysql_fetch_array($qry5))
{
if ( 
$rec['id'] == )
$opt5 .= "<option value=".$rec['id']." selected>".$rec['articulo']."</option>\n";
else
$opt5 .= "<option value=".$rec['id'].">".$rec['articulo']."</option>\n";
}  
echo <<< HTML
<select size="1" name="articulos2" tabindex="0">
 $opt5
</select>
HTML;
?></td>
<td><input name="pr2" type="text" id="pr2" value="0" size="3"></td><td>Articulo
  <input name="obejofalso2" type="text" id="obejofalso"  size="20" /></td><td>Precio editado
<input name="preciofalso2" type="text" id="preciofalso2"  size="7" /></td>
</tr>
<tr><td height="21">Producto 3</td><td><?php
$qry5 
mysql_query("select * from articulos order by id"$hand);
$opt5 "";
while (
$rec mysql_fetch_array($qry5))
{
if ( 
$rec['id'] == )
$opt5 .= "<option value=".$rec['id']." selected>".$rec['articulo']."</option>\n";
else
$opt5 .= "<option value=".$rec['id'].">".$rec['articulo']."</option>\n";
}  
echo <<< HTML
<select size="1" name="articulos3" tabindex="0">
 $opt5
</select>
HTML;
?></td>
</tr></table>
<br>
<input name="fecha" type="hidden" id="fecha" value="<?php echo $fecha ?>">
<label>
<input type="submit" name="button" id="button" value="Enviar">
</label>
<label>
<input type="reset" name="button2" id="button2" value="Restablecer">
</label>
</form>
</body>
</html>
__________________
Ayudar cuesta mucho, dar las gracias no tanto, tenlo en cuenta siempre.
  #4 (permalink)  
Antiguo 31/10/2008, 03:24
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: [Duda] Formularios conflictivos

Bueno, por lo que veo quieres tener un form dentro de otro??

este es el include del otro form?

include ('lista.php');

cual es el codigo, aun que creo que seria mejor separar los form aunque los dejes en le misma pagina
  #5 (permalink)  
Antiguo 31/10/2008, 03:42
 
Fecha de Ingreso: marzo-2008
Ubicación: En casa
Mensajes: 252
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: [Duda] Formularios conflictivos

El codigo de lista.php es el que arriva dejo sobre como funciona la seleccion de campos, ya que descubri que eso se hacia mientras trabajaba con ello googlenado me vino al inspiracion, y trozos de codigos que pareciand utiles .

Me parece curiosa la idea de separar los formularios aun apesar de mantenerlos en la misma pagina, mi duda respecto a esto es, si mandaria los datos de todos los inputs cuando presione el enviar.
¿o solo me mandaria los del formulario correspondiente ?
si solo me manda uno de los 2 no me serviria, porque donde se reciven los datos los necesitan todos para crear la hoja resultado

/* IDEA ¿Funcionaria? */
Cojo estos dos formularios los separo, pongo arriva el que se auto refresca, hago unos inputs que sean ocultos y le meto los valores del POST que hace el auto refrescante, lo que quiere decir que en el momento en que todos los campos auto envio se selecionen mis campos ocultos tendrian los datos para poder mandarlos.

Aun apesar de que funcione (me voy a poner a ello ahora mismo), me gustaria saver otra forma de hacerlo, por si queda muy chapucero, o poco claro.

Muchas gracias de antemano.
__________________
Ayudar cuesta mucho, dar las gracias no tanto, tenlo en cuenta siempre.
  #6 (permalink)  
Antiguo 31/10/2008, 03:55
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: [Duda] Formularios conflictivos

No creo que sea chapucero.

cuando envies el primer form, en la pagina donde proceses el form separa las acciones con if


Código PHP:
if(isset($_POST['submit1'])) {

//codigo
}

if(isset(
$_POST['submit2'])) {

// el otro codigo


aunque los form podrian estar entre las mismas etiqutas <form></form>

pero con distinto nombre de boton como te dije.
  #7 (permalink)  
Antiguo 31/10/2008, 05:00
 
Fecha de Ingreso: marzo-2008
Ubicación: En casa
Mensajes: 252
Antigüedad: 16 años, 1 mes
Puntos: 4
De acuerdo Respuesta: [Duda] Formularios conflictivos

antes de que se me olvide (por mas tiempo) aqui os dejo como lo e solucionado y este script como aporte para lo que os pueda servir.

Muchas gracias a jaronu, por hacerme pensar y plantearme las preguntas correctas para llegar a la solucion.

Bien e separado los dos formularios para que no tengan conflictos entre ellos y e incluido los campos ocultos para que recivan esta informacion en el segundo formulario.
Paso a esplicaros como funciona todo este tema de lista.php

Código PHP:
<?php
$servidor  
="localhost"//Servidor al que se va a conectar, normalmente localhost
$usuario   ="root";  // Usuarios de la base de datos
$clave     ="123456"// Calve de la base de datos
$basedatos ="erp"// Base de datos sobre la que vamos a trabjar
if (!empty($_POST['enviado'])){ //con esto es cuando nos distinge lo que hay que mostrar, si tiene que mostrarnos ya el resultado o seguir con las elecciones.

echo "Procesando formulario:<br>";
echo 
"Recibido id_departamentos: ".$_POST['id_padre']."<br>";
echo 
"Recibido id_areas: ".$_POST['id_hija']."<br>";
echo 
"Recibido id_profesores: ".$_POST['id_hija2'];

} else {
   
$conexion mysql_connect($servidor$usuario$clave) or die(mysql_error());
   
mysql_select_db($basedatos$conexion) or die(mysql_error());
   
$id_padre=$_POST['id_padre']; //aqui recivimos los distintos valores de los campos
   
$id_hija=$_POST['id_hija'];
   
$id_hija2=$_POST['id_hija2'];
   
$id_padre=$departamento;
   
$id_hija=$area;
   
$id_hija=$profesor;
echo 
"$id_padre<br>$id_hija<br>$id_hija2";
   echo 
"<form name=\"self\" action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n\n"
   echo 
"<select name=\"id_padre\" onChange=\"this.form.submit()\">\n";//Con esto hacemos que se ejecute sobre si mismo cuando cambia el valor
   
echo "<option value=\"\"> Seleccione un Item </option>\n";
   
$SQLconsulta_padre="SELECT * FROM departamentos";
   
$consulta_padre mysql_query($SQLconsulta_padre,$conexion) or die(mysql_error());
   While   (
$registro_padre=mysql_fetch_assoc($consulta_padre)){
      if (
$id_padre == $registro_padre['id']){
         echo 
"<option value=\"".$registro_padre['id']."\" selected>".$registro_padre['nombre']."</option>\n";
      } else {
         echo 
"<option value=\"".$registro_padre['id']."\">".$registro_padre['nombre']."</option>\n";}
    }
   echo 
"</select>\n\n";

   
mysql_free_result($consulta_padre); // Liberar memoria usada por consulta.

// Formar Select "Hijo" hace casi exactamente lo mismo que el padre, mirarlo un poco por encima y si habeis entendido el padre este no os dara problemas.
   
echo "<select name=\"id_hija\" onChange=\"this.form.submit()\">\n";
   echo 
"<option value=\"\"> Seleccione un Item </option>\n";
   if (!empty(
$id_padre)){
       
$SQLconsulta_hija="SELECT * FROM areas WHERE dependencia='$id_padre'";
       
$consulta_hija mysql_query($SQLconsulta_hija,$conexion) or die(mysql_error());
    While   (
$registro_hija=mysql_fetch_assoc($consulta_hija)){
          if (
$id_hija == $registro_hija['id']){
         echo 
"<option value=\"".$registro_hija['id']."\" selected>".$registro_hija['nombre']."</option>\n";
      } else {
         echo 
"<option value=\"".$registro_hija['id']."\">".$registro_hija['nombre']."</option>\n";}
    }
   echo 
"</select>\n\n";}

    
mysql_free_result($consulta_hija);

   echo 
"<select name=\"id_hija2\" onChange=\"this.form.submit()\">\n";
   echo 
"<option value=\"\"> Seleccione un Item </option>\n";
   if (!empty(
$id_hija)){
       
$SQLconsulta_hija2="SELECT * FROM profesores WHERE dependencia='$id_hija'";
       
$consulta_hija2 mysql_query($SQLconsulta_hija2,$conexion) or die(mysql_error());
    While   (
$registro_hija2=mysql_fetch_assoc($consulta_hija2)){
          if (
$id_hija=$_POST['id_hija'] == $registro_hija2['id']){
         echo 
"<option value=\"".$registro_hija2['id']."\" selected>".$registro_hija2['nombre']."</option>\n";
      } else {
         echo 
"<option value=\"".$registro_hija2['id']."\">".$registro_hija2['nombre']."</option>\n";}
    }
   echo 
"</select>\n\n";}

    
mysql_free_result($consulta_hija2);
    
    echo 
"</select>\n\n";
    echo 
"<input type=\"submit\" name=\"enviado\" value=\" Enviar \" >\n\n";
    echo 
"</form>\n";} 
?>
__________________
Ayudar cuesta mucho, dar las gracias no tanto, tenlo en cuenta siempre.

Última edición por No-NaMe; 31/10/2008 a las 05:34 Razón: No era el codigo definitivo y contenia errores, perdonen las molestias, no me di cuenta.
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 03:40.