La lettre à est remplacée par un point ?

Fermé
Mourad2009B Messages postés 100 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 7 juillet 2023 - 4 sept. 2016 à 16:51
Mourad2009B Messages postés 100 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 7 juillet 2023 - 16 sept. 2016 à 18:43
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
4 sept. 2016 à 16:58
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 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 649
4 sept. 2016 à 18:30
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 100 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 7 juillet 2023
Modifié par jordane45 le 5/09/2016 à 01:01
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 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 649
5 sept. 2016 à 01:06
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 100 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 7 juillet 2023
16 sept. 2016 à 17:13
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 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
16 sept. 2016 à 17:30
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 100 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 7 juillet 2023
16 sept. 2016 à 18:43
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