php/mysql : probleme pour gerer la sortie d'une boucle
7 réponses
christophe Raverdy
Bonjour.
J'ai "développé" une fonction qui est une abstraction de la fonction
mysql_fetch_assoc. En théorie elle permet de retourner une structure
(l'enregistrement) ou le booléen FALSE.
-------------------------------------------------------------------------
function extraire_ligne($identifiant)
{
[initialisation des fragments pour $message]
$message = concatene2_5($contexte_0,$contexte_1,$contexte_2,$contexte_3
$contexte_4);
// cf http://fr.php.net/manual/fr/function.mysql-fetch-array.php
$ligne = mysql_fetch_assoc($identifiant) or die($message);
// on retourne par contre FALSE si rien n'est trouvé : il faut l'exploiter
return($ligne);
}
-------------------------------------------------------------------------
J'utilise cette fonction pour générer un champ select :
J'ai fait des tests divers, la requête fonctionne correctement, par contre
on ne sort jamais de la boucle : la zone de liste s'affiche correctement,
mais en voyant le code je me rends compte qu'il manque la balise de
terminaison.
Par contre, avec un compteur sur le nombre d'enregistrements comme présenté
ci-dessous, il n'y a plus de problème.
while ($ligne=extraire_ligne($id_requete)) normal, cette condition est toujours vraie.
Olivier Miakinen
J'ai "développé" une fonction qui est une abstraction de la fonction mysql_fetch_assoc. En théorie elle permet de retourner une structure (l'enregistrement) ou le booléen FALSE.
------------------------------------------------------------------------- function extraire_ligne($identifiant) { [initialisation des fragments pour $message] $message = concatene2_5($contexte_0,$contexte_1,$contexte_2,$contexte_3 $contexte_4); // cf http://fr.php.net/manual/fr/function.mysql-fetch-array.php $ligne = mysql_fetch_assoc($identifiant) or die($message);
Ok.
// on retourne par contre FALSE si rien n'est trouvé : il faut l'exploiter return($ligne);
Ben non : si c'était FALSE tu as quitté le script par die($message).
J'ai fait des tests divers, la requête fonctionne correctement, par contre on ne sort jamais de la boucle : la zone de liste s'affiche correctement, mais en voyant le code je me rends compte qu'il manque la balise de terminaison.
Plus exactement, il y a un moment où tu sors de la boucle, mais tu sors du script par la même occasion, ce qui fait que la ligne de code suivant la boucle ne s'exécute jamais.
Par contre, avec un compteur sur le nombre d'enregistrements comme présenté ci-dessous, il n'y a plus de problème.
Normal : tu ne passes plus par le die()
J'ai "développé" une fonction qui est une abstraction de la fonction
mysql_fetch_assoc. En théorie elle permet de retourner une structure
(l'enregistrement) ou le booléen FALSE.
-------------------------------------------------------------------------
function extraire_ligne($identifiant)
{
[initialisation des fragments pour $message]
$message = concatene2_5($contexte_0,$contexte_1,$contexte_2,$contexte_3
$contexte_4);
// cf http://fr.php.net/manual/fr/function.mysql-fetch-array.php
$ligne = mysql_fetch_assoc($identifiant) or die($message);
Ok.
// on retourne par contre FALSE si rien n'est trouvé : il faut l'exploiter
return($ligne);
Ben non : si c'était FALSE tu as quitté le script par die($message).
J'ai fait des tests divers, la requête fonctionne correctement, par contre
on ne sort jamais de la boucle : la zone de liste s'affiche correctement,
mais en voyant le code je me rends compte qu'il manque la balise de
terminaison.
Plus exactement, il y a un moment où tu sors de la boucle, mais tu sors
du script par la même occasion, ce qui fait que la ligne de code suivant
la boucle ne s'exécute jamais.
Par contre, avec un compteur sur le nombre d'enregistrements comme présenté
ci-dessous, il n'y a plus de problème.
J'ai "développé" une fonction qui est une abstraction de la fonction mysql_fetch_assoc. En théorie elle permet de retourner une structure (l'enregistrement) ou le booléen FALSE.
------------------------------------------------------------------------- function extraire_ligne($identifiant) { [initialisation des fragments pour $message] $message = concatene2_5($contexte_0,$contexte_1,$contexte_2,$contexte_3 $contexte_4); // cf http://fr.php.net/manual/fr/function.mysql-fetch-array.php $ligne = mysql_fetch_assoc($identifiant) or die($message);
Ok.
// on retourne par contre FALSE si rien n'est trouvé : il faut l'exploiter return($ligne);
Ben non : si c'était FALSE tu as quitté le script par die($message).
J'ai fait des tests divers, la requête fonctionne correctement, par contre on ne sort jamais de la boucle : la zone de liste s'affiche correctement, mais en voyant le code je me rends compte qu'il manque la balise de terminaison.
Plus exactement, il y a un moment où tu sors de la boucle, mais tu sors du script par la même occasion, ce qui fait que la ligne de code suivant la boucle ne s'exécute jamais.
Par contre, avec un compteur sur le nombre d'enregistrements comme présenté ci-dessous, il n'y a plus de problème.
Normal : tu ne passes plus par le die()
machour
christophe Raverdy wrote in message news:...
Bonjour. Bonjour,
J'ai "développé" une fonction qui est une abstraction de la fonction mysql_fetch_assoc. En théorie elle permet de retourner une structure (l'enregistrement) ou le booléen FALSE.
------------------------------------------------------------------------- function extraire_ligne($identifiant) { [initialisation des fragments pour $message] $message = concatene2_5($contexte_0,$contexte_1,$contexte_2,$contexte_3 $contexte_4); // cf http://fr.php.net/manual/fr/function.mysql-fetch-array.php $ligne = mysql_fetch_assoc($identifiant) or die($message); // on retourne par contre FALSE si rien n'est trouvé : il faut l'exploiter return($ligne); } -------------------------------------------------------------------------
Ta fonction stoppe l'exécution du script PHP dès que mysql_fetch_assoc() retourne false. Normal que le </select> ne s'affiche pas dans le premier cas. D'ailleur, à quoi te sers cette fonction ? ôÖ
-- Mehdi
christophe Raverdy <craverdy@kyoto.honshu.jp.invalid> wrote in message news:<2566459.hCCxbqo8ZT@honshu>...
Bonjour.
Bonjour,
J'ai "développé" une fonction qui est une abstraction de la fonction
mysql_fetch_assoc. En théorie elle permet de retourner une structure
(l'enregistrement) ou le booléen FALSE.
-------------------------------------------------------------------------
function extraire_ligne($identifiant)
{
[initialisation des fragments pour $message]
$message = concatene2_5($contexte_0,$contexte_1,$contexte_2,$contexte_3
$contexte_4);
// cf http://fr.php.net/manual/fr/function.mysql-fetch-array.php
$ligne = mysql_fetch_assoc($identifiant) or die($message);
// on retourne par contre FALSE si rien n'est trouvé : il faut l'exploiter
return($ligne);
}
-------------------------------------------------------------------------
Ta fonction stoppe l'exécution du script PHP dès que
mysql_fetch_assoc() retourne false. Normal que le </select> ne
s'affiche pas dans le premier cas.
D'ailleur, à quoi te sers cette fonction ? ôÖ
J'ai "développé" une fonction qui est une abstraction de la fonction mysql_fetch_assoc. En théorie elle permet de retourner une structure (l'enregistrement) ou le booléen FALSE.
------------------------------------------------------------------------- function extraire_ligne($identifiant) { [initialisation des fragments pour $message] $message = concatene2_5($contexte_0,$contexte_1,$contexte_2,$contexte_3 $contexte_4); // cf http://fr.php.net/manual/fr/function.mysql-fetch-array.php $ligne = mysql_fetch_assoc($identifiant) or die($message); // on retourne par contre FALSE si rien n'est trouvé : il faut l'exploiter return($ligne); } -------------------------------------------------------------------------
Ta fonction stoppe l'exécution du script PHP dès que mysql_fetch_assoc() retourne false. Normal que le </select> ne s'affiche pas dans le premier cas. D'ailleur, à quoi te sers cette fonction ? ôÖ
-- Mehdi
christophe Raverdy
Mehdi Achour a écrit:
christophe Raverdy wrote in message news:...
Bonjour. Bonjour,
J'ai "développé" une fonction qui est une abstraction de la fonction mysql_fetch_assoc. En théorie elle permet de retourner une structure (l'enregistrement) ou le booléen FALSE.
------------------------------------------------------------------------- function extraire_ligne($identifiant) { [initialisation des fragments pour $message] $message = concatene2_5($contexte_0,$contexte_1,$contexte_2,$contexte_3 $contexte_4); // cf http://fr.php.net/manual/fr/function.mysql-fetch-array.php $ligne = mysql_fetch_assoc($identifiant) or die($message); // on retourne par contre FALSE si rien n'est trouvé : il faut l'exploiter return($ligne); } -------------------------------------------------------------------------
Ta fonction stoppe l'exécution du script PHP dès que mysql_fetch_assoc() retourne false. Normal que le </select> ne s'affiche pas dans le premier cas.
Il me semblait que quel que soit le langage, le return permettait de revenir à l'instruction qui suit l'appel de fonction, avec empilement d'une valeur de retour si elle est fournie.
Je m'étais planté dans le lien donc je reprends précisément : http://fr.php.net/manual/fr/function.mysql-fetch-assoc.php : mysql_fetch_assoc() retourne un tableau associatif qui contient la ligne lue dans le résultat result, ou bien FALSE, s'il ne reste plus de lignes à lire.
Dans ma sous-fonction je fais un appel à mysql_fetch_assoc() et c'est son résultat (tableau ou FALSE) qui est retourné et affecté à la variable $ligne.
Tel que je ne comprends pas pourquoi le *script* se retrouve impacté.
D'ailleur, à quoi te sers cette fonction ? ôÖ
abstraction de façon à ce que la personne en charge de la maintenance ultérieure de l'application ne soit pas dépendante du SGBD.
-- christophe
P.S. je n'ai pas encore lu les deux réponses précédentes.
Mehdi Achour a écrit:
christophe Raverdy <craverdy@kyoto.honshu.jp.invalid> wrote in message
news:<2566459.hCCxbqo8ZT@honshu>...
Bonjour.
Bonjour,
J'ai "développé" une fonction qui est une abstraction de la fonction
mysql_fetch_assoc. En théorie elle permet de retourner une structure
(l'enregistrement) ou le booléen FALSE.
-------------------------------------------------------------------------
function extraire_ligne($identifiant)
{
[initialisation des fragments pour $message]
$message = concatene2_5($contexte_0,$contexte_1,$contexte_2,$contexte_3
$contexte_4);
// cf http://fr.php.net/manual/fr/function.mysql-fetch-array.php
$ligne = mysql_fetch_assoc($identifiant) or die($message);
// on retourne par contre FALSE si rien n'est trouvé : il faut
l'exploiter
return($ligne);
}
-------------------------------------------------------------------------
Ta fonction stoppe l'exécution du script PHP dès que
mysql_fetch_assoc() retourne false. Normal que le </select> ne
s'affiche pas dans le premier cas.
Il me semblait que quel que soit le langage, le return permettait de revenir
à l'instruction qui suit l'appel de fonction, avec empilement d'une valeur
de retour si elle est fournie.
Je m'étais planté dans le lien donc je reprends précisément :
http://fr.php.net/manual/fr/function.mysql-fetch-assoc.php :
mysql_fetch_assoc() retourne un tableau associatif qui contient la ligne lue
dans le résultat result, ou bien FALSE, s'il ne reste plus de lignes à
lire.
Dans ma sous-fonction je fais un appel à mysql_fetch_assoc() et c'est son
résultat (tableau ou FALSE) qui est retourné et affecté à la variable
$ligne.
Tel que je ne comprends pas pourquoi le *script* se retrouve impacté.
D'ailleur, à quoi te sers cette fonction ? ôÖ
abstraction de façon à ce que la personne en charge de la maintenance
ultérieure de l'application ne soit pas dépendante du SGBD.
--
christophe
P.S. je n'ai pas encore lu les deux réponses précédentes.
J'ai "développé" une fonction qui est une abstraction de la fonction mysql_fetch_assoc. En théorie elle permet de retourner une structure (l'enregistrement) ou le booléen FALSE.
------------------------------------------------------------------------- function extraire_ligne($identifiant) { [initialisation des fragments pour $message] $message = concatene2_5($contexte_0,$contexte_1,$contexte_2,$contexte_3 $contexte_4); // cf http://fr.php.net/manual/fr/function.mysql-fetch-array.php $ligne = mysql_fetch_assoc($identifiant) or die($message); // on retourne par contre FALSE si rien n'est trouvé : il faut l'exploiter return($ligne); } -------------------------------------------------------------------------
Ta fonction stoppe l'exécution du script PHP dès que mysql_fetch_assoc() retourne false. Normal que le </select> ne s'affiche pas dans le premier cas.
Il me semblait que quel que soit le langage, le return permettait de revenir à l'instruction qui suit l'appel de fonction, avec empilement d'une valeur de retour si elle est fournie.
Je m'étais planté dans le lien donc je reprends précisément : http://fr.php.net/manual/fr/function.mysql-fetch-assoc.php : mysql_fetch_assoc() retourne un tableau associatif qui contient la ligne lue dans le résultat result, ou bien FALSE, s'il ne reste plus de lignes à lire.
Dans ma sous-fonction je fais un appel à mysql_fetch_assoc() et c'est son résultat (tableau ou FALSE) qui est retourné et affecté à la variable $ligne.
Tel que je ne comprends pas pourquoi le *script* se retrouve impacté.
D'ailleur, à quoi te sers cette fonction ? ôÖ
abstraction de façon à ce que la personne en charge de la maintenance ultérieure de l'application ne soit pas dépendante du SGBD.
-- christophe
P.S. je n'ai pas encore lu les deux réponses précédentes.
christophe Raverdy
Olivier Miakinen a écrit:
------------------------------------------------------------------------- function extraire_ligne($identifiant) { [initialisation des fragments pour $message] $message = concatene2_5($contexte_0,$contexte_1,$contexte_2,$contexte_3 $contexte_4); // cf http://fr.php.net/manual/fr/function.mysql-fetch-array.php $ligne = mysql_fetch_assoc($identifiant) or die($message);
Ok.
J'ai une question subsidiaire qui m'est apparue ultérieurement; C'est lié notamment à la priorité des opérateurs.
Donc, dans mon esprit je prévois qu'une API retournera soit une valeur soit une "exception". Je découvre à l'instant que die est l'équivalent de la fonction exit qui termine le script.
En fait je prévoyais 3 cas selon 2 types :
- anormal (par exemple mauvais $identifiant) dans ce cas déclenchement d'une erreur; - normal qu'il y ait comme réponse FALSE (pas d'enregistrement) ou enregistrement;
Dois-je comprendre (c'est ce que je pense percevoir maintenant) qu'il n'y a en fait que de cas possible : - Enregistrement - FALSE (quelle qu'en soit la raison) ?
// on retourne par contre FALSE si rien n'est trouvé : il faut l'exploiter return($ligne);
Ben non : si c'était FALSE tu as quitté le script par die($message).
Je hais l'algèbre booléenne. En fait je le voyais le 'or' comme un gestionnaire d'erreurs. Tout devient plus simple quand on RTFM.
Normal : tu ne passes plus par le die()
Mauvaise ICC, changer ICC
P.S. désolé pour Mehdi : le contexte n'était pas clair mais ma réponse a été incorrecte.
-- christophe
<bruit> merci encore </bruit> et désolé pour Me
Olivier Miakinen a écrit:
-------------------------------------------------------------------------
function extraire_ligne($identifiant)
{
[initialisation des fragments pour $message]
$message = concatene2_5($contexte_0,$contexte_1,$contexte_2,$contexte_3
$contexte_4);
// cf http://fr.php.net/manual/fr/function.mysql-fetch-array.php
$ligne = mysql_fetch_assoc($identifiant) or die($message);
Ok.
J'ai une question subsidiaire qui m'est apparue ultérieurement;
C'est lié notamment à la priorité des opérateurs.
Donc, dans mon esprit je prévois qu'une API retournera soit une valeur soit
une "exception". Je découvre à l'instant que die est l'équivalent de la
fonction exit qui termine le script.
En fait je prévoyais 3 cas selon 2 types :
- anormal (par exemple mauvais $identifiant) dans ce cas déclenchement
d'une erreur;
- normal qu'il y ait comme réponse FALSE (pas d'enregistrement) ou
enregistrement;
Dois-je comprendre (c'est ce que je pense percevoir maintenant) qu'il n'y
a en fait que de cas possible :
- Enregistrement
- FALSE (quelle qu'en soit la raison) ?
// on retourne par contre FALSE si rien n'est trouvé : il faut
l'exploiter
return($ligne);
Ben non : si c'était FALSE tu as quitté le script par die($message).
Je hais l'algèbre booléenne. En fait je le voyais le 'or' comme un
gestionnaire d'erreurs. Tout devient plus simple quand on RTFM.
Normal : tu ne passes plus par le die()
Mauvaise ICC, changer ICC
P.S. désolé pour Mehdi : le contexte n'était pas clair mais ma réponse a été
incorrecte.
------------------------------------------------------------------------- function extraire_ligne($identifiant) { [initialisation des fragments pour $message] $message = concatene2_5($contexte_0,$contexte_1,$contexte_2,$contexte_3 $contexte_4); // cf http://fr.php.net/manual/fr/function.mysql-fetch-array.php $ligne = mysql_fetch_assoc($identifiant) or die($message);
Ok.
J'ai une question subsidiaire qui m'est apparue ultérieurement; C'est lié notamment à la priorité des opérateurs.
Donc, dans mon esprit je prévois qu'une API retournera soit une valeur soit une "exception". Je découvre à l'instant que die est l'équivalent de la fonction exit qui termine le script.
En fait je prévoyais 3 cas selon 2 types :
- anormal (par exemple mauvais $identifiant) dans ce cas déclenchement d'une erreur; - normal qu'il y ait comme réponse FALSE (pas d'enregistrement) ou enregistrement;
Dois-je comprendre (c'est ce que je pense percevoir maintenant) qu'il n'y a en fait que de cas possible : - Enregistrement - FALSE (quelle qu'en soit la raison) ?
// on retourne par contre FALSE si rien n'est trouvé : il faut l'exploiter return($ligne);
Ben non : si c'était FALSE tu as quitté le script par die($message).
Je hais l'algèbre booléenne. En fait je le voyais le 'or' comme un gestionnaire d'erreurs. Tout devient plus simple quand on RTFM.
Normal : tu ne passes plus par le die()
Mauvaise ICC, changer ICC
P.S. désolé pour Mehdi : le contexte n'était pas clair mais ma réponse a été incorrecte.
-- christophe
<bruit> merci encore </bruit> et désolé pour Me
christophe Raverdy
Lionel a écrit:
while ($ligne=extraire_ligne($id_requete)) normal, cette condition est toujours vraie.
Ok, je commence à comprendre.
-- christophe
Lionel a écrit:
while ($ligne=extraire_ligne($id_requete))
normal, cette condition est toujours vraie.
while ($ligne=extraire_ligne($id_requete)) normal, cette condition est toujours vraie.
Ok, je commence à comprendre.
-- christophe
John GALLET
Bonjour,
abstraction de façon à ce que la personne en charge de la maintenance ultérieure de l'application ne soit pas dépendante du SGBD.
Alors ne réinvente pas la roue octogonale, et utilise une vraie couche d'abstraction SGBDR. Par exemple http://adodb.sourceforge.net/ qui est disponible en 100% php ou en extension C. On peut aussi citer pear-db.
a++; JG
Bonjour,
abstraction de façon à ce que la personne en charge de la maintenance
ultérieure de l'application ne soit pas dépendante du SGBD.
Alors ne réinvente pas la roue octogonale, et utilise une vraie couche
d'abstraction SGBDR. Par exemple http://adodb.sourceforge.net/ qui est
disponible en 100% php ou en extension C. On peut aussi citer pear-db.
abstraction de façon à ce que la personne en charge de la maintenance ultérieure de l'application ne soit pas dépendante du SGBD.
Alors ne réinvente pas la roue octogonale, et utilise une vraie couche d'abstraction SGBDR. Par exemple http://adodb.sourceforge.net/ qui est disponible en 100% php ou en extension C. On peut aussi citer pear-db.