Foros del Web » Programando para Internet » PHP »

PHP OO formulario de registro

Estas en el tema de formulario de registro en el foro de PHP en Foros del Web. Tengo el siguiente problema: un formulario de registro combinado de html y php, el php ejecuta 2 combobox dinamicos, más abajo continuo el formulario con ...
  #1 (permalink)  
Antiguo 11/07/2011, 18:38
 
Fecha de Ingreso: julio-2011
Mensajes: 17
Antigüedad: 12 años, 9 meses
Puntos: 0
Pregunta formulario de registro

Tengo el siguiente problema: un formulario de registro combinado de html y php, el php ejecuta 2 combobox dinamicos, más abajo continuo el formulario con html, lo de malo es que al elegir un dato en los combobox dinamicos se ejecuta toda la página y no me deja llenar los campos hechos en html por lo cual mi boton submit que está al final del formualrio ya no sirve como hago para solucionar ese problema?

Este es un script que estoy armando con varias ayudas que encontre aca:
<!DO CTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<form action="procesar.php" enctype="multipart/form-data" method="post">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
<link rel="stylesheet" type="text/css" href="css/base.css"/>
</head>

<body>
<p class="titulo">PUBLICAR UN NUEVO AVISO</p>
<hr />

<?php
// datos de conexion a la BD.
$servidor ="localhost"; // host
$usuario ="sionsyst_alvin";
$clave ="abc";
$basedatos ="sionsyst_clasificados"; // Indicar una Base de datos.

// si se ha pulsao el boton enviar ($enviado) se procesa el formulario ..
// Sino, se continua con el formulario y los nuevos valores de los Select ..
// OJO si se tienen mas varibles (mas <input> ) se van a perder sus valores a no ser
// que los obtengamos y se les de como valor inicial en el value= de cada uno segun corresponda.

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

// Procesar el formulario ...
echo "Procesando formulario:<br>";
echo "Recibido id_tabla_padre: ".$_POST['idCategoria']."<br>";
echo "Recibido id_tabla_hija: ".$_POST['idCategoria'];

} else {

// Conexión a la BD
$conexion = mysql_connect($servidor, $usuario, $clave) or die(mysql_error());
mysql_select_db($basedatos, $conexion) or die(mysql_error());

// Obtener el $id_padre del envio a si mismo del formulario ..
$id_padre=$_POST['idCategoria'];

// Inicio Formulario .. PHP_SELF enviamos a si mismo (a este script).
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n\n";

// Formar Selec "Padre".
echo "<select name=\"idCategoria\" onChange=\"this.form.submit()\">\n";
echo "<option value=\"\"> Seleccione un Item </option>\n";

$SQLconsulta_padre="SELECT * FROM categorias";
$consulta_padre = mysql_query($SQLconsulta_padre,$conexion) or die(mysql_error());

While ($registro_padre=mysql_fetch_assoc($consulta_padre )){
// Se mira si el ID del registro es el mismo q el $id_padre q recibimos si hemos cambiado el select hijo.
// Se selecciona en consecuencia (selected) la opción elegida.
if ($id_padre == $registro_padre['idCategoria']){
echo "<option value=\"".$registro_padre['idCategoria']."\" selected>".$registro_padre['nombre']."</option>\n";
} else {
echo "<option value=\"".$registro_padre['idCategoria']."\">".$registro_padre['nombre']."</option>\n";
}
}
echo "</select>\n\n";

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

// Formar Select "Hijo"
echo "<select name=\"id_hija\">\n";

// Si $id_padre no tiene valor (caso de que no se ha seleccionado ningua opcion del select hijo
// se muestra el mensaje de "seleccine un item" (del select padre).
if (!empty($id_padre)){

$SQLconsulta_hija="SELECT * FROM subcategorias WHERE idCategoria='$id_padre'";
$consulta_hija = mysql_query($SQLconsulta_hija,$conexion) or die(mysql_error());
// se mira el total de registros de la consulta .. si es 0 se muestra mensaje en el select ..
if (mysql_num_rows($consulta_hija) != 0){
While ($registro_hija=mysql_fetch_assoc($consulta_hija)) {
echo "<option value=\"".$registro_hija['idCategoria']."\">".$registro_hija['nombre']."</option>\n";
}
} else {
echo "<option value=\"\"> No hay registros para este Item </option>";
}
} else {
echo "<option value=\"\"> <-- Seleccione un Item </option>";
}

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

echo "</select>\n\n";
echo "<input type=\"submit\" name=\"enviado\" value=\" Enviar \" >\n\n";
echo "</form>\n";
}

