Tecnología y Coaching para Emprendedores

Cómo mostrar correctamente los caracteres en phpmyadmin

ser-profesional-freelance

Hoy he tenido algunas dificultades con la codificación de los caracteres de mi formulario de contacto. El “buenos días” aparecía como “buenos días”. Cuando era un texto largo, parecía estar leyendo en arameo.

Leyendo en diferentes foros he encontrado varios mensajes que decían que la codificación de caracteres en ISO-8859-1 ya estaba en desuso, ¿alguien puede confirmarlo? Yo utilizo utf-8. Lo curioso es que con WordPress no tengo ningún problema con esta codificación, y en el caso de páginas estáticas utilizo los códigos HTML.

Como gestor de mi base de datos de MySQL utilizo phpmyadmin, que hasta el momento me funciona perfectamente. El tema estaba que la codificación la tenía bien definida a utf8_spanish_ci,  pero seguía recibiendo estos textos tan divertidos con signos raros.

La solución es muy sencilla, lo complicado ha sido buscarla. Para que no perdáis tiempo paseándoos por todos los foros de diseño web, he creído útil escribir un artículo para explicarla. Se trata de añadir una línea al código php que gestiona el formulario de contacto. Esta línea se ha de añadir una vez se ha establecido la conexión con la base de datos MySQL:

mysql_query("SET NAMES utf8");

Os pongo como ejemplo de referencia el código de gestión de mi formulario de contacto:

$nombre =  $_POST["nombre"];
$email = $_POST["email"];
$telefono = $_POST["telefono"];
$mensaje = $_POST["mensaje"];

if ($dbc = mysql_connect('localhost', 'mi_nombre', 'mi_contraseña') ) {

mysql_query("SET NAMES utf8");

$db_selected=mysql_select_db('mi_base_de_datos');

mysql_query("INSERT INTO mi_tabla_de_datos (Nombre, Email, Telefono, Mensaje)
VALUES ('$nombre', '$email', '$telefono', '$mensaje')");

mysql_close($dbc);
}
}

Lo que hace este código es primero almacenar los datos del formulario de contacto en las variables $nombre, $email, $telefono y $contacto. Luego prueba a establecer conexión con la base de datos, de allí el condicional if. Si se conecta, entonces lo primero que hace es convertir los caracteres del formulario de contacto a utf8. Seguidamente guarda en la variable $db_selected mi base de datos. Lo siguiente es que almacena en mi tabla de datos con nombre figurado mi_tabla_de_datos las 4 variables del formulario de contacto en los campos Nombre, Email, Telefono y Mensaje de mi_tabla_de_datos de mi_base_de_datos. Finalmente, cierro el contacto con la base de datos con mysql_close($dbc).

Hablando de formularios de contacto, mi formulario de contacto lo valido con JavaScript, alguien puede orientarme de cómo validarlo también con php? ¿Algún enlace a algún buen tutorial? Gracias!


