Foros del Web » Programando para Internet » PHP »

Boton submit y carga de formularios ante manejo de errores

Estas en el tema de Boton submit y carga de formularios ante manejo de errores en el foro de PHP en Foros del Web. Hola, estoy usando un formulario donde tengo una tabla que posee varios articulos obtenidos de la b.d. y para cada uno un checkbox. La idea ...
  #1 (permalink)  
Antiguo 26/03/2009, 09:34
 
Fecha de Ingreso: noviembre-2008
Mensajes: 122
Antigüedad: 15 años, 5 meses
Puntos: 4
Pregunta Boton submit y carga de formularios ante manejo de errores

Hola, estoy usando un formulario donde tengo una tabla que posee varios articulos obtenidos de la b.d. y para cada uno un checkbox. La idea es que se seleccionen varios de los arts y que para los arts seleccionados se pulse un boton que llame a un archivo "procesar.php" para que procese el script y lo ejecute solo para los arts previamente seleccionados. Uso post para mandar el array de arts seleccionados.
El problema esta en que yo quiero que si NO hay arts seleccionados que NO se llame al archivo "porcesar.php" y que quede como se inicia (luego pondré un cartel de error diciendo que no hay arts seleccionados).
Con este codigo, lo me pasa es que si no hay seleccionados -> esta bien, no llama al otro archivo php, pero si selecciono y pulso el boton, se vuelve a cargar el formulario y no pasa nada, luego si inmediatamente pulso de nuevo el boton -> ahi si llama al archivo php y se procesan.. no da error, pero no esta bien hecho, ya que debo pulsar dos veces para que se procesen mis arts elegidos.
Si pueden darme un mano, no se donde esta el error. Aquí les dejo el codigo:

<?php if (isset($_POST['btnprocesar']) && (isset($_POST['elegidos']))) { ?>
<form name="form1" action="procesar.php" method="post">
<table width="720" height="360" border="0" align="center" cellspacing="0">
<tr>
<td align="center" valign="top"><table width="720" border="0" align="center" cellspacing="0">
<tr>
<td><table width="720" border="0" cellspacing="0" align="center">
<tr>
<td>Art&iacute;culos actuales:</td>
</tr>
</table></td>
</tr>
<tr>
<td><table width="720" border="1" cellspacing="0">
<tr>
<th width="62">Seleccionar</th>
<th width="51">ID</th>
<th width="421">T&iacute;itulo</th>
<th width="81">Tema</th>
<th width="83">Autor</th>
</tr>
<?php do { ?>
<tr>
<td><div align="center">
<input name="elegidos[]" type="checkbox" value="<?php echo $recordset['id']; ?>">
</div></td>
<td><div align="center"><?php echo $recordset['id']; ?></div></td>
<td><?php echo $recordset['tit']; ?></td>
<td><?php echo $recordset['tema']; ?></td>
<td><?php echo $recordset['autor']; ?></td>
</tr>
<?php $i++; } while ($row_rArts = mysql_fetch_assoc($recordset); ?>
</table></td>
</tr>
</table>
<table width="720" border="0" cellspacing="0">
<tr>
<td><div align="right">
<input name="btnprocesar" type="submit" id="btnprocesar" value="Procesar" <?php if ($_POST['elegidos']==1) { $selected.=($recordset['id']."-"); echo $selected; } ?>>
</div></td>
</tr>
</table></td>
</tr>
</table>
</form>
<?php } else {
//echo "no hay elegidos";
//vuelvo a mostrar el formulario
?>
<form name="form1" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table width="720" height="360" border="0" align="center" cellspacing="0">
<tr>
<td align="center" valign="top"><table width="720" border="0" align="center" cellspacing="0">
<tr>
<td><table width="720" border="0" cellspacing="0" align="center">
<tr>
<td>Art&iacute;culos actuales:</td>
</tr>
</table></td>
</tr>
<tr>
<td><table width="720" border="1" cellspacing="0">
<tr>
<th width="62">Seleccionar</th>
<th width="51">ID</th>
<th width="421">T&iacute;itulo</th>
<th width="81">Tema</th>
<th width="83">Autor</th>
</tr>
<?php do { ?>
<tr>
<td><div align="center">
<input name="elegidos[]" type="checkbox" value="<?php echo $recordset['id']; ?>">
</div></td>
<td><div align="center"><?php echo $recordset['id']; ?></div></td>
<td><?php echo $recordset['tit']; ?></td>
<td><?php echo $recordset['tema']; ?></td>
<td><?php echo $recordset['autor']; ?></td>
</tr>
<?php $i++; } while ($row_rArts = mysql_fetch_assoc($recordset); ?>
</table></td>
</tr>
</table>
<table width="720" border="0" cellspacing="0">
<tr>
<td><div align="right">
<input name="btnprocesar" type="submit" id="btnprocesar" value="Procesar" <?php if ($_POST['elegidos']==1) { $selected.=($recordset['id']."-"); echo $selected; } ?>>
</div></td>
</tr>
</table></td>
</tr>
</table>
</form>
<?php } ?>

Gracias !
  #2 (permalink)  
Antiguo 26/03/2009, 10:10
Avatar de xempro  
Fecha de Ingreso: marzo-2007
Ubicación: Chile
Mensajes: 222
Antigüedad: 17 años, 1 mes
Puntos: 6
Respuesta: Boton submit y carga de formularios ante manejo de errores

Hola,

La solución que te planteo va del lado del cliente... realizando con javascript la validación.

Cambiar tu botón...
Código HTML:
<input name="btnprocesar" type="submit" id="btnprocesar" value="Procesar" <?php if ($_POST['elegidos']==1) { $selected.=($recordset['id']."-"); echo $selected; } ?>>
Por...
Código HTML:
<input name="btnprocesar" type="button" id="btnprocesar" value="Procesar" <?php if ($_POST['elegidos']==1) { $selected.=($recordset['id']."-"); echo $selected; } ?>>
y en el javascript que generes para validar, si esta todo correcto deberías colocar...
Código HTML:
document.form1.submit();
Con eso estarías haciendo que pase a procesa.php


Espero te sirva.-
  #3 (permalink)  
Antiguo 26/03/2009, 10:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Boton submit y carga de formularios ante manejo de errores

Lo que puedes hacer desde PHP es contar las opciones:
Código php:
Ver original
  1. if( isset( $_POST['elegidos'] ) && count( $_POST['elegidos'] ) > 0 ) ) {
  2.        // Procesas
  3. } else {
  4.        // no selecciono ninguno
  5. }

Saludos.
  #4 (permalink)  
Antiguo 26/03/2009, 12:35
 
Fecha de Ingreso: noviembre-2008
Mensajes: 122
Antigüedad: 15 años, 5 meses
Puntos: 4
Pregunta

Gator, Hola, te agradezco muchisiiiimo tu respuesta, eso de contar si se han elegido opciones no es problema, pero creo que a lo mejor no me has entendido o no he sido yo lo suficientemente clara, mira aqui te lo muestro más simple, imagina q tengo un formulario con una caja de texto y un boton, y deseo que si la caja de texto no se ha rellenado con texto y se pulsa el boton, que NO se permita ir al archivo que llamo desde el action del form:
Con este ejemplo tengo el mismo problema, si no completo la caja de texto no va al otro archivo del form, como yo quiero hasta ahi ok, el problema aparece si completo el campo de texto y pulso el boton, no va a ningun lado y es como que se recarga el formulario, y si enseguida vuelvo a escribir el texto y puslo el btn ahi si va al archivo indicado en el action de form.. ¿por que dos veces debo pulsar para que vaya al archivo?

bbb.php:
<body>
<?php if ((isset($_POST['Submit'])) && (strlen($_POST['txt'])>0)) { ?>
<form id="form1" name="form1" method="post" action="aaa.php">
<input name="txt" type="text" id="txt" />
<input type="submit" name="Submit" value="Submit" />
</form>
<?php } else { ?>
<form id="form1" name="form1" method="post" action="">
<input name="txt" type="text" id="txt" />
<input type="submit" name="Submit" value="Submit" />
</form>
<?php } ?>
</body>

aaa.php:
<?php echo "Texto: ".$_POST['txt'];
?>

Si se cumple que ((isset($_POST['Submit'])) && (strlen($_POST['txt'])>0)) que se ejecute el action del form: aaa.php, y sino, al action lo dejo vacio, es eso correcto..? seguro es una pavada, pero no me sale..!! he probado con cosas mucho mas complicadas y sin problemas pero un simple formulario me puede..
gracias de nuevo por tu ayuda. Un saludo
maria.

Hola de nuevo, mira he solucionado mi problema, NO ES LA MEJOR solución, pero al menos sirve de momento. Respectoal ejemplo quete di hice lo siguiente:

en el archivo bbb.php deje:
<body>
<form id="form1" name="form1" method="post" action="aaa.php">
<input name="txt" type="text" id="txt" />
<input type="submit" name="Submit" value="Submit" />
</form>
</body>

en el aaa.php hago la validacion, donde sino la cumple, que vuelva al bbb.php .. ahi deberia de indicar de que no puede dejarse un campo vacio.
<?php
if (strlen($_POST['txt'])==0) {
header("Location: bbb.php");
} else {
echo "Texto: ".$_POST['txt']; }
?>

Mi idea no era hacer la validación desde el aaa.php sino antes de enviar el texto (en bbb.php).
IGUAL, ME QUEDA LA DUDA, ESTOY SEGURA DE QUE PODRIA HABERSE HECHO EN EL SCRIPT QUE CONTIENE EL FORMULARIO, SOLO QUE NO HE SABIDO COMO HACERLO PUES CONSIDERO QUE ESO DEBE SER MUCHO MEJOR.
un saludo.

Última edición por GatorV; 26/03/2009 a las 14:57
  #5 (permalink)  
Antiguo 26/03/2009, 13:12
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Boton submit y carga de formularios ante manejo de errores

Hola, mrmaria.

Si quieres validar los campos antes de enviarlos, debes usar Javascript.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 26/03/2009, 14:19
 
Fecha de Ingreso: noviembre-2008
Mensajes: 122
Antigüedad: 15 años, 5 meses
Puntos: 4
Pregunta Respuesta: Boton submit y carga de formularios ante manejo de errores

ya lo veo.. javascript no es mi fuerte, no me quedo claro el ejemplo de "XEMPRO", eso de "document.form1.submit();" .
Gracias por las respuestas.
  #7 (permalink)  
Antiguo 26/03/2009, 15:06
Avatar de xempro  
Fecha de Ingreso: marzo-2007
Ubicación: Chile
Mensajes: 222
Antigüedad: 17 años, 1 mes
Puntos: 6
Respuesta: Boton submit y carga de formularios ante manejo de errores

Mmmmm....

Te puedo hacer un ejemplo básico de validación en Javascript...

Código HTML:
<html>
<head>
<script type="text/javascript">
	function evaluar(){
		var ejemplo=document.getElementById('campoTexto').value;
		if(ejemplo.length==0)
			alert("Debe ingresar texto");
		else
			document.form1.submit();
	}
</script>
</head>
<body>
<form name="form1" action="procesar.php" method="post">
	Ingresar texto: <input type="text" name="campoTexto" id="campoTexto" />
	<br/>
	<input name="btnprocesar" type="button" id="btnprocesar" value="Procesar" onclick="evaluar();">
</form>	
</body>
</html> 
  #8 (permalink)  
Antiguo 27/03/2009, 09:46
 
Fecha de Ingreso: noviembre-2008
Mensajes: 122
Antigüedad: 15 años, 5 meses
Puntos: 4
De acuerdo Respuesta: Boton submit y carga de formularios ante manejo de errores


Ahora si, no te entendia eso de "document.form1.submit();" donde ponerlo, mi fuerte no es javascript.. GRACIAS por tu tiempo y el ejemplo, me va aclarando las ideas sobre javascript, investigare un poquitin mas.
Un saludo
maria
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:45.