Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   PHP (http://www.forosdelweb.com/f18/)
-   -   evitar que el formulario se envie solo (http://www.forosdelweb.com/f18/evitar-que-formulario-envie-solo-579871/)

moquehua 25/04/2008 06:33

evitar que el formulario se envie solo
 
Hola, estoy haciendo un miniblog, una cosita chiquita con comentarios que se suben a una base de datos, y casi todo funciona perfecto menos el hecho de que cada vez que entro a la página el formulario se activa y agrega un registro en blanco en la base de datos.
Todos los PHP están dentro de ver.php (formulario html y el php que lo procesa)
El PHP es
Código PHP:

<?php 
$notaid 
$_POST['id'];
$nombre_vis $_POST['nombre_vis']; 
$mail_vis $_POST['mail_vis']; 
$coment $_POST['coment'];


mysql_query("insert into comentarios (notaid, nombre_vis, mail_vis, coment, fecha) VALUES ('".$id."','".$nombre_vis."','".$mail_vis."','".$coment."')") or die ("error:\n".mysql_error());

 
?>

y el html

Código:

<form action="ver.php?id=<? echo $id; ?>" method="post" name="formulario" target="_self">
  <table width="500" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td width="200">&nbsp;</td>
      <td><input name="id" type="hidden" value="<?php echo $id; ?>" />
        tu nombre<br>
      <input type="text" name="nombre_vis" value="<? echo @$_POST["nombre_vis"] ?>"size="60"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>tu e-mail<br><input type="text" name="mail_vis" value="<? echo @$_POST["mail_vis"] ?>"size="60"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>tu comentario<br>
        <textarea name="coment" cols="60" rows="5" value="<? echo @$_POST["coment"] ?>"></textarea></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input name="Submit" type="submit" class="cajatexto1" id="submit" value="Enviar comentario">
      &nbsp;
<input type="reset" value="Cancelar"></td>
    </tr>
  </table>
</form>

Viendo que el formulario se enviaba solo le agrege un IF y quedo asi

Código PHP:

<?php if ($Submit){
$notaid $_POST['id'];
$nombre_vis $_POST['nombre_vis']; 
$mail_vis $_POST['mail_vis']; 
$coment $_POST['coment'];

mysql_query("insert into comentarios (notaid, nombre_vis, mail_vis, coment, fecha) VALUES ('".$id."','".$nombre_vis."','".$mail_vis."','".$coment."')") or die ("error:\n".mysql_error());
}
else { 
?>

y el html queda asi:

Código:

<form action="ver.php?id=<? echo $id; ?>" method="post" name="formulario" target="_self">
  <table width="500" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td width="200">&nbsp;</td>
      <td><input name="id" type="hidden" value="<?php echo $id; ?>" />
        tu nombre<br>
      <input type="text" name="nombre_vis" value="<? echo @$_POST["nombre_vis"] ?>"size="60"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>tu e-mail<br><input type="text" name="mail_vis" value="<? echo @$_POST["mail_vis"] ?>"size="60"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>tu comentario<br>
        <textarea name="coment" cols="60" rows="5" value="<? echo @$_POST["coment"] ?>"></textarea></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input name="Submit" type="submit" class="cajatexto1" id="submit" value="Enviar comentario">
      &nbsp;
<input type="reset" value="Cancelar"></td>
    </tr>
  </table>
</form><? }
?>

de esa forma el formulario no se envia cuando entro en la página pero tampoco se envia cuando completo los datos y presiono Enviar comentario.
Hay otra forma de evitar que se inserten datos en blanco o me esta faltando algo en la comprobación?
gracias y buen día

Soniapm 25/04/2008 06:41

Re: evitar que el formulario se envie solo
 
Hola!!.

Si pones el php insertar en la misma pagina y haces un submit se vuelve a cargar la pagina por eso te mete registros en blanco. Lo que podrias hacer es una nueva pagina que se llamara insertarregistro.php que tenga el codigo php de insertar y en esta pagina un if que te compruebe si el boton que tu has pulsado sea el de guardar los datos y si es así que te ponga en una variable por ejemplo $accion="insertarregitro.php" y en el form
<form name="ficha" action='<?php echo $accion; ?>' method="get"> para llamar a la pagina de guardar.

Asi solo te ejecutara el insertar cuando tu pulses el boton.

Espero que te sirva de ayuda.

darkmasterr 25/04/2008 09:51

Re: evitar que el formulario se envie solo
 
si pones if($Submit) tienes que enviar una variable que exista para que se envie el formulario, lo que debes hacer es poner:

Código PHP:

<?php if (isset($_POST['Submit'])){
$notaid $_POST['id'];
$nombre_vis $_POST['nombre_vis']; 
$mail_vis $_POST['mail_vis']; 
$coment $_POST['coment'];

mysql_query("insert into comentarios (notaid, nombre_vis, mail_vis, coment, fecha) VALUES ('".$id."','".$nombre_vis."','".$mail_vis."','".$coment."')") or die ("error:\n".mysql_error());
}
else { 
?>

eso deberia funcionar.

moquehua 25/04/2008 12:39

Re: evitar que el formulario se envie solo
 
Gracias Darkmasterr, era justo lo que faltaba y no se como se me paso si en los demás formularios lo tengo asi.
Saludos
Germán


La zona horaria es GMT -6. Ahora son las 07:40.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.