Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Skeletron en 11 Marzo 2010, 06:01 am



Título: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 11 Marzo 2010, 06:01 am
Hola gente...
Resulta que hice un sistema de esos para seleccionar un pais, luego una region y luego una localidad de esta region.

La cuestion, es que cuando el usuario selecciona una region, la web recarga y debe aparecer la region que se ha seleccionado, como "SELECTED"
Hago un SELECT a la base de datos, donde traigo el NOMBRE de las regiones, y hago ésto para que aparezca SELECTADA la region seleccionada:

Código
  1. if($row['nombre']==$_SESSION['region']){
  2.    echo '<option selected value="'.$row['nombre'].'">'.$row['nombre'].'</option>';
  3. }else{
  4.    echo '<option value="'.$row['nombre'].'">'.$row['nombre'].'</option>';
  5. }

Como verán, en una variable de sesion, guardo el valor que seleccionó anteriormente..

La cuestion, es que esto funciona PERFECTAMENTE.. Pero para paises, regiones o localidades con acento, NO FUNCIONA..

Prueben entrar aqui: www.bropic.com
Arriaba a la izquierda de la web, le muestra las 3 varibales de session..
Seleccionen Argentina - Córdoba
Y veran que no funciona..
Pero si Seleccionan Argentina - Buenos Aires... Si funciona

Leí por ahí que es un problema del CHARSET de MySQL... es así?


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Spider-Net en 11 Marzo 2010, 08:29 am
Yo como value utilizaría el identificador del país en lugar del nombre para evitarte este tipo de problemas. Y para que se muestre bien el nombre con acentos puedes usar htmlentities. De modo que quedaría algo así:

Código
  1. if($row['nombre']==$_SESSION['region']){
  2.    echo '<option selected value="'.$row['idpais'].'">'.htmlentities($row['nombre']).'</option>';
  3. }else{
  4.    echo '<option value="'.$row['idpais'].'">'.htmlentities($row['nombre']).'</option>';
  5. }
  6.  


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: ^Tifa^ en 11 Marzo 2010, 13:29 pm
Tiene una gran probabilidad de que sea asi  :rolleyes:

Que CHARSET tiene esa tabla donde buscas esa info????  Por lo general lo dejan en utf8

Haz un SHOW CREATE TABLE nombre_tabla;

Que charset tiene????

Puedes cambiarselo por latin1 por ejemplo:

ALTER TABLE nombre_tabla CHARSET = latin1;





Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 11 Marzo 2010, 18:30 pm
El problema parece que no lo explique bien:

En ese codigo que pegué, en la sentencia: $row['nombre']==$_SESSION['region']

la comparacion no funciona bien.
Eso hace que, cuando se seleccione Córdoba, y el mysql_fetch_array devuelve la entrada Cordoba, lo que ahce, es imprimir el "Option" de HTML, pero SELECTADO.. así aparece ese como que fue el ultimo seleccionado.
Se entiende?

Sino, selecciona algun pais, mira que la web se recarga, y al recargarse, mira que aparece seleccionada la que seleccionaste... Eso se ahce con ese algoritmo.

El show create table dice:
CREATE TABLE `regiones` (
 `id` smallint(4) unsigned NOT NULL auto_increment,
 `id_pais` tinyint(3) unsigned NOT NULL default '0',
 `nombre` varchar(150) NOT NULL,
 PRIMARY KEY  (`id`,`id_pais`)
) ENGINE=MyISAM AUTO_INCREMENT=4230 DEFAULT CHARSET=latin1


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: ^Tifa^ en 11 Marzo 2010, 19:02 pm
Ahhh eso es ya otro problemita amigo  :rolleyes:  y no tan relacionado con MySQL como tal (la tabla tiene el charset LATIN por lo que los registros deben tener acentos).

Es mas un problema entre PHP y programacion ;)


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: ~ Yoya ~ en 11 Marzo 2010, 19:21 pm
Bueno, tienes que usar el juego de caracter iso-8859-1, ejemplo:
Código
  1. <?php
  2. header('Content-Type: text/html; charset=iso-8859-1');
  3. ............
  4. ..........
  5. .....
  6. ...
  7. ..
  8. .
  9. ?>
  10.  
