Bug étrange et très très ennuyant
Fermé
-Shadow-
Messages postés
2149
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
17 juin 2023
-
1 mars 2014 à 15:11
-Shadow- Messages postés 2149 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 17 juin 2023 - 7 mars 2014 à 17:44
-Shadow- Messages postés 2149 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 17 juin 2023 - 7 mars 2014 à 17:44
A voir également:
- Bug étrange et très très ennuyant
- Bug yahoo mail - Guide
- Iptv bug forum ✓ - Forum TV & Vidéo
- Bug localisation snap ✓ - Forum Snapchat
- Coco tchat bug - Forum Réseaux sociaux
- Bug yahoo mail 27 fevrier 2024 ✓ - Forum Yahoo mail
14 réponses
-Shadow-
Messages postés
2149
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
17 juin 2023
269
2 mars 2014 à 14:25
2 mars 2014 à 14:25
Up
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 291
2 mars 2014 à 14:34
2 mars 2014 à 14:34
Non ça n'est pas logique.
Mais la suppression devrait supprimer le commentaire, la réapparition n'est elle-même pas possible, ce n'est pas magique non plus.
Il y a moyen d'avoir un exemple de données insérées et qui apparaissent vident?
La seule hypothèse que je vois, c'est qu'il y a une double insertion dans la BDD. Et lorsque la donnée vide est supprimée, c'est la données complète qui apparaît.
Mais ça il faudrait le vérifier dans la log des requêtes SQL exécutées.
Mais la suppression devrait supprimer le commentaire, la réapparition n'est elle-même pas possible, ce n'est pas magique non plus.
Il y a moyen d'avoir un exemple de données insérées et qui apparaissent vident?
La seule hypothèse que je vois, c'est qu'il y a une double insertion dans la BDD. Et lorsque la donnée vide est supprimée, c'est la données complète qui apparaît.
Mais ça il faudrait le vérifier dans la log des requêtes SQL exécutées.
-Shadow-
Messages postés
2149
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
17 juin 2023
269
2 mars 2014 à 15:23
2 mars 2014 à 15:23
Tu as l'air de t'y connaître mieux que moi. Mais où sont les logs SQL dans le panneau d'administration ? :\
Donc ce seraient des doublons qui seraient publiés et qui se télescoperaient dans la base de données...? Comment faire pour éviter ce genre de bugs? Un "DISTINCT"? Mais ça marche avec INSERT INTO ?! ;P
Pour l'heure, je constate que ça le fait dans 9 cas sur 10. Je vais encore vérifier mes PHP mais j'ignore si ça vient vraiment de là. Veux-tu que je publie les morceaux de code? J'ai peur de mettre mon site sur un forum public, car il est encore en test Bêta xD
Donc ce seraient des doublons qui seraient publiés et qui se télescoperaient dans la base de données...? Comment faire pour éviter ce genre de bugs? Un "DISTINCT"? Mais ça marche avec INSERT INTO ?! ;P
Pour l'heure, je constate que ça le fait dans 9 cas sur 10. Je vais encore vérifier mes PHP mais j'ignore si ça vient vraiment de là. Veux-tu que je publie les morceaux de code? J'ai peur de mettre mon site sur un forum public, car il est encore en test Bêta xD
-Shadow-
Messages postés
2149
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
17 juin 2023
269
2 mars 2014 à 15:36
2 mars 2014 à 15:36
x'D dernières nouvelles, tu sais quoi? Y'a aussi des commentaires qui disparaissent en cours de route. C'est fascinant à quel point ça peut être bizarre comme bug.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 291
2 mars 2014 à 18:19
2 mars 2014 à 18:19
Il faudrait activer les logs du serveur MySQL dans sa config.
-Shadow-
Messages postés
2149
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
17 juin 2023
269
2 mars 2014 à 21:22
2 mars 2014 à 21:22
Re,
j'ai consulté les tables. Et aucune valeur n'est à NULL par défaut: ça aurait pu être ça. Car si NULL est par défaut, ça aurait justifié le problème. Néanmoins, je vais commencer à croire que cela vient de mon hébergeur.
Les valeurs sont filtrées par PHP: une valeur nulle (donc vide) est normalement refusée! Donc le problème vient bien de SQL! Et je viens de voir le log SQL, déjà il est pas très intéressant (à vrai dire il n'y a que des statistiques au niveau global du serveur, et non au niveau de ma BDD) et en plus PMA est extrêmement mal configuré. La liste des problèmes détectés par PMA est immense.
Tu crois que je devrais changer d'hébergeur? Et que c'est bêtement de là que vient le problème?
j'ai consulté les tables. Et aucune valeur n'est à NULL par défaut: ça aurait pu être ça. Car si NULL est par défaut, ça aurait justifié le problème. Néanmoins, je vais commencer à croire que cela vient de mon hébergeur.
Les valeurs sont filtrées par PHP: une valeur nulle (donc vide) est normalement refusée! Donc le problème vient bien de SQL! Et je viens de voir le log SQL, déjà il est pas très intéressant (à vrai dire il n'y a que des statistiques au niveau global du serveur, et non au niveau de ma BDD) et en plus PMA est extrêmement mal configuré. La liste des problèmes détectés par PMA est immense.
Tu crois que je devrais changer d'hébergeur? Et que c'est bêtement de là que vient le problème?
Azraka
Messages postés
252
Date d'inscription
mercredi 11 juin 2008
Statut
Membre
Dernière intervention
5 juin 2014
13
3 mars 2014 à 10:56
3 mars 2014 à 10:56
Pourrais-tu nous donner le code html de ton formulaire ?
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
524
3 mars 2014 à 11:19
3 mars 2014 à 11:19
Salut,
Contenu du message (codé en HTML et avec des slashs ajoutés pour éviter l'injection SQL et l'injection HTML)
Pour insérer des données en bdd, il faut oublier les fonctions tel que addslash() ou autre.
Pour éviter les injections sql, tu dois utiliser :
- mysql_real_escape_string() si tu utilises l'API MySQL (obsolète)
- mysqli_real_escape_string() si tu utilises l'API MySQLi
- les requêtes préparées ou quote() si tu utilises PDO
Il n'y a aucune raison d'échapper les caractères html avant l'insertion en bdd.
Tu dois échapper les caractères html à l'affichage des données dans ta page, avec l'utilisation de la fonction htmlentities() avec le bon encodage.
Bonne journée
Contenu du message (codé en HTML et avec des slashs ajoutés pour éviter l'injection SQL et l'injection HTML)
Pour insérer des données en bdd, il faut oublier les fonctions tel que addslash() ou autre.
Pour éviter les injections sql, tu dois utiliser :
- mysql_real_escape_string() si tu utilises l'API MySQL (obsolète)
- mysqli_real_escape_string() si tu utilises l'API MySQLi
- les requêtes préparées ou quote() si tu utilises PDO
Il n'y a aucune raison d'échapper les caractères html avant l'insertion en bdd.
Tu dois échapper les caractères html à l'affichage des données dans ta page, avec l'utilisation de la fonction htmlentities() avec le bon encodage.
Bonne journée
-Shadow-
Messages postés
2149
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
17 juin 2023
269
3 mars 2014 à 14:21
3 mars 2014 à 14:21
Salut,
mon problème n'est pas là sauf si tu penses que ça peut influer :\
mon problème n'est pas là sauf si tu penses que ça peut influer :\
Azraka
Messages postés
252
Date d'inscription
mercredi 11 juin 2008
Statut
Membre
Dernière intervention
5 juin 2014
13
3 mars 2014 à 14:55
3 mars 2014 à 14:55
Fait nous voir le code de ton formulaire html !
Si tous tes champs sont pris en compte sauf un, ça peut venir d'un problème à ce niveau là !
Si tous tes champs sont pris en compte sauf un, ça peut venir d'un problème à ce niveau là !
Azraka
Messages postés
252
Date d'inscription
mercredi 11 juin 2008
Statut
Membre
Dernière intervention
5 juin 2014
13
3 mars 2014 à 14:56
3 mars 2014 à 14:56
En plus tu nous dis le faire volontiers :)
-Shadow-
Messages postés
2149
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
17 juin 2023
269
4 mars 2014 à 01:55
4 mars 2014 à 01:55
Mdr.
Soit puisque tu le demandes volontiers xD Bref voilà le code, c'est généré via PHP, aucune erreur vu que ce formulaire fonctionne déjà, mais seulement, certaines fois, les messages apparaissent en blanc (c'est-à-dire un cas mineur, environ 9 cas sur 10 ARGLP) :
Soit puisque tu le demandes volontiers xD Bref voilà le code, c'est généré via PHP, aucune erreur vu que ce formulaire fonctionne déjà, mais seulement, certaines fois, les messages apparaissent en blanc (c'est-à-dire un cas mineur, environ 9 cas sur 10 ARGLP) :
<?php // Extrait de code // Si le visiteur est connecté on affiche le formulaire via PHP if (strlen($_SESSION['login']) > 0) { echo('<br><form method="post" action="commentaire.php">'); echo(' <textarea name="umess" id="umess" maxlength=1024>Écrire un commentaire...</textarea><br>'); echo(' <input type="submit" value="Envoyer">'); echo('</form><br>'); } ?>
Azraka
Messages postés
252
Date d'inscription
mercredi 11 juin 2008
Statut
Membre
Dernière intervention
5 juin 2014
13
4 mars 2014 à 08:41
4 mars 2014 à 08:41
Effectivement il est plutôt simple, le bug ne doit pas venir de là.
Si dans ta page commentaire.php tu affiches le $_POST, est-ce que tu le vois bien rempli à chaque fois ? Idem si tu affiches ta requête sql d'insertion ?
Ce qu'il faudrait essayer de déterminer c'est si la donnée n'est pas envoyée par le formulaire (vu ton code ça ne doit pas venir de là), et si elle l'est bien, est-ce qu'elle est insérée en bdd et perdue ensuite, ou est-ce qu'elle n'est même pas insérée.
Détails bête mais j'imagine que tu déjà vérifié que tu utilisais bien $_POST['umess'] tout le temps et que tu n'as pas une faute de frappe à un endroit ?
Sinon quand tu disais que tu as vu le contenu réapparaitre, tu veux dire dans la bdd ?
Est-ce que tu as pensé à vérifier les autres champs de ta ligne, c'était bien exactement la même ?
Si dans ta page commentaire.php tu affiches le $_POST, est-ce que tu le vois bien rempli à chaque fois ? Idem si tu affiches ta requête sql d'insertion ?
Ce qu'il faudrait essayer de déterminer c'est si la donnée n'est pas envoyée par le formulaire (vu ton code ça ne doit pas venir de là), et si elle l'est bien, est-ce qu'elle est insérée en bdd et perdue ensuite, ou est-ce qu'elle n'est même pas insérée.
Détails bête mais j'imagine que tu déjà vérifié que tu utilisais bien $_POST['umess'] tout le temps et que tu n'as pas une faute de frappe à un endroit ?
Sinon quand tu disais que tu as vu le contenu réapparaitre, tu veux dire dans la bdd ?
Est-ce que tu as pensé à vérifier les autres champs de ta ligne, c'était bien exactement la même ?
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
524
4 mars 2014 à 14:07
4 mars 2014 à 14:07
environ 9 cas sur 10
Il faudrait identifier ce qu'il y a de différents pour le cas qui ne fonctionne pas. Caractères spéciaux ?
Tu peux faire des tests et vérifier l'état de ta variable à chaque étape du traitement :
- à la récupération du message dans $_POST
- après l'échappement des caractères sql avant l'insertion en bdd
- etc..
Il faudrait identifier ce qu'il y a de différents pour le cas qui ne fonctionne pas. Caractères spéciaux ?
Tu peux faire des tests et vérifier l'état de ta variable à chaque étape du traitement :
- à la récupération du message dans $_POST
- après l'échappement des caractères sql avant l'insertion en bdd
- etc..
Ok merci les gars, je vais faire une série de tests et voir ce qui en advient. Ca doit venir des accents, une fois j'ai mis du cyrillique dans un post et rien n'est apparu. Mais le plus curieux c'est l'absence de date aussi, parfois. Cependant j'ai déjà vu un membre qui ne rencontrait jamais aucun problème avec les commentaires... Pff, à croire que c'est sélectif ;-D
Je vous tiens au jus de Ricard.
Je vous tiens au jus de Ricard.
-Shadow-
Messages postés
2149
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
17 juin 2023
269
4 mars 2014 à 23:59
4 mars 2014 à 23:59
O_o ça alors, ça vient de l'encodage...
Tous les commentaires avec des accents sont refusés! Systématiquement!
Comment remédier à ce problème sachant que je peux modifier l'encodage des attributs? Lequel mettre, parmi la liste immense qu'il y a? Ou alors, comment encoder en ISO (genre é = é) pour que ça devienne du ANSI brut?
Merci d'avance et merci de vos réponses.
Par contre ça répond pas au fait qu'un commentaire effacé réapparaisse, mais bon j'ai du mal voir après tout...
Tous les commentaires avec des accents sont refusés! Systématiquement!
Comment remédier à ce problème sachant que je peux modifier l'encodage des attributs? Lequel mettre, parmi la liste immense qu'il y a? Ou alors, comment encoder en ISO (genre é = é) pour que ça devienne du ANSI brut?
Merci d'avance et merci de vos réponses.
Par contre ça répond pas au fait qu'un commentaire effacé réapparaisse, mais bon j'ai du mal voir après tout...
-Shadow-
Messages postés
2149
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
17 juin 2023
269
5 mars 2014 à 04:03
5 mars 2014 à 04:03
Apparemment c'est un problème d'encodage dans les attributs MySQL. Mais comment convertir les messages en codes ISO ou encore faire que les tables veuillent bien accueillir des accents? Et pourquoi c'est TOUT le message qui saute, les caractères sont pas plutôt censés JUSTE bugger ?!
Vous m'avouerez que c'est un peu con...
Vous m'avouerez que c'est un peu con...
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
524
6 mars 2014 à 09:31
6 mars 2014 à 09:31
Le sgbd gère très bien les accents et l'encodage, à condition d'utiliser les bonnes méthodes.
Si ton échappement de caractère pour l'insertion en bdd est fait avec addslashes() ou de htmlentities, rien ne garanti que ta requête soit syntaxiquement correcte et donc aucune donnée n'est enregistré.
Regarde mon premier message : pour échapper les caractères spéciaux sql il faut utiliser les requêtes préparées ou mysqli_real_escape_string() selon l'api utilisé, et rien d'autre.
Ces fonctions sont les seules à connaitre les caractères spéciaux et l'encodage utilisé par le sgbd.
Si ton échappement de caractère pour l'insertion en bdd est fait avec addslashes() ou de htmlentities, rien ne garanti que ta requête soit syntaxiquement correcte et donc aucune donnée n'est enregistré.
Regarde mon premier message : pour échapper les caractères spéciaux sql il faut utiliser les requêtes préparées ou mysqli_real_escape_string() selon l'api utilisé, et rien d'autre.
Ces fonctions sont les seules à connaitre les caractères spéciaux et l'encodage utilisé par le sgbd.
-Shadow-
Messages postés
2149
Date d'inscription
jeudi 1 mai 2008
Statut
Membre
Dernière intervention
17 juin 2023
269
7 mars 2014 à 17:44
7 mars 2014 à 17:44
Ok merci beaucoup, je vais arranger le code et vous tenir au jus. Faut dire que moi et les SGBDR, ça fait deux xD