Discussion:
variables MySql
(trop ancien pour répondre)
docanski
2013-05-14 15:38:59 UTC
Permalink
Bonjour toutes/tous,

Retiré depuis un bon bout de temps du code destiné au Web, suis obligé
de créer un "chat", avec stockage des messages dans une BdD, Free
refusant ceci dans un fichier tete. Pour ce faire, j'ai récupéré dans
mes archives une série de scripts/pages plus ou moins correctes (enfin,
je pense ...) et envoyé le tout sur site. Ça "marche", c'est déjà un bon
point. Néanmoins, j'ai quelques petites problèmes, le 1er étant
essentiellement la profondeur du stockage et son affichage dans la
fenêtre du chat : cet affichage se limite aux 2/3 de la fenêtre et les
messages les plus anciens disparaissent au fur et à mesure de l'arrivée
des suivants. Or, dans la BdD (qui ne comporte qu'une table, celle qui
stocke les messages), j'ai une profondeur de stockage bien plus
importante. Mais elle ne s'affiche pas et je ne vois pas pourquoi.
Dans les variables de cette table, j'ai ceci, lors de leur création :
<code>
`pseudo` VARCHAR(30) NOT NULL,
`message` VARCHAR(255) NOT NULL,
`date` VARCHAR(30) NOT NULL,
`formatage` VARCHAR(10) NOT NULL,
`temp` INT(30) NOT NULL,
</code>
Pour les 4 premiers, pas de problème, j'en comprends l'intérêt et la
présence.
C'est pour le 5ème que je m'interroge et je ne trouve aucune information
sur le web, du moins en français. Serait-ce celle à modifier ?

La requête vers la BdD destinée à l'affichage comporte le code suivant :

<code>
$ide= MYSQL_CONNECT($host_mysql,$user_mysql,$pass_mysql);
mysql_select_db("$bd_mysql");
$tm=microtime();$tm2=explode(" ",$tm);$tm3=$tm2[1];
$query = "DELETE FROM $table WHERE (temp+7777)<$tm3";
mysql_query($query,$ide);
$query = "SELECT * FROM $table ORDER BY id DESC";
$result = mysql_query($query,$ide);
$cpt=0;
while($row = mysql_fetch_row($result))
{
$cpt++;
$coul=substr($row[4],0,1);
$tail=substr($row[4],1,1);
$appa=substr($row[4],2,1);
$msg=$row[2];
if ($appa==1){$msg.=$row2;}
if ($appa==2){$msg2="<B>";$msg2.=$msg;$msg2.="</B>";$msg=$msg2;}
if ($appa==3){$msg2="<I>";$msg2.=$msg;$msg2.="</I>";$msg=$msg2;}
if ($appa==4){$msg2="<U>";$msg2.=$msg;$msg2.="</U>";$msg=$msg2;}
if ($appa==5){$msg2="<STRIKE>";$msg2.=$msg;$msg2.="</STRIKE>";$msg=$msg2;}
if ($coul==1){$msg2='<FONT
COLOR="#000000">';$msg2.=$msg;$msg2.="</FONT>";$msg=$msg2;}
if (snip la suite des couleurs) ...
echo"- <u>$row[1]</u> <font color=\"999999\">[$row[3]]</font> : $msg<br>";
if ($cpt==20) {break;}
}
MYSQL_CLOSE();
?>
</code>

Celle structurant le message est la suivante :

<code>
<?
$ide= MYSQL_CONNECT($host_mysql,$user_mysql,$pass_mysql);
mysql_select_db("$bd_mysql");
$query = "SELECT * FROM $table";
$result = mysql_query($query,$ide);
$taille = "1";
$datime = date("H:i");
$message2 = htmlentities($txt);
$message3 = nl2br($message2);
$formatage=$couleur;
$formatage.=$taille;
$formatage.=$attrib;
$tmp=microtime();$tmp2=explode(" ",$tmp);$tmp3=$tmp2[1];
if ($txt != "" and $pseudo != "")
{
$query = "INSERT INTO $table VALUES
('0','$pseudo','$message3','$datime','$formatage','$tmp3')";
$result = mysql_query($query,$ide);
}
MYSQL_CLOSE();
?>
</code>

Quelqu'un peut me dépanner sur ce coup ?

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Olivier Miakinen
2013-05-14 16:34:05 UTC
Permalink
Bonjour,
[...] cet affichage se limite aux 2/3 de la fenêtre et les
messages les plus anciens disparaissent au fur et à mesure de l'arrivée
des suivants. Or, dans la BdD (qui ne comporte qu'une table, celle qui
stocke les messages), j'ai une profondeur de stockage bien plus
importante. Mais elle ne s'affiche pas et je ne vois pas pourquoi.
<code>
`pseudo` VARCHAR(30) NOT NULL,
`message` VARCHAR(255) NOT NULL,
`date` VARCHAR(30) NOT NULL,
`formatage` VARCHAR(10) NOT NULL,
`temp` INT(30) NOT NULL,
</code>
Pour les 4 premiers, pas de problème, j'en comprends l'intérêt et la
présence.
C'est pour le 5ème que je m'interroge et je ne trouve aucune information
sur le web, du moins en français. Serait-ce celle à modifier ?
Je n'y connais rien en bases de données, mais mon intuition me dit
que la commande DELETE portant sur le champ que tu ne comprends pas
pourrait être la raison de la disparition des messages.

Regardons-y de plus près.
$tm=microtime();$tm2=explode(" ",$tm);$tm3=$tm2[1];
$query = "DELETE FROM $table WHERE (temp+7777)<$tm3";
Pour commencer, découvrons ensemble la fonction microtime.

<cit. http://fr2.php.net/microtime>
microtime() retourne le timestamp Unix, avec les microsecondes. Cette
fonction est uniquement disponible sur les systèmes qui supportent la
fonction gettimeofday().

Par défaut, microtime() retourne une chaîne de caractères au format
"msec sec", où sec est le temps courant mesuré en nombre de secondes
depuis l'époque Unix (1 Janvier 1970, 00:00:00 GMT), et msec est le
nombre de microsecondes qui se sont écoulées depuis sec exprimé en
secondes.
</cit.>

Si $tm est le résultat de microtime, alors $tm2 est un tableau dont
la seconde valeur est le nombre de secondes depuis l'origine des
temps, et $tm3 est justement ce nombre de secondes.

Et donc, si l'entrée a été créée avec un code similaire (ce qui semble
être le cas si j'en crois la commande INSERT plus loin dans le code),
le code commence par virer tous les messages vieux de plus de 7777
secondes, soit un peu plus de deux heures (2 h 9 mn 37 s sauf erreur).

Si tu vires ce DELETE ou si tu mets un nombre de secondes plus grand
que 7777, ça devrait changer le comportempent.


Cordialement,
--
Olivier Miakinen
docanski
2013-05-14 16:42:48 UTC
Permalink
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Post by Olivier Miakinen
Bonjour,
Salut Olivier !
Post by Olivier Miakinen
Et donc, si l'entrée a été créée avec un code similaire (ce qui semble
être le cas si j'en crois la commande INSERT plus loin dans le code),
le code commence par virer tous les messages vieux de plus de 7777
secondes, soit un peu plus de deux heures (2 h 9 mn 37 s sauf erreur).
Si tu vires ce DELETE ou si tu mets un nombre de secondes plus grand
que 7777, ça devrait changer le comportempent.
C'est ce que je pensais au départ et j'avais modifié ce délai, pour les
essais.
Mais c'est lakelos et qui m'interpelle : malgré sa longueur, la totalité
des messages n'est pas affichée dans la fenêtre du chat alors qu'elle
est bien présente pendant plus de 2 heures dans la BdD. Et en disparaît,
évidemment, une fois le délai de 7777 secondes dépassé.
J'ai gardé le DELETE, évidemment, pour ne pas engorger la BdD au delà de
ce délai.
C'est donc ailleurs que se situe le problème.

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Olivier Miakinen
2013-05-14 17:02:05 UTC
Permalink
Post by docanski
Post by Olivier Miakinen
Et donc, si l'entrée a été créée avec un code similaire (ce qui semble
être le cas si j'en crois la commande INSERT plus loin dans le code),
le code commence par virer tous les messages vieux de plus de 7777
secondes, soit un peu plus de deux heures (2 h 9 mn 37 s sauf erreur).
Si tu vires ce DELETE ou si tu mets un nombre de secondes plus grand
que 7777, ça devrait changer le comportempent.
C'est ce que je pensais au départ et j'avais modifié ce délai, pour les
essais.
Ok.
Post by docanski
Mais c'est lakelos
<https://www.google.fr/search?q=lakelos>
Lake Los Angeles
</>

???
Post by docanski
et qui m'interpelle : malgré sa longueur, la totalité
des messages n'est pas affichée dans la fenêtre du chat alors qu'elle
est bien présente pendant plus de 2 heures dans la BdD. Et en disparaît,
évidemment, une fois le délai de 7777 secondes dépassé.
J'ai gardé le DELETE, évidemment, pour ne pas engorger la BdD au delà de
ce délai.
C'est donc ailleurs que se situe le problème.
Il y a un truc qui me semble bizarre, à moi qui -- je le rappelle -- ne
gère pas de base de données :

$query = "INSERT INTO $table VALUES
('0','$pseudo','$message3','$datime','$formatage','$tmp3')";

Pourquoi y a-t-il six valeurs au lieu de cinq ?


Note que si ta question n'est pas un problème de PHP mais un problème
de sgbd, c'est dans f.c.a.sgbd que tu devrais la poser.
Denis Beauregard
2013-05-14 17:57:12 UTC
Permalink
Le Tue, 14 May 2013 19:02:05 +0200, Olivier Miakinen
Post by Olivier Miakinen
Post by docanski
Mais c'est lakelos
<https://www.google.fr/search?q=lakelos>
Lake Los Angeles
</>
???
C'est là qu'est l'os...


Denis
Olivier Miakinen
2013-05-14 21:51:04 UTC
Permalink
Post by Denis Beauregard
Post by Olivier Miakinen
Post by docanski
Mais c'est lakelos
<https://www.google.fr/search?q=lakelos>
Lake Los Angeles
</>
???
C'est là qu'est l'os...
Ha ! :-D

(je le prononçais intérieurement « lèïk lôce » au lieu de
« la quai losse »)
docanski
2013-05-15 21:37:15 UTC
Permalink
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Post by Olivier Miakinen
Il y a un truc qui me semble bizarre, à moi qui -- je le rappelle -- ne
$query = "INSERT INTO $table VALUES
('0','$pseudo','$message3','$datime','$formatage','$tmp3')";
Pourquoi y a-t-il six valeurs au lieu de cinq ?
Un oubli : c'est une variable abandonnée au cours de la mise au point de
l'affichage.
J'avais oublié de l'éliminer du code, c'est fait désormais.
Le problème reste entier : impossible d'afficher tous les messages
stockés dans la BdD.
J'ai observé le comportement du bidule et je constate que le nombre de
messages affichés dans la fenêtre du chat est toujours limité à 20,
quelle qu'en soit la longueur.
Or, je n'ai aucune restriction de ce genre, ni dans les scripts, ni dans
la BdD.
Ce chiffre mystérieux n'apparaît nulle part.
Post by Olivier Miakinen
Note que si ta question n'est pas un problème de PHP mais un problème
de sgbd, c'est dans f.c.a.sgbd que tu devrais la poser.
Je ne vois pas en quoi : une table toute simple ne comportant que 5
champs créés au départ du code que j'ai reproduit dans ma question initiale.
Heeeeelp !

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Denis Beauregard
2013-05-15 22:13:47 UTC
Permalink
Le Wed, 15 May 2013 23:37:15 +0200, docanski
Post by docanski
Je ne vois pas en quoi : une table toute simple ne comportant que 5
champs créés au départ du code que j'ai reproduit dans ma question initiale.
Heeeeelp !
Un truc que j'utilise : faire afficher avec phpmyadmin et reprendre le
même code. En d'autres mots, par exemple, je demande à phpmyadmin de
modifier tel valeur, puis je reprends son code (il est affiché) et
je l'adapte à mes besoins.

La recette :

Choisir une base
Faire "rechercher"
Modifier un des champs de l'enregistrement trouvé (si on veut)
Recopier le code SQL utilisé avec les changements appropriés.


Ne pas oublier que ce code est limité à 30 lignes par phpmyadmin.


Si cela ne fonctionne pas comme phpmyadmin, on a au moins une base
de comparaison. Dans ton cas, pourquoi il sort 20 lignes au lieu de
la quantité attendue.


Denis
docanski
2013-05-15 22:42:41 UTC
Permalink
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Post by Denis Beauregard
Choisir une base
Faire "rechercher"
Modifier un des champs de l'enregistrement trouvé (si on veut)
Recopier le code SQL utilisé avec les changements appropriés.
La table est réduite à sa plus simple expression : 5 variables avec une
longueur de champ limitée (varchar) dont la 1ère (id) utilise
l'opérateur "=" et les 4 autres le "LIKE" (varchar(nombre paramétré)).
Bref, pas de quoi fouetter un chat ... et pas plus de code que de beurre
en branche.
Les champs "Valeur" sont vides.
Post by Denis Beauregard
Ne pas oublier que ce code est limité à 30 lignes par phpmyadmin.
Je ne vois vraiment pas ce que je pourrais y changer.
Post by Denis Beauregard
Dans ton cas, pourquoi il sort 20 lignes au lieu de
la quantité attendue.
Il n'y a aucune variable où s'affiche ce chiffre 20 sorti de nulle part. :-(
A moins qu'il ne soit possible d'ajouter un champ obligeant SQL à
afficher la totalité des messages stockés, je ne vois pas comment m'en
sortir.

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Olivier Miakinen
2013-05-15 22:20:37 UTC
Permalink
Post by docanski
Post by docanski
$query = "INSERT INTO $table VALUES
('0','$pseudo','$message3','$datime','$formatage','$tmp3')";
Pourquoi y a-t-il six valeurs au lieu de cinq ?
Un oubli : c'est une variable abandonnée au cours de la mise au point de
l'affichage.
J'avais oublié de l'éliminer du code, c'est fait désormais.
Je ne comprends toujours pas comment ça a pu fonctionner : ce ne sont
pas 20 messages qui devraient s'afficher correctement, s'il y a un
décalage entre l'écriture et la lecture, mais aucun ! Ou alors, si ce
sont toujours les 20 mêmes qui s'affichent, ce sont probablement les
20 pour lesquels le code d'écriture était en phase avec le code de
lecture !

Cela dit, j'ai essayé de suivre ton code pas à pas, en allant lire la
doc à chaque fonction. Tout d'abord, il y a à chaque fois un gros
avertissement sur fond rose pour dire que toutes ces fonctions sont
dépréciées. Ensuite, je remarque que tu ne testes jamais le code de
retour de mysql_query(), or cette fonction peut très bien retourner
FALSE à la place de la « ressource » utilisable par mysql_fetch_row().
Enfin, il faut peut-être remplacer $row[1] à $row[4] par $row[0] à
$row[3].
Post by docanski
Le problème reste entier : impossible d'afficher tous les messages
stockés dans la BdD.
J'ai observé le comportement du bidule et je constate que le nombre de
messages affichés dans la fenêtre du chat est toujours limité à 20,
quelle qu'en soit la longueur.
Or, je n'ai aucune restriction de ce genre, ni dans les scripts, ni dans
la BdD.
Ce chiffre mystérieux n'apparaît nulle part.
C'est toujours 20 ? Ce sont les 20 premiers ou les 20 derniers ?
Si tu ajoutes un nouveau message, il s'affiche et le 20e plus vieux
disparaît ? Ou il ne s'affiche pas et ce sont les 20 mêmes qui
s'affichent ? C'est juste un problème à l'affichage et tu as tous
tes messages dans la base quand tu passes par les outils d'adminis-
tration, ou bien le 20e plus vieux disparaît quand tu en insères un
nouveau ? Quelle est la hauteur de l'Everest ? Tu ne vois pas une
autre question stupide que je pourrais poser ?
Post by docanski
Post by docanski
Note que si ta question n'est pas un problème de PHP mais un problème
de sgbd, c'est dans f.c.a.sgbd que tu devrais la poser.
Je ne vois pas en quoi : une table toute simple ne comportant que 5
champs créés au départ du code que j'ai reproduit dans ma question initiale.
???

Ta table a beau être toute simple (je te crois sur parole, encore une
fois je n'y connais rien et je ne sais pas juger de la simplicité d'une
table), si c'est un problème de SGBD et pas un problème de PHP il est
logique de poser la question aux experts en SGBD plutôt qu'aux experts
en PHP !

C'est comme si tu trouvais normal de demander la recette des œufs en
meurette sur fr.rec.cuisine parce que c'est compliqué, mais que tu
t'adresses à fr.comp.lang.php pour la recette de l'œuf à la coque
parce que c'est tout simple...
Post by docanski
Heeeeelp !
Je dooooo ce que je caaaaan.
docanski
2013-05-15 22:54:33 UTC
Permalink
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Post by Olivier Miakinen
Ou alors, si ce
sont toujours les 20 mêmes qui s'affichent, ce sont probablement les
20 pour lesquels le code d'écriture était en phase avec le code de
lecture !
Ah non ! pas du tout ! le 21ème message affiché provoque la disparition
du 1er, le 22ème du suivant, etc ... de sorte qu'il ne reste jamais plus
de 20 messages dans la fenêtre.
Post by Olivier Miakinen
Cela dit, j'ai essayé de suivre ton code pas à pas, en allant lire la
doc à chaque fonction. Tout d'abord, il y a à chaque fois un gros
avertissement sur fond rose pour dire que toutes ces fonctions sont
dépréciées.
C'est du vieux code récupéré dans les fonds de tiroir, j'avais prévenu ;-)
Mais je n'ai pas eu de message d'erreur en retour quand j'ai installé le
bouzin.
Post by Olivier Miakinen
C'est toujours 20 ? Ce sont les 20 premiers ou les 20 derniers ?
Si tu ajoutes un nouveau message, il s'affiche et le 20e plus vieux
disparaît ?
Oui.

Ou il ne s'affiche pas et ce sont les 20 mêmes qui
Post by Olivier Miakinen
s'affichent ? C'est juste un problème à l'affichage et tu as tous
tes messages dans la base quand tu passes par les outils d'adminis-
tration, ou bien le 20e plus vieux disparaît quand tu en insères un
nouveau ?
Oui.
Post by Olivier Miakinen
Quelle est la hauteur de l'Everest ? Tu ne vois pas une
autre question stupide que je pourrais poser ?
Une question n'est jamais stupide. Seule la réponse peut l'être :-)
Post by Olivier Miakinen
Ta table a beau être toute simple (je te crois sur parole, encore une
fois je n'y connais rien et je ne sais pas juger de la simplicité d'une
table), si c'est un problème de SGBD et pas un problème de PHP il est
logique de poser la question aux experts en SGBD plutôt qu'aux experts
en PHP !
Sauf que ne détectant aucune anomalie frappante (vu la simplicité de
celle-ci) dans la table, je n'envisage, peut-être à tort, que la
possibilité d'un problème PHP. Une commande (query) oubliée, peut-être ?
Mais comment la créer ?
Post by Olivier Miakinen
Je dooooo ce que je caaaaan.
Tu caaaaan beaucoup plus que ce que je peux doooooer ;-)

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
docanski
2013-05-15 22:58:09 UTC
Permalink
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Post by Olivier Miakinen
Ou il ne s'affiche pas et ce sont les 20 mêmes qui
Post by Olivier Miakinen
s'affichent ? C'est juste un problème à l'affichage et tu as tous
tes messages dans la base quand tu passes par les outils d'adminis-
tration, ou bien le 20e plus vieux disparaît quand tu en insères un
nouveau ?
Oui.
Heu ... j'ai répondu trop vite.
Tous les messages sont stockés dans la base pendant le temps paramétré :
7777 ms
Les plus anciens sont éliminés au fur et à mesure du dépassement de ce
paramètre.
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Olivier Miakinen
2013-05-15 23:21:04 UTC
Permalink
Post by docanski
Post by Olivier Miakinen
Ou il ne s'affiche pas et ce sont les 20 mêmes qui
Post by Olivier Miakinen
s'affichent ? C'est juste un problème à l'affichage et tu as tous
tes messages dans la base quand tu passes par les outils d'adminis-
tration, ou bien le 20e plus vieux disparaît quand tu en insères un
nouveau ?
Oui.
Heu ... j'ai répondu trop vite.
7777 ms
Les plus anciens sont éliminés au fur et à mesure du dépassement de ce
paramètre.
Oui, ok pour cela. Mais quand tu insères (mettons) 40 messages en moins
de 7777 secondes, tu en vois bien 40 dans mysqladmin, et seulement 20
via ton programme PHP ?
docanski
2013-05-16 08:39:40 UTC
Permalink
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Post by Olivier Miakinen
Oui, ok pour cela. Mais quand tu insères (mettons) 40 messages en moins
de 7777 secondes, tu en vois bien 40 dans mysqladmin, et seulement 20
via ton programme PHP ?
Ben oui, il me semble avoir été explicite au sujet de cette anomalie :
elle est la raison de mon questionnement. Me serais-je mal exprimé ?
J'ajoute que rien ne laisse supposer que mysqladmin bloque ces messages.
En tout cas je n'y décèle aucune commande ou limitation dans ce sens.

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Olivier Miakinen
2013-05-16 09:48:14 UTC
Permalink
Bonjour,
Post by docanski
Post by Olivier Miakinen
Oui, ok pour cela. Mais quand tu insères (mettons) 40 messages en moins
de 7777 secondes, tu en vois bien 40 dans mysqladmin, et seulement 20
via ton programme PHP ?
elle est la raison de mon questionnement. Me serais-je mal exprimé ?
Je ne me permettrais pas de penser que tu t'es mal exprimé, alors
que c'est moi qui n'y connais pas grand-chose : j'ai probablement
loupé une explication par manque de vocabulaire. Par exemple je ne
sais pas ce que signifie l'expression « profondeur de stockage »
que tu emploies dans ton premier article.
Post by docanski
J'ajoute que rien ne laisse supposer que mysqladmin bloque ces messages.
mysqladmin, c'est bien l'outil d'administration qui ne passe pas par
ton script PHP ? Si oui, je ne comprends pas ta remarque parce qu'il
m'avais semblé que tu disais que justement les messages n'étaient *pas*
bloqués par mysqladmin, mais qu'ils l'étaient par ton script.
Post by docanski
En tout cas je n'y décèle aucune commande ou limitation dans ce sens.
Est-ce qu'il t'est possible de faire ce que suggérait Denis Beauregard,
à savoir tester des requêtes exactement identiques dans ton code et dans
mysqladmin pour pointer les différences ?
docanski
2013-05-16 10:38:03 UTC
Permalink
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Post by Olivier Miakinen
Bonjour,
Salut Olivier,
Post by Olivier Miakinen
Je ne me permettrais pas de penser que tu t'es mal exprimé, alors
que c'est moi qui n'y connais pas grand-chose : j'ai probablement
loupé une explication par manque de vocabulaire. Par exemple je ne
sais pas ce que signifie l'expression « profondeur de stockage »
que tu emploies dans ton premier article.
Tu ne manques vraiment pas de vocabulaire mais peut-être me suis-je mal
exprimé, faute de savoir, peut-être, quels sont les termes exacts à
employer dans le jargon SQL et les autres joyeusetés qui l'accompagnent.
Lorsque je parle de profondeur de stockage, je me réfère à la notion de
temps. Si le paramètre "temps" est réglé à 7777 sec, tous les messages
émis pendant ce temps sont stockés dans la base.
Post by Olivier Miakinen
mysqladmin, c'est bien l'outil d'administration qui ne passe pas par
ton script PHP ? Si oui, je ne comprends pas ta remarque parce qu'il
m'avais semblé que tu disais que justement les messages n'étaient *pas*
bloqués par mysqladmin, mais qu'ils l'étaient par ton script.
Pour être exact, c'est la console phpMyAdmin et non mysqladmin qui
permet d'administrer la base. Celle-ci reprend les champs cités dans ma
réponse à Denis.
Et dans ces champs, je ne vois aucune instruction, aucun paramètre
susceptible de bloquer les messages stockés.
Post by Olivier Miakinen
Est-ce qu'il t'est possible de faire ce que suggérait Denis Beauregard,
à savoir tester des requêtes exactement identiques dans ton code et dans
mysqladmin pour pointer les différences ?
Sachant que celles-ci ne concernent que la *longueur* des champs
autorisés pour l'utilisateur pour les 4 principales, y compris
l'affichage de la date et de l'heure et que la 5ème ne constituent que
l'enregistrement de l'ID de celui-ci, je ne vois vraiment pas ce qui
pourrait changer quoi que ce soit.
Le seul que j'ai modifié en connaissance de cause pour remplir jusqu'à
un maximum de 2 lignes de texte dans l'espace de la fenêtre du chat est
celui du message : 375 caractères. "pseudo" en comporte jusqu'à 30,
"date" également et formatage (couleur + typo choisie pour le texte) en
comporte 10.
Mais j'admets bien volontiers que je suis une buse aussi bien en PHP
qu'en administration de BdD. Peut-être ne remarquai-je pas ce qui
sauterait aux yeux de celui qui connaît bien la musique.

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Olivier Miakinen
2013-05-16 10:30:01 UTC
Permalink
Dans la série « le béotien découvre les SGBD et tente de deviner ce
que ça fait », je continue ma lecture de ton code...
Post by docanski
<code>
`pseudo` VARCHAR(30) NOT NULL,
`message` VARCHAR(255) NOT NULL,
`date` VARCHAR(30) NOT NULL,
`formatage` VARCHAR(10) NOT NULL,
`temp` INT(30) NOT NULL,
</code>
$query = "SELECT * FROM $table ORDER BY id DESC";
$result = mysql_query($query,$ide);
Je suppose que « ORDER BY id DESC » signifie que les réponses doivent
être triées selon la valeur du champ 'id', non ? Ce champ 'id' ne
serait-il pas celui que tu as supprimé (tu m'as dit être passé de 6
champs à 5 champs) ?
Post by docanski
$cpt=0;
while($row = mysql_fetch_row($result))
Je ne crois pas que tu m'aies répondu sur le fait de tester ou non
le fait que $result puisse valoir FALSE. Ni sur la réindexation des
$row[]. Si tu as changé ton code, il serait peut-être temps de
publier la version actuelle, avec corrections.
Post by docanski
[...]
<code>
<?
$ide= MYSQL_CONNECT($host_mysql,$user_mysql,$pass_mysql);
mysql_select_db("$bd_mysql");
$query = "SELECT * FROM $table";
$result = mysql_query($query,$ide);
[...]
$query = "INSERT INTO $table VALUES
('0','$pseudo','$message3','$datime','$formatage','$tmp3')";
$result = mysql_query($query,$ide);
À quoi sert le « SELECT * FROM $table » ? Non seulement tu ne testes
pas le $result correspondant, mais en plus tu ne l'utilises même pas.
docanski
2013-05-16 16:36:28 UTC
Permalink
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Post by Olivier Miakinen
Je suppose que « ORDER BY id DESC » signifie que les réponses doivent
être triées selon la valeur du champ 'id', non ? Ce champ 'id' ne
serait-il pas celui que tu as supprimé
Non, il demeure bien et est destiné au classement par ID
Post by Olivier Miakinen
Je ne crois pas que tu m'aies répondu sur le fait de tester ou non
le fait que $result puisse valoir FALSE. Ni sur la réindexation des
$row[]. Si tu as changé ton code, il serait peut-être temps de
publier la version actuelle, avec corrections.
Je n'ai fait qu'éliminer la variable devenue inutile, rien d'autre.
En attendnt de trouver une solution ...
Post by Olivier Miakinen
À quoi sert le « SELECT * FROM $table » ? Non seulement tu ne testes
pas le $result correspondant, mais en plus tu ne l'utilises même pas.
Si mes souvenirs sont bons (je t'ai dit et tu l'as remarqué, c'est du
code développé il y a déjà bien longtemps), c'est la récupération des
messages destinés à être affichés.
Pour ce qui est de tester le $result, les bribes de PHP qui me restent
(et c'est très peu, j'ai prévenu ;-) ) me laissent sans voix (ou
incapable de le mettre en oeuvre, si tu préfères)
Désolé :-(
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Olivier Miakinen
2013-05-16 16:52:01 UTC
Permalink
Post by docanski
Post by Olivier Miakinen
Je suppose que « ORDER BY id DESC » signifie que les réponses doivent
être triées selon la valeur du champ 'id', non ? Ce champ 'id' ne
serait-il pas celui que tu as supprimé
Non, il demeure bien et est destiné au classement par ID
Ok, ça doit être un mot-clé réservé alors. Un jour peut-être je
me mettrai à SQL... comme toi un jour peut-être tu te mettras
à PHP. ;-)
Post by docanski
Post by Olivier Miakinen
Je ne crois pas que tu m'aies répondu sur le fait de tester ou non
le fait que $result puisse valoir FALSE. [...]
Pour ce qui est de tester le $result, les bribes de PHP qui me restent
(et c'est très peu, j'ai prévenu ;-) ) me laissent sans voix (ou
incapable de le mettre en oeuvre, si tu préfères)
Ok.

Là où tu as :

$result = mysql_query($query,$ide);
while ($row = mysql_fetch_row($result)) {
...
}

Faire :

$result = mysql_query($query,$ide);
if ($result === FALSE) {
... afficher une page d'erreur...
} else while ($row = mysql_fetch_row($result)) {
...
}
docanski
2013-05-16 17:30:34 UTC
Permalink
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Post by Olivier Miakinen
Ok, ça doit être un mot-clé réservé alors. Un jour peut-être je
me mettrai à SQL... comme toi un jour peut-être tu te mettras
à PHP. ;-)
Suis trop vieux, mon disque dur est saturé.
J'en arrive même parfois à oublier où j'ai mis mes lunettes ... alors
qu'elles chevauchent mon tarin. :-)
Post by Olivier Miakinen
$result = mysql_query($query,$ide);
while ($row = mysql_fetch_row($result)) {
...
}
$result = mysql_query($query,$ide);
if ($result === FALSE) {
... afficher une page d'erreur...
} else while ($row = mysql_fetch_row($result)) {
...
}
Ok, vu. Mais comme le bouzin fonctionne maintenant, le code n'a plus
besoin d'être testé.
Reste à espérer qu'il ne soit pas à revoir entièrement, vu les éléments
dépréciés ...
Merci pour ton aide !

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Otomatic
2013-05-16 17:50:35 UTC
Permalink
Post by docanski
Suis trop vieux, mon disque dur est saturé.
La connaissance, ce n'est jamais saturé.
Une journée passée sans avoir appris quelque chose, est une mauvaise
journée.
Bientôt 70 piges et je viens de migrer mon site chez un autre hébergeur
pour pouvoir tâter des possibilités de PHP 5.4.14 au lieu de 5.1.3.
--
Les gens que l'on considère comme des fous de travail sont, peut-être,
tout simplement entrain de s'amuser. Einstein
Olivier Miakinen
2013-05-16 18:02:50 UTC
Permalink
Post by Otomatic
Post by docanski
Suis trop vieux, mon disque dur est saturé.
La connaissance, ce n'est jamais saturé.
Une journée passée sans avoir appris quelque chose, est une mauvaise
journée.
Bientôt 70 piges et je viens de migrer mon site chez un autre hébergeur
pour pouvoir tâter des possibilités de PHP 5.4.14 au lieu de 5.1.3.
« La vieillesse c'est pas automatique » ;-)
docanski
2013-05-16 18:06:32 UTC
Permalink
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Post by Otomatic
Post by docanski
Suis trop vieux, mon disque dur est saturé.
La connaissance, ce n'est jamais saturé.
Je me suis donc mal exprimé mais la suite était explicite : c'est la
mémoire qui flanche.
Post by Otomatic
Une journée passée sans avoir appris quelque chose, est une mauvaise
journée.
Pas faux.
Post by Otomatic
Bientôt 70 piges et je viens de migrer mon site chez un autre hébergeur
pour pouvoir tâter des possibilités de PHP 5.4.14 au lieu de 5.1.3.
Bravo pour la verdeur ! ;-)
Perso, j'en suis même arrivé à délaisser les quelques sites que j'ai commis.

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Antoine Polatouche
2013-05-16 13:01:10 UTC
Permalink
Post by docanski
$cpt=0;
while($row = mysql_fetch_row($result))
{
$cpt++;
...
Post by docanski
echo"- <u>$row[1]</u> <font color=\"999999\">[$row[3]]</font> : $msg<br>";
if ($cpt==20) {break;}
}
Je n'ai lu qu'en vitesse ce fil de discussion, est-ce que tu te demandes
pourquoi ça n'affiche que 20 enregistrements ?
Si oui retire les 3 lignes avec $cpt...
Olivier Miakinen
2013-05-16 13:06:22 UTC
Permalink
Post by Antoine Polatouche
Post by docanski
$cpt=0;
while($row = mysql_fetch_row($result))
{
$cpt++;
...
Post by docanski
echo"- <u>$row[1]</u> <font color=\"999999\">[$row[3]]</font> : $msg<br>";
if ($cpt==20) {break;}
}
Je n'ai lu qu'en vitesse ce fil de discussion, est-ce que tu te demandes
pourquoi ça n'affiche que 20 enregistrements ?
Si oui retire les 3 lignes avec $cpt...
Hahaha ! Bravo !

Je n'ai même pas cherché ça, ayant cru sur parole docanski quand il
affirmait :

<news:kn0v6k$2cnr$***@obelix.gegeweb.org>
[...] toujours limité à 20 [...]
Or, je n'ai aucune restriction de ce genre, ni dans les scripts, ni dans
la BdD.
Ce chiffre mystérieux n'apparaît nulle part.
</news>

:-D
docanski
2013-05-16 17:23:29 UTC
Permalink
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Post by Antoine Polatouche
Post by docanski
$cpt=0;
while($row = mysql_fetch_row($result))
{
$cpt++;
Je n'ai lu qu'en vitesse ce fil de discussion, est-ce que tu te demandes
pourquoi ça n'affiche que 20 enregistrements ?
Si oui retire les 3 lignes avec $cpt...
Bingo !
Le "break" m'avait effectivement mis la puce à l'oreille, je l'avais
éliminé lors de mes essais ... mais oublié les 2 premières lignes :-(

Merci !

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Antoine Polatouche
2013-05-17 01:23:13 UTC
Permalink
Post by docanski
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Post by Antoine Polatouche
Post by docanski
$cpt=0;
while($row = mysql_fetch_row($result))
{
$cpt++;
Je n'ai lu qu'en vitesse ce fil de discussion, est-ce que tu te demandes
pourquoi ça n'affiche que 20 enregistrements ?
Si oui retire les 3 lignes avec $cpt...
Bingo !
Le "break" m'avait effectivement mis la puce à l'oreille, je l'avais
éliminé lors de mes essais ... mais oublié les 2 premières lignes :-(
Non, tu as cru: en supprimant le break tu aurais résolu ton problème, et
les lignes $cpt=0 et $cpt++ ne serviraient simplement à rien...
Post by docanski
Merci !
De rien ;)
docanski
2013-05-17 08:20:16 UTC
Permalink
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Post by Antoine Polatouche
Post by docanski
Le "break" m'avait effectivement mis la puce à l'oreille, je l'avais
éliminé lors de mes essais ... mais oublié les 2 premières lignes :-(
Non, tu as cru: en supprimant le break tu aurais résolu ton problème, et
les lignes $cpt=0 et $cpt++ ne serviraient simplement à rien...
Post by docanski
Merci !
De rien ;)
Bonjour,

J'ai relu mes notes (bien obligé de noter ou de stocker les anciens
fichiers modifiés quand il m'arrive encore de taper dans le code) depuis
le début de mes essais et j'ai retrouvé les modifs que j'avais faites,
il y a 3 mois : j'avais alors allongé et non élimliné cette variable
qui, en effet, était destinée à limiter l'affichage, la fenêtre étant à
cette époque réglée sur des plus petites dimensions.
Comme je bidouille directement sur site, j'avais envoyé ce fichier
modifié puis actualisé l'affichage "pour voir". Et malgré cette
actualisation, aucun changement ... :-(
J'ai donc remis le compteur à zéro (enfin ... à 20) et laissé tomber
pendant un moment.
Cela soulève une question : logiquement, l'écrasement d'un fichier sur
site doit tout de même être automatiquement suivi d'effet quand on
actualise la page, non !?
Dans ce cas, Arora (comme je vois que tu es linuxien, tu connais
peut-être ?) que j'utilise habituellement pour cela aurait-il des
défaillances de ce côté-là ou le serveur Free pourrait-il être mis en
cause ?

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Olivier Miakinen
2013-05-17 09:22:49 UTC
Permalink
[diapublication et suivi]

Bonjour,
Post by docanski
[...]
Comme je bidouille directement sur site, j'avais envoyé ce fichier
modifié puis actualisé l'affichage "pour voir". Et malgré cette
actualisation, aucun changement ... :-(
[...]
Cela soulève une question : logiquement, l'écrasement d'un fichier sur
site doit tout de même être automatiquement suivi d'effet quand on
actualise la page, non !?
Tout dépend du type d'« actualisation ». Selon les paramètres de cache
que tu as (ou non) configurés sur le serveur, et selon ta commande de
rafraîchissement, la page qui se réaffiche peut être celle en cache dans
ton navigateur, celle en cache sur l'un des éventuels proxys traversés,
ou celle du serveur.

Je diapublie ma réponse sur fciwn et fciwa, avec suivi vers ce dernier,
car je ne suis pas un expert et que d'autres sauront t'expliquer tout ça
bien mieux que moi.

Cordialement,
--
Olivier Miakinen
docanski
2013-05-17 10:53:54 UTC
Permalink
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Post by docanski
<code>
<?
$ide= MYSQL_CONNECT($host_mysql,$user_mysql,$pass_mysql);
mysql_select_db("$bd_mysql");
$query = "SELECT * FROM $table";
$result = mysql_query($query,$ide);
$taille = "1";
$datime = date("H:i");
$message2 = htmlentities($txt);
$message3 = nl2br($message2);
$formatage=$couleur;
$formatage.=$taille;
$formatage.=$attrib;
$tmp=microtime();$tmp2=explode(" ",$tmp);$tmp3=$tmp2[1];
if ($txt != "" and $pseudo != "")
{
$query = "INSERT INTO $table VALUES
('0','$pseudo','$message3','$datime','$formatage','$tmp3')";
$result = mysql_query($query,$ide);
}
MYSQL_CLOSE();
?>
</code>
Il me reste un petit problème à résoudre : l'ordre d'affichage des messages.
En ce moment, chaque nouveau message est affiché au sommet de la fenêtre.
Or, je voudrais qu'il le soit au bas de la fenêtre, dans l'ordre logique
de l'arrivée de ces messages, soit de haut en bas.

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Olivier Miakinen
2013-05-17 12:31:16 UTC
Permalink
Post by docanski
Il me reste un petit problème à résoudre : l'ordre d'affichage des messages.
En ce moment, chaque nouveau message est affiché au sommet de la fenêtre.
Or, je voudrais qu'il le soit au bas de la fenêtre, dans l'ordre logique
de l'arrivée de ces messages, soit de haut en bas.
Ne serait-ce pas 'ORDER BY temp' au lieu de 'ORDER BY id' ou bien
'ASC' au lieu de 'DESC' ?
docanski
2013-05-19 16:28:18 UTC
Permalink
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Ne serait-ce pas 'ORDER BY ... 'ASC' au lieu de 'DESC' ?
Bonjour Olivier,

C'était bien ASC.
Merci !

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
docanski
2013-05-19 17:47:44 UTC
Permalink
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Post by docanski
C'était bien ASC.
Mouais ... après essais du remplissage de la fenêtre, c'est un autre
problème qui survient : les messages qui "dépassent" le conteneur
s'affichent "sous" celui-ci car l'ascenseur (overflow) ne suit pas
automatiquement, il reste sur sa position.
Résultat : il faut remonter manuellement les messages qui suivent, au
fur et à mesure de la conversation. :-(
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Olivier Miakinen
2013-05-19 22:55:13 UTC
Permalink
Post by docanski
Mouais ... après essais du remplissage de la fenêtre, c'est un autre
problème qui survient : les messages qui "dépassent" le conteneur
s'affichent "sous" celui-ci car l'ascenseur (overflow) ne suit pas
automatiquement, il reste sur sa position.
Résultat : il faut remonter manuellement les messages qui suivent, au
fur et à mesure de la conversation. :-(
Mais là, ce n'est plus du PHP, et encore moins du SQL. Je te suggère
fciw.auteurs, à moins que la solution ne nécessite fcl.javascript !
Loading...