Les accents sous PHP et dans MySql

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 : Les accents sous PHP et dans MySql

Re: Les accents sous PHP et dans MySql

par Mohamed12 » 06 avr. 2015, 19:13

Sur le Head ajouter
<meta charset="UTF-8" />

et qunad vous connectez a mysql ajouter
mysql_query("SET NAMES 'utf8'");

Re: Les accents sous PHP et dans MySql

par Byters » 04 mai 2012, 15:39

Merci pour toute ton aide j'en ai fini.

Bruno

Re: Les accents sous PHP et dans MySql

par aspkiddy » 04 mai 2012, 14:53

Je ne suis pas expert donc je ne sais pas... en plus, je ne connais pas du tout PDO...

Alors si tu veux tu peux mettre en commentaire pour le tester :

Code : Tout sélectionner

//$req->closeCursor() ; // Termine le traitement de la requête

Sinon, il faut fermer la connexion de BBD...

Donc il faut ouvrir et fermer une connexion d'une base de données : ouvrir un au début du site et la fermer à la fin.

Code : Tout sélectionner

mysql_close($cnx);
Il ne faut pas donc ouvrir et fermer la connexion à chaque fois qu'on en a besoin.

Sinon, il y a trois articles et tu peux aussi chercher sur Google :
http://www.phpsources.org/tutoriel-connection.htm
http://php.net/manual/fr/function.mysql-close.php
http://fr.php.net/manual/fr/features.pe ... ctions.php

je te laisse
Bye

Re: Les accents sous PHP et dans MySql

par Byters » 04 mai 2012, 12:50

Bonjour,

Je n'avais pas remarqué mais à la fin de ma requête j'ai une erreur

Code : Tout sélectionner

Fatal error: Call to a member function closeCursor() on a non-object in D:\Sites\wamp\www\Exercices\12-connexion-base\connexion-1.php on line 40
Ce qui correspond à çeci
$req->closeCursor() ; // Termine le traitement de la requête


Est ce dû au fait que le début de mon code on ne lui déclare plus que c'est PDO ceci :
$bdd = new PDO ('mysql:host=localhost;dbname=test', 'root', '');
Mais maintenant il c'est écrit comme ceci :
   
    $cnx = mysql_connect( "localhost", "root", "" ) ; 
    $db  = mysql_select_db( "test" ) ;
    mysql_query('SET NAMES "UTF8"'); 
Dois je enlever simplement la ligne
$req->closeCursor() ; // Termine le traitement de la requête


Merci

Re: Les accents sous PHP et dans MySql

par Byters » 03 mai 2012, 22:11

Après avoir revu ma base de donnée et les =$row[1]; puis avoir rajouté ceci mysql_query('SET NAMES "UTF8"'); et avoir remanié
echo '<p>
  <strong>Jeu</strong> : ' . $nom . '<br />
  Le possesseur de ce jeu est : ' . $possesseur . ', et il le vend à ' . $prix . ' euros ! <br />
  Ce jeu fonctionne sur ' . $console . ' et on peut y jouer à ' . $nbre_joueurs_max . 'max.' . $possesseur . ' à laissé ces commentaires sur ' . $nom . ': <em>' . $commentaires . '</em>
</p>';
Tout fonctionne. Pour les $row il ne fallait pas conter le 0 car c'est l'id.
N'y aurait-il pas quelque chose de plus souple que les $row avec un chiffre à coté.
Ceci c'est juste pour mon savoir.

En tout cas je te remercie et espère que cela servira à d'autre.

Bruno

Re: Les accents sous PHP et dans MySql

par aspkiddy » 03 mai 2012, 19:35

Zut... Il fallait changer #-o
soit

Code : Tout sélectionner

$reponse= "SELECT * FROM jeux_video"; $rep = mysql_query($reponse, $cnx) or die( mysql_error() ) ;

soit

Code : Tout sélectionner

$req= "SELECT * FROM jeux_video"; $rep = mysql_query($req, $cnx) or die( mysql_error() ) ;

Re: Les accents sous PHP et dans MySql

par Byters » 03 mai 2012, 19:29

Merci pour ton aide.

Mais il y a une erreur
Notice: Undefined variable: req in D:\Sites\wamp\www\Exercices\12-connexion-base\connexion-1.php on line 11
Query was empty
Merci

Re: Les accents sous PHP et dans MySql

par aspkiddy » 03 mai 2012, 18:31

Mieux c'est comme cela :

Code : Tout sélectionner

