Retroceder   Foros del Web > Programación para sitios web > PHP

Respuesta
 
Herramientas Desplegado
Antiguo 25-abr-2008, 06:33   #1 (permalink)
moquehua ha deshabilitado el karma
 
Fecha de Ingreso: agosto-2004
Mensajes: 73
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
moquehua está desconectado   Responder Citando
Antiguo 25-abr-2008, 06:41   #2 (permalink)
Soniapm ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2006
Mensajes: 32
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.
Soniapm está desconectado   Responder Citando
Antiguo 25-abr-2008, 09:51   #3 (permalink)
darkmasterr está en el buen camino
 
Fecha de Ingreso: diciembre-2004
Mensajes: 116
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.
__________________
Salu2 desde Chile :adios:
darkmasterr está desconectado   Responder Citando
Antiguo 25-abr-2008, 12:39   #4 (permalink)
moquehua ha deshabilitado el karma
 
Fecha de Ingreso: agosto-2004
Mensajes: 73
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
moquehua está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 15:06.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93