Voici le problème : dans une boucle for($i=0; $i < $j; $i++), j'ai $i qui devient plus grand que $j !
Voici la boucle : $donnees = mysql_fetch_array($resultat); $j = mysql_num_fields($resultat); for ($i=0; $i < $j; $i++) { echo "i = $i, j = $j<br>"; $field_name = mysql_field_name($resultat, $i); // Utiliser sql2text ou sql2html selon le cas : $$field_name = sql2html4($donnees["$field_name"]); }
ce code est il bien complet ? car il ne devrait pas essayer i... ou bien il traine un caractère bizarre dans le $i < $j ??? ...
--
Yann
ce code est il bien complet ?
Oui, la boucle for() est entière. Avant la boucle, il y a la partie de connexion à la base et d'exécution de la requête.
car il ne devrait pas essayer i... ou bien il traine un caractère bizarre dans le $i < $j ??? ...
Je viens de vérifier, il n'y en a pas. Que des espaces classiques. Je précise que je suis sous Linux, aussi bien pour mes développements que sur le serveur.
Yann
--
ce code est il bien complet ?
Oui, la boucle for() est entière. Avant la boucle, il y a la
partie de connexion à la base et d'exécution de la requête.
car il ne devrait pas essayer i... ou
bien il traine un caractère bizarre dans le $i < $j ??? ...
Je viens de vérifier, il n'y en a pas. Que des espaces classiques.
Je précise que je suis sous Linux, aussi bien pour mes développements
que sur le serveur.
Oui, la boucle for() est entière. Avant la boucle, il y a la partie de connexion à la base et d'exécution de la requête.
car il ne devrait pas essayer i... ou bien il traine un caractère bizarre dans le $i < $j ??? ...
Je viens de vérifier, il n'y en a pas. Que des espaces classiques. Je précise que je suis sous Linux, aussi bien pour mes développements que sur le serveur.
Yann
--
Benoit F
ce code est il bien complet ? Oui, la boucle for() est entière. Avant la boucle, il y a la
partie de connexion à la base et d'exécution de la requête.
J'ai beau regarder ce code, la seule hypotèse qu'un reste c'est q'un champ de la base se nomme "j" ou "i" et donc le $$field_name écraserai la veleur du compteur.
Pouvez vous déplacer la ligne d'affichage en fin de boucle plustot qu'un début et réafficher la trace ?
-- Benoit F.
--
ce code est il bien complet ?
Oui, la boucle for() est entière. Avant la boucle, il y a la
partie de connexion à la base et d'exécution de la requête.
J'ai beau regarder ce code, la seule hypotèse qu'un reste c'est q'un
champ de la base se nomme "j" ou "i" et donc le $$field_name écraserai
la veleur du compteur.
Pouvez vous déplacer la ligne d'affichage en fin de boucle plustot qu'un
début et réafficher la trace ?
ce code est il bien complet ? Oui, la boucle for() est entière. Avant la boucle, il y a la
partie de connexion à la base et d'exécution de la requête.
J'ai beau regarder ce code, la seule hypotèse qu'un reste c'est q'un champ de la base se nomme "j" ou "i" et donc le $$field_name écraserai la veleur du compteur.
Pouvez vous déplacer la ligne d'affichage en fin de boucle plustot qu'un début et réafficher la trace ?
-- Benoit F.
--
Paul Delannoy
Yann a écrit:
ce code est il bien complet ?
Oui, la boucle for() est entière. Avant la boucle, il y a la partie de connexion à la base et d'exécution de la requête.
car il ne devrait pas essayer i... ou bien il traine un caractère bizarre dans le $i < $j ??? ...
Je viens de vérifier, il n'y en a pas. Que des espaces classiques. Je précise que je suis sous Linux, aussi bien pour mes développements que sur le serveur.
Bof, ça reste un mystère pour moi aussi. A moins que ce ne soit un pb de type de données, par ex que $j et $i ne soient pas 'bien' comparés ? Il faudrait peut être regarder la faq de php.net sur le sujet.
--
Yann a écrit:
ce code est il bien complet ?
Oui, la boucle for() est entière. Avant la boucle, il y a la
partie de connexion à la base et d'exécution de la requête.
car il ne devrait pas essayer i... ou
bien il traine un caractère bizarre dans le $i < $j ??? ...
Je viens de vérifier, il n'y en a pas. Que des espaces classiques.
Je précise que je suis sous Linux, aussi bien pour mes développements
que sur le serveur.
Bof, ça reste un mystère pour moi aussi. A moins que ce ne soit un pb de
type de données, par ex que $j et $i ne soient pas 'bien' comparés ? Il
faudrait peut être regarder la faq de php.net sur le sujet.
Oui, la boucle for() est entière. Avant la boucle, il y a la partie de connexion à la base et d'exécution de la requête.
car il ne devrait pas essayer i... ou bien il traine un caractère bizarre dans le $i < $j ??? ...
Je viens de vérifier, il n'y en a pas. Que des espaces classiques. Je précise que je suis sous Linux, aussi bien pour mes développements que sur le serveur.
Bof, ça reste un mystère pour moi aussi. A moins que ce ne soit un pb de type de données, par ex que $j et $i ne soient pas 'bien' comparés ? Il faudrait peut être regarder la faq de php.net sur le sujet.
--
Antoun
J'ai repris ton script et testé chez moi sur une requête de 4 champs. i prend les valeurs de 0 à 3, sans poser de problème.
Restent deux trous dans mon test, par où l'anomalie peut se glisser :
- ma base n'est pas la tienne ; tu jures que ce n'est pas le cas, mais si effectivement tu avais un champ j ça foutrait la merde
- je n'ai pas le code de ta fonction sql2html4, et j'ai donc testé sans. Aurais-tu un global j dedans ?
Sinon, au passage, dans $donnees["$field_name"] les guillemets sont parfaitement superflus. $donnees[$field_name] est suffisant et évite de compliquer ton code.
Antoun
--
J'ai repris ton script et testé chez moi sur une requête de 4 champs. i
prend les valeurs de 0 à 3, sans poser de problème.
Restent deux trous dans mon test, par où l'anomalie peut se glisser :
- ma base n'est pas la tienne ; tu jures que ce n'est pas le cas, mais
si effectivement tu avais un champ j ça foutrait la merde
- je n'ai pas le code de ta fonction sql2html4, et j'ai donc testé sans.
Aurais-tu un global j dedans ?
Sinon, au passage, dans $donnees["$field_name"] les guillemets sont
parfaitement superflus. $donnees[$field_name] est suffisant et évite de
compliquer ton code.
J'ai repris ton script et testé chez moi sur une requête de 4 champs. i prend les valeurs de 0 à 3, sans poser de problème.
Restent deux trous dans mon test, par où l'anomalie peut se glisser :
- ma base n'est pas la tienne ; tu jures que ce n'est pas le cas, mais si effectivement tu avais un champ j ça foutrait la merde
- je n'ai pas le code de ta fonction sql2html4, et j'ai donc testé sans. Aurais-tu un global j dedans ?
Sinon, au passage, dans $donnees["$field_name"] les guillemets sont parfaitement superflus. $donnees[$field_name] est suffisant et évite de compliquer ton code.
Antoun
--
Olivier Miakinen
Le 25/10/2004 00:25, Antoun répondait à Yann :
Restent deux trous dans mon test, par où l'anomalie peut se glisser :
- ma base n'est pas la tienne ; tu jures que ce n'est pas le cas, mais si effectivement tu avais un champ j ça foutrait la merde
- je n'ai pas le code de ta fonction sql2html4, et j'ai donc testé sans. Aurais-tu un global j dedans ?
Dans un cas comme dans l'autre, cela ne devrait pas empêcher la boucle de s'arrêter car $i ou $j n'a pas de raison d'être modifié entre l'incrémentation et le test. Ne s'agirait-il pas d'un bug du "for" ?
Voici la boucle : for ($i=0; $i < $j; $i++) { echo "i = $i, j = $j<br>"; $field_name = mysql_field_name($resultat, $i); // Utiliser sql2text ou sql2html selon le cas : $$field_name = sql2html4($donnees["$field_name"]); }
Essaye de la remplacer par le "while équivalent" : $i = 0; while ($i < $j) { echo "i = $i, j = $j<br>"; $field_name = mysql_field_name($resultat, $i); // Utiliser sql2text ou sql2html selon le cas : $$field_name = sql2html4($donnees["$field_name"]); $i++; }
Et même, pour suivre ce qui se passe : $i = 0; while ($i < $j) { echo ">-------------<br>"; echo "i = $i, j = $j<br>"; $field_name = mysql_field_name($resultat, $i); echo "i = $i, j = $j<br>"; // Utiliser sql2text ou sql2html selon le cas : $$field_name = sql2html4($donnees["$field_name"]); echo "i = $i, j = $j<br>"; $i++; echo "i = $i, j = $j<br>"; echo "<-------------<br>"; }
--
Le 25/10/2004 00:25, Antoun répondait à Yann :
Restent deux trous dans mon test, par où l'anomalie peut se glisser :
- ma base n'est pas la tienne ; tu jures que ce n'est pas le cas, mais
si effectivement tu avais un champ j ça foutrait la merde
- je n'ai pas le code de ta fonction sql2html4, et j'ai donc testé sans.
Aurais-tu un global j dedans ?
Dans un cas comme dans l'autre, cela ne devrait pas empêcher la boucle
de s'arrêter car $i ou $j n'a pas de raison d'être modifié entre
l'incrémentation et le test. Ne s'agirait-il pas d'un bug du "for" ?
Voici la boucle :
for ($i=0; $i < $j; $i++) {
echo "i = $i, j = $j<br>";
$field_name = mysql_field_name($resultat, $i);
// Utiliser sql2text ou sql2html selon le cas :
$$field_name = sql2html4($donnees["$field_name"]);
}
Essaye de la remplacer par le "while équivalent" :
$i = 0;
while ($i < $j) {
echo "i = $i, j = $j<br>";
$field_name = mysql_field_name($resultat, $i);
// Utiliser sql2text ou sql2html selon le cas :
$$field_name = sql2html4($donnees["$field_name"]);
$i++;
}
Et même, pour suivre ce qui se passe :
$i = 0;
while ($i < $j) {
echo ">-------------<br>";
echo "i = $i, j = $j<br>";
$field_name = mysql_field_name($resultat, $i);
echo "i = $i, j = $j<br>";
// Utiliser sql2text ou sql2html selon le cas :
$$field_name = sql2html4($donnees["$field_name"]);
echo "i = $i, j = $j<br>";
$i++;
echo "i = $i, j = $j<br>";
echo "<-------------<br>";
}
Restent deux trous dans mon test, par où l'anomalie peut se glisser :
- ma base n'est pas la tienne ; tu jures que ce n'est pas le cas, mais si effectivement tu avais un champ j ça foutrait la merde
- je n'ai pas le code de ta fonction sql2html4, et j'ai donc testé sans. Aurais-tu un global j dedans ?
Dans un cas comme dans l'autre, cela ne devrait pas empêcher la boucle de s'arrêter car $i ou $j n'a pas de raison d'être modifié entre l'incrémentation et le test. Ne s'agirait-il pas d'un bug du "for" ?
Voici la boucle : for ($i=0; $i < $j; $i++) { echo "i = $i, j = $j<br>"; $field_name = mysql_field_name($resultat, $i); // Utiliser sql2text ou sql2html selon le cas : $$field_name = sql2html4($donnees["$field_name"]); }
Essaye de la remplacer par le "while équivalent" : $i = 0; while ($i < $j) { echo "i = $i, j = $j<br>"; $field_name = mysql_field_name($resultat, $i); // Utiliser sql2text ou sql2html selon le cas : $$field_name = sql2html4($donnees["$field_name"]); $i++; }
Et même, pour suivre ce qui se passe : $i = 0; while ($i < $j) { echo ">-------------<br>"; echo "i = $i, j = $j<br>"; $field_name = mysql_field_name($resultat, $i); echo "i = $i, j = $j<br>"; // Utiliser sql2text ou sql2html selon le cas : $$field_name = sql2html4($donnees["$field_name"]); echo "i = $i, j = $j<br>"; $i++; echo "i = $i, j = $j<br>"; echo "<-------------<br>"; }
--
marc.quinton-PAS-DE-
Yann wrote:
Salut,
Voici le problème : dans une boucle for($i=0; $i < $j; $i++), j'ai $i qui devient plus grand que $j !
Voici la boucle : $donnees = mysql_fetch_array($resultat); $j = mysql_num_fields($resultat); for ($i=0; $i < $j; $i++) { echo "i = $i, j = $j<br>"; $field_name = mysql_field_name($resultat, $i); // Utiliser sql2text ou sql2html selon le cas : $$field_name = sql2html4($donnees["$field_name"]); }
Et voici ce qu'elle affiche :
i = 13, j = 14 i = 14, j = 14
il faudrait faire un print_r($donnees) et nous donner le passage la ou ca coince, cad vers $i, 14, 15
cette boucle n'a rien de spécialement illogique. Pour la lisibilité remplacer $j par $count ;-)
--
Yann wrote:
Salut,
Voici le problème : dans une boucle for($i=0; $i < $j; $i++),
j'ai $i qui devient plus grand que $j !
Voici la boucle :
$donnees = mysql_fetch_array($resultat);
$j = mysql_num_fields($resultat);
for ($i=0; $i < $j; $i++) {
echo "i = $i, j = $j<br>";
$field_name = mysql_field_name($resultat, $i);
// Utiliser sql2text ou sql2html selon le cas :
$$field_name = sql2html4($donnees["$field_name"]);
}
Et voici ce qu'elle affiche :
i = 13, j = 14
i = 14, j = 14
il faudrait faire un print_r($donnees) et nous donner le passage
la ou ca coince, cad vers $i, 14, 15
cette boucle n'a rien de spécialement illogique. Pour la lisibilité
remplacer $j par $count ;-)