IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Accent non prit en compte. [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Avril 2005
    Messages : 127
    Par défaut Accent non prit en compte.
    Bonjour,

    J'ai un souci sur une de mes fonctions... En effet dans celle ci lorsqu'il y a une donnée qui contient un accent celui-ci n'est pas affiché.
    C'est la seule qui me pose problème et pourtant je fais strictement la même chose que sur celles qui fonctionnent....

    Après différents tests j'ai trouvé une solution mais cette solution n'est vraiment pas élégante et je ne la comprend pas vraiment...
    Quelqu'un comprend pourquoi cette solution fonctionne? (ça m'aiderait peut être à comprendre pourquoi sans cette solution l'accent ne s'affiche pas...).

    Ma colonne 'Titre' contient des accents et ma solution consiste à refaire une requête dans la boucle afin de rechercher de nouveau le titre (variable $select_titre).

    En quoi le fait de refaire une requête "inutile" permet d'avoir les accents????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    $select_document = "SELECT * FROM `document`";
    $select_d = select_gen($select_document, $connexion);
     
    if(is_admin($connexion))	{
    	echo "
    	<br /><br />
    	<div id=\"ajout\">
    		<a href=\"/?p=ajout_document\"><img src=\"/images/icons/ajout.png\" /></a>
    	</div>
    	";
    }
     
    echo "
    	<script type=\"text/javascript\">
    	$(function() {		
    		$(\"table\").tablesorter({
    			sortList:[[0,1]], 
    			widgets: ['zebra'],
    			headers: { 
    				4: {sorter: false},
    				5: {sorter: false} 
    			} 
    		});
    	});	
    	</script>
     
    	<table class=\"tablesorter\">
    		<thead>
    			<tr>
    				<th width=\"40\">N°</th>
    				<th width=\"300\">Titre</th>
    				<th width=\"100\">Lien</th>
    				<th>Extension</th>";
    			if(is_admin($connexion))	{
    				echo "
    				<th class=\"table-nosort\" align=\"left\"></th>
    				<th class=\"table-nosort\" align=\"left\"></th>";
    			}
    			echo "
    			</tr>
    		</thead>";
     
    for($i=0; $i<count($select_d); $i++)	{					
     
    	$afficher_document = false;
    	/*
    		On affiche le document seulement si il est visible au public
    		ou
    		Si la personne connecté a des droits spécifiques
    	*/
    	if(is_log($connexion))	{
    		if(!is_user($connexion) || (is_user($connexion) && $select_d[$i]->visible_public == 'O'))	{
    			$afficher_document = true;
    		}
    	} else	{
    		if($select_d[$i]->visible_public == 'O')	{
    			$afficher_document = true;	
    		}
    	}
     
    	if($afficher_document)	{
    		$select_titre = "SELECT `titre` FROM `document` WHERE `id_document` = '".$select_d[$i]->id_document."'";
    		$select_t = select_gen($select_titre, $connexion);
     
    		$document = "";
    		if(file_exists('documents/'.$select_d[$i]->id_document.$select_d[$i]->extension))	{
    			$document = "
    			<a href=\"/documents/".$select_d[$i]->id_document.$select_d[$i]->extension."\" target=\"_BLANK\">
    				".$select_t[0]->titre."
    			</a>";
    		}
    		else	{
    			$document = $select_t[0]->titre;
    		}
     
     
    		$lien = "";
    		if(isset($select_d[$i]->lien) && $select_d[$i]->lien != "")	{
    			$lien = "<a href=\"".$select_d[$i]->lien."\" class=\"document_lien\" target=\"_BLANK\">".$select_d[$i]->lien."</a>";		
    		}
     
    		if($i==0)	{
    			echo "
    			<tbody>";
    		}
     
    		echo "
    				<tr>
    					<td>".$select_d[$i]->id_document."</td>
    					<td>".$document."</td>
    					<td>".$lien."</td>
    					<td>".$select_d[$i]->extension."</td>";
     
    				if(is_admin($connexion))	{
    					echo "
    					<td><a href=\"/?p=del_document&amp;id=".$select_d[$i]->id_document."\"><img src=\"/images/icons/croix.png\" style=\"border:0;margin:0;padding:0;\" /></a></td>
    					<td><a href=\"/?p=modifier_document&amp;id=".$select_d[$i]->id_document."\"><img src=\"/images/icons/modifier.png\" style=\"border:0;margin:0;padding:0;\" /></a></td>";	
    				}
    				echo "
    				</tr>";
    	}
    }
     
    if(count($select_d)>0)	{
    	echo "
    		</tbody>";
    }
    echo "
    	</table>";

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Ma colonne 'Titre' contient des accents
    C'est très certainement ça qui cause problème.

    Mais utiliser les doubles quotes (des guillemets -> ") n'est pas pratique, ça t'obliges à échapper, puis intervient les conflits avec ces quotes.
    Le plus simple c'est d'utiliser des simples quotes (ou parenthèse -> ').
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    echo '<p class="class_truc">Un contenu dans du code HTML : '.htmlentities($variable).' avec une variable</p>';
    ?>
    Puis il faut utiliser la fonction htmlentities().
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $document = '<a href="/documents/'.$select_d[$i]->id_document.$select_d[$i]->extension.'" target="_BLANK">'.htmlentities($select_t[0]->titre).'</a>';
    Faudra peut être faire attention à l'encodage (3ème paramètre. voir la fonction dans la doc).


    Et pour ce qui concerne la partie JS, là aussi c'est plus simple et moins conflictuel d'éviter de la générer en Php, autant le faire directement.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    echo 'Une partie générée en Php';
    ?>
     
    <script type="text/javascript">
    $(function() {		
    	$("table").tablesorter({
    		sortList:[[0,1]], 
    		widgets: ['zebra'],
    		headers: { 
    			4: {sorter: false},
    			5: {sorter: false} 
    		} 
    	});
    });	
    </script>
    <?php
    // La suite du code Php
    D'autant plus qu'il n'y a pas de code Php dans cette partie JS.
    D'ailleurs, ce code JS (jQuery) serait peut être mieux dans un fichier JS.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Avril 2005
    Messages : 127
    Par défaut
    Merci pour tes réponses.
    Dans un précédent topic on j'explique que ma base est en utf-8 (ainsi que mes pages web) on m'a conseillé d'utiliser la fonction mysql_real_escape_string pour insérer en base, ce qui fonctionne très bien.

    Et pour le coup du htmlentities comme je n'ai aucun problème excepté sur ce tableau ça m'embête un peu mais bon je vais essayé tes conseils.

    Pour la partie JS je trouve cela plus simple de le traiter dans ma partie php plutôt que de créer X fonctions js pour chacun de mes tableaux

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Avril 2005
    Messages : 127
    Par défaut
    Euh je viens de me rendre compte que le problème d'accent je ne l'ai que lorsque je ne suis pas connecté sur le site... Lorsque je suis connecté je n'ai aucun problème....

    Ce qui me gêne c'est que je n'ai rien fait de spécifique vis à vis de l'encodage ou autre à ce niveau...

    Bonne nouvelle ta solution fonctionne mais lorsque je suis connecté j'ai droit à
    é sur les é.

    Je suis perdu sur ce coup là...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Avril 2005
    Messages : 127
    Par défaut
    Est il possible de connaître l'encodage de la page à un instant précis ?
    J'aimerai voir ce qu'il en est avant l'affichage de ma variable...

    Je ne comprend strictement pas pourquoi le problème d'accent intervient en étant déconnecté...

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Dans un précédent topic on j'explique que ma base est en utf-8 (ainsi que mes pages web) on m'a conseillé d'utiliser la fonction mysql_real_escape_string pour insérer en base, ce qui fonctionne très bien.
    On t'a bien conseillé, coté Bdd c'est bien -> mysql_real_escape_string().

    Mais pas d'amalgame.
    Lorsqu'il s'agit d'afficher des données dans une page HTML, il est préférable d'appliquer la fonction htmlentities() pour éviter un éventuel injection de code malicieux.
    Chaque fonction à son rôle.

    Je ne savais pas encore que tu utilisais du UTF-8, donc je ne pouvais pas l'intégrer.
    Mais tout est expliqué dans la doc de Php (voir le lien que j'avais mis).

    Cette fonction attends 4 paramètres dont les 3 derniers sont optionnels :
    string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )
    Il est dit dans la doc que c'est ISO-8859-1 qui est utilisé par défaut, mais ce sera l'UTF-8 à partir de Php5.4.
    Il faut alors indiquer que c'est l'UTF-8.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo htmlentities($variable, ENT_COMPAT, 'UTF-8');

    Je ne comprend strictement pas pourquoi le problème d'accent intervient en étant déconnecté...
    Peut être le cache. Vide le cache du navigateur par exemple.
    Faut voir.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PHP en CLI : accents non pris en compte
    Par supertino7 dans le forum Langage
    Réponses: 2
    Dernier message: 27/04/2010, 15h41
  2. [FPDF] Accents non pris en compte dans mes PDF
    Par beegees dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 12/05/2009, 13h28
  3. Réponses: 5
    Dernier message: 16/01/2009, 12h54
  4. CSS non prit en compte
    Par Gregory.M dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 22/12/2008, 16h59
  5. Accents non pris en compte dans les requêtes SELECT
    Par YanK dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/08/2005, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo