Foros del Web » Programando para Internet » PHP »

Me dice que complete el formulario cuando ya lo he completado del todo

Estas en el tema de Me dice que complete el formulario cuando ya lo he completado del todo en el foro de PHP en Foros del Web. Buenas, resulta ser de que estoy haciendo un foro para una página web y para evitar que se publiquen mensajes sin datos en algunos campos. ...
  #1 (permalink)  
Antiguo 22/12/2009, 18:18
Avatar de Distriker  
Fecha de Ingreso: marzo-2008
Ubicación: Las Palmas De Gran Canarias
Mensajes: 924
Antigüedad: 16 años, 1 mes
Puntos: 23
Me dice que complete el formulario cuando ya lo he completado del todo

Buenas, resulta ser de que estoy haciendo un foro para una página web y para evitar que se publiquen mensajes sin datos en algunos campos. Mi problema es que aunque rellene todos los campos siempre me dice que faltan campos, y luego lo raro es que el mensaje es publicado, que es lo que mas me mosquea.

Pero bueno, antes de comenzar a dejaros mi código me gustaría comentaros aspectos de mi foro que pienso que son importantes.

Le he creado un editor WYSING para mayor usabilidad del foro, así los usuarios podrán moverse mejor. Ya os dejaré el script también por si os hace falta.

No tiene sistema de usuarios, de momento.

Y bueno, creo que ya puedo dejaros el código, aunque si necesitáis mas información decídmelo y os la daré.
formulario.html
Código HTML:
Ver original
  1. <div width="90%" border="0">
  2. <form name="formulario" action="agregar.php" method="post">
  3. <input type="hidden" name="identificador" value="<?php echo $id ; ?>">
  4. Autor: <input type="text" name="autor" maxlength="20"> <br />
  5. Titulo: <input type="text" name="titulo" value="<?php echo $titulo ; ?>"> <br />
  6. <form id="form1" name="form1" method="post" action="">
  7. <input type="button" name=negrita" value="Negrita" onclick="formato('bold')" />
  8. <input type="button" name="sursiva" value="Cursiva" onclick="formato('italic')" />
  9. <input type="button" name="subrayado" value="Subrayado" onclick="formato('underline')" />
  10. <input type="button" name="eliminar-formato" value="Eliminar formato" onclick="formato('RemoveFormat')" />
  11. <input type="button" name="insertar-link" value="Insertar link" onclick="insertarEnlace()" />
  12. <input type="button" name="eliminar-link" value="Eliminar link" onclick="formato('Unlink')" />
  13. <input type="button" name="insertar-imagen" value="Insertar imagen" onclick="insertarImagen()" />
  14. <input type="button" name="deshacer-acción" value="Deshacer acción" onclick="formato('undo')" />
  15. <input type="button" name="rehacer-acción " value="Rehacer acción" onclick="formato('redo')" />
  16. <input type="button" name="insertar-html" value="Insertar texto mediante HTML" onclick="inHTML()" />
  17. <br />
  18. <iframe name="mensaje" id="editor" width="100%" height="300" style="border:1px solid #000;"><?php echo $mensaje ; ?></iframe>
  19. <input type="submit" name="Submit" value="Enviar mensaje">
  20. </form>
  21. </div>
agregar.php
Código PHP:
<?php
require ('configuracion.php') ;
$autor $_POST ["autor"] ;
$titulo $_POST ["titulo"] ;
$mensaje $_POST ["mensaje"] ;
$identificador $_POST ["identificador"] ;

if (
$autor == "" or $titulo == "" or $mensaje == "") {
  echo 
'Complete el formulario' ;
}

$sql "INSERT INTO temas (autor, titulo, mensaje, identificador, fecha, ultimarespuesta) " ;
$sql.= "VALUES ('$autor', '$titulo', '$mensaje', '$identificador', NOW(),NOW())" ;
$rs mysql_query ($sql$conectar) or die("Error al grabar el mensaje: ".mysql_error) ;
$ult_id mysql_insert_id ($conectar) ;