Comentarios

  • Omar Galaviz

    Hola Sandra,
    Pues recuerdo haber hecho unas validaciones en php, y buscando en el repertorio de código lo encontré, algo similar… validar los datos antes de enviarlos a la db, no se si realmente te refieres a eso;

    /*aquí verifico que los campos no estén vacíos, con lo cual si lo están lo redirecciona a register.php hasta que sean completados */
    if ( ($_POST[‘Username’]==”) or ($_POST[‘Pass’]==”) or ($_POST[‘Pass1’]==”)){
    Header(“Location: register.php”);
    }
    else
    {
    //aqui realizo una comparación si los password no concuerdan
    if($_POST[‘Pass’] != $_POST[‘Pass1’])
    {
    echo ‘passwords not match’;
    }
    else
    {
    //aqui quito las barras invertidas y códigos php y html para ser almacenados en las variables en cuestión, realmente es limpiar todo el código con destino a la db
    $username = stripcslashes($_POST[‘Username’]);
    $username = strip_tags($username );
    $pass = stripcslashes($_POST[‘Pass’]);
    $pass = strip_tags($pass);

    /*comprobamos que el usuario no existe en la db */
    $usuario = mysql_query(“select nick from users_access where nick =’$username'” );

    if ($user_ok = mysql_fetch_array($usuario))
    {
    echo “Usuario Ya Registrado”;
    mysql_free_result($usuario);
    }
    else
    {
    /*en este caso como no esta registrado, limpio los restantes campos con destino hacer almacenados en la db */
    $email = stripslashes($_POST[‘Email’]);
    $email = strip_tags($email);
    $inf=stripslashes($_POST[‘informacion’]);
    $inf=strip_tags($inf);
    $date = date(“D, d M Y G:i:s”);

    /*Aqui elimino los retornos de cargo y saltos por de textarea:informacion */
    $inf=str_replace(‘nr’,”,$inf);
    $inf=str_replace(‘rn’,”,$inf);
    $inf=str_replace(‘n’,”,$inf);

    mysql_query(“INSERT INTO users_access (nick,pass, email, fecha, level, informacion) values (‘$username’, ‘$pass’,’$email’,’$date’,’$level’,’$inf’)”);

    echo ‘Usuario registrado con éxito’;
    }
    }
    }
    ?>

    Espero que te sirva ;) Un saludo

  • Omar Galaviz

    Hola Sandra,
    Pues recuerdo haber hecho unas validaciones en php, y buscando en el repertorio de código lo encontré, algo similar… validar los datos antes de enviarlos a la db, no se si realmente te refieres a eso;

    /*aquí verifico que los campos no estén vacíos, con lo cual si lo están lo redirecciona a register.php hasta que sean completados */
    if ( ($_POST[‘Username’]==”) or ($_POST[‘Pass’]==”) or ($_POST[‘Pass1’]==”)){
    Header(“Location: register.php”);
    }
    else
    {
    //aqui realizo una comparación si los password no concuerdan
    if($_POST[‘Pass’] != $_POST[‘Pass1’])
    {
    echo ‘passwords not match’;
    }
    else
    {
    //aqui quito las barras invertidas y códigos php y html para ser almacenados en las variables en cuestión, realmente es limpiar todo el código con destino a la db
    $username = stripcslashes($_POST[‘Username’]);
    $username = strip_tags($username );
    $pass = stripcslashes($_POST[‘Pass’]);
    $pass = strip_tags($pass);

    /*comprobamos que el usuario no existe en la db */
    $usuario = mysql_query(“select nick from users_access where nick =’$username'” );

    if ($user_ok = mysql_fetch_array($usuario))
    {
    echo “Usuario Ya Registrado”;
    mysql_free_result($usuario);
    }
    else
    {
    /*en este caso como no esta registrado, limpio los restantes campos con destino hacer almacenados en la db */
    $email = stripslashes($_POST[‘Email’]);
    $email = strip_tags($email);
    $inf=stripslashes($_POST[‘informacion’]);
    $inf=strip_tags($inf);
    $date = date(“D, d M Y G:i:s”);

    /*Aqui elimino los retornos de cargo y saltos por de textarea:informacion */
    $inf=str_replace(‘nr’,”,$inf);
    $inf=str_replace(‘rn’,”,$inf);
    $inf=str_replace(‘n’,”,$inf);

    mysql_query(“INSERT INTO users_access (nick,pass, email, fecha, level, informacion) values (‘$username’, ‘$pass’,’$email’,’$date’,’$level’,’$inf’)”);

    echo ‘Usuario registrado con éxito’;
    }
    }
    }
    ?>

  • Omar Galaviz

    Hola Sandra,

    Pues recuerdo haber hecho unas validaciones en php, y buscando en el repertorio de código lo encontré, algo similar… validar los datos antes de enviarlos a la db, no se si realmente te refieres a eso; no pude pegar el codigo aqui, asi que publique un articulo en mi
    Mi Blogreferente a lo que solicitas.

    Espero que te sirva.

    Un Saludo