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

  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.

  7. #7
    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 mais je ne pense pas que l'ajout des paramètres corrige mon problème .

    Pour faire simple en étant connecté aucun problème mais lorsque je suis en mode visiteur (non connecté) j'ai un problème d'accent.

    Et comme je l'ai dis au départ dès lors que j'effectue une seconde requête dans la boucle je n'ai plus de problème...

    Totalement perdu là .

  8. #8
    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
    En utilisant
    htmlentities($select_d[$i]->titre, ENT_COMPAT, 'UTF-8')

    Lorsque je suis connecté tout fonctionne toujours.
    Et lorsque je suis déconnecté les variables qui ont un accents ne sont plus affichés

  9. #9
    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
    Pour faire simple en étant connecté aucun problème mais lorsque je suis en mode visiteur (non connecté) j'ai un problème d'accent.
    Que veux tu dire par "connecté" ?

  10. #10
    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
    Possibilité sur le site de se connecter.
    Mais en aucun cas je n'effectue d'action sur l'encodage lorsque l'utilisateur est connecté...

    C'est chiant le php, aucun moyen de débugger....

  11. #11
    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
    Ok.

    Mais en aucun cas je n'effectue d'action sur l'encodage lorsque l'utilisateur est connecté...
    Peut être pas directement lié à l'encodage, mais il y a forcément quelque chose qui varie, qui change lors de la déconnexion.

    Faudrait peut être revoir cette phase là, la déconnexion.

    Est tu certain que tout ce qui concerne l'encodage est vraiment bien effectué, quelque soit la situation (comme connecté/déconnecté).
    -> MySQL : SET NAME 'UTF-8'
    -> Php
    -> Html/méta


    Chose importante : Est-ce que l'affichage des erreurs de Php est activé ? (display_errors à On) ?
    Ca serait dommage qu'il y ait une erreur sans en être averti.

    C'est chiant le php, aucun moyen de débugger....
    Si, rien que de simple echo, print_r(), var_dump() permettent de le faire, suffit de la faire là où il faut.
    Si on le fait après le problème, on ne peut que constater l'erreur.
    Si on le fait avant l'erreur, on constate pas d'erreur.
    Du coup -> entre les 2 c'est là où est l'erreur.
    Très simple.
    Encore faut il les placer au bon endroit, ça peut prendre du temps.
    C'est le principe de l'étau.

  12. #12
    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
    Génial comme façon de debuggé .
    Je vais vérifier lors de la déconnexion mais je ne pense pas qu'il y ai quelque chose dedans...

    Pour les messages d'erreur ils sont activés.

    Merci pour ton aide .

    Juste pour rappel:

    J'ai une boucle for qui parcourt les résultats de ma requête, cependant lorsque j'ai des variables qui contiennent des accents ils ne sont pas affichés (sauf si l'utilisateur est connecté).
    Cependant si je fais une requête "inutile" dans la boucle permettant de récupérer la variable qui a l'accent, cela fonctionne...

    Je peux t'envoyer l'url en mp si tu souhaites voir en direct...

  13. #13
    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
    Citation Envoyé par RunCodePhp Voir le message
    Ok.

    Est tu certain que tout ce qui concerne l'encodage est vraiment bien effectué, quelque soit la situation (comme connecté/déconnecté).
    -> MySQL : SET NAME 'UTF-8'
    -> Php
    -> Html/méta

    le set name est fait après chaque select:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function select_gen($requete,$connexion){
     
    	$result = mysql_query($requete,$connexion)
    		or die ("erreur de la requete: ".$requete."\n");
    	mysql_query("SET NAMES UTF8");
    	$ip = 0;
    	$t=array();
    	while ($row = mysql_fetch_object($result)){
    		$t[$ip]=$row;
    		$ip++;
    	}
    	return $t;
    }

    Que veux tu dire par php ?

    Ma balise html pour l'encodage est comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <meta content="text/html; Charset=UTF-8" http-equiv="Content-Type" />
    <meta http-equiv="Content-Language" content="fr" />

    A savoir que je n'ai qu'une seule page php (index.php).
    Et dans cette page la colonne du milieu est utilisée comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php echo init_mid($connexion, nvl($_GET['p'], 'index')); ?>
    Du coup j'ai un autre fichier php qui contient les différentes fonctions qui modifie l'affichage de ce que contient la colonne du milieu.

  14. #14
    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
    En fait la question peut se résumer à : quelle est la différence entre
    $select_d[$i]->titre et $select_doc[0]->titre ????????

    Je deviens fou là vraiment....

    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
     
    $select_document = "SELECT * FROM `document`";
    $select_d = select_gen($select_document, $connexion);
     
    for($i=0; $i<count($select_d); $i++)	{					
     
    	$select_document = "SELECT `titre` FROM `document` WHERE `id_document` = '".$select_d[$i]->id_document."'";
    	$select_doc = select_gen($select_document, $connexion);
     
    	$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($i==0)	{
    		echo "
    		<tbody>";
    	}
     
    	if($afficher_document)	{
    		$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_d[$i]->titre." - ".$select_doc[0]->titre."
    			</a>";
    		}

  15. #15
    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
    Citation Envoyé par @po©alypse Voir le message
    Génial comme façon de debuggé
    Très sympa, j'apprécies

    Sache que le débogage ne se résume pas en 1 ou 2 phrases, c'est plutôt un bouquin, sans compter qu'il faut de bonnes connaissances pour le mettre en pratique.

    Tu m'excuseras de ne pas pouvoir te faire un cours ce soir.

    J'admets ne pas mettre en pratique cela à chaque ligne de code, c'est trop long et fastidieux.
    Par contre, la technique que je t'ai donné que tu as l'air de dénigrer me permet de déboguer mes codes rarement au-delà de 15/20 minutes, cela dans 90% des cas.

    Et pour conclure, dans 100% des cas on n'a pas autre chose à proposer via un forum.


    Si tu as mieux je suis preneur.

  16. #16
    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
    Citation Envoyé par RunCodePhp Voir le message
    Très sympa, j'apprécies

    Sache que le débogage ne se résume pas en 1 ou 2 phrases, c'est plutôt un bouquin, sans compter qu'il faut de bonnes connaissances pour le mettre en pratique.

    Tu m'excuseras de ne pas pouvoir te faire un cours ce soir.

    J'admets ne pas mettre en pratique cela à chaque ligne de code, c'est trop long et fastidieux.
    Par contre, la technique que je t'ai donné que tu as l'air de dénigrer me permet de déboguer mes codes rarement au-delà de 15/20 minutes, cela dans 90% des cas.

    Et pour conclure, dans 100% des cas on n'a pas autre chose à proposer via un forum.


    Si tu as mieux je suis preneur.
    Euh j'espère que ne l'a pas mal pris ce n'était pas le but...
    Et je ne dénigre pas du tout tes conseils simplement comme tu le vois dans mon code je fais une requête et je boucle dessus donc l'echo est déjà fait sur ma variable .

    Et je n'ai pas mieux vu que je suis un absolument débutant en php simplement la possibilité de poser un point d'arrêt quelque part aurait été top

  17. #17
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Citation Envoyé par @po©alypse Voir le message
    le set name est fait après chaque select:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function select_gen($requete,$connexion){
     
    	$result = mysql_query($requete,$connexion)
    		or die ("erreur de la requete: ".$requete."\n");
    	mysql_query("SET NAMES UTF8");
    	$ip = 0;
    	$t=array();
    	while ($row = mysql_fetch_object($result)){
    		$t[$ip]=$row;
    		$ip++;
    	}
    	return $t;
    }
    La requête SET NAME il faut la faire AVANT ta requête. C'est sans doute pour cela que seule la deuxième requête fonctionnait correctement. J'en profite pour optimiser un peu la construction de ton tableau (tu t'embêtais inutilement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function select_gen($requete,$connexion){
     
    	mysql_query("SET NAMES 'utf8'");
     
    	$result = mysql_query($requete,$connexion)
    		or die ("erreur de la requete: ".$requete."\n");
     
    	$t=array();
    	while ($row = mysql_fetch_object($result)){
    		$t[]=$row;
    	}
    	return $t;
    }
    Dernier conseil, pour protéger les données à l'affichage tu as intérêt à utiliser htmlspecialchars plutôt que htmlentities, car avec htmlspecialchars et l'utf8 tu n'auras pas besoin de spécifier l'encodage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo htmlspecialchars($variable);
    est quand même plus simple à écrire que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    htmlentities($variable, ENT_COMPAT, 'UTF-8');
    Et sinon pour la petite histoire PHP est très facile à débugguer, il faut simplement isoler les morceaux de scripts et les tester séparément. Comparativement javascript est beaucoup plus pénible à débugguer

  18. #18
    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
    Je peux t'embrasser ?
    Merci pour ta réponse et tes précisions

  19. #19
    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
    Petite précision aussi car apparemment cette requête (SET NAME) serait faite à chaque requête SQL car intégrée à la fonction select_gen(), ce qui est plutôt lourd.
    Il n'est pas utile de le faire à chaque fois, 1 seule fois suffit, à condition d'utiliser la même connexion pour toute les requête, ce qui à l'air d'être le cas.

    Tu pourrais supprimer cette requête dans cette fonction et la placer dans la partie qui effectue le connexion (juste après la connexion).


    On peu aussi créer sa propre fonction htmlentities (genre htmlentities_utf8) qui va automatiquement tout remplacer avec le bon encodage, cela simplement.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function htmlentities_utf8($chaine, $flags = ENT_QUOTES, $double_encode = TRUE) {
        return htmlentities($chaine, $flags, 'UTF-8', $double_encode);
    }
     
    // A l'usage :
    htmlentities_utf8($variable);

    Que veux tu dire par php ?
    Ce code : (a mettre au tout début).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=UTF-8');
    simplement la possibilité de poser un point d'arrêt quelque part aurait été top
    Tu le sais pourtant : exit(), ou die() stop le script là où il placé (un point d’arrêt quoi). (die est un alias de exit, c'est pareil).


    Au passage, les fonctions mysql_* sont obsolètes, vouées à disparaitre un de ces jours.
    Ce qui est dit sur les extensions de Php pour MySQL, entre autre le tableau comparatif tout à la fin.
    -> http://fr2.php.net/manual/fr/mysqli.overview.php
    Passer à PDO ou MySQLi serait pas mal.

  20. #20
    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 RunCodePhp.
    En fait comme l'avais fait remarquer ABCIWEB le set names était mal placé... J'avais voulu le mettre après la connexion au lieu de ça je l'ai bêtement placé après mon select...

    Merci pour les précisions au sujet de mysql, je vais jeter un coup d'oeil car si ce n'est pas compliqué ni trop long de passer de mysql à pdo ou Mysqli je le fais de suite .

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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