Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con acentos al almacenar en mysql

Estas en el tema de Problema con acentos al almacenar en mysql en el foro de PHP en Foros del Web. Hola, En primer lugar aprovecho para saludar, acabo de registrarme después de haber estado mucho tiempo haciendo consultas en este foro tan bueno. En segundo ...
  #1 (permalink)  
Antiguo 07/11/2014, 05:42
Avatar de ann_eav  
Fecha de Ingreso: noviembre-2014
Ubicación: Madrid
Mensajes: 9
Antigüedad: 10 años
Puntos: 0
Problema con acentos al almacenar en mysql

Hola,

En primer lugar aprovecho para saludar, acabo de registrarme después de haber estado mucho tiempo haciendo consultas en este foro tan bueno.

En segundo lugar, quisiera pedir perdón de antemano si lo que voy a preguntar ya esta resuelto, no quiero que nadie se ofenda, he usado el buscador y, tras no encontrar exactamente un problema como el mío (o a mi parecer no parecía algo similar) me he registrado para crear este tema.

Estoy haciendo un trabajo para la universidad en el que tengo que crear un formulario. Usando php y bases de datos, tengo que validar los campos y a continuación insertarlos en mi base de datos, en una tabla creada para el formulario.

Mi problema es que no consigo que se codifiquen correctamente los datos en mi base.

Soy muy novata todavía en esto, y cuando creé la tabla en mi base de datos, no toqué nada en el tipo de cotejamiento. Por defecto me salio:

latin1_swedish_ci

Con esto mis tildes se guardaban bien, al consultar los datos desde mysql de xampp aparecen bien. Al printarlos en mi web sin embargo, aparecían símbolos con interrogación donde las tildes.

Mi profesor me sugirió que cambiase el cotejamiento de todos los campos a:

utf8_general_ci

Y que al printarlos, metiese la variable en: utf8_encode()

El usar esa etiqueta funcionó para solucionar los simbolos de interrogación que salían al printar los campos de cuando el cotejamiento era latin1_swedish_ci. Pero ahora que está cambiado ya no se almacenan bien los datos. Aparecen cosas como:

RodrÃ*guez en vez de Rodríguez

máx. en vez de máx.

Y claro, si en mi base de datos están almacenados así, a parte de que no creo que sea la solución adecuada, tampoco se printan bien al llamarlos.

Podríais aconsejarme que hacer? Creeis que debo volver a cotejar todos los campos con latin1_swedish_ci y usar la función de utf8_encode() ???

Tengo que dejar el standar que me ha dicho mi profe y mandar los datos con la función utf8_decode??


Doy las gracias a todos de antemano, creo que lo he explicado todo muy largo pero quería dejarlo muy claro. Vuelvo a pedir disculpas si mi pregunta es una tontería o ha sido respondida y no la he encontrado.

Un saludo.
  #2 (permalink)  
Antiguo 07/11/2014, 05:53
 
Fecha de Ingreso: octubre-2014
Ubicación: Buenos Aires
Mensajes: 278
Antigüedad: 10 años, 1 mes
Puntos: 12
Respuesta: Problema con acentos al almacenar en mysql

Hola ann_eav, yo utilizo en mis tablas el cotejamiento utf8_spanish_ci para guardar los datos con acentos y ñ, y para mostrarlos correctamente pongo esta linea de código.

Código HTML:
Ver original
  1. <meta charset="UTF-8" />

En las etiquetas <head> </head> y me muestra bien los acentos las ñ.

Con esto no tengo que utilizar el utf8_encode().

Espero te sea de ayuda.

Saludos.
__________________
http://www.sp-vision.net
  #3 (permalink)  
Antiguo 07/11/2014, 06:11
Avatar de ann_eav  
Fecha de Ingreso: noviembre-2014
Ubicación: Madrid
Mensajes: 9
Antigüedad: 10 años
Puntos: 0
Respuesta: Problema con acentos al almacenar en mysql

Hola, gracias por contestar tan rápidamente.

He cambiado todos los campos a utf8_spanish_ci.
He borrado los registros que presentaban estos fallos y los he vuelto a añadir. La etiqueta de head siempre la tengo en mis html.

El error sigue igual =/
  #4 (permalink)  
Antiguo 07/11/2014, 06:36
 
Fecha de Ingreso: octubre-2014
Ubicación: Buenos Aires
Mensajes: 278
Antigüedad: 10 años, 1 mes
Puntos: 12
Respuesta: Problema con acentos al almacenar en mysql

De nada ann_eav, podrías pegar tu código tanto html como php para ver si podemos encontrar el problema.

Saludos.
__________________
http://www.sp-vision.net
  #5 (permalink)  
Antiguo 07/11/2014, 13:03
Avatar de ann_eav  
Fecha de Ingreso: noviembre-2014
Ubicación: Madrid
Mensajes: 9
Antigüedad: 10 años
Puntos: 0
Respuesta: Problema con acentos al almacenar en mysql

Pues he hecho una pagina web entera peor bueno, voy a pegaros el trozo del formulario y de su procesamiento para insertarse:

Por un lado la parte del formulario:

Código:
<form action="check-form.php" method="post" id="formulario_form">

			<h1>Rellena todos los campos para participar en el sorteo</h1>

			<br /><br />
			<label for="name">Nombre:</label>
			<br/>
			<input type="text" name="name" class="name"placeholder="3-11 caracteres"/>
			<br />
			<label for="surname">Apellidos: </label>
			<br/>
			<input type="text" name="surname" required="required" maxlength="30" minlength="3" placeholder="3-30 caracteres" class="surname"/>
			<br />
			
			<label>Fecha de nacimiento:</label>
			<br/>
			<input type="text" placeholder="DD" name="day" required="required" id="day" size="2"/>
			/
			<input type="text" placeholder="MM" name="month" required="required" id="month" size="2"/>
			/
			<input type="text" placeholder="YYYY" name="year" required="required" id="year" size="4"/>
			<br />

			<label for="email">E-mail:</label>
			<br/>
			<input type="email" name="email" placeholder="[email protected]" required="required" class="email"/>
			<br />

			<label for="password">Contraseña:</label>
			<br/>
			<input type="password" name="password" required="required" maxlength="12" placeholder="6-12 caracteres" minlength="6" class="password"/>
			<br />
			<label for="rpassword">Repite la contraseña:</label>
			<input type="password"name="rpassword" required="required" maxlength="12" minlength="6" class="rpassword"/>
			<br />

			<label for="favourite">Elige tu técnica favorita:</label>
			<br/>
			<select name="favourite">    
				<option value="">Selecciona una técnica</option>    
				<option value="Punto">Punto</option>    
				<option value="Ganchillo">Ganchillo</option>     
			</select>
			<br />

			<label>¿Por qué has elegido esta técnica?:</label>
			<br/>
			<textarea name="description" required="required" class="description" id="">100 caracteres máx.</textarea>
			<br />

			<label for="color">Elige el color de tu kit:</label>
			<br />
			Tonos azules:<input type="radio" name="color" value="azul" required="required" />
			Tonos rojos:<input type="radio" name="color" value="rojo" required="required" />
			<br/>
			Tonos verdes:<input type="radio" name="color" value="verde" required="required" />
			Tonos grises:<input type="radio" name="color" value="gris" required="required" />
			<br /><br />

			<input type="submit" value="Enviar" />

			</form>

Y por otro lado la parte de comunicación con la base de datos:

Código:
// --- PASO 3: CONECTANDO CON LA BASE DE DATOS --- \\

	// --- CONECTAMOS CON NUESTRO USER --- \\
	$conection= mysql_connect("localhost", "root", "");
	if (!$conection) 
	{
		die("No se ha podido conectar a la base de datos:".mysql_error());
	}
	// --- SELECCIONAMOS LA BASE DE DATOS --- \\
	mysql_select_db("practica1", $conection);

	// --- ANTES DE INSERTAR LOS DATOS !!!! --- \\

	// Hacemos una última comprobación, comprobamos que el email no ha sido registrado \\

	$data= mysql_query("SELECT * FROM Concurso WHERE Email='$email'");

	$dataBd = mysql_fetch_array($data);

	if( $email == $dataBd['Email'])
	{
		include("inc/header.php");
	
		?> 

		<div class="fila bg_data">
		<div class="errores">

			<img class="img_error" src="imagenes/error.jpg">
					
			<div class="centrado">
				<p> <?php print "El email introducido ya está registrado, Puedes iniciar sesión en el panel Log-in"; ?> <br/>
				<br/></p>

			</div>
		</div>
		</body>
		<?php
		include("inc/footer.php");			
	}
	else
	{
		// --- INSERTAMOS LOS DATOS EN LA TABLA --- \\

		$insert= mysql_query("INSERT INTO Concurso (Nombre, Apellidos, birth, Email, Password, Tecnica, Descripcion, Color)
		VALUES ( '$name', '$surname', '$formatDate', '$email', '$password', '$select', '$description', '$color')");
  #6 (permalink)  
Antiguo 07/11/2014, 13:20
 
Fecha de Ingreso: octubre-2014
Ubicación: Buenos Aires
Mensajes: 278
Antigüedad: 10 años, 1 mes
Puntos: 12
Respuesta: Problema con acentos al almacenar en mysql

Hola ann_eav estuve haciendo unas pruebas y me inserta con acentos y ñ de la siguiente manera.

Realice las pruebas con cotejamiento utf8_spanish_ci

código php de ejemplo
Código PHP:
Ver original
  1. <?php
  2. define('DB_SERVER', 'localhost');
  3. define('DB_SERVER_USERNAME', 'root'); //Edita tu usuario
  4. define('DB_SERVER_PASSWORD', ''); //Edita tu contraseña
  5. define('DB_DATABASE', 'test'); //Edita tu bd
  6.  
  7. $conexion = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD);
  8. mysql_select_db(DB_DATABASE, $conexion);
  9.  
  10. $nombre = "ñandú";
  11. $login = "a continuación";
  12. $pass = "canción";
  13.  
  14. header('Content-Type: text/html; charset=iso-8859-1');
  15. //header('Content-Type: text/html; charset=utf-8');
  16.  
  17. $sql = "insert into usuarios (nombre, login, pass) values ('".utf8_decode($nombre)."', '".utf8_decode($login)."', '".utf8_decode($pass)."')";
  18. print $sql;
  19. $res = mysql_query($sql);
  20. ?>

Resultado tabla "usuarios" phpmyadmin (datos de ejemplos)

id usuario login
1 | ñandú | a continuación
2 | canción | corazón


Espero te sea de utilidad.

Saludos.
__________________
http://www.sp-vision.net

Última edición por mauritosuarez; 07/11/2014 a las 14:11
  #7 (permalink)  
Antiguo 07/11/2014, 21:14
Avatar de ann_eav  
Fecha de Ingreso: noviembre-2014
Ubicación: Madrid
Mensajes: 9
Antigüedad: 10 años
Puntos: 0
Respuesta: Problema con acentos al almacenar en mysql

Gracias!!! no tuve que cambiar el charset del head, pero lo demás me ayudó a mandar todo bien e incluso a resolver unas dudas que tenía en cuanto a las comillas y php+mysql.

Muchisimas gracias!!! de verdad

Etiquetas: cotejamiento, mysql, tildes
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 12:40.