?>

<span class="labels">Localización: </span><br />

<?php
$con="SELECT nombre FROM localizaciones";
$res=@mysql_query($con);
if(!$res){
echo "falló";
}
else{
echo "<select name='select1' style='width:155px'>";
while ($fila=mysql_fetch_array($res)){
echo "<option>", $fila['nombre'], "</option>";
}
echo "</select>";
}
?>
<br />
<span class="labels">Ciudad, provincia, estado o distrito:</span>
<br />
<input name="lugar" type="text" id="lugar" size="40" />
<br />
</p>
<p><span class="labels">Título:</span><br />
<input name="titulo" type="text" id="titulo" size="50" />
<span class="labels">Precio:</span>
<input name="precio" type="text" id="precio" size="20" />
</p>
<p><span class="labels">Descripción:(*)</span><br />
<label for="descripcion"></label>
<textarea name="descripcion" id="descripcion" cols="65 " rows="10"></textarea>
</p>
<p class="labels">Nombre:<br />
<label for="nombre"></label>
<input type="text" name="nombre" id="nombre" size="40" />
<br />
Email:<br />
<input type="text" name="email" id="email" size="30" />
(debe ser un email real para validar su anuncio)<br />
Teléfono: <br />
<input type="text" name="telefono" id="telefono" />
</p>
<p> <INPUT type="hidden" name="lim_tamano" value="65000">
<label for="imagen" class="labels">Foto 1:</label>
<input id="imagen" name="imagen" size="30" type="file" /><br>

<INPUT type="hidden" name="lim_tamano2" value="65000">
<label for="imagen2" class="labels">Foto 2:</label>
<input id="imagen2" name="imagen2" size="30" type="file" /><br>

<INPUT type="hidden" name="lim_tamano3" value="65000">
<label for="imagen3" class="labels">Foto 3:</label>
<input id="imagen3" name="imagen3" size="30" type="file" />
<br />
<span class="labels"><strong>Nota:</strong> las imágenes deben ser de tipo jpg y deben tener un tamaño máximo de 70Kb</span></p>
<p class="labels">Todos los campos con deben ser llenados obligatoriamente a excepción de las imágenes puede colocar de 1 a 3 dependiendo del usuario<br>
<br>
<input name="submit" type="submit" value="Publicar" />&nbsp;</p>
</body>
</html>

Lo que quiero que es que no ejecute el archivo procesar.php hasta que haya hecho clic en el botoón publicar (al final del formulario) pero ni bien elijo una opción en mi combobox se salta a ejecutar procesar.php.

Desde ya les agradezco la ayuda es urgente

Última edición por Mago_de_Oz; 11/07/2011 a las 18:46
  #2 (permalink)  
Antiguo 15/07/2011, 01:03
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: formulario de registro

Hola Mago_de_Oz, tu post tiene 80 lecturas y ni una sólo respuesta.
Por favor: postea sólo el código necesario CON FORMATO y aclara un poco la pregunta.
Salu2!
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 15/07/2011, 04:50
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: formulario de registro

Tu problema está aquí:
echo "<select name=\"idCategoria\" onChange=\"this.form.submit()\">\n";

Cuando se manda el evento onChange se envía el formulario, con this.form.submit() mediante JS. Borra desde onChange y no se enviará al seleccionar una opción.

Aprovecho para decirte que el cierre del formulario lo tienes a mitad de la página, por lo que todos los inputs que pongas de ahí en adelante no se enviarán cuando el usuario le dé al submit (que tienes dos, uno dentro del form y otro fuera, al final de la página). Si pones el texto entre etiquetas PHP y un poco más formateado, te puedo echar un ojo más a fondo, pero así es imposible leer nada.

Un saludo.
  #4 (permalink)  
Antiguo 13/08/2011, 20:33
 
Fecha de Ingreso: julio-2011
Mensajes: 17
Antigüedad: 12 años, 9 meses
Puntos: 0
De acuerdo Respuesta: formulario de registro