<?php header('Content-Type: text/html; charset=UTF-8'); ?> <!DOCTYPE html> <html lang="fr"> <head> <title>Document sans nom</title> </head>
ou bien (mais ce n'est pas bon méthode :

Code : Tout sélectionner

<!DOCTYPE html> <html lang="fr"> <head> <title>Document sans nom</title> <?php echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />; ?> </head>

Re: Les accents sous PHP et dans MySql

par aspkiddy » 03 mai 2012, 18:26

tu peux essayer cela :

Code : Tout sélectionner

<?php header('Content-Type: text/html; charset=UTF-8'); ?> <?php include ("header.php"); ?> <?php $cnx = mysql_connect( "127.0.0.1", "root", "" ) ; $db = mysql_select_db( "test" ) ; $reponse= "SELECT * FROM jeux_video"; $rep = mysql_query($req, $cnx) or die( mysql_error() ) ; while($row=mysql_fetch_row($rep)){ $nom=$row[0]; $possesseur=$row[1]; $prix=$row[2]; $console=$row[3]; $nbre_joueurs_max=$row[4]; $commentaires=$row[5]; echo " <p> <strong>Jeu</strong> : $nom<br /> Le possesseur de ce jeu est : $possesseur , et il le vend à $prix euros !<br /> Ce jeu fonctionne sur $console et on peut y jouer à $nbre_joueurs_max à laissé ces commentaires sur <em> $commentaires </em> </p>" ; } $reponse->closeCursor() ; // Termine le traitement de la requête ?> <?php include ("footer.php"); ?>
mais sinon je ne sais pas pourquoi ?

Re: Les accents sous PHP et dans MySql

par Byters » 03 mai 2012, 18:16

Bien j'ai trouvé une solution à mon problème. J'ai inséré charset=utf8 dans la connexion à la bdd.
$bdd = new PDO ('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
Maintenant ce que je voudrais savoir si dans mon fichier header.php j'ai mis à la bonne place le charset
<!DOCTYPE html>
<html lang="fr">
<head>
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
<title>Document sans nom</title>
</head>
Merci

Re: Les accents sous PHP et dans MySql

par Byters » 03 mai 2012, 17:42

Merci pour tes réponses, mais ça ne fonctionne pas, enfin en partie car il n'y a qu'à un seul endroit où cela ne fonctionne pas.
Tout d'abord voici ma configuration Bdd sous Wamp.

Ma Bdd est en Interclassement : utf8_general_ci
Ci-dessous mon code modifier de mon header.php
<!DOCTYPE html>
<html lang="fr">
<head>
<?php header('Content-Type: text/html; charset=UTF-8'); ?>
<title>Document sans nom</title>
</head>
<body>
Ci-dessous mon code index.php
<?php include ("header.php"); ?>
<?php
try
    {
        // On se connecte à MySQL
        $bdd = new PDO ('mysql:host=localhost;dbname=test', 'root', '');
        header('Content-Type: text/html; charset=UTF-8');
    }
    catch (Exception $e)
    {
        // En cas d'erreur, on affiche un message et on arrête tout
        die('Erreur : ' . $e->getMessage());
		
	//$good = strtr($bad, get_html_translation_table(HTML_ENTITIES, ENT_QUOTES));
		
		// Une fois connecté à la bdd utf8
        // mysql_query("SET NAMES 'utf8'");
    }
        // Si tout va bien, on peut continuer
        
        // On récupère tout le contenu de la table jeux_video
    $reponse = $bdd->query('SELECT * FROM jeux_video');
    
        //On affiche chaque entrée une à une
    while ($donnees = $reponse->fetch())
    {
?>
    <p>
        <strong>Jeu</strong> : <?php echo $donnees ['nom']; ?><br />
        Le possesseur de ce jeu est : <?php echo $donnees ['possesseur']; ?>, et il le vend à <?php echo $donnees ['prix']; ?> euros !<br />
        Ce jeu fonctionne sur <?php echo $donnees ['console']; ?> et on peut y jouer à <?php echo $donnees ['nbre_joueurs_max']; ?> au maximum<br />
        <?php echo $donnees ['possesseur']; ?> à laissé ces commentaires sur <?php echo $donnees ['nom']; ?> : <em><?php echo $donnees ['commentaires']; ?></em>
    </p>
<?php
}

    $reponse->closeCursor() ; // Termine le traitement de la requête

?>
<?php include ("footer.php"); ?>
Entre les balises <p></p> il a du simple texte avec des accents ceux là fonctionnent bien il y a que ceux qui viennent de la Bdd qui ne fonctionne pas.
Je suis aller voir ci il n'y avait pas des caractères bizar et rien de spécial.

Merci

Re: Les accents sous PHP et dans MySql

par aspkiddy » 03 mai 2012, 15:25

Cela dépend de ton enregistrement dans ta BDD !
Interclassement : utf8_general_ci [école] ou
Interclassement : latin1_swedish_ci [�cole]



Il faut :

1re chose : dans 1er fichier (d'enregistrement) :

Code : Tout sélectionner

<?php header('Content-Type: text/html; charset=UTF-8'); ?>
2e :
dans les champs/colones de ton BDD il faut chosir :
Interclassement : utf8_general_ci

3e
dans 2e fichier (de lire les informations vient de BDD) :

Code : Tout sélectionner

<?php header('Content-Type: text/html; charset=UTF-8'); ?>
l'utilisateur écrit, par exemple "école" dans le fichier (d'enregistrement)
Dans la BDD, sous phpMyAdmin : c'est enregistré [école]
et lu/affiché aussi "école"...



Sinon il faut utiliser

Code : Tout sélectionner

<?php header('Content-Type: text/html; charset=iso-8859-1'); ?>

Re: Les accents sous PHP et dans MySql

par Byters » 03 mai 2012, 07:35

Bonjour,

Je relève le post car j'ai aussi le problème d’accents dans un exercice php plus connexion à la bdd MySQL

Je vous laisse en partie mon code pour voir ce qui cloche. Je pensais avoir trouvé dans ce post mais non ca ne fonctionne pas pour moi

J'ai trois fichier un header index footer
header.php

Code : Tout sélectionner

<!DOCTYPE html> <html lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Document sans nom</title> </head> <body>
index.php

Code : Tout sélectionner

<?php include ("header.php"); ?> <?php try { // On se connecte à MySQL $bdd = new PDO ('mysql:host=localhost;dbname=test', 'root', ''); //juste après la connexion mysql_query("SET NAMES 'utf8'"); } catch (Exception $e) { // En cas d'erreur, on affiche un message et on arrête tout die('Erreur : ' . $e->getMessage()); } // Si tout va bien, on peut continuer // On récupère tout le contenu de la table jeux_video $reponse = $bdd->query('SELECT * FROM jeux_video'); //On affiche chaque entrée une à une while ($donnees = $reponse->fetch()) { ?> <p> <strong>Jeu</strong> : <?php echo $donnees ['nom']; ?><br /> Le possesseur de ce jeu est : <?php echo $donnees ['possesseur']; ?>, et il le vend à <?php echo $donnees ['prix']; ?> euros !<br /> Ce jeu fonctionne sur <?php echo $donnees ['console']; ?> et on peut y jouer à <?php echo $donnees ['nbre_joueurs_max']; ?> au maximum<br /> <?php echo $donnees ['possesseur']; ?> à laissé ces commentaires sur <?php echo $donnees ['nom']; ?> : <em><?php echo $donnees ['commentaires']; ?></em> </p> <?php } $reponse->closeCursor() ; // Termine le traitement de la requête ?> <?php include ("footer.php"); ?>
J'ai le problème des accents uniquement dans la base sql et j'ai pourtant fait comme vous le voyez un mysql_query("SET NAMES 'utf8'"); comme il est dit dans les posts plus haut.
Merci pour votre aide
Bruno

Re: Les accents sous PHP et dans MySql

par aspkiddy » 19 août 2010, 22:39

j'ai trouve

Il fallait
utf8_decode()

Code : Tout sélectionner

fputs($ouvrir_FD, utf8_decode($var_ville).';'.utf8_decode($var_code_postal).';'."\n");

Merci AB pour tes aides

Bonsoir...

Re: Les accents sous PHP et dans MySql

par AB » 19 août 2010, 20:06

Ben c'est normal un fichier excel n'est pas compatible avec un fichier sql !

Pour enregistrer tes données ou les données de la table au format excel tu peux utiliser la fonction fputcsv
Par exemple pour exporter le contenu de la table 'matable' dans un fichier dont le chemin est $dirfile au format excel (.csv) :
	
mysql_query("SET NAMES 'utf8'");

$query = "SELECT * FROM matable";

	$result = mysql_query($query);
	
	if($result && $fp = @fopen($dirfile, 'w+'))
	
		{
	
			while ($line = mysqli_fetch_row($result)) fputcsv($fp, $line, ';');
		
			fclose($fp);
		}
le ';' dans fputcsv est pour avoir directement le format français séparé par des ;
(Enlèves le @ devant fopen durant les tests pour visualiser les erreurs)

EDIT : Y'a bien une fonction sql qui permet d'écrire directement dans un fichier mais cela demande d'avoir les droits sql pour le faire ce qui n'est jamais le cas sur un mutualisé. Le principe ci-dessus à l'avantage de fonctionner partout.