Autor Tema: Problema con código para editar noticias  (Leído 626 veces)

Desconectado Znet

  • PHPer@
  • **
  • Mensajes: 56
  • Karma: 2
  • Sexo: Masculino
    • Ver Perfil
Problema con código para editar noticias
« en: 12 de Septiembre de 2009, 13:48:56 pm »
Buenas phperos  :)

Escribo este tema porque tengo un problemilla con un código que creé para editar noticias que están almacenadas en la bd. El código es el siguiente:


<?php
//conectamos con la db
include(&#39;acceso.php&#39;);
mysql_connect($db_host$user$db_pass);
mysql_select_db($db);
//obtenemos las datos del formulario
$id_noticia=$_GET[&#39;id_noticia&#39;];
$titulo=$_POST[&#39;titulo&#39;];
$encabezado=$_POST[&#39;encabezado&#39;];
$texto=$_POST[&#39;texto&#39;];
//comprobamos que se ha enviado el formulario
if(isset($_POST[&#39;enviar_noticia&#39;])){
//comprobamos que no haya campos vacíos
if(empty($titulo) or empty($encabezado) or empty($texto)){
echo 
"Debe completar todos los campos para publicar la noticia";
} else {
//comprobamos ahora que se han introducido un mínimo de caracteres en la noticia (en cada uno de sus campos);
if(strlen($titulo) <10 or strlen($encabezado) <10 or strlen($texto) < 10){
echo 
"La noticia debe contener más contenido, no puedes postear algo tan breve";
} else {
//todo correcto, procedemos a la introducción de los valores en la bd
$noticia="UPDATE noticias SET titulo=&#39;$titulo&#39;,encabezado=&#39;$encabezado&#39;,texto=&#39;$texto&#39; WHERE noticias.id_noticia=&#39;$id_noticia&#39;";
$insertar=mysql_query($noticia);
if(!
$insertar){
echo 
"Hubo un error al modificar la noticia";
} else {
echo 
"La noticia ha sido modificada correctamente";
}
}
}

$editar="SELECT titulo, encabezado, texto FROM noticias WHERE id_noticia=&#39;$id_noticia&#39;";
$editar_noticia=mysql_query($editar);
$row2=mysql_fetch_array($editar_noticia);
echo &
#39;<form id="form1" name="form1" method="post" action="&#39;.htmlentities($_SERVER[&#39;PHP_SELF&#39;]).&#39;">
<table width="480" border="0">
<
tr>
<
td scope="col"><div align="left" class="Estilo3">T&iacute;tulo de la noticia: </div></td>
</
tr>
<
tr>
<
td><input name="titulo" type="text" size="60" value="&#39;.$row2[&#39;titulo&#39;].&#39;"/></td>
</
tr>
<
tr>
<
td class="Estilo3">Encabezado de la noticia: </td>
</
tr>
<
tr>
<
td><input name="encabezado" type="text" size="60" value="&#39;.$row2[&#39;encabezado&#39;].&#39;"/></td>
</
tr>
<
tr>
<
td class="Estilo3">Texto:</td>
</
tr>
<
tr>
<
td><textarea name="texto" cols="50" rows="15">&#39;.$row2[&#39;texto&#39;].&#39;</textarea></td>
</tr>
<
tr>
<
td><input type="submit" name="enviar_noticia" value="Editar noticia"/>
<
input type="reset" name="Submit" value="Borrar todo" /></td>
</
tr>
</
table>
</
form>&#39;;
?>


bueno como podréis comprobar, obtengo el id de la noticia de la url mediante GET para mostrar mediante mysql_fetch_array el título, encabezado y texto en los campos del formulario (para poder editarla), todo el proceso de validación funciona correctamente.

Sin embargo, al pulsar el botón "enviar_noticia" me sale "Hubo un error al modificar la noticia" y no entiendo por qué, ¿alguien me puede ayudar por favor?

Gracias de antemano ;)
« Última modificación: 12 de Septiembre de 2009, 13:51:25 pm por Znet »

Comunidad PHPeros

Problema con código para editar noticias
« en: 12 de Septiembre de 2009, 13:48:56 pm »

Conectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 165
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Re:Problema con código par editar noticias
« Respuesta #1 en: 12 de Septiembre de 2009, 13:53:00 pm »
Prueba cambiando la sentencia de actualizacion por esta:

Código: [Seleccionar]
$noticia = "UPDATE noticias SET titulo='".$titulo."',encabezado='".$encabezado."',texto='".$texto."' WHERE id_noticia='".$id_noticia."'";
Por favor, leete las Normas


Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Problema con código par editar noticias
« Respuesta #2 en: 12 de Septiembre de 2009, 13:54:43 pm »
Hola,

Esta linea:
$insertar=mysql_query($noticia);
Cámbiala por esta otra:
$insertar=mysql_query($noticia) or die(mysql_error());
Es algo que siempre decimos que se haga porque te dirá el error exacto de tu query.

Pero para empezar, ya te digo que deberías concatenar las distintas strings de la query, en lugar de hacer esto:
mysql_query(" [...] SET titulo='$titulo' [...] ");
Deberías hacerlo así:
mysql_query(" [...] SET titulo='".$titulo."' [...] ");
Y así con todas las demás variables de la query.

Saludos

(Naveda escribió otro mensaje unos segundos antes que yo, pero te dejo este post también por si te sirve de ayuda)
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Znet

  • PHPer@
  • **
  • Mensajes: 56
  • Karma: 2
  • Sexo: Masculino
    • Ver Perfil
Re:Problema con código para editar noticias
« Respuesta #3 en: 12 de Septiembre de 2009, 14:22:24 pm »
Gracias por la ayuda, pero ahora me dice algo aún más extraño, me dice que "la noticia ha sido modificada correctamente" pero en la base de datos no ha cambiado absolutamente nada, sigue igual que antes.

Desconectado Masato

  • PHPero Avanzado
  • ****
  • Mensajes: 480
  • Karma: 12
  • Sexo: Masculino
  • <?php echo "Solo quiero aprender php"; ?>
    • Ver Perfil
    • Masato Design!
Re:Problema con código para editar noticias
« Respuesta #4 en: 12 de Septiembre de 2009, 20:20:20 pm »
Hemm...no tendrías que definir:

$id_noticia=$_GET['id_noticia'];
$titulo=$_POST['titulo'];
$encabezado=$_POST['encabezado'];
$texto=$_POST['texto'];

después de hacer el if(isset...??

Conectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 165
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Re:Problema con código para editar noticias
« Respuesta #5 en: 13 de Septiembre de 2009, 15:47:19 pm »
De entrada no solo "debería" definirlo antes de comprobar que las variables existan, es que no tendría ni que redefinir las variables porque no hace nada con ellas mas que usarlas...

Si me dices que le pasa una funcion, sería comprensible, pero como en este caso, hacerlo es una perdida de tiempo y lineas de codigo...
Por favor, leete las Normas


Desconectado Znet

  • PHPer@
  • **
  • Mensajes: 56
  • Karma: 2
  • Sexo: Masculino
    • Ver Perfil
Re:Problema con código para editar noticias
« Respuesta #6 en: 14 de Septiembre de 2009, 00:07:45 am »
Hemm...no tendrías que definir:

$id_noticia=$_GET['id_noticia'];
$titulo=$_POST['titulo'];
$encabezado=$_POST['encabezado'];
$texto=$_POST['texto'];

después de hacer el if(isset...??

Masato si hago eso, luego al ver los campos de texto no aparecerían ni el título de la noticia ni el encabezado ni el texto, si te fijas al final, en el formulario pongo como valor de los campos título, encabezado y texto $row['título_encabezado_o_texto'].

Además si defino las variables más simplificadas antes de iniciar cualquier condicionante, quedan definidas para todo el documento.

Conectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 165
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Re:Problema con código para editar noticias
« Respuesta #7 en: 14 de Septiembre de 2009, 00:16:32 am »
Además si defino las variables más simplificadas antes de iniciar cualquier condicionante, quedan definidas para todo el documento.

¿Me dices que si no haces $variable = $_POST['variable'], despues no va a estar definida?
En mi opinion, y digo en mi opinion, no es necesario que por cada variable enviada tengas que redefinirla... Con usarla tal como te llega en $_POST, $_GET, etc... te sirve perfectamente.

Pero claro, luego cada uno hace lo que le brota, dicho finamente :)
Por favor, leete las Normas


Desconectado Znet

  • PHPer@
  • **
  • Mensajes: 56
  • Karma: 2
  • Sexo: Masculino
    • Ver Perfil
Re:Problema con código para editar noticias
« Respuesta #8 en: 14 de Septiembre de 2009, 01:41:32 am »
Ohh siiiii :D

Después de muchos quebraderos de cabeza y repasar y repasar el código, aplicar vuestros consejos etc, por fin encontré la respuesta al problema. Fijaos en el "action" del formulario en mi primer post:
echo &#39;<form id="form1" name="form1" method="post" [b]action="&#39;.htmlentities($_SERVER[&#39;PHP_SELF&#39;]).&#39;">[/b]


Si hago eso, el archivo de acción es el documento 'enviar_noticia.php', y no "enviar_noticia.php?id_noticia='.$_GET['id_noticia'].'" (que es lo correcto) por tanto el documento no obtiene el id mediante $_GET y la consulta sql para hacer el UPDATE nunca daba resultado, a pesar de decir todo el rato que se ha modificado la noticia correctamente :)

Bueno muchas gracias a todos por vuestra ayuda y vuestros consejos (que estoy empezando a aplicar)

Por cierto naveda yo no me referia a que si no hago $variable = $_POST['variable'] despues no va a estar definida, me expresé mal, en realidad queria decir que tenían nombres más sencillos a la hora de aplicarlos en consultas, funciones etc, aunque por culpa de eso, no me iva, ya que en el documento de acción no podría obtener el id, pues este no estaba definido en el nombre de la url, al final puse todas las variales como me dijistes (todo el rato con el $_POST/GET['variable'] ) y en parte eso fue lo que me hizo localizar el error, así que muchas gracias.

Un saludo ;)
« Última modificación: 14 de Septiembre de 2009, 01:43:40 am por Znet »