ok tratare de colocarlo con formato y corregido
  #5 (permalink)  
Antiguo 13/08/2011, 20:34
 
Fecha de Ingreso: julio-2011
Mensajes: 17
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: formulario de registro

Código PHP:
Ver original
  1. <!DO CTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <form action="procesar.php" enctype="multipart/form-data" method="post">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>Documento sin título</title>
  7. <link rel="stylesheet" type="text/css" href="css/base.css"/>
  8. </head>
  9.  
  10. <body>
  11. <p class="titulo">PUBLICAR UN NUEVO AVISO</p>
  12. <hr />
  13.  
  14. <?php
  15. // datos de conexion a la BD.
  16. $servidor ="localhost"; // host
  17. $usuario ="sionsyst_alvin";
  18. $clave ="abc";
  19. $basedatos ="sionsyst_clasificados"; // Indicar una Base de datos.
  20.  
  21. // si se ha pulsao el boton enviar ($enviado) se procesa el formulario ..
  22. // Sino, se continua con el formulario y los nuevos valores de los Select ..
  23. // OJO si se tienen mas varibles (mas <input> ) se van a perder sus valores a no ser
  24. // que los obtengamos y se les de como valor inicial en el value= de cada uno segun corresponda.
  25.  
  26. if (!empty($_POST['enviado'])){
  27.  
  28. // Procesar el formulario ...
  29. echo "Procesando formulario:<br>";
  30. echo "Recibido id_tabla_padre: ".$_POST['idCategoria']."<br>";
  31. echo "Recibido id_tabla_hija: ".$_POST['idCategoria'];
  32.  
  33. } else {
  34.  
  35. // Conexión a la BD
  36. $conexion = mysql_connect($servidor, $usuario, $clave) or die(mysql_error());
  37. mysql_select_db($basedatos, $conexion) or die(mysql_error());
  38.  
  39. // Obtener el $id_padre del envio a si mismo del formulario ..
  40. $id_padre=$_POST['idCategoria'];
  41.  
  42. // Inicio Formulario .. PHP_SELF enviamos a si mismo (a este script).
  43. echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n\n";
  44.  
  45. // Formar Selec "Padre".
  46. echo "<select name=\"idCategoria\" onChange=\"this.form.submit()\">\n";
  47. echo "<option value=\"\"> Seleccione un Item </option>\n";
  48.  
  49. $SQLconsulta_padre="SELECT * FROM categorias";
  50. $consulta_padre = mysql_query($SQLconsulta_padre,$conexion) or die(mysql_error());
  51.  
  52. While ($registro_padre=mysql_fetch_assoc($consulta_padre )){
  53. // Se mira si el ID del registro es el mismo q el $id_padre q recibimos si hemos cambiado el select hijo.
  54. // Se selecciona en consecuencia (selected) la opción elegida.
  55. if ($id_padre == $registro_padre['idCategoria']){
  56. echo "<option value=\"".$registro_padre['idCategoria']."\" selected>".$registro_padre['nombre']."</option>\n";
  57. } else {
  58. echo "<option value=\"".$registro_padre['idCategoria']."\">".$registro_padre['nombre']."</option>\n";
  59. }
  60. }
  61. echo "</select>\n\n";
  62.  
  63. mysql_free_result($consulta_padre); // Liberar memoria usada por consulta.
  64.  
  65. // Formar Select "Hijo"
  66. echo "<select name=\"id_hija\">\n";
  67.  
  68. // Si $id_padre no tiene valor (caso de que no se ha seleccionado ningua opcion del select hijo
  69. // se muestra el mensaje de "seleccine un item" (del select padre).
  70. if (!empty($id_padre)){
  71.  
  72. $SQLconsulta_hija="SELECT * FROM subcategorias WHERE idCategoria='$id_padre'";
  73. $consulta_hija = mysql_query($SQLconsulta_hija,$conexion) or die(mysql_error());
  74. // se mira el total de registros de la consulta .. si es 0 se muestra mensaje en el select ..
  75. if (mysql_num_rows($consulta_hija) != 0){
  76. While ($registro_hija=mysql_fetch_assoc($consulta_hija)) {
  77. echo "<option value=\"".$registro_hija['idCategoria']."\">".$registro_hija['nombre']."</option>\n";
  78. }
  79. } else {
  80. echo "<option value=\"\"> No hay registros para este Item </option>";
  81. }
  82. } else {
  83. echo "<option value=\"\"> <-- Seleccione un Item </option>";
  84. }
  85.  
  86. mysql_free_result($consulta_hija); // Liberar memoria usada por consulta.
  87.  
  88. echo "</select>\n\n";
  89. echo "<input type=\"submit\" name=\"enviado\" value=\" Enviar \" >\n\n";
  90. echo "</form>\n";
  91. }
  92.  
  93. ?>
  94.  
  95. <span class="labels">Localización: </span><br />
  96.  
  97. <?php
  98. $con="SELECT nombre FROM localizaciones";
  99. $res=@mysql_query($con);
  100. if(!$res){
  101. echo "falló";
  102. }
  103. else{
  104. echo "<select name='select1' style='width:155px'>";
  105. while ($fila=mysql_fetch_array($res)){
  106. echo "<option>", $fila['nombre'], "</option>";
  107. }
  108. echo "</select>";
  109. }
  110. ?>
  111. <br />
  112. <span class="labels">Ciudad, provincia, estado o distrito:</span>
  113. <br />
  114. <input name="lugar" type="text" id="lugar" size="40" />
  115. <br />
  116. </p>
  117. <p><span class="labels">Título:</span><br />
  118. <input name="titulo" type="text" id="titulo" size="50" />
  119. <span class="labels">Precio:</span>
  120. <input name="precio" type="text" id="precio" size="20" />
  121. </p>
  122. <p><span class="labels">Descripción:(*)</span><br />
  123. <label for="descripcion"></label>
  124. <textarea name="descripcion" id="descripcion" cols="65 " rows="10"></textarea>
  125. </p>
  126. <p class="labels">Nombre:<br />
  127. <label for="nombre"></label>
  128. <input type="text" name="nombre" id="nombre" size="40" />
  129. <br />
  130. Email:<br />
  131. <input type="text" name="email" id="email" size="30" />
  132. (debe ser un email real para validar su anuncio)<br />
  133. Teléfono: <br />
  134. <input type="text" name="telefono" id="telefono" />
  135. </p>
  136. <p> <INPUT type="hidden" name="lim_tamano" value="65000">
  137. <label for="imagen" class="labels">Foto 1:</label>
  138. <input id="imagen" name="imagen" size="30" type="file" /><br>
  139.  
  140. <INPUT type="hidden" name="lim_tamano2" value="65000">
  141. <label for="imagen2" class="labels">Foto 2:</label>
  142. <input id="imagen2" name="imagen2" size="30" type="file" /><br>
  143.  
  144. <INPUT type="hidden" name="lim_tamano3" value="65000">
  145. <label for="imagen3" class="labels">Foto 3:</label>
  146. <input id="imagen3" name="imagen3" size="30" type="file" />
  147. <br />
  148. <span class="labels"><strong>Nota:</strong> las imágenes deben ser de tipo jpg y deben tener un tamaño máximo de 70Kb</span></p>
  149. <p class="labels">Todos los campos con deben ser llenados obligatoriamente a excepción de las imágenes puede colocar de 1 a 3 dependiendo del usuario<br>
  150. <br>
  151. <input name="submit" type="submit" value="Publicar" />&nbsp;</p>
  152. </body>
  153. </html>
  #6 (permalink)  
Antiguo 16/08/2011, 01:34
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: formulario de registro

No lo has corregido, sigues teniendo los mismos errores. Haces un submit() en el onchange del primer select (te dije que lo quitaras) y, además, cierras el form con el tag </form> después del segundo select, por lo que todos los inputs que tienes debajo no se enviarán con ese form.

En fin, si quieres corregirlo, te echaré una mano, pero si no me haces caso, no me voy a repetir.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #7 (permalink)  
Antiguo 22/09/2011, 09:32
 
Fecha de Ingreso: julio-2011
Mensajes: 17
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: formulario de registro

Gracias lo resolvi utilizando mejor ajax de todas maneras me sirvio para pensar en otras alternativas

Etiquetas: html, registro, formulario
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 13:58.