[Qst] - Nettoyage de code ?
Fermé
WDAssos
Messages postés
59
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
10 septembre 2013
-
Modifié par jipicy le 31/12/2016 à 12:05
Utilisateur anonyme - 10 sept. 2013 à 22:59
Utilisateur anonyme - 10 sept. 2013 à 22:59
A voir également:
- [Qst] - Nettoyage de code ?
- Nettoyage mac - Guide
- Nettoyage de disque - Guide
- Logiciel nettoyage pc gratuit - Guide
- Code ascii de a - Guide
- Nettoyage ordinateur lent - Guide
17 réponses
Utilisateur anonyme
25 août 2013 à 18:43
25 août 2013 à 18:43
Bonjour
cela renvoie à chaque fois une erreur SQL
Ce serait une bonne idée de recopier le message d'erreur ici.
cela renvoie à chaque fois une erreur SQL
Ce serait une bonne idée de recopier le message d'erreur ici.
Utilisateur anonyme
26 août 2013 à 15:39
26 août 2013 à 15:39
Bonjour
CONTITION est un mot réservé pour MySQL. Change le nom du champ ou entoure-le d'accents graves (Alt Gr - 7)
CONTITION est un mot réservé pour MySQL. Change le nom du champ ou entoure-le d'accents graves (Alt Gr - 7)
Utilisateur anonyme
30 août 2013 à 14:44
30 août 2013 à 14:44
L'encodage des textes est une longue histoire. Si tu n'utilises ni <head>, ni <meta>, tu n'as sans doute aucune idée de l'encodage que tu utilises actuellement. Est-ce que je me trompe ?
As-tu une idée de l'encodage utilisé par l'éditeur qui te sert à écrire tes pages ?
Et de celui utilisé par ta base mySQL ?
Et de celui utilisé par le navigateur qui va faire le rendu de tes pages (car c'est le navigateur du visiteur qui fait le rendu, pas PHP) ?
Si ces trois encodages ne sont pas les mêmes, des surprises sont à attendre.
As-tu une idée de l'encodage utilisé par l'éditeur qui te sert à écrire tes pages ?
Et de celui utilisé par ta base mySQL ?
Et de celui utilisé par le navigateur qui va faire le rendu de tes pages (car c'est le navigateur du visiteur qui fait le rendu, pas PHP) ?
Si ces trois encodages ne sont pas les mêmes, des surprises sont à attendre.
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
2 sept. 2013 à 12:21
2 sept. 2013 à 12:21
Salut,
Voici d'autres tests à essayer :
Si aucune ligne ne retourne le résultat attendu, peux tu nous copier ce qui est affiché ?
Bon test
Voici d'autres tests à essayer :
$encode = mb_detect_encoding($value); // valeur à afficher var_dump($value); // encodage de la valeur var_dump($encode); // affichage de la valeur avec l'encodage par défaut var_dump(htmlspecialchars($value)); // affichage de la valeur avec l'encodage detecté var_dump(htmlspecialchars($value, ENT_QUOTES, $encoding)); // affichage de la valeur en UTF-8 var_dump(htmlspecialchars($value, ENT_QUOTES, 'UTF-8')); // affichage de la valeur en ISO var_dump(htmlspecialchars($value, ENT_QUOTES, 'ISO-8859-1'));
Si aucune ligne ne retourne le résultat attendu, peux tu nous copier ce qui est affiché ?
Bon test
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
Modifié par le père. le 10/09/2013 à 22:38
Modifié par le père. le 10/09/2013 à 22:38
Tes résultats montrent deux choses :
- Que ton texte est codé en iso8859-1 (ou une variante) mais certainement pas en utf-8
- Que la fonction mb_detect_encoding fait très mal son boulot, en tous cas sur des textes aussi courts. J'ai fait l'essai chez moi, elle me sort bien l'encodage UTF-8
aussi sur le mot "prêt", qu'il soit encodé en ISO-8859-1 ou vraiment en utf-8
Il te reste à basculer vraiment en utf-8, ou à ajouter le 3ème paramètre 'ISO-8859-1' à tes htmlspecialchars
- Que ton texte est codé en iso8859-1 (ou une variante) mais certainement pas en utf-8
- Que la fonction mb_detect_encoding fait très mal son boulot, en tous cas sur des textes aussi courts. J'ai fait l'essai chez moi, elle me sort bien l'encodage UTF-8
aussi sur le mot "prêt", qu'il soit encodé en ISO-8859-1 ou vraiment en utf-8
Il te reste à basculer vraiment en utf-8, ou à ajouter le 3ème paramètre 'ISO-8859-1' à tes htmlspecialchars
WDAssos
Messages postés
59
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
10 septembre 2013
Modifié par jipicy le 16/12/2013 à 17:43
Modifié par jipicy le 16/12/2013 à 17:43
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Condition, Localisation) VALUES ('','Oui','Non','?','2013-08-25 18:03:00','?','8' at line 1
WDAssos
Messages postés
59
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
10 septembre 2013
Modifié par jipicy le 16/12/2013 à 17:43
Modifié par jipicy le 16/12/2013 à 17:43
YES ;-)
Merci énormément ... C'est fonctionnel à présent.
J'avais posté la requête sur developpez.net ( https://www.developpez.net/forums/d1373139/php/php-base-donnees/nettoyage-code/ ), mais à part me ridiculiser, ils n'ont pas étés aussi percutants. ;)
Maintenant néanmoins, je suis confronté à un autre problème.
Le code ISO du contenu diffère entre les masques de saisie.
En effet, bien que les accents soient bien présent dans la base SQL, ceux-ci se trouvent transformés en rendu PHP, et bien évidemment, lorsque je sélectionne cette mutation de langage, le champ renseigné ne s'inscrit pas dans la base SQL.
Voici un exemple de code :
Cela me donne "non test?" dans le masque de saisie php, et "non testé" dans la base SQL.
Comment uniformiser cela ?
La page de saisie ne dispose d'aucun <head> ou <meta> actuellement.
A vous lire,
Merci énormément ... C'est fonctionnel à présent.
J'avais posté la requête sur developpez.net ( https://www.developpez.net/forums/d1373139/php/php-base-donnees/nettoyage-code/ ), mais à part me ridiculiser, ils n'ont pas étés aussi percutants. ;)
Maintenant néanmoins, je suis confronté à un autre problème.
Le code ISO du contenu diffère entre les masques de saisie.
En effet, bien que les accents soient bien présent dans la base SQL, ceux-ci se trouvent transformés en rendu PHP, et bien évidemment, lorsque je sélectionne cette mutation de langage, le champ renseigné ne s'inscrit pas dans la base SQL.
Voici un exemple de code :
(...)
<td title="<? echo $tblInfoColum['Etat']['comment']; ?>" width="300">
Etat :
<?php
echo '<select name="' . $tblInfoColum['Etat']['name'] . '">';
foreach ($tblInfoColum['Etat']['enum'] as $value) {
$value = utf8_decode($value);
echo '<option value="' . $value . '"';
if($value== "?"){echo' selected="selected"';}
echo '>' . $value . '</option>';
}
echo '</select>';
?>
</td>
(...)
Cela me donne "non test?" dans le masque de saisie php, et "non testé" dans la base SQL.
Comment uniformiser cela ?
La page de saisie ne dispose d'aucun <head> ou <meta> actuellement.
A vous lire,
WDAssos
Messages postés
59
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
10 septembre 2013
Modifié par jipicy le 16/12/2013 à 17:43
Modifié par jipicy le 16/12/2013 à 17:43
Merci en effet de ce retour.
Comment puis-je uniformiser cela ?
Comment puis-je uniformiser cela ?
Utilisateur anonyme
30 août 2013 à 16:17
30 août 2013 à 16:17
En répondant aux questions que je te pose, ce qui m'aidera à te guider.
WDAssos
Messages postés
59
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
10 septembre 2013
Modifié par jipicy le 16/12/2013 à 17:43
Modifié par jipicy le 16/12/2013 à 17:43
En fait, justement, je n'en sais pas grand chose. Tout est par défaut :
Si je mets "<?php echo htmlspecialchars($data['Etat']); ?>", par ex., les datas avec accents sont purement ignorées du listing...
<?php
include 'invent-data.php';
$connexion = mysql_connect("$chemin_db", "$login", "$pass");
$sql = "SELECT * FROM $table";
$combien = mysql_db_query($database, $sql, $connexion);
$abo = mysql_num_rows($combien);
$abos = $abo+1;
$pageincss = $_GET[page].".php";
// Moteur :
$select = "SELECT * FROM $table WHERE 'Dispo' <> 'Non' ORDER BY $id"; // Recherche des catégories APRES verification de l'inventaire
$result = mysql_query($select) or die ('Erreur : '.mysql_error() );
$req = mysql_query($select) or die('Erreur SQL !<br />'.$select.'<br />'.mysql_error());
?>
(...)
<td><?php echo htmlspecialchars($data['Dispo']); ?></td>
<td><?php echo htmlspecialchars($data['Type']); ?></td>
<td><?php echo utf8_encode($data['Etat']); ?></td>
<td><?php echo htmlspecialchars($data['Ref']); ?></td>
<td><?php echo htmlspecialchars($data['Date']); ?></td>
(...)
Si je mets "<?php echo htmlspecialchars($data['Etat']); ?>", par ex., les datas avec accents sont purement ignorées du listing...
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
Modifié par Pitet le 30/08/2013 à 17:39
Modifié par Pitet le 30/08/2013 à 17:39
Salut,
Pour éviter les problèmes d'encodage, il est plus facile d'utiliser le même encodage partout. Il est souvent conseillé d'utiliser utf-8.
D'après tes précédents messages, les accents sont bien présents dans la bdd, il s'agit donc d'un problème avec php.
Voici quelques recommandations à tester :
- vérifier l'encodage de votre fichier php : vous pouvez le faire simplement avec Notepad++ par exemple (menu Encodage -> Convertir en UTF-8 Sans BOM)
- ajouter un meta charset dans le head de votre rendu html
- définir l'encodage du rendu dans l'entête http :
- forcer la session mysql en utf-8 : pour cela, ajouter le code suivant juste après votre connexion à la base de données
- définir l'encodage pour la fonction htmlentities() ou htmlspecialchars() :
En espérant qu'au moins une de ces propositions puissent vous aider.
Bonne journée
Pour éviter les problèmes d'encodage, il est plus facile d'utiliser le même encodage partout. Il est souvent conseillé d'utiliser utf-8.
D'après tes précédents messages, les accents sont bien présents dans la bdd, il s'agit donc d'un problème avec php.
Voici quelques recommandations à tester :
- vérifier l'encodage de votre fichier php : vous pouvez le faire simplement avec Notepad++ par exemple (menu Encodage -> Convertir en UTF-8 Sans BOM)
- ajouter un meta charset dans le head de votre rendu html
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
- définir l'encodage du rendu dans l'entête http :
header('Content-Type: text/html; charset=UTF-8');
- forcer la session mysql en utf-8 : pour cela, ajouter le code suivant juste après votre connexion à la base de données
mysql_query('SET NAMES UTF8');
- définir l'encodage pour la fonction htmlentities() ou htmlspecialchars() :
<?php echo htmlspecialchars($data['Date'], ENT_QUOTES, 'UTF-8'); ?>
En espérant qu'au moins une de ces propositions puissent vous aider.
Bonne journée
WDAssos
Messages postés
59
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
10 septembre 2013
Modifié par jipicy le 16/12/2013 à 17:43
Modifié par jipicy le 16/12/2013 à 17:43
Merci de cette aide, malheureusement, je viens d'essayer l'ensemble des solutions, et, au mieux, cela supprime les options comprenant des accents...
En effet, "'?','à réviser','non testé','Ok','Neuf'" (copié/collé de la page "Structure"/"Taille/Valeurs" de la base SQL) fait disparaitre purement et simplement "'à réviser','non testé'" des choix.
(...)Me donne, dans le masque de saisie PHP, un enum avec 2 des 5 champs vierges.
echo '<select name="' . $tblInfoColum['Etat']['name'] . '">';
foreach ($tblInfoColum['Etat']['enum'] as $value) {
$value = htmlspecialchars($value);
echo '<option value="' . $value . '"';
if($value== "?"){echo' selected="selected"';}
echo '>' . $value . '</option>';
}
echo '</select>';
(...)
En effet, "'?','à réviser','non testé','Ok','Neuf'" (copié/collé de la page "Structure"/"Taille/Valeurs" de la base SQL) fait disparaitre purement et simplement "'à réviser','non testé'" des choix.
WDAssos
Messages postés
59
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
10 septembre 2013
Modifié par jipicy le 16/12/2013 à 17:43
Modifié par jipicy le 16/12/2013 à 17:43
Aucune idée ?
Utilisateur anonyme
2 sept. 2013 à 09:41
2 sept. 2013 à 09:41
Il y a de très fortes chances que tes textes avec accents soient encodés en iso qqchose et non pas en utf8.
Dans ce cas, la fonction htmlspecialchars (qui utilise l'encodage utf8 par défaut depuis la version 5.4 de PHP, je crois) ne parvient pas à décoder et rend une chaîne vide.
Si tu regardes le code source de tes "OPTION", sont elles complètement absentes, ou seulement vides ?
Dans ce cas, la fonction htmlspecialchars (qui utilise l'encodage utf8 par défaut depuis la version 5.4 de PHP, je crois) ne parvient pas à décoder et rend une chaîne vide.
Si tu regardes le code source de tes "OPTION", sont elles complètement absentes, ou seulement vides ?
WDAssos
Messages postés
59
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
10 septembre 2013
Modifié par jipicy le 16/12/2013 à 17:43
Modifié par jipicy le 16/12/2013 à 17:43
J'ai essayé sur un autre Enum :
Et cela me donne :
string(1) "?" 1 :
string(5) "ASCII" 2 :
string(1) "?" 3 :
string(1) "?" 4 :
string(1) "?" 5 :
string(1) "?" 6 :
string(4) "Prêt" 1 :
string(5) "UTF-8" 2 :
string(0) "" 3 :
string(0) "" 4 :
string(0) "" 5 :
string(4) "Prêt" 6 :
string(3) "Don" 1 :
string(5) "ASCII" 2 :
string(3) "Don" 3 :
string(3) "Don" 4 :
string(3) "Don" 5 :
string(3) "Don" 6 :
string(10) "Pour vente" 1 :
string(5) "ASCII" 2 :
string(10) "Pour vente" 3 :
string(10) "Pour vente" 4 :
string(10) "Pour vente" 5 :
string(10) "Pour vente" 6 :
string(16) "Pour maintenance" 1 :
string(5) "ASCII" 2 :
string(16) "Pour maintenance" 3 :
string(16) "Pour maintenance" 4 :
string(16) "Pour maintenance" 5 :
string(16) "Pour maintenance" 6 :
<?php
foreach ($tblInfoColum['Type']['enum'] as $value) {
$encode = mb_detect_encoding($value);
// Debug
// valeur à afficher
echo "1 : " . var_dump($value) . "<br>";
// encodage de la valeur
echo "2 : " . var_dump($encode) . "<br>";
// affichage de la valeur avec l'encodage par défaut
echo "3 : " . var_dump(htmlspecialchars($value)) . "<br>";
// affichage de la valeur avec l'encodage detecté
echo "4 : " . var_dump(htmlspecialchars($value, ENT_QUOTES, $encode)) . "<br>";
// affichage de la valeur en UTF-8
echo "5 : " . var_dump(htmlspecialchars($value, ENT_QUOTES, 'UTF-8')) . "<br>";
// affichage de la valeur en ISO
echo "6 : " . var_dump(htmlspecialchars($value, ENT_QUOTES, 'ISO-8859-1')) . "<br>";
}
?>
Et cela me donne :
string(1) "?" 1 :
string(5) "ASCII" 2 :
string(1) "?" 3 :
string(1) "?" 4 :
string(1) "?" 5 :
string(1) "?" 6 :
string(4) "Prêt" 1 :
string(5) "UTF-8" 2 :
string(0) "" 3 :
string(0) "" 4 :
string(0) "" 5 :
string(4) "Prêt" 6 :
string(3) "Don" 1 :
string(5) "ASCII" 2 :
string(3) "Don" 3 :
string(3) "Don" 4 :
string(3) "Don" 5 :
string(3) "Don" 6 :
string(10) "Pour vente" 1 :
string(5) "ASCII" 2 :
string(10) "Pour vente" 3 :
string(10) "Pour vente" 4 :
string(10) "Pour vente" 5 :
string(10) "Pour vente" 6 :
string(16) "Pour maintenance" 1 :
string(5) "ASCII" 2 :
string(16) "Pour maintenance" 3 :
string(16) "Pour maintenance" 4 :
string(16) "Pour maintenance" 5 :
string(16) "Pour maintenance" 6 :
WDAssos
Messages postés
59
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
10 septembre 2013
Modifié par jipicy le 16/12/2013 à 17:42
Modifié par jipicy le 16/12/2013 à 17:42
Merci beaucoup de cette aide...
Et comment faire concrètement pour :
- Basculer vraiment en utf-8 ?
- Ajouter le 3ème paramètre 'ISO-8859-1' à mes htmlspecialchars ?
Et comment faire concrètement pour :
- Basculer vraiment en utf-8 ?
- Ajouter le 3ème paramètre 'ISO-8859-1' à mes htmlspecialchars ?
Utilisateur anonyme
Modifié par le père. le 10/09/2013 à 23:00
Modifié par le père. le 10/09/2013 à 23:00
Pour passer en utf-8 : voir la réponse de Pitet
Pour ajouter un 3ème paramètre à une fonction... Tu sais ce que c'est un paramètre ? Non, pas grave. Tu modifies tes appels à html_specialchars pour faire :
Pour ajouter un 3ème paramètre à une fonction... Tu sais ce que c'est un paramètre ? Non, pas grave. Tu modifies tes appels à html_specialchars pour faire :
htmlspecialchars($value, ENT_QUOTES, 'ISO-8859-1')En remplaçant $value par ta variable, bien sûr.