Problème caractères accentués dans la bdd

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème caractères accentués dans la bdd

Re: Problème caractères accentués dans la bdd

par albat » 04 nov. 2012, 11:39

je suis athé, mais aujourd'hui, Dieu vous ressemble.
Rectificatif : tu étais athée, mais maintenant tu crois en sadeq. :priere: :langue:

Re: Problème caractères accentués dans la bdd

par philippe972 » 02 nov. 2012, 01:17

Bonjour,

Un grand merci, ça faisait un "certain temps" que je cherchais cette info !

je suis athé, mais aujourd'hui, Dieu vous ressemble.

Philippe

Re: Problème caractères accentués dans la bdd

par sadeq » 20 mai 2012, 12:37

Bonjour, ravi que ça a pu t'aider. Maintenant je te dois quelques explications sur cette technique et solution.

En effet, la cause de ce problème est que l'Interclassement pour la connexion MySQL est déclaré sur l'encodage de caractères UTF8 donc tu es obligé d'y injecter des données sous cet encodage. Donc toutes les requêtes INSERT et UPDATE sont concernées, et surtout celles exécutées par les fonctions natives de l'extension mysql de php, c'est à dire : mysql_query(). C'est pour cela qu'il faut déclarer l'encodage de connexion au niveau de php et juste après l'ouverture de la connexion avec le serveur MySQL. La requête qui déclare l'encodage de connexion avec le serveur est :
mysql_query("SET NAMES 'utf8';", $variable_de_connexion);
On comprend par là que l'encodage déclaré par set Names correspond en fait à l'encodage déclaré au niveau du serveur MySQL dans la rubrique : Paramètres généraux --> Interclassement pour la connexion MySQL et l'interclassement de la base de données, des tables et des colonnes de tables.

Ceci dit, ce problème a été évité dans les dernières versions de PHPMyAdmin qui déclare l'interclassement de connexion à UTF8 et utilise automatiquement cet encodage par défaut pour l'interclassement des bases et de ses tables et leurs colonnes. De ce fait on n'a plus besoin d'utiliser set Names.

Voir aussi : faq-tutoriels/encodage-utf-t245062.html

Re: Problème caractères accentués dans la bdd

par mgemeline » 20 mai 2012, 03:04

Super tout fonctionne maintenant...

Grand merci pour ton aide rapide et précise.

Re: Problème caractères accentués dans la bdd

par sadeq » 20 mai 2012, 00:17

Selon ton programme et suivant la ligne :
<?php require_once('Connections/preinscription.php'); ?>
La connexion à la base se fait dans le fichier : Connections/preinscription.php. Il faut donc ouvrir ce fichier et ajouter après mysql_connect la ligne :
mysql_query("SET NAMES 'utf8';",$preinscription);

Re: Problème caractères accentués dans la bdd

par mgemeline » 19 mai 2012, 19:18

Bonjour,

Tout d'abord merci pour ton aide.
Je ne trouve pas mysql_connect dans mon script
Je trouve 2 mysql_select_db
et 2 mysql_query...
Je suis novice et je ne comprends pas précisément ce que je dois faire...
Ci-dessous le script de mon formulaire...
Merci d'avance
<?php require_once('Connections/preinscription.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO preinscription (nom, prenom, nationalite, rue, cp, ville, tel, mail, choix, cess_annee, ecole_sec, rue_ecole_sec, cp_ecole_sec, ville_ecole_sec, `10_11_activite`, `10_11_resultat`, `10_11_detail`, `11_12_activite`, `11_12_resultat`, `11_12_detail`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['nom'], "text"),
                       GetSQLValueString($_POST['prenom'], "text"),
                       GetSQLValueString($_POST['nationalite'], "text"),
                       GetSQLValueString($_POST['rue'], "text"),
                       GetSQLValueString($_POST['cp'], "text"),
                       GetSQLValueString($_POST['ville'], "text"),
                       GetSQLValueString($_POST['tel'], "text"),
                       GetSQLValueString($_POST['mail'], "text"),
                       GetSQLValueString($_POST['choix'], "text"),
                       GetSQLValueString($_POST['cess_annee'], "text"),
                       GetSQLValueString($_POST['ecole_sec'], "text"),
                       GetSQLValueString($_POST['rue_ecole_sec'], "text"),
                       GetSQLValueString($_POST['cp_ecole_sec'], "text"),
                       GetSQLValueString($_POST['ville_ecole_sec'], "text"),
                       GetSQLValueString($_POST['10_11_activite'], "text"),
                       GetSQLValueString($_POST['10_11_resultat'], "text"),
                       GetSQLValueString($_POST['10_11_detail'], "text"),
                       GetSQLValueString($_POST['11_12_activite'], "text"),
                       GetSQLValueString($_POST['11_12_resultat'], "text"),
                       GetSQLValueString($_POST['11_12_detail'], "text"));

  mysql_select_db($database_preinscription, $preinscription);
  $Result1 = mysql_query($insertSQL, $preinscription) or die(mysql_error());

  $insertGoTo = "merci.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}

