Un champ pas toujours rempli

Avatar du membre
Eléphant du PHP | 224 Messages

17 févr. 2019, 17:05

Hllo,

J'ai un truc bizarroïde (oui encore lol )

Voilà, une fois toutes les 10 secondes, je récupère quelques champs d'une trentaine de lignes d'une table sur un serveur distant, et je rempli une table (précédemment vidée) du site.

Pour ce faire, une première requête récupère les données de la table source, et chaque champs alimente un array

Code : Tout sélectionner

$sql = "SELECT date_played, song_type, id_subcat, artist, title, duration FROM history ORDER BY history.date_played DESC LIMIT 0, 30" ; $requete = mysqli_query( $dbrdj, $sql ) ; while( $result = mysqli_fetch_array( $requete ) ) { $date_played[] = $result['date_played']; $song_type[] = $result['song_type']; $id_subcat[] = $result['id_subcat']; $duration[] = $result['duration']; $artist[] = addslashes($result['artist']); $title[] = addslashes($result['title']); }
Puis j'alimente la table sur la base de données du site :

Code : Tout sélectionner

for ($i = 0; $i < 30 ; $i++) { $sql = "INSERT INTO history SET date_played='$date_played[$i]', song_type='$song_type[$i]', id_subcat='$id_subcat[$i]', duration='$duration[$i]', artist='$artist[$i]', title='$title[$i]';"; $requete = mysqli_query( $dbwrite, $sql ) ; }
Le problème, régulièrement, le champs "duration" , qui est de type "Double (11,5)", comme la source, se retrouve qu'avec "0.00000" au lieu de la durée du titre (puisqu’il s'agit de musiques vous l'aurez deviné :) ).

C’est aléatoire, ça ne touche pas forcément toutes les lignes. Au ramassage suivant, les "durations" sont là .
Le problème ne touche que cette colonne.

L'ennui c'est que plus tard dans mon script, j'utilise la "duration" dans une jointure de requête et du coup, quand il y a "0.00000", la requête ne donne rien et j'ai pas de données finales (ID de pochette et nom du titre en cours + ID des 5 pochettes de titres passés avant) à exploiter , ce qui fait que le site affiche des fois des pochettes génériques.

Si quelqu'un a une idée , je suis preneur, car je vois pas où est mon erreur du coup :(

Merkouin :D
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen:

Mammouth du PHP | 2703 Messages

17 févr. 2019, 18:25

c'est pas plutôt du au fait que des artistes ou titre peuvent avoir un ' dans leur intitulé ?
si ce n'est pas cela, un echo $sql affiche quelque chose de correct quand cela ne fonctionne pas ?

Avatar du membre
Eléphant du PHP | 224 Messages

17 févr. 2019, 19:25

Je pense pas que ce soit à cause des apostrophes, d'autant plus que les autres champs que "duration" sont écrits normalement, et aussi qu'au relevé de données suivant, ça passe pour ces mêmes titres. De plus, addslashes normalement empêche le problème de ' .

Concernant l'affichage de la requête, pas évident puisque la page est déclenchée par javascript et retourne les infos finales en json , donc en gros c'est invisible pour le visiteur.
Si je la déclenche manuellement (lien direct de la page) en ayant pris soin de retirer le header json, et en ayant mis les requetes et echos , j'ai par exemple ca :

Code : Tout sélectionner

SELECT date_played, song_type, id_subcat, artist, title, duration FROM history ORDER BY history.date_played DESC LIMIT 0, 30 Ecriture 0 : INSERT INTO history SET date_played='2019-02-17 18:18:51', song_type='0', id_subcat='1', duration='376.96712', artist='Manuela', title='Stand And Dance (Now Or Never)'; Relecture 0 : 2019-02-17 18:18:51 - 0 - 1 - 376.96712 - Manuela - Stand And Dance (Now Or Never) Ecriture 1 : INSERT INTO history SET date_played='2019-02-17 18:18:43', song_type='1', id_subcat='11', duration='9.06485', artist='Jingle 2019', title='Sergio 6'; Relecture 1 : 2019-02-17 18:18:43 - 1 - 11 - 9.06485 - Jingle 2019 - Sergio 6 Ecriture 2 : INSERT INTO history SET date_played='2019-02-17 18:14:16', song_type='0', id_subcat='1', duration='267.09769', artist='Unsex Feat Sandy', title='I Love Your Baby'; Relecture 2 : 2019-02-17 18:14:16 - 0 - 1 - 267.09769 - Unsex Feat Sandy - I Love Your Baby etc etc ...
Je ne suis pas parvenu à avoir les 0.0000 en relecture à chaque actualisation de la page.
Le problème c'est que quand la table se retrouve avec des 0.0000, le script a déjà été exécuté, donc je peux pas voir ce qu'il s'est passé :(

Edit : Pour les ' , ca passe quand meme :

Code : Tout sélectionner

Ecriture 13 : INSERT INTO history SET date_played='2019-02-17 17:44:44', song_type='0', id_subcat='1', duration='313.99118', artist='2 Brothers On The 4th Floor', title='Can\'t Help Myself'; Relecture 13 : 2019-02-17 17:44:44 - 0 - 1 - 313.99118 - 2 Brothers On The 4th Floor - Can't Help Myself
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen:

Mammouth du PHP | 1967 Messages

17 févr. 2019, 21:21

utilise un fichier de log pour chaque requète, et résultat. ainsi tu verra où se produit le problème
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Eléphant du PHP | 224 Messages

18 févr. 2019, 05:57

Hello :)

J'ai regardé pour activer les logs mais je pense que je ne dois pas m'y prendre comme il faut pour la recherche car je suis tombé sur des activations de log sur le serveur mysql (pas sur qu'on puisse sur du mutualisé en plus) et non sur la ou les requêtes qu'on veut.

Je veux dire, je pense un truc du genre à mettre dans le fichier php qu'on veut analyser :

Code : Tout sélectionner

mysqli_log( $dbwrite, $sql, "chemin_du_fichier_log") ;
Vers quelle commande faut-il que je m'oriente pour ma recherche ?

Merki :)
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen:

Mammouth du PHP | 1967 Messages

18 févr. 2019, 09:07

Je ferai mon prop^re système de log juste ce qu'il faut.

tu recupère le contenu de tes tableaux de données source avec var_export par exemple et ensuite tes requètes complète (après préparation) et tu met le tout dans un fichier text avec file_put_content(s) je sais jamais si il y a ou pas le s final. avec une date/heure dans le nom de fichier tu pourras savoir si le problème vient de la source, du transfert ou autres .
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Eléphant du PHP | 224 Messages

19 févr. 2019, 19:29

Ah ok , je voyais pas ca comme ca :)

Cependant, avant de me lancer dans des logs, j'ai renommé la table history du site (destination on dira) car j’avais un truc spé (la table continuait d’être alimenté malgré suppression du fichier qui a le script qui l'alimente, alors peut etre quelque chose resté en cache chez un visiteur, je ne sais pas ), et du coup, plus de problème.

Je pense que chez l’hébergeur, ca avait du mal entre la table history de la base (distante) et la table history du site , pourtant avec mysqli, on indique sur quel connexion on travaille ...

Je vais attendre un peu pour voir si c'est bien ca et je repasserais pour mettre en résolu :)
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen: