Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con campo hidden en formulario

Estas en el tema de Problema con campo hidden en formulario en el foro de PHP en Foros del Web. Buenos días, os escribo a ver si alguien me puede echar una mano con un error de programación que no logro corregir. Os cuento. Estoy ...
  #1 (permalink)  
Antiguo 09/07/2013, 08:54
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Pregunta Problema con campo hidden en formulario

Buenos días, os escribo a ver si alguien me puede echar una mano con un error de programación que no logro corregir. Os cuento. Estoy haciendo en una página un apartado de noticias con mysql y php.
Tengo una pagina llamada noticias.php en la que se muestran todas las noticias que hay en la BD. Al clickar sobre una noticia te lleva a la pagina noticia.php con el id de la noticia que estamos clickando. Dentro de esta página hay un sistema de comentarios para esa noticia.

Mi problema es que al entrar en noticia.php le paso el id de la noticia, hasta ahi todo correcto, pero cuando hago un comentario tengo un campo hidden en el que se guarda la id de la noticia. Cuando inserto un comentario en la BD se me inserta todo bien menos el id. Imagino que será porque al venir de una página anterior no lo recoge o algo asi. Os paso el codigo php a ver si me podéis decir algo:

Este es el insert que hago ala BD para el comentario:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) {
$insertSQL = sprintf("INSERT INTO tblcomentarios (nombre, correo, telefono, mensaje, fecha, hora, idnoticia) VALUES (%s, %s, %s, %s, NOW(), CURRENT_TIME(), %s)",
GetSQLValueString($_POST['nombre'], "text"),
GetSQLValueString($_POST['correo'], "text"),
GetSQLValueString($_POST['telefono'], "text"),
GetSQLValueString($_POST['mensaje'], "text"),
GetSQLValueString($_POST['fecha'], "date"),
GetSQLValueString($_POST['hora'], "date"),
GetSQLValueString($_POST['idnoticia'], "int"));


Y en el campo hidden del formulario tengo esto:

input type="hidden" name="idnoticia" value="<?php echo $id_not; ?>"

------- $id_not es igual a $row_Recordset1['id']; que es el id de la noticia que se ha pasado por GET , pero si pongo $row_Recordset1['id']; me hace una entrada NULL.

He solucionado el NULL cambiando el valor del hidden por $id_not y cambiando el parámetro %s que corresponde al INSERT del id oculto por $id_not también. Queda asi---------

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) {
$insertSQL = sprintf("INSERT INTO tblcomentarios (nombre, correo, telefono, mensaje, fecha, hora, idnoticia) VALUES (%s, %s, %s, %s, NOW(), CURRENT_TIME(), '".$id_not."')",
GetSQLValueString($_POST['nombre'], "text"),
GetSQLValueString($_POST['correo'], "text"),
GetSQLValueString($_POST['telefono'], "text"),
GetSQLValueString($_POST['mensaje'], "text"),
GetSQLValueString($_POST['fecha'], "date"),
GetSQLValueString($_POST['hora'], "date"),
GetSQLValueString($_POST['idnoticia'], "int"));

y el hidden-----------

input type="hidden" name="idnoticia" value="<?php echo $id_not; ?>"


El problema es que ahora si me hace una entrada en la BD pero me la hace con valor 0, no me inserta el id de la noticia, con lo que no me muestra el resultado ya que no hay comentarios con id=0.

No se si entenderá bien toda esta explicación, pero la verdad es que me estoy volviendo loco buscando la solucion y no la encuentro. Por favor si alguien me puede ayudar, estaría muy agradecido.

Espero me podáis ayudar y muchas gracias de antemano.
Raúl

Última edición por Triby; 09/07/2013 a las 15:07 Razón: Eliminar dirección de correo.
  #2 (permalink)  
Antiguo 09/07/2013, 08:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con campo hidden en formulario

OFF-TOPIC en Foro MySQL.

Movido a PHP.

@raulgranadosraul: Lee las politicas de uso de FDW. No se permite pedir ni dar respuestas a correos privados. Es un foro público y las respuestas deben ser públicas.
Elimina el mail antes de que los moderadores deban hacerlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 09/07/2013, 15:10
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Problema con campo hidden en formulario

Cita:
Iniciado por raulgranadosraul Ver Mensaje
Buenos días, os escribo a ver si alguien me puede echar una mano con un error de programación que no logro corregir. Os cuento. Estoy haciendo en una página un apartado de noticias con mysql y php.
Tengo una pagina llamada noticias.php en la que se muestran todas las noticias que hay en la BD. Al clickar sobre una noticia te lleva a la pagina noticia.php con el id de la noticia que estamos clickando. Dentro de esta página hay un sistema de comentarios para esa noticia.

Mi problema es que al entrar en noticia.php le paso el id de la noticia, hasta ahi todo correcto, pero cuando hago un comentario tengo un campo hidden en el que se guarda la id de la noticia. Cuando inserto un comentario en la BD se me inserta todo bien menos el id. Imagino que será porque al venir de una página anterior no lo recoge o algo asi. Os paso el codigo php a ver si me podéis decir algo:

Este es el insert que hago ala BD para el comentario:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) {
$insertSQL = sprintf("INSERT INTO tblcomentarios (nombre, correo, telefono, mensaje, fecha, hora, idnoticia) VALUES (%s, %s, %s, %s, NOW(), CURRENT_TIME(), %s)",
GetSQLValueString($_POST['nombre'], "text"),
GetSQLValueString($_POST['correo'], "text"),
GetSQLValueString($_POST['telefono'], "text"),
GetSQLValueString($_POST['mensaje'], "text"),
GetSQLValueString($_POST['fecha'], "date"),
GetSQLValueString($_POST['hora'], "date"),
GetSQLValueString($_POST['idnoticia'], "int"));


Y en el campo hidden del formulario tengo esto:

input type="hidden" name="idnoticia" value="<?php echo $id_not; ?>"

------- $id_not es igual a $row_Recordset1['id']; que es el id de la noticia que se ha pasado por GET , pero si pongo $row_Recordset1['id']; me hace una entrada NULL.

He solucionado el NULL cambiando el valor del hidden por $id_not y cambiando el parámetro %s que corresponde al INSERT del id oculto por $id_not también. Queda asi---------

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) {
$insertSQL = sprintf("INSERT INTO tblcomentarios (nombre, correo, telefono, mensaje, fecha, hora, idnoticia) VALUES (%s, %s, %s, %s, NOW(), CURRENT_TIME(), '".$id_not."')",
GetSQLValueString($_POST['nombre'], "text"),
GetSQLValueString($_POST['correo'], "text"),
GetSQLValueString($_POST['telefono'], "text"),
GetSQLValueString($_POST['mensaje'], "text"),
GetSQLValueString($_POST['fecha'], "date"),
GetSQLValueString($_POST['hora'], "date"),
GetSQLValueString($_POST['idnoticia'], "int"));

y el hidden-----------

input type="hidden" name="idnoticia" value="<?php echo $id_not; ?>"


El problema es que ahora si me hace una entrada en la BD pero me la hace con valor 0, no me inserta el id de la noticia, con lo que no me muestra el resultado ya que no hay comentarios con id=0.

No se si entenderá bien toda esta explicación, pero la verdad es que me estoy volviendo loco buscando la solucion y no la encuentro. Por favor si alguien me puede ayudar, estaría muy agradecido.

Espero me podáis ayudar y muchas gracias de antemano.
Raúl
Borrado el email. Gracias una vez más.
A ver si alguien me puede ayudar con el problema del php.

He estado buscando más información y parece que debería poner un echo en $id_not pero no se donde colocarlo , ya que en el form le tengo puesto el echo pero en el INSERT, en los valores... ¿puede ser ahi?, no se como colocarlo
  #4 (permalink)  
Antiguo 09/07/2013, 15:11
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problema con campo hidden en formulario

Muéstranos cómo armas tu formulario, creo que ahí es donde debe estar el error.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 09/07/2013, 15:14
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Problema con campo hidden en formulario

Cita:
Iniciado por Triby Ver Mensaje
Muéstranos cómo armas tu formulario, creo que ahí es donde debe estar el error.
Esta es la sentencia que declara la variable:

$id_not = $row_Recordset1['id'];

Y el form:

Código PHP:
Ver original
  1. <form name="form" action="<?php echo $editFormAction; ?>" method="POST">
  2.                               <table width="67%" border="0">
  3.                                 <tr>
  4.                                   <td width="17%" height="41" align="right" valign="top" class="celda">Nombre :</td>
  5.                                   <td colspan="3" align="left" valign="top"><span id="sprytextfield1">
  6.                                     <input name="nombre" type="text" class="brillo" id="nombre" size="70" maxlength="40" style="height:20px" />
  7.                                   <span class="textfieldRequiredMsg"><br />Campo obligatorio</span></span></td>
  8.                                 </tr>
  9.                                 <tr>
  10.                                   <td height="41" align="right" valign="top" class="celda">eMail :</td>
  11.                                   <td colspan="3" align="left" valign="top"><span id="sprytextfield2">
  12.                                   <input name="correo" type="text" class="brillo" id="correo" size="70" maxlength="40" style="height:20px" />
  13.                                   <span class="textfieldRequiredMsg"><br />Campo obligatorio</span><span class="textfieldInvalidFormatMsg">Formato no v&aacute;lido</span></span></td>
  14.                                 </tr>
  15.                                 <tr>
  16.                                   <td height="41" align="right" valign="top" class="celda">Tel&eacute;fono :</td>
  17.                                   <td colspan="3" align="left" valign="top">
  18.                                   <input name="telefono" type="text" class="brillo" id="telefono" size="70" maxlength="40" style="height:20px" />
  19.                                   </td>
  20.                                 </tr>
  21.                                 <tr>
  22.                                   <td align="right" valign="top" class="celda">Mensaje :</td>
  23.                                   <td colspan="3" align="left"><span id="sprytextarea1">
  24.                                     <textarea name="mensaje" cols="54" rows="7" class="brillo" id="mensaje"></textarea>
  25.                                   <span class="textareaRequiredMsg"><br />Campo obligatorio</span></span></td>
  26.                                 </tr>
  27.                                 <tr>
  28.                                   <td height="41">&nbsp;</td>
  29.                                   <td width="23%" valign="middle"><span class="celda"><img src="capcha.php" /></span></td>
  30.                                   <td width="24%" align="left" valign="middle">Copia el c&oacute;digo :&nbsp;</td>
  31.                                   <td width="36%" valign="middle"><span id="sprytextfield3">
  32.                                     <input type="text" class="brillo" name="cod" id="cod" size="20" style="height:20px" maxlength="7" />
  33.                                   <span class="textfieldRequiredMsg"><br />Campo obligatorio</span></span></td>
  34.                                 </tr>
  35.                                 <tr>
  36.                                   <td height="41"><input name="fecha" type="hidden" id="hiddenField" value='' />
  37.                                   <input type="hidden" name="idnoticia" value="<?php echo $id_not; ?>" /></td>
  38.                                   <td colspan="3"><input name="submit" type="submit" class="brillo" id="submit" title="Comentar" value="Publicar comentario" style="height:30px; padding-left:5px; padding-right:5px" /></td>
  39.                                 </tr>
  40.                               </table>
  41.                               <input type="hidden" name="MM_insert" value="form" />
  42.                           </form>

La verdad es que llevo tiempo con este error y no encuentro el motivo.

Última edición por Triby; 09/07/2013 a las 16:11 Razón: Highlight
  #6 (permalink)  
Antiguo 09/07/2013, 15:31
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problema con campo hidden en formulario

Ahí donde cambiaste de color el código, a la derecha hay un desplegable que dice "Highlight", es el que debes usar para publicar tu código, ejemplo:

[HIGHLIGHT="PHP"]<?php echo 'Hola!'; ?>[/HIGHLIGHT]

Revisa el código fuente generado en el navegador y verifica que el campo idnoticia tenga el valor que debiera.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 09/07/2013, 15:34
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Problema con campo hidden en formulario

Cita:
Iniciado por Triby Ver Mensaje
Ahí donde cambiaste de color el código, a la derecha hay un desplegable que dice "Highlight", es el que debes usar para publicar tu código, ejemplo:

[HIGHLIGHT="PHP"]<?php echo 'Hola!'; ?>[/HIGHLIGHT]

Revisa el código fuente generado en el navegador y verifica que el campo idnoticia tenga el valor que debiera.
En el código fuente me devuelve el valor de cada noticia correctamente pero el insert me lo hace a 0 siempre, aunque esté en el form el id de la noticia no me hace el INSERT con ese valor. Raro no? Los demás campos me los inserta bien en la base de datos, es solo ese.
  #8 (permalink)  
Antiguo 09/07/2013, 15:39
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problema con campo hidden en formulario

Ok, primero averigua si en $_POST estás recibiendo todo correctamente y lo mismo con la consulta antes de ejecutarla:

Código PHP:
Ver original
  1. // Ver si todo viene bien en post
  2. var_dump($_POST);
  3.  
  4. // Después de crear la consulta con $insertSQL = sprintf(...)
  5. var_dump($insertSQL);

Si tienes alguna duda interpretando esos datos, cópialos y pégalos aquí para ver si sacamos algo en claro.
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 09/07/2013, 16:05
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Problema con campo hidden en formulario

Cita:
Iniciado por Triby Ver Mensaje
Ok, primero averigua si en $_POST estás recibiendo todo correctamente y lo mismo con la consulta antes de ejecutarla:

Código PHP:
Ver original
  1. // Ver si todo viene bien en post
  2. var_dump($_POST);
  3.  
  4. // Después de crear la consulta con $insertSQL = sprintf(...)
  5. var_dump($insertSQL);

Si tienes alguna duda interpretando esos datos, cópialos y pégalos aquí para ver si sacamos algo en claro.
Lo he colocado asi:

Código PHP:
Ver original
  1. var_dump($_POST);
  2. if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form")) {
  3.   $insertSQL = sprintf("INSERT INTO tblcomentarios (nombre, correo, telefono, mensaje, fecha, hora, idnoticia) VALUES (%s, %s, %s, %s, NOW(), CURRENT_TIME(), '". $id_not ."')",
  4.                        GetSQLValueString($_POST['nombre'], "text"),
  5.                        GetSQLValueString($_POST['correo'], "text"),
  6.                        GetSQLValueString($_POST['telefono'], "text"),
  7.                        GetSQLValueString($_POST['mensaje'], "text"),
  8.                        GetSQLValueString($_POST['fecha'], "date"),
  9.                        GetSQLValueString($_POST['hora'], "date"),
  10.                        GetSQLValueString($_POST['idnoticia'], "int"));
  11.                        
  12. // Después de crear la consulta con $insertSQL = sprintf(...)
  13. var_dump($insertSQL);

Al entrar en noticia.php me devuelve array(0) { }


Y al enviar el form me devuelve estos datos:

array(9) { ["nombre"]=> string(4) "pepe" ["correo"]=> string(14) "[email protected]" ["telefono"]=> string(9) "666777888" ["mensaje"]=> string(7) "mensaje" ["cod"]=> string(7) "1234567" ["fecha"]=> string(0) "" ["idnoticia"]=> string(2) "16" ["submit"]=> string(19) "Publicar comentario" ["MM_insert"]=> string(4) "form" } string(171) "INSERT INTO tblcomentarios (nombre, correo, telefono, mensaje, fecha, hora, idnoticia) VALUES ('pepe', '[email protected]', '666777888', 'mensaje', NOW(), CURRENT_TIME(), '')"
Warning: Cannot modify header information - headers already sent by (output started at /home/xxx/public_html/noticia.php:39) in /home/xxx/public_html/noticia.php on line 61

Me dice que hay un error con un header, asi que he solucionando el header y ahora me sigue devolviendo array(0) { } cuando entro en esa noticia y al enviar el comentario también, pero sigue haciendome el insert a 0.

Lo que veo es que me devuelve unas comillas dobles en lugar del id ??? Eso es que no le llega el dato?? (las comillas que estan en azul)
Debo quitar las lineas var_dump para que funcione bien o no tiene nada que ver??

Última edición por raulgranadosraul; 09/07/2013 a las 16:07 Razón: faltaba informacion
  #10 (permalink)  
Antiguo 09/07/2013, 16:19
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Problema con campo hidden en formulario

Las líneas var_dump() son para poder ver lo que tienes y sí, son las causantes del error en el header(), una vez que resuelvas el problema del insert, las eliminas y listo!

Veamos tu consulta:
Código PHP:
Ver original
  1. $insertSQL = sprintf("INSERT INTO tblcomentarios (nombre, correo, telefono, mensaje, fecha, hora, idnoticia) VALUES (%s, %s, %s, %s, NOW(), CURRENT_TIME(), '". $id_not ."')",
  2.                        GetSQLValueString($_POST['nombre'], "text"),  // Primer %s
  3.                        GetSQLValueString($_POST['correo'], "text"),  // segundo %s
  4.                        GetSQLValueString($_POST['telefono'], "text"), // tercer %s
  5.                        GetSQLValueString($_POST['mensaje'], "text"), // cuarto %s
  6.                        GetSQLValueString($_POST['fecha'], "date"),  // No se necesita
  7.                        GetSQLValueString($_POST['hora'], "date"),  // Tampoco se necesita
  8.                        GetSQLValueString($_POST['idnoticia'], "int")); // Deberías tener otro %s
  9.  
  10. // Deberías tener:
  11.   $insertSQL = sprintf("INSERT INTO tblcomentarios (nombre, correo, telefono, mensaje, fecha, hora, idnoticia) VALUES (%s, %s, %s, %s, NOW(), CURRENT_TIME(), %s)",
  12.                        GetSQLValueString($_POST['nombre'], "text"),
  13.                        GetSQLValueString($_POST['correo'], "text"),
  14.                        GetSQLValueString($_POST['telefono'], "text"),
  15.                        GetSQLValueString($_POST['mensaje'], "text"),
  16.                        GetSQLValueString($_POST['idnoticia'], "int"));  // Quinto %s

Como ves, el error original es que estabas poniendo $id_not (variable no definida) directamente en la consulta y no era reemplazada con el contenido de $_POST['idnoticia'].

Deberías leer un poco acerca de la función sprintf() y no usarla a ciegas.
__________________
- León, Guanajuato
- GV-Foto
  #11 (permalink)  
Antiguo 09/07/2013, 16:32
 
Fecha de Ingreso: julio-2013
Mensajes: 174
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Problema con campo hidden en formulario

Cita:
Iniciado por Triby Ver Mensaje
Las líneas var_dump() son para poder ver lo que tienes y sí, son las causantes del error en el header(), una vez que resuelvas el problema del insert, las eliminas y listo!

Veamos tu consulta:
Código PHP:
Ver original
  1. $insertSQL = sprintf("INSERT INTO tblcomentarios (nombre, correo, telefono, mensaje, fecha, hora, idnoticia) VALUES (%s, %s, %s, %s, NOW(), CURRENT_TIME(), '". $id_not ."')",
  2.                        GetSQLValueString($_POST['nombre'], "text"),  // Primer %s
  3.                        GetSQLValueString($_POST['correo'], "text"),  // segundo %s
  4.                        GetSQLValueString($_POST['telefono'], "text"), // tercer %s
  5.                        GetSQLValueString($_POST['mensaje'], "text"), // cuarto %s
  6.                        GetSQLValueString($_POST['fecha'], "date"),  // No se necesita
  7.                        GetSQLValueString($_POST['hora'], "date"),  // Tampoco se necesita
  8.                        GetSQLValueString($_POST['idnoticia'], "int")); // Deberías tener otro %s
  9.  
  10. // Deberías tener:
  11.   $insertSQL = sprintf("INSERT INTO tblcomentarios (nombre, correo, telefono, mensaje, fecha, hora, idnoticia) VALUES (%s, %s, %s, %s, NOW(), CURRENT_TIME(), %s)",
  12.                        GetSQLValueString($_POST['nombre'], "text"),
  13.                        GetSQLValueString($_POST['correo'], "text"),
  14.                        GetSQLValueString($_POST['telefono'], "text"),
  15.                        GetSQLValueString($_POST['mensaje'], "text"),
  16.                        GetSQLValueString($_POST['idnoticia'], "int"));  // Quinto %s

Como ves, el error original es que estabas poniendo $id_not (variable no definida) directamente en la consulta y no era reemplazada con el contenido de $_POST['idnoticia'].

Deberías leer un poco acerca de la función [URL="http://www.php.net/manual/es/function.sprintf.php"]sprintf()[/URL] y no usarla a ciegas.

Muchas, muchas, muchas gracias (me faltarían líneas para darte las gracias, porque llevo con este problema un monton de dias. De veras, gracias.
SOLUCIONADO

Etiquetas: campo, formulario, hidden, insert, mysql, sql
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:58.