O de esta forma:
Código
  1. <?php
  2. header('Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
  3. ');
  4. ...........
  5. .
  6. .
  7. ?>

Recuerda que debes enviarlo al principio del code.

Info:
http://en.wikipedia.org/wiki/List_of_HTTP_headers
http://es.wikipedia.org/wiki/ISO_8859-1



Tambien puedes saber el juego de caracter predeterminado en tu Base de Datos, puedes usar este code que postee en Undersecurity... (http://foro.undersecurity.net/read.php?11,6701)
Código
  1. <?php
  2. //Conexion mysql
  3. $conexion= mysql_connect('localhost','root','pass');
  4. echo "El juego de caracter en la base de dato es: ".mysql_client_encoding($conexion);
  5.  
  6. ?>

Salida:
Código:
El juego de caracter en la base de dato es: latin1

Saludos.


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 12 Marzo 2010, 00:53 am
Yo en el archivo INDEX.php tengo:
header('Content-Type: text/html; charset=UTF-8');

Y desde PHP hago un include a un php llamado: PREFERENCIA.php, donde en él esta éste codigo que da el problema.

Con tener ese HEADER en el index ya es basta?


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: ~ Yoya ~ en 12 Marzo 2010, 00:55 am
Tienes que mandar el juego de caracter iso-8859-1 para que acepte las tildes, las ñ, etc...


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 12 Marzo 2010, 00:58 am
La sentencia que me dijiste que ejecute, dió el siguiente resultado:


El juego de caracter en la base de dato es: latin1


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 12 Marzo 2010, 01:00 am
La solucion de HEADER que me propones, empeora las cosas..
Ahora empieza a mostrar textos así:

elige tu puntuación y verás la proxima


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 12 Marzo 2010, 01:16 am
Tiene una gran probabilidad de que sea asi  :rolleyes:

Que CHARSET tiene esa tabla donde buscas esa info????  Por lo general lo dejan en utf8

Haz un SHOW CREATE TABLE nombre_tabla;

Que charset tiene????

Puedes cambiarselo por latin1 por ejemplo:

ALTER TABLE nombre_tabla CHARSET = latin1;

Latin1 acepta acentos y demas?
Es muy extraño el problema. Me esta trabando todo el proyecto. Y no quiero solucionarlo eliminando los acentos..


Aca les muestro imganes:
Cotejamiento de tablas:
(http://img63.imageshack.us/img63/6829/cotejamientotablas.png)

Cotejamiento general de MySQL:
(http://img535.imageshack.us/img535/3603/cotejamientopredetermin.png)


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 12 Marzo 2010, 01:36 am
Noticia de Ultimo momento:
(perdon por el cuadruple posteo)

Miren ésto:
La palabra Córdoba en PHP aparece perfectamente, pero dentro de la tabla veo que no existe... Solamente el Cordoba sin acento de Venezuela...

Entonces miro las regiones de Argentina, y vean:
(http://img97.imageshack.us/img97/423/datostx.png)

Como puedo hacer para que esos datos aprezcan como deban??
deberia ejecutar una sentencia que convierta los caracteres de esa forma a normales.. Cual es?


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Nakp en 12 Marzo 2010, 02:39 am
la palabra esta coon html entities

Córdoba != C&oacute;rdoba... como la tenes en la bd, vas a tener que arreglar esa tabla a mano o con algun script que pase de htmlentities a caracteres normales


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 12 Marzo 2010, 03:14 am
Que hermoso quilombo entonces.
No hay algun funcion MySQL?

Tendre que buscar la htmlentities inversa entonces


Leí por ahí que es esta:
html_entity_decode()


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 12 Marzo 2010, 03:42 am
Perfecto.
Acabo de modificar todo.. Esta todo listo :)

Ahora, me pregunto:
Porque aparecen los caracteres en PHP con ese triangulito negro con el ? adentro?

Me esta volviendo loco el tema de que los textos anden mal y los textos traidos de la database anden bien!!...


Con que me quedo???? Pongo el HEADER y el META a iso-8859-1??? o a UTF-8?
Luego se supone que tengo que hacer un script que transforme cada entrada de la base de datos a iso-8859-1 o UTF-8 y lo "UPDATEE" en la base de datos?
La base de datos, con LATIN1 o con UTF?


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 12 Marzo 2010, 03:48 am
Bien.. Les comento:

Ahroa con el HEADER en CHARSE=UTF-8
Los textos devueltos de la base de datos, aparecen como: C�rdoba

Y los textos escritos manualmente en PHP, aparecen bien..

SI cambio el HEADER CHARSET=iso-8859-1
Los textos devueltos de la abse de datos aparecen PERFECTOS
Y los textos que escribo manualmente en PHP aparecen así: elige tu puntuación y verás la proxima

Alguna recomendacion :)


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Nakp en 12 Marzo 2010, 05:53 am
cuando los escribiste usabas utf y la tabla en lati1, ahora que usas el header para iso occidental muestras caracteres utf8, o conviertes todos los datos a un solo charset o usa htmlentities antes de mostrarlos (y solo para mostrarlos)

me inclinaria por hacer ambas cosas, arreglar los datos para que los datos utf8 guardadas en una tabla latin1 coincidan

http://www.programacionweb.net/articulos/articulo/?num=494


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 12 Marzo 2010, 07:00 am
En realidad, a la tabla la descargue desde un sitio de internet... Posee """todos""" los paises, regiones y ciudades del mundo.. (obviamente no todos)...

Colocar un HTMLENTITIES me sigue dando problemas, porque la comparacion del IF, seguirá siendo falsa..

NECESITO que todo esté escribo BIEN...
O sea.. que en la base de datos esté bien escrito, y que se interprete bien en el codigo PHP para que al hacer las comparaciones del IF, dé TRUE cuando debe darlo.


Que dices que haga? Que tengo que cambiar en la base de datos para que funcione bien?
La idea es no tener que traspasar el texto que llega de la base de datos a otro charset en PHP, para no ocupar tiempo de calculo en bano, pudiendo corregir los datos de la database.


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Nakp en 12 Marzo 2010, 07:22 am
solamente actualizar.. tambien puedes usar mysql pero yo me siento mas seguro en php jajaja

http://dev.mysql.com/doc/refman/5.1/en/charset-conversion.html
http://dev.mysql.com/doc/refman/5.0/en/charset-convert.html


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 12 Marzo 2010, 07:27 am
Tengo el HEader en UTF-8, y la tabla en latin1.

Traspaso la tabla de latin1 a UTF? cual de todos los UTF-8 que hay en mysql? UTF-8_unicode_ci ??? (es el que aparece como predeterminado)


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Nakp en 12 Marzo 2010, 07:39 am
tienes header en iso-8859-1 y la tabal en iso-8859-1 (latin1) pero algunos datos dentro de la tabla en utf-8... con que concuerden todos funcionara, eso es decision tuya (haz backup antes que nada xD)

tambien fijate que tu meta no concuerda con el header, yo no enviaria header por php y despues declarar el meta xD usa solo una (meta xD)

Código
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />



Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 12 Marzo 2010, 16:40 pm
tienes header en iso-8859-1 y la tabal en iso-8859-1 (latin1) pero algunos datos dentro de la tabla en utf-8... con que concuerden todos funcionara, eso es decision tuya (haz backup antes que nada xD)

tambien fijate que tu meta no concuerda con el header, yo no enviaria header por php y despues declarar el meta xD usa solo una (meta xD)

Código
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />



COmo que la meta no concuerda con el header?
mira:
header('Content-Type: text/html; charset=UTF-8');
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Ufff.. me estoy liando MUY MUCHO!!..

Si o si tengo que pasarlo a UTF 8 a todos los datos, porque el texto de la web si no esta en UTF8, no funciona bien... y eso es lo principal que tiene que funcionar U.u


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: ~ Yoya ~ en 12 Marzo 2010, 19:11 pm
Código
  1. <?php
  2. header('Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
  3. ');
  4. ...........
  5. .
  6. .
  7. ?>


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Nakp en 12 Marzo 2010, 21:00 pm
los datos estan en latin1, el header que estabas mandando era iso y el meta utf8

convierte todo a utf8 XDD


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 12 Marzo 2010, 22:34 pm
Código
  1. <?php
  2. header('Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
  3. ');
  4. ...........
  5. .
  6. .
  7. ?>

Amigo, eso no soluciona nada..


Ahora me pongo a traspasar los datos de la base de datos :)

La tabla MySQL, tengo que ponerla en UTF-8.. pero hay 900 tipos diferentes... con cual me quedo? con el predeterminado?? (utf-8-unicode-ci)??


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 12 Marzo 2010, 22:51 pm
Arregle el problema!!..
Simplemente hay que recorrer toda la tabla con PHP y trasnformar con el ENCODE_UTF.. nada mas

Muchisimas gracias por toda su ayuda!!!


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 12 Marzo 2010, 23:04 pm
En la base de datos aparecen mal los contenidos:
(http://img380.imageshack.us/img380/1328/noel.png)

Pero en la web, funcionan perfectamente


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Nakp en 12 Marzo 2010, 23:11 pm
aparecen mal porque tus tablas siguen siendo latin1... lo solucionaste como te habia dicho hace varios post pero lo ideal es que coincida todo, header, contenido y tablas


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 13 Marzo 2010, 00:30 am
Bueno, pero supongo que no habrá mayores problemas.
Dejo todo así, mientras que funcione bien la web :)

Gracias :)


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Spider-Net en 14 Marzo 2010, 00:42 am
Sigo pensando que la mejor solución para estos casos es usar los identificadores de la tabla en lugar de los nombres para evitar problemas con acentos, eñes.. (lo que te dije en el primer mensaje). Así te ahorrarías todo este lío, pero bueno si ya lo has solucionado así me alegro.


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 14 Marzo 2010, 00:47 am
Claro, y cuando le dices: Selecciona un pais:

Pais: 1, 2 3 4 5 6 7 8 9 hasta el 244
Y que tengan suerte en saber cual es cual  :)


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Spider-Net en 14 Marzo 2010, 01:21 am
Pues no, ya te lo dije en el primer post, en el value del option pones el identificador pero al usuario le muestras el país, es tan sencillo como imprimirlo así:

<option value="idpais">NOMBRE</option>

¿Cuál es el problema ahí?, ninguno.
Estoy harto de hacer este tipo de select y exactamente en las mismas circunstancias, selección de países con acentos, eñes etc y siempre lo he hecho así ;)


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 14 Marzo 2010, 02:18 am
Al value ya lo he cambiado hace mucho
No es mas problema eso.


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Spider-Net en 14 Marzo 2010, 08:19 am
Creo que no has entendido nada de lo que te he explicado en ningún momento, pero bueno si ya conseguiste solucionar tu problema de la forma que sea da lo mismo.

Eso sí, yo me leería un buen manual de php y otro de html para tener bien claros los conceptos básicos, porque creo que no los tienes del todo claro por las respuestas que has dado más que nada...

Un saludo.


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 14 Marzo 2010, 16:17 pm
Creo que no has entendido nada de lo que te he explicado en ningún momento, pero bueno si ya conseguiste solucionar tu problema de la forma que sea da lo mismo.

Eso sí, yo me leería un buen manual de php y otro de html para tener bien claros los conceptos básicos, porque creo que no los tienes del todo claro por las respuestas que has dado más que nada...

Un saludo.
Concuerdo totalmente... Soy muy novato


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 14 Marzo 2010, 17:45 pm
Me acabo de dar cuenta de algo.....

Cuando en el index escribo:
ECHO "AÑO";
No pasa nada extraño..
Pero si en el index hago:
include('xxx.php');
y el xxx.php solamente tiene un:
echo "año";
Esa "Ñ" de xxx.php que se lo llamó desde el include, pierde el UTF8....

Solucion para eso??
Ahora que lo vemos así, el problema estaba ahí.. no en la base de datos o demas


Título: Re: Problema con Acentos en MySQL + PHP
Publicado por: Skeletron en 14 Marzo 2010, 18:05 pm
Saben donde estuvo siempre el problema? en Dreamweaber!!!...
El problema era que Dreamweaber guardaba los archivos en otra codificacion...

DW: Modify > Page Properties > Title / Encoding > Y en el pulldown de encoding pones utf8.