mysql_select_db($database_preinscription, $preinscription);
$query_preinscription = "SELECT * FROM preinscription";
$preinscription = mysql_query($query_preinscription, $preinscription) or die(mysql_error());
$row_preinscription = mysql_fetch_assoc($preinscription);
$totalRows_preinscription = mysql_num_rows($preinscription);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Préinscription 2012-2013</title>
<script src="SpryAssets/SpryValidationTextField.js" type="text/javascript"></script>
<script src="SpryAssets/SpryValidationSelect.js" type="text/javascript"></script>
<script src="SpryAssets/SpryValidationTextarea.js" type="text/javascript"></script>
<link href="SpryAssets/SpryValidationTextField.css" rel="stylesheet" type="text/css" />
<link href="SpryAssets/SpryValidationSelect.css" rel="stylesheet" type="text/css" />
<link href="SpryAssets/SpryValidationTextarea.css" rel="stylesheet" type="text/css" />
</head>

<body>
<p>Préinscription 2012-2013</p>
<form id="form1" name="form1" method="POST" action="<?php echo $editFormAction; ?>">
<p><strong><em>1.SIGNALETIQUE</em></strong></p>
  <span id="sp_nom">Nom
  <input name="nom" type="text" id="nom" tabindex="1" size="50" maxlength="50" />
  <span class="textfieldRequiredMsg">Une valeur est requise.</span></span>
  <p><span id="sp_prenom">Prénom
    <input name="prenom" type="text" id="prenom" tabindex="2" size="50" maxlength="50" />
</span></p>
  <p><span id="sp_nationalite">Nationalité
    <input name="nationalite" type="text" id="nationalite" tabindex="3" size="50" maxlength="50" />
  <span class="textfieldRequiredMsg">Une valeur est requise.</span></span></p>
  <p>Adresse :</p>
  <p><span id="sp_rue">	Rue, numéro, boîte
      <input name="rue" type="text" id="rue" tabindex="4" size="100" maxlength="100" />
  <span class="textfieldRequiredMsg">Une valeur est requise.</span></span></p>
  <p><span id="sp_cp">Code postal
      <input name="cp" type="text" id="cp" tabindex="5" size="10" maxlength="10" />
  <span class="textfieldRequiredMsg">Une valeur est requise.</span><span class="textfieldInvalidFormatMsg">Format non valide.</span></span> <span id="sp_ville">Ville
  <input name="ville" type="text" id="ville" tabindex="6" size="50" maxlength="50" />
  <span class="textfieldRequiredMsg">Une valeur est requise.</span></span></p>
  <p><span id="sp_tel">Téléphonne
    <input name="tel" type="text" id="tel" tabindex="7" size="20" maxlength="20" />
<span class="textfieldRequiredMsg">Une valeur est requise.</span></span></p>
  <p><span id="sp_mail">Adresse mail
      <input name="mail" type="text" id="mail" tabindex="8" size="50" maxlength="50" />
  <span class="textfieldRequiredMsg">Une valeur est requise.</span><span class="textfieldInvalidFormatMsg">Format non valide.</span></span></p>
  <p><em><strong>2. CHOIX DE L'INSCRIPTION SOUHAITEE</strong></em></p>
  <p><span id="sp_choix">Etudes souhaitées
    <select name="choix" size="1" id="choix" tabindex="9">
      <option>ARTS APPLIQUES</option>
      <option value="styliste_modeliste">Bac Styliste-Modéliste</option>
      <option value="publicite">Bac Publicité</option>
      <option value="arts_tissu">Bac Arts du tissu</option>
      <option>ECONOMIQUE TYPE COURT</option>
      <option value="assurances">Bac Assurances</option>
      <option value="comptabilite">Bac Comptabilité</option>
      <option value="gestion_transports_logistique_entreprise">Bac Gestion des transports et logistique d'entreprise</option>
      <option value="sciences_administratives_gestion_publique-tc">Bac Sciences administratives et gestion publique</option>
      <option value="secretariat">Bac Secrétariat de direction</option>
      <option>ECONOMIQUE TYPE LONG</option>
      <option value="gestion_publique_tl">Bac Gestion publique</option>
      <option value="gestion_entreprise">Bac Gestion de l'entreprise</option>
      <option value="ingenieur_commercial">Bac Ingénieur commercial</option>
      <option>PARAMEDICAL</option>
      <option value="sage_femme">Bac Sage-femme</option>
      <option value="soins_infirmiers">Bac Soins infirmiers</option>
      <option value="biologie_medicale">Bac Biologie médicale</option>
      <option>PEDAGOGIQUE</option>
      <option value="prescolaire">Bac Normale préscolaire</option>
      <option value="primaire">Bac Normale primaire</option>
      <option value="francais_lg_etrangere">Bac Normale secondaire - français/français langue étrangère</option>
      <option value="francais_morale">Bac Normale secondaire - français/morale</option>
      <option value="langues_germaniques">Bac Normale secondaire - langues germaniques</option>
      <option value="mathematique">Bac Normale secondaire - mathématique</option>
      <option value="sciences">Bac Normale secondaire - sciences</option>
      <option value="sciences_economiques">Bac Normale secondaire - sciences économiques</option>
      <option value="sciences_humaines">Bac Normale secondaire - sciences humaines</option>
      <option value="education_physique">Bac Normale secondaire - éducation physique</option>
      <option>TECHNIQUE</option>
      <option value="electronique">Bac Electronique</option>
      <option value="techniques_graphiques">Bac Techniques graphiques</option>
      <option>TRADUCTION-INTERPRETATION</option>
      <option value="ti_anglais_arabe">Bac Traduction-Interprétation - anglais/arage</option>
      <option value="ti_anglais_chinois">Bac Traduction-Interprétation - anglais/chinois</option>
      <option value="ti_anglais_espagnol">Bac Traduction-Interprétation - anglais/espagnol</option>
      <option value="ti_anglais_neerlandais">Bac Traduction-Interprétation - anglais/néerlandais</option>
      <option value="ti_anglais_turc">Bac Traduction-Interprétation - anglais/turc</option>
      <option value="ti_neerlandais_espagnol">Bac Traduction-Interprétation - néerlandais/espagnol</option>
      <option value="ti_espagnol/arabe">Bac Traduction-Interprétation - espagnol/arabe</option>
    </select>
  <span class="selectRequiredMsg">Sélectionnez un élément.</span></span></p>
  <p><em><strong>3. ETUDES SECONDAIRES</strong></em></p>
  <p><span id="sp_cess_annee">CESS (Certificat d'Etudes Secondaires Supérieures) obtenu en :
      <select name="cess_annee" size="1" id="cess_annee" tabindex="10">
        <option value="2010_2011">2010-2011</option>
        <option value="2011_2012">2011-2012</option>
      </select>
  <span class="selectRequiredMsg">Sélectionnez un élément.</span></span></p>
  <p><span id="sp_ecole_sec">Nom de l'établissement scolaire
      <input name="ecole_sec" type="text" id="ecole_sec" tabindex="11" size="100" maxlength="100" />
  <span class="textfieldRequiredMsg">Une valeur est requise.</span></span></p>
  <p>Adresse :</p>
  <p><span id="sp_rue_ecole_sec">Rue, numéro, boîte
    <input name="rue_ecole_sec" type="text" id="rue_ecole_sec" tabindex="12" size="100" maxlength="100" />
  <span class="textfieldRequiredMsg">Une valeur est requise.</span></span></p>
  <p><span id="sp_cp_ecole_sec">Code postal
      <input name="cp_ecole_sec" type="text" id="cp_ecole_sec" tabindex="13" size="10" maxlength="10" />
  <span class="textfieldRequiredMsg">Une valeur est requise.</span><span class="textfieldInvalidFormatMsg">Format non valide.</span></span> <span id="sp_ville_ecole_sec">Ville
  <input name="ville_ecole_sec" type="text" id="ville_ecole_sec" tabindex="14" size="50" maxlength="50" />
  <span class="textfieldRequiredMsg">Une valeur est requise.</span></span></p>
  <p><strong><em>4. CURRICULUM POST ETUDES SECONDAIRES</em></strong></p>
  <p><strong>2010-2011</strong></p>
  <p><span id="sp_10_11_activite">Type d'activité
      <select name="10_11_activite" size="1" id="10_11_activite" tabindex="15">
        <option value="10_11_etudes">Etudes</option>
        <option value="10_11_jury">Jury</option>
        <option value="10_11_travail">Travail</option>
        <option value="10_11_so_cess_10_11">Sans objet CESS obtenu en 2010-2011</option>
        <option value="10_11_so_cess_11_12">Sans objet CESS obtenu en 2011-2012</option>
        <option value="10_11_autre">Autre (à préciser ci-dessous)</option>
      </select>
  <span class="selectRequiredMsg">Sélectionnez un élément.</span></span></p>
  <p><span id="sp_10_11_resultat">Si vous avez choisi études ou jury, réultat
      <select name="10_11_resultat" size="1" id="10_11_resultat" tabindex="16">
        <option value="10_11_reussite">Réussite</option>
        <option value="10_11_reussite_cr">Réussite avec crédits résiduels</option>
        <option value="10_11_echec">Echec</option>
        <option value="10_11_abandon_avant_01_12_10">Abandon avant le 01/12/2010</option>
        <option value="10_11_abandon_apres_01_12_10">Abandon après le 01/12/2010</option>
      </select>
  <span class="selectRequiredMsg">Sélectionnez un élément.</span></span></p>
  <p><span id="sp_10_11_detail">Encodez le type d'études, de jury, de travail ou précisez si autre activité<br />
    Si vous avez abandonné vos études avant le 01/12/2010, mentionnez ici vos activités après la date d'abandon <br />
      <textarea name="10_11_detail" id="10_11_detail" cols="100" rows="5" tabindex="17"></textarea>
  <span id="countsp_10_11_detail">&nbsp;</span><span class="textareaRequiredMsg">Une valeur est requise.</span><span class="textareaMaxCharsMsg">Le nombre maximum de caractères a été dépassé.</span></span></p>
  <p><strong>2011-2012</strong></p>
  <p><span id="sp_11_12_activite">Type d'activité
      <select name="11_12_activite" id="11_12_activite" tabindex="18">
        <option value="11_12_etudes">Etudes</option>
        <option value="11_12_jury">Jury</option>
        <option value="11_12_travail">Travail</option>
        <option value="11_12_so_cess_2011_2012">Sans objet CESS obtenu en 2011-2012</option>
        <option value="11_12_autre">Auter (à préciser ci-dessous)</option>
      </select>
  <span class="selectRequiredMsg">Sélectionnez un élément.</span></span></p>
  <p><span id="sp_11_12_resultat">Si vous avez choisi études ou jury , résultat
      <select name="11_12_resultat" size="1" id="11_12_resultat" tabindex="19">
        <option value="11_12_reussite">Réussite</option>
        <option value="11_12_reussite_cr">Réussite avec crédits résiduels</option>
        <option value="11_12_echec">Echec</option>
        <option value="11_12_abandon_avant_01_12_11">Abandon avant le 01/12/2011</option>
        <option value="11_12_avandan_après_01_11_12">Abandon après le 01/12/2011</option>
      </select>
  <span class="selectRequiredMsg">Sélectionnez un élément.</span></span></p>
  <p><span id="sp_11_12_detail">Encodez le type d'études, de jury, de travail ou précisez si autre activité<br />
Si vous avez abandonné vos études avant le 01/12/2011, mentionnez ici vos activités après la date d'abandon<br />
<textarea name="11_12_detail" id="11_12_detail" cols="100" rows="5"></textarea>
<span id="countsp_11_12_detail">&nbsp;</span><span class="textareaRequiredMsg">Une valeur est requise.</span><span class="textareaMaxCharsMsg">Le nombre maximum de caractères a été dépassé.</span></span></p>
  <p>&nbsp;</p>
  <p>
    <input type="reset" name="reinitialiser" id="reinitialiser" value="Réinitialiser" />
      <input type="submit" name="submit" id="submit" value="Envoyer" tabindex="20" />
  </p>
  <input type="hidden" name="MM_insert" value="form1" />
</form>
<script type="text/javascript">
<!--
var sprytextfield1 = new Spry.Widget.ValidationTextField("sp_nom", "none", {validateOn:["blur", "change"]});
var sprytextfield2 = new Spry.Widget.ValidationTextField("sp_prenom", "none", {isRequired:false});
var sprytextfield3 = new Spry.Widget.ValidationTextField("sp_nationalite", "none", {validateOn:["blur", "change"]});
var sprytextfield4 = new Spry.Widget.ValidationTextField("sp_rue", "none", {validateOn:["blur", "change"]});
var sprytextfield5 = new Spry.Widget.ValidationTextField("sp_cp", "zip_code", {validateOn:["blur", "change"], format:"zip_custom", pattern:"0000", hint:"0000", useCharacterMasking:true});
var sprytextfield6 = new Spry.Widget.ValidationTextField("sp_ville", "none", {validateOn:["blur", "change"]});
var sprytextfield7 = new Spry.Widget.ValidationTextField("sp_tel", "none", {validateOn:["blur", "change"]});
var sprytextfield8 = new Spry.Widget.ValidationTextField("sp_mail", "email", {validateOn:["blur", "change"]});
var spryselect1 = new Spry.Widget.ValidationSelect("sp_choix", {validateOn:["blur", "change"]});
var spryselect2 = new Spry.Widget.ValidationSelect("sp_cess_annee", {validateOn:["blur", "change"]});
var sprytextfield9 = new Spry.Widget.ValidationTextField("sp_ecole_sec", "none", {validateOn:["blur", "change"]});
var sprytextfield10 = new Spry.Widget.ValidationTextField("sp_rue_ecole_sec", "none", {validateOn:["blur", "change"]});
var sprytextfield11 = new Spry.Widget.ValidationTextField("sp_cp_ecole_sec", "zip_code", {format:"zip_custom", pattern:"0000", hint:"0000", validateOn:["blur", "change"]});
var sprytextfield12 = new Spry.Widget.ValidationTextField("sp_ville_ecole_sec", "none", {validateOn:["blur", "change"]});
var spryselect3 = new Spry.Widget.ValidationSelect("sp_10_11_activite", {validateOn:["blur", "change"]});
var spryselect4 = new Spry.Widget.ValidationSelect("sp_10_11_resultat");
var sprytextarea1 = new Spry.Widget.ValidationTextarea("sp_10_11_detail", {maxChars:255, counterType:"chars_remaining", counterId:"countsp_10_11_detail", validateOn:["blur", "change"]});
var spryselect5 = new Spry.Widget.ValidationSelect("sp_11_12_activite", {validateOn:["change", "blur"]});
var spryselect6 = new Spry.Widget.ValidationSelect("sp_11_12_resultat");
var sprytextarea2 = new Spry.Widget.ValidationTextarea("sp_11_12_detail", {validateOn:["blur", "change"], counterType:"chars_remaining", counterId:"countsp_11_12_detail", maxChars:255});
//-->
</script>
</body>
</html>
<?php
mysql_free_result($preinscription);
?>

Re: Problème caractères accentués dans la bdd

par sadeq » 19 mai 2012, 19:00

Bonjour, Il faut commuter en mode UTF8 après l'ouverture de la connexion MySQL dans le programme PHP en exécutant la requête SET NAMES 'utf8'; comme ça:
$connexion = mysql_connect('localhost', 'root', '');
mysql_select_db('mabase', $connexion);
mysql_query("SET NAMES 'utf8';",$connexion);
:wink:

Problème caractères accentués dans la bdd

par mgemeline » 19 mai 2012, 18:26

Bonjour,

J'ai un formulaire en php qui envoie des données dans une bdd mysql. Données que je devrais pouvoir récupérer plus tard, via excell, afin de les injecter dans un autre logiciel de gestion administrative.
Pour l'instant je teste le tout en local avec wampserver.
Tout fonctionne bien à part les caractères accentués qui apparaissent dans la bdd sous une forme bizarre, par exemple le é devient é...
Interclassement pour la connexion MySQL : uft8_general_ci
Interclassement des champs de la table : uft8_general_ci
Dans le script du formulaire : <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Après de longues recherches sur le net, je n'ai pas trouvé d'explication. Ou alors je n'ai pas compris (ce qui est fort possible)...

Merci d'avance