if (!empty(
$identificador))
{
$sql "UPDATE foro SET respuestas=respuestas+1, ultimarespuesta=NOW()" ;
$sql.= " WHERE id = '$identificador'" ;
$rs mysql_query ($sql$conectar) ;
Header ("Location: foro.php?id=$identificador#ult_id") ;
exit () ;
}
Header ("Location: index.php") ;
?>
header.html
Código JAVASCRIPT:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4. <title>Foro de Soporte de IMGBeta</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  6. <style type="text/css">
  7. </style>
  8. <script>
  9. var editor;
  10. function $(id){
  11.     return document.getElementById(id) ;
  12. }
  13. function formato(f){
  14.     editor.execCommand(f, false, null) ;
  15. }
  16. function rev(t)    {
  17.     return t.split("<").join("&lt;").split(">").join("&gt;").split("\"").join("&quot;") ;
  18. }
  19. function insertarEnlace(){
  20.     var u ;
  21.     if(!(u=prompt('Ingresar URL:','http://')))return ;
  22.     editor.execCommand("CreateLink",false,u) ;
  23. }
  24. function insertarImagen(){
  25.     var u ;
  26.     if(!(u=prompt('Ingresar URL de la imagen:','http://')))return ;
  27.     editor.body.focus() ;
  28.     editor.execCommand("InsertImage",false,u) ;
  29. }
  30.  
  31. function inHTML(){
  32.     var u,u2 ;
  33.     if(!(u=prompt('Ingresar texto escrito en HTML:','')))return ;
  34.    
  35.         try{
  36.             editor.execCommand("inserthtml",false,u) ;
  37.         }catch(e){
  38.             try{
  39.                 editor.body.focus() ;
  40.                 u2=editor.selection.createRange() ;
  41.                 u2.pasteHTML(u) ;
  42.             }catch(E){
  43.                 alert('No es valido') ;
  44.             }
  45.         }
  46. }
  47.  
  48. window.onload=function(){
  49.    
  50.     editor=$('editor').contentDocument || $('editor').contentWindow.document ;
  51.     editor.designMode='on' ;
  52. }
  53. </script>
  54. </head>
  55. <body bgcolor="#9999cc" text="#FFFFFF" link="#FFFFFF">
  56. <div width="90%" border="0" align="center">
  57. <div bgcolor="#4b557d"><h2>Foro de soporte de IMGBeta</h2>
  58. <div align="right">[ <a href="index.php">Inicio</a>] - <a href="respuesta.php">Nuevo tema</a> ] </div> </div>
  59. <br />
  60. <br />
Le pongo el coloreado de JavaScript para poder apreciar el script.
index.php
Código PHP:
<html>
<head>
<link rel="stylesheet" href="template/classic/css/estilo.css" type="text/css" media="all">
<?php
require ('configuracion.php') ;
require (
'funciones.php') ;
require (
'template/classic/header.html') ;
$sql "SELECT id, autor, titulo, fecha, respuestas, ultimarespuesta " ;
$sql.= "FROM temas WHERE identificador=0 ORDER BY ultimarespuesta DESC " ;
$rs mysql_query ($sql$conectar) or die(mysql_error()) ;
if(
mysql_num_rows($rs)>0)
{
$template implode (""file("template/classic/temas.html")) ;
require (
'template/classic/titulos.html') ;
while (
$row mysql_fetch_assoc($rs)) 
{
$color = ($color == ""?"#999999":"") ;
$row ["color"] = $color ;
mostrartemplate ($template$row) ;
}
}
require (
'template/classic/footer.html') ;
?>
foro.php
Código PHP:
<?php
require ('configuracion.php') ;
require (
'funciones.php') ;
$id $_GET ["id"] ;
if (empty(
$id)) Header ("Location: index.php") ;

