La lettre à est remplacée par un point ?

Mourad2009B Messages postés 145 Statut Membre -  
Mourad2009B Messages postés 145 Statut Membre -
Bonjour,

Comme indiquer dans le titre, j'ai un soucis avec mes pages php/html
en fait les lettres accentuées (é, è, ù etc... s'affichent normalement alors que la lettre à est remplacée par un point d'interrogation dans la base de donnée MySql.
voici le début de mon fichier

<?php
$titre = "Administration";


function getEtat($EtatEnInt)
{
if ($EtatEnInt == 2)
return "Occasion";
else if ($EtatEnInt == 0)
return "Neuf-déclassé";
else if ($EtatEnInt == 1)
return "Neuf";
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title><?php echo $titre; ?></title>
<link rel="stylesheet" href="style_administration.css" />
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<meta name="ROBOTS" content="all">
<meta name="keywords" content="Solectrom,éléctroménager,machine, cuisine">
<meta name="author" content="kessir">
<meta name="title" content="<?php echo $titre; ?>">
<meta name="description" content="Développeur d'applications informatiques et développeur web">
<meta name="geo_position" content="France">
</head>


dans la structure de la base de données
j'ai met
l'interclassement = latin1_swedish_ci
et aussi
l'interclassement = utf8_general_ci
merci d'avance pour votre aide

2 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
Bonjour,

Si ces caractères s'affichent normalement quel est le problème ?
C'est peut-être juste l'outil que tu utilises pour visualiser la base de données qui n'arrive pas à afficher ces caractères, mais tant que la page html générée est bonne ça n'a aucune importance.
0
jordane45 Messages postés 40050 Date d'inscription   Statut Modérateur Dernière intervention   4 758
 
Bonjour,

Tu travailles (dans ta page web) en UTF8 ....
Il faut faire de même avec la BDD pour éviter tout souci d'encodage.

et puis... tu nous parles des données mises en BDD ...... mais à aucun moment tu ne nous montres le code qui te sert à les y mettre !

0
Mourad2009B Messages postés 145 Statut Membre 1
 
Bonsoir à tous,
Merci d'avoir répondu
effectivement les caractères accentués s'affichent normalement sauf le à qui est remplacé par ? et ça c'est quand j'utilise
l'interclassement = latin1_swedish_ci
mais quand j'utilise
l'interclassement = utf8_general_ci le
à ne s'affiche pas du tout il est remplacé par un blanc
pour le code qui me permet d'enregistrer dans la BDD

//Fonction de connexion à la base de données
    function setConnexion() {

        $this->_bdd = "Solectrom";
        $this->_localhost = "localhost";
        $this->_root = "root";
        $this->_mdp = "";        
        //On se connecte é la base de données "solectrom"
        try 
        {
            //$bdd = new PDO('mysql:host=localhost;dbname=solectrom', 'root', '');
            $this->_connexion = new PDO('mysql:host=' . $this->_localhost . ';dbname=' . $this->_bdd, $this->_root, $this->_mdp);
            $this->_connexion->query("SET NAMES UTF8");
            /* echo("connexion réussie");  */
        } 
        catch (Exception $e) 
        {
            die('Erreur : ' . $e->getMessage());
        }
    }

//Fonctions d'insertion de données dans les tables correspondantes
    function fonctionInsererDonneesDansTableCorrespondante($typeAppareil, $bdd, $fichier_image, $dir_mini, $dir_reelle) {
        //Si il ya plus de 300 caractere dans le commentaire on supprime l'exident.
        $nouv_commentaire = substr ($_POST['commentaire'] , 0 , 300 );
        switch ($typeAppareil) {                   
            case 1:
                //Ca concerne la table "table_lave_linge";                     
                $bdd->exec('INSERT INTO table_lave_linge(reference, designation, marque, modele, etat, placement, ouverture, nbr_trs, capacite, prix, photo_reelle, photo_mini, vendu, eco_taxe, commentaire) VALUES(\'' . $this->suppr_espaces($_POST['reference']) . '\' ,\'' . $this->suppr_espaces($_POST['designation']) . '\' ,\'' . $this->suppr_espaces(htmlspecialchars($_POST['marque'])) . '\',\'' . $this->suppr_espaces(htmlspecialchars($_POST['modele'])) . '\',\'' . $_POST['etat'] . '\',\'' . $_POST['placement'] . '\',\'' . $_POST['ouverture'] . '\',\'' . $_POST['nbr_trs'] . '\',\'' . $_POST['capacite'] . '\',\'' . $_POST['prix'] . '\',\'' . $dir_reelle . '/' . $fichier_image . '\',\'' . $dir_mini . '/' . $fichier_image . '\',\'' . $_POST['vendu'] . '\',\'' . $this->suppr_espaces($_POST['eco_taxe']).'\',\'' . $this->suppr_espaces(str_replace("'", "\'", nl2br($nouv_commentaire))) . '\')') or die(print_r($bdd->errorInfo())); //str_replace c'est pour remplacer ' par \'
                break;
            case 2:
                //Ca concerne la table "table_seche_linge";
                $bdd->exec('INSERT INTO table_seche_linge(reference, designation, marque, modele, etat, placement, ouverture, degagement, capacite, prix, photo_reelle, photo_mini, vendu, eco_taxe, commentaire) VALUES(\''  . $this->suppr_espaces($_POST['reference']) . '\' ,\'' . $this->suppr_espaces($_POST['designation']) . '\' ,\'' . $this->suppr_espaces($_POST['marque']) . '\',\'' . $this->suppr_espaces($_POST['modele']) . '\',\'' . $_POST['etat'] . '\',\'' . $_POST['placement'] . '\',\'' . $_POST['ouverture'] . '\',\'' . $_POST['degagement'] . '\',\'' . $_POST['capacite'] . '\',\'' . $_POST['prix'] . '\',\'' . $dir_reelle . '/' . $fichier_image . '\',\'' . $dir_mini . '/' . $fichier_image . '\',\'' . $_POST['vendu'] . '\',\'' . $this->suppr_espaces($_POST['eco_taxe']).'\',\'' . $this->suppr_espaces(str_replace("'", "\'", nl2br($nouv_commentaire))) .'\')') or die(print_r($bdd->errorInfo()));
                break;
}


merci d'avance pour votre aide




EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
0
jordane45 Messages postés 40050 Date d'inscription   Statut Modérateur Dernière intervention   4 758
 
Pour commencer.... active la gestion des erreurs PDO dans ton code.
Ensuite... utilises les requêtes préparées ...ça évitera de devoir faire tous ces bidouilles pour "protéger" tes insertions...
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
(tu noteras au passage qu'on n'utilises plus de OR DIE ... mais des blocs TRY/CATCH)

Pense également à récupérer PROPREMENT les variables AVANT de les utiliser.
https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index


Et pour finir... les htmlspecialchars sont à utiliser lors de l'affichage des données dans la page... pas pour leur insertion en BDD qu'on préfèrera stocker de façon
"brute".
0
Mourad2009B Messages postés 145 Statut Membre 1
 
Bonjour à tous,
Merci à tous pour vos remarque instructives.

Pour mon problème d'accents, c'est au niveau de l'insertion avec du script php, que ça cause problème.

car quand j’enserre les données avec phpmyadmin tout se passe très bien

voici la requête d'insertion

//Ca concerne la table "table_lave_linge";                    
                $bdd->exec('INSERT INTO table_lave_linge(reference, designation, marque, modele, etat, placement, ouverture, nbr_trs, capacite, prix, photo_reelle, photo_mini, vendu, eco_taxe, commentaire) VALUES(\'' . $this->suppr_espaces($_POST['reference']) . '\' ,\'' . $this->suppr_espaces(htmlspecialchars($_POST['designation'])) . '\' ,\'' . $this->suppr_espaces(htmlspecialchars($_POST['marque'])) . '\',\'' . $this->suppr_espaces(htmlspecialchars($_POST['modele'])) . '\',\'' . $_POST['etat'] . '\',\'' . $_POST['placement'] . '\',\'' . $_POST['ouverture'] . '\',\'' . $_POST['nbr_trs'] . '\',\'' . $_POST['capacite'] . '\',\'' . $_POST['prix'] . '\',\'' . $dir_reelle . '/' . $fichier_image . '\',\'' . $dir_mini . '/' . $fichier_image . '\',\'' . $_POST['vendu'] . '\',\'' . $this->suppr_espaces($_POST['eco_taxe']).'\',\'' . $this->suppr_espaces(str_replace("'", "\'", nl2br(htmlspecialchars(utf8_encode($nouv_commentaire))))) . '\')');


merci à tous.
0
Pitet Messages postés 2845 Statut Membre 527
 
Quel est le code de la méthode suppr_espaces() ?

La meilleure solution pour corriger ton problème serait surement celle proposée par jordane45 : utilise une requête préparée et évite l'utilisation de htmlspecialchars ou nl2br sur les données à insérer.
0
Mourad2009B Messages postés 145 Statut Membre 1
 
merci d'avance
voici la fonction
    //Fonction pour supprimer les éspaces devant deriére et au milieu
    function suppr_espaces($chaine) {
        $chaine = preg_replace('/\s+/', ' ', $chaine);
        $chaine = trim($chaine);
        return $chaine;
    }
0