Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con consulta SQL

Estas en el tema de Problema con consulta SQL en el foro de PHP en Foros del Web. Buenas recurro nuevamente al foro, resulta que tuve problema con mi servidor, y me respondieron que el problema es que tengo que revisar el SQL ...
  #1 (permalink)  
Antiguo 14/04/2014, 17:25
 
Fecha de Ingreso: junio-2012
Mensajes: 30
Antigüedad: 11 años, 10 meses
Puntos: 0
Problema con consulta SQL

Buenas recurro nuevamente al foro, resulta que tuve problema con mi servidor, y me respondieron que el problema es que tengo que revisar el SQL porque hay errores de sintaxis, la pagina es de noticia y a la hora de querer editar la noticia me sale un error que es el siguiente:

Código SQL:
Ver original
  1. UPDATE noticia SET categoria_id='5', subcategoria='', titulo='"El Teatro Provincial es un museo"', subtitulo='La presidenta de la Fundación Parnassos.', detalle='Sostuvo que un teatro".', foto= '', fuente= 'Nuevo Diario de Salta' WHERE id=Error: You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near '' at line 9

Este es el archivo que hace que se modifique la noticia:

Código SQL:
Ver original
  1. <?php
  2. //print_r($_POST);
  3. require_once("../conexion/conexion.php");
  4. $sql="update noticia
  5. set categoria_id='".$_POST["categoria_id"]."',
  6. subcategoria='".$_POST["subcategoria"]."',
  7. titulo='".$_POST["titulo"]."',
  8. subtitulo='".$_POST["subtitulo"]."',
  9. detalle='".$_POST["detalle"]."',
  10. foto= '".$_POST["foto"]."',
  11. fuente= '".$_POST["fuente"]."'
  12. where id=$id";
  13.  
  14. echo $sql;
  15.  
  16. $res=mysql_query($sql,$con) OR die("Error: ".mysql_error());
  17.  
  18. IF($res)
  19.     {echo "<script type=''>
  20.    alert('Los datos de la noticia fueron modificados correctamente');
  21.    window.location='administrador-noticias.php';
  22.    </script>";  
  23. }
  24. ?>

Agradecería su ayuda, ya que como soy nuevo en esto de programación y bases de datos no le encuentro el error, ya que cuando lo estaba probando localmente funcionaba correctamente. Desde ya muchas gracias.
  #2 (permalink)  
Antiguo 14/04/2014, 17:44
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 6 meses
Puntos: 38
Respuesta: Problema con consulta SQL

Hola creo que el problema son los caracteres especiales...
alhomejor tienes algún string en base de datos "problematico".. y te rompe la consulta sql ...

prueba con esto en todos los campos de la var $sql colocales : htmlentities(string)
así :
Código php:
Ver original
  1. subcategoria='".htmlentities($_POST["subcategoria"])."',

Saludos!

Última edición por Djoaq; 14/04/2014 a las 17:56
  #3 (permalink)  
Antiguo 14/04/2014, 18:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con consulta SQL

Soluciones y problemas de PHP, son ema del foro de PHP, no de MySQL.

Movido de MySQL a PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 14/04/2014, 19:33
 
Fecha de Ingreso: junio-2012
Mensajes: 30
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problema con consulta SQL

Gracias por contestar Djoaq, no me sigue dando problema he probado como me dijiste poniendo

Código PHP:
Ver original
  1. subcategoria='".htmlentities($_POST["subcategoria"])."',

También he probado poniendo

Código PHP:
Ver original
  1. ".$id."

Y nada me sigue dando error, pongo la consulta que la que recupera los datos de la base de datos:

Código PHP:
Ver original
  1. require_once("../conexion/conexion.php");
  2. <?php
  3. $sql="select * from noticia where id=".$_GET["id"]."";
  4. $res=mysql_query($sql,$con);
  5. if ($registro=mysql_fetch_array($res))
  6. {
  7. ?>        <form name="frmimage" id="frmimage" method="post"
  8. enctype="multipart/form-data" action="editnoticia.php?id=<?php echo $registro["id"];?>">
  9. <p>Categoria:<br>
  10. <?php
  11.       $sql="select * from categoria";
  12.       $res=mysql_query($sql,$con);
  13.       ?>
  14. <select name="categoria_id" id="categoria_id">
  15. <option value="0" >Selecciones una Categoría</option>
  16.       <?php
  17.       while ($reg=mysql_fetch_array($res))
  18.       {
  19.       ?>
  20.       <option value="<?php echo $reg["categoria_id"];?>"><?php echo $reg["categoria_nombre"];?></option>
  21.       <?php
  22.       }
  23.       ?>
  24.       </select>
  25.       <p>Sub-Categoria:</p>
  26.       <?php
  27.       $sql="select * from subcategoria";
  28.       $res=mysql_query($sql,$con);
  29.       ?>
  30.       <select name="subcategoria_id" id="subcategoria_id">
  31.       <option value="0">Selecciones una Sub-categoría</option>
  32.       <?php
  33.       while ($reg=mysql_fetch_array($res))
  34.       {
  35.       ?>
  36.       <option value="<?php echo $reg["subcategoria_id"];?>"><?php echo $reg["subcategoria_nombre"];?></option>
  37.       <?php
  38.       }
  39.       ?>
  40.       </select>
  41. <p>Titulo<br />
  42. <textarea name="titulo" id="titulo" cols="100" rows="1" tabindex="4"><?php echo $registro["titulo"]?>
  43. </textarea>
  44. </p>
  45. <p> Subtitulo<br />
  46. <textarea name="subtitulo" id="subtitulo" cols="100" rows="5" tabindex="4"><?php echo $registro["subtitulo"]?></textarea>
  47. </p>
  48. <p> Detalle<br />
  49. <textarea name="detalle" id="detalle" cols="60" rows="10" tabindex="4" ><?php echo $registro["detalle"]?></textarea>
  50. <?php
  51. include("../ckeditor/ckeditor.php");
  52. $CKEditor = new CKEditor();
  53. $CKEditor->basePath = 'ckeditor/';
  54. $config['toolbar'] = "Full";
  55. /*$initialValue = mysql_query("SELECT descripcion FROM cotizador") or die ("Error en la consulta");*/
  56. $CKEditor->replace("detalle");
  57. ?><br>
  58. <script type="text/javascript">
  59. CKEDITOR.config.width = 830
  60. </script>
  61. </p>
  62. <?php echo "<img src=Images_bd.php?id=$registro[id]&tam=2 class=alignleft width=95 height=75 >";?>
  63. <p>
  64. Seleciones una imagen<br>
  65. <input name="foto" type="file" class="text" id="foto" />
  66. </p>
  67. <p>Fuente de la Noticia<br />
  68. <input name="fuente" type="text" class="text" id="fuente" value="<?php echo $registro["fuente"]?>" />
  69. </p>
  70.  
  71. <input name="modificar" type="submit" id="modificar" value="Modificar" />
  72.         </form>
  73.        <?php
  74.         }
  75.         ?>

Y esta es la base de datos

Código PHP:
Ver original
  1. CREATE TABLE `noticia` (
  2.   `id` int(1) NOT NULL auto_increment,
  3.   `titulo` varchar(255) NOT NULL default '',
  4.   `subtitulo` text NOT NULL,
  5.   `detalle` text NOT NULL,
  6.   `fuente` varchar(255) NOT NULL default '',
  7.   `categoria_id` int(1) NOT NULL,
  8.   `subcategoria` varchar(140) NOT NULL default '',
  9.   `foto` varchar(140) NOT NULL default '',
  10.   `fecha` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  11.   PRIMARY KEY  (`id`)
  12. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ;

Muchas gracias por la ayuda y la sugerencia
  #5 (permalink)  
Antiguo 15/04/2014, 08:36
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 6 meses
Puntos: 38
Respuesta: Problema con consulta SQL

Hola , te comente que pusieras :
Código PHP:
Ver original
  1. subcategoria='".htmlentities($_POST["subcategoria"])."',

en todos los campos que recibes desde el formulario ...

Necesito ... la consulta exacta que te falla ... y donde la ejecutas en el php.

Te explico , a veces cuando recuperas texto desde una bd de datos y esta lleva un carácter encomillado ... o de escape por ejemplo puede ser que te rompa el fujo de datos ... por ejemplo :

Código MySQL:
Ver original
  1. SELECT dato from tabla where articulo = '$noticia' ;

si
Código PHP:
$noticia 'las song's de los 40
el resultado de la consulta será =
Código MySQL:
Ver original
  1. select dato from tabla where articulo = 'las song's de los 40'

Y como ves .. la consulta se rompe ... y te producirá error...

Para ello se me ocurre:
1-que recojas todos tus peticiones post o get y los trates con
Código PHP:
Ver original
  1. mysql_real_escape_string($_GET("valor"))
antes de hacer ningún insert!
para limpiar todos las comillas ANTES de pasar la consulta.
con lo que la variable que introducira será : las song's de los 40
se convertira en las song/'s de los 40 con lo que agregando la barra invertida (/) antes de la comilla simple mysql la reconocera como parte del valor de cadena y se debería insertar correctamente.

2 para pasar valores get ... es probable que estés incluyendo algún carácter tipo # o tipo ? y eso se lo estas pasando al mysql ... asi que ahí deberías usar htmlentities($_GET["valor"]);
  #6 (permalink)  
Antiguo 15/04/2014, 08:47
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 10 años
Puntos: 10
Respuesta: Problema con consulta SQL

Lo mejor seria si nos dices el error mysql

En tus mysql_query pon esto:

mysql_query("lo que sea") or die(mysql_error());

@djoaq: (\ para escapar) :)

EDIT: Perdoooon no vi que lo tenias puesto. Y no te devuelve ningun texto de error??
EDIT2: vale, ya vi el mensaje de error en la primera linea, estoy ciego hoy T.T

Haz lo que dije djoaq, escapa todas las variables con mysql_real_escape_string()
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos
  #7 (permalink)  
Antiguo 16/04/2014, 14:16
 
Fecha de Ingreso: junio-2012
Mensajes: 30
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problema con consulta SQL

Donde tendría que poner la consulta:

Código PHP:
Ver original
  1. mysql_real_escape_string($_GET("valor"))

Al principio de la consulta que quedaría así solo que en vez de poner el valor GET, tendría que poner el valor POST:

Código PHP:
Ver original
  1. <?php
  2. //print_r($_POST);
  3. require_once("../conexion/conexion.php");
  4. mysql_real_escape_string($_POST("valor"))
  5. $sql="update noticia
  6. set categoria_id='".$_POST["categoria_id"]."',
  7. subcategoria='".$_POST["subcategoria"]."',
  8. titulo='".$_POST["titulo"]."',
  9. subtitulo='".$_POST["subtitulo"]."',
  10. detalle='".$_POST["detalle"]."',
  11. foto= '".$_POST["foto"]."',
  12. fuente= '".$_POST["fuente"]."'
  13. where id=$id";
  14.  
  15. echo $sql;
  16.  
  17. $res=mysql_query($sql,$con) OR die("Error: ".mysql_error());
  18.  
  19. IF($res)
  20.     {echo "<script type=''>
  21.    alert('Los datos de la noticia fueron modificados correctamente');
  22.    window.location='administrador-noticias.php';
  23.    </script>";  
  24. }
  25. ?>

Y que significa el "valor", ahí tendría que poner el id de la noticia, disculpen pero soy nuevo y no entiendo muy bien, desde ya muchas gracias por sus ayuda.
  #8 (permalink)  
Antiguo 16/04/2014, 17:02
 
Fecha de Ingreso: junio-2012
Mensajes: 30
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problema con consulta SQL

Muchas gracias he solucionado el problema, el mismo estaba en que no seleccionaba bien el valor del ID que no estaba llegando bien

Lo tenía de este modo que a nivel local funcionaba correctamente, pero no cuando lo subí al hosting:

Código PHP:
Ver original
  1. where id=$id";

Cuando en realidad lo tenía que poner de este modo.

Código PHP:
Ver original
  1. where id=".$_GET["id"]."";

Muchas gracias a Djoaq, por todas las soluciones que me diste, sinceramente muchas gracias

Etiquetas: 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 20:45.