$sql "SELECT id, autor, titulo, mensaje, " ;
$sql.= "DATE_FORMAT(fecha, '%d/%m/%Y %H:%i:%s') as enviado FROM temas " ;
$sql.= "WHERE id='$id' OR identificador='$id' ORDER BY fecha ASC " ;
$rs mysql_query ($sql$conectar) ;
require (
'template/classic/header.html') ;
if (
mysql_num_rows($rs)>0

require (
'template/classic/titulos_post.html') ;
$template implode (""file ('template/classic/post.html')) ;
while (
$row mysql_fetch_assoc ($rs))
{
$color = ($color== ""?"#5b69a6":"") ;
$row ["color"] = $color ;
$row ["mensaje"] = nl2br ($row["mensaje"]) ;
$row ["mensaje"] = parsearTags($row["mensaje"]) ;
mostrartemplate ($template$row) ;
}
require (
'template/classic/footer.html') ;
?>
Esto es todo lo que creo que debo de dejaros, espero que podáis ayudarme.

Muchas gracias de antemano.

Saludos
__________________
Si no te quejas, nunca conseguiras nada, pero si te quejas siempre lo perderás todo.
Una mala acción da fruto a un mal Karma.

Última edición por Distriker; 22/12/2009 a las 18:38
  #2 (permalink)  
Antiguo 22/12/2009, 19:12
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Me dice que complete el formulario cuando ya lo he completado del todo

Asi nomas veo esto (en agregar.php):

Código PHP:
[...]

/** aca estas preguntando si la variable contiene 
  * una cadena vacia adentro (cosa que no esta  
  * del todo bien) para eso esta empty() o isset().
  * Te lo corregi: */

if (empty($autor) or empty($titulo) or empty($mensaje)) {
  echo 
'Complete el formulario' ;

/** ademas si te fijas las lineas que estan fuera 
  * del if, siempre se ejecutan, debido a que no hay un else 
  * Proba asi: */
}else{

$sql "INSERT INTO temas (autor, titulo, mensaje, identificador, fecha, ultimarespuesta) " ;
$sql.= "VALUES ('$autor', '$titulo', '$mensaje', '$identificador', NOW(),NOW())" ;
$rs mysql_query ($sql$conectar) or die("Error al grabar el mensaje: ".mysql_error) ;
$ult_id mysql_insert_id ($conectar) ;

}

[...] 
  #3 (permalink)  
Antiguo 23/12/2009, 05:35
Avatar de Distriker  
Fecha de Ingreso: marzo-2008
Ubicación: Las Palmas De Gran Canarias
Mensajes: 924
Antigüedad: 16 años, 1 mes
Puntos: 23
Respuesta: Me dice que complete el formulario cuando ya lo he completado del todo

Buenas Jackson, vale, no sabía que se podía tener como error esa cadena así, gracias por decirlo. Vale, ahora tengo el empty en vez de las cadenas, vacias, por lo que me quedó así:

Código PHP:
if (empty ($autor) or empty ($titulo) or empty ($mensaje)) {
  echo 
'Complete el formulario' 
Pero tengo un problema, el error continua, sigue diciéndome que rellene todo el formulario, pero una cosa si se solucionó, aunque te mande ese mensaje ya no se graba en la BD, por lo que gracias Jackson, me acabas de resolver un problema, gracias.

Ahora tengo que averiguar por que sigue diciéndome esto cuando ya he rellenado todo y aun así me sigue diciendo eso. Por una vez pensé que iba a ser el iframe que no tenía la variable correcta, pero no, no es el iframe.

Voy a ello

Por cierto, el código entero queda así:

Código PHP:
<?php
require ('configuracion.php') ;
$autor $_POST ["autor"] ;
$titulo $_POST ["titulo"] ;
$mensaje $_POST ["mensaje"] ;
$identificador $_POST ["identificador"] ;

if (empty (
$autor) or empty ($titulo) or empty ($mensaje)) {
  echo 
'Complete el formulario' ;

} else {

$sql "INSERT INTO temas (autor, titulo, mensaje, identificador, fecha, ultimarespuesta) " ;
$sql.= "VALUES ('$autor', '$titulo', '$mensaje', '$identificador', NOW(),NOW())" ;
$rs mysql_query ($sql$conectar) or die("Error al grabar el mensaje: ".mysql_error) ;
$ult_id mysql_insert_id ($conectar) ;
}

if (!empty(
$identificador))
{
$sql "UPDATE foro SET respuestas=respuestas+1, ultimarespuesta=NOW()" ;
$sql.= " WHERE id = '$identificador'" ;
$rs mysql_query ($sql$conectar) ;
Header ("Location: foro.php?id=$identificador#ult_id") ;
exit () ;
}
?>
Saludos
__________________
Si no te quejas, nunca conseguiras nada, pero si te quejas siempre lo perderás todo.
Una mala acción da fruto a un mal Karma.
  #4 (permalink)  
Antiguo 23/12/2009, 14:13
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Me dice que complete el formulario cuando ya lo he completado del todo

Y si te dice eso es porque alguna de las variables esta vacia.... Hace esto:

Código PHP:
<?php 
$autor 
$_POST ["autor"] ; 
$titulo $_POST ["titulo"] ; 
$mensaje $_POST ["mensaje"] ; 
$identificador $_POST ["identificador"] ; 

echo 
$autor."<br />";
echo 
$titulo."<br />";
echo 
$mensaje."<br />";
echo 
$identificador."<br />";

/** si alguna te imprime un valor en blanco
  * seguramente tengas un problema con
  * los nombres de tus cajas de texto */
?>
__________________
HV Studio
Diseño y desarrollo web
  #5 (permalink)  
Antiguo 23/12/2009, 15:12
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Respuesta: Me dice que complete el formulario cuando ya lo he completado del todo

-Despues de abrir el form, abres otro form.
-Estas intentando enviar un iframe como campo del formulario? Hasta donde se no se puede hacer eso.
  #6 (permalink)  
Antiguo 28/12/2009, 17:45
Avatar de Distriker  
Fecha de Ingreso: marzo-2008
Ubicación: Las Palmas De Gran Canarias
Mensajes: 924
Antigüedad: 16 años, 1 mes
Puntos: 23
Respuesta: Me dice que complete el formulario cuando ya lo he completado del todo

Cita:
Iniciado por darkasecas Ver Mensaje
-Despues de abrir el form, abres otro form.
-Estas intentando enviar un iframe como campo del formulario? Hasta donde se no se puede hacer eso.
Lo del form está corregido.

Lo del Iframe, si ya, pero es que hasta donde yo he podido averiguar, tampoco es valido mi editor si le pongo un text-area o un input con el atributo text, por lo que he tenido que dejar el iframe hasta averiguar que diablos podría usar.

¿A alguien se le ocurre algo?

Saludos
__________________
Si no te quejas, nunca conseguiras nada, pero si te quejas siempre lo perderás todo.
Una mala acción da fruto a un mal Karma.
  #7 (permalink)  
Antiguo 28/12/2009, 19:22
Avatar de zaetoner  
Fecha de Ingreso: noviembre-2007
Ubicación: La ciudad de México
Mensajes: 607
Antigüedad: 16 años, 5 meses
Puntos: 30
Respuesta: Me dice que complete el formulario cuando ya lo he completado del todo

Probre tu script localmente y me funciona, creo que deberias revisar que los nombres en tu base de datos coinsidan con los del script
__________________
...
  #8 (permalink)  
Antiguo 29/12/2009, 04:47
Avatar de Distriker  
Fecha de Ingreso: marzo-2008
Ubicación: Las Palmas De Gran Canarias
Mensajes: 924
Antigüedad: 16 años, 1 mes
Puntos: 23
Respuesta: Me dice que complete el formulario cuando ya lo he completado del todo

¿Te funciona enviando datos con el iframe o con el text-area?

¿Te manda el mensaje como si todos los campos estubiesen correctos?

Saludos

Edito.

Finalmente se queda con el textarea, pero tengo que buscar algo para que sirva mi script.

El codigo de agregar.php se queda así:

Código PHP:
Ver original
  1. <?php
  2. require ('configuracion.php') ;
  3. $autor = $_POST ["autor"] ;
  4. $titulo = $_POST ["titulo"] ;
  5. $mensaje = $_POST ["mensaje"] ;
  6. $identificador = $_POST ["identificador"] ;
  7.  
  8. if (empty ($autor) or empty ($titulo) or empty ($mensaje)) {
  9.   echo 'Complete el formulario' ;
  10.  
  11. } else {
  12.  
  13. $sql = "INSERT INTO temas (autor, titulo, mensaje, identificador, fecha, ultimarespuesta) " ;
  14. $sql.= "VALUES ('$autor', '$titulo', '$mensaje', '$identificador', NOW(),NOW())" ;
  15. $rs = mysql_query ($sql, $conectar) or die("Error al grabar el mensaje: ".mysql_error) ;
  16. $ult_id = mysql_insert_id ($conectar) ;
  17. }
  18.  
  19. if (!empty($identificador))
  20. {
  21. $sql = "UPDATE foro SET respuestas=respuestas+1, ultimarespuesta=NOW()" ;
  22. $sql.= " WHERE id = '$identificador'" ;
  23. $rs = mysql_query ($sql, $conectar) ;
  24. Header ("Location: foro.php?id=$identificador#ult_id") ;
  25. exit () ;
  26. }
  27. ?>

Saludos
__________________
Si no te quejas, nunca conseguiras nada, pero si te quejas siempre lo perderás todo.
Una mala acción da fruto a un mal Karma.

Última edición por Distriker; 29/12/2009 a las 05:02
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 11:21.