IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Boucle sans fin sur mysql_fetch_array [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Par défaut Boucle sans fin sur mysql_fetch_array
    Bonjour,

    J'ai un problème avec l'affichage de mes données. Cela marchait bien il y a quelques jours mais plus aujourd'hui...
    J'ai une table avec un seul enregistrement, mais le code suivant l'affiche en boucle... (j'ai mis un $i pour limiter l'affichage). Je pense que c'est lié à l'encodage de la page puisque c'est la seule chose que j'ai changé depuis. J'ai donc rajouté mysql_query("SET NAMES 'utf8'"); comme dit dans la FAQ mais ca ne change rien.
    J'ajoute que les enregistrement s'affichent sans problème.
    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    	$i=0;
    	while ($resultat = database ("alliancefrancai_news", "*", "News", "", "id DESC") and $i!=3)
    {
         echo "<h3>".$resultat['title'];
     
    	 if ($resultat['date'] !="") echo " - (".$resultat['date'].")</h3>";
    	 else echo "</h3>";
    	 if ($resultat['image'] !="") echo "<img class='floatleft' style='margin-right:5px'src='".$resultat['image']."' alt='picture' />";
         echo "<p>".$resultat['content']."</p>";
     
    	 if ($resultat['site']!="")	 echo "<a href='".$resultat['site']."' class='lienrose'>More informations</a>";
         $i=$i+1;
    }
    mysql_close();
    ?>
    ainsi que le code de la fonction database :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function database ($databasename, $champs, $table, $where, $orderby) { //send a query to database and return the result
     
    	$host = "sql2"; // adresse du serveur mysql
    	$username = "*****"; // nom d'utilisateur mysql
    	$pass = "*****"; // mot de passe mysql
     
    	mysql_connect($host, $username, $pass); // on se connecte...
    	mysql_query("SET NAMES 'utf8'");
    	mysql_select_db($databasename); // on selectionne la base de donn&eacute;es
     
    	$requete ="SELECT ".$champs." FROM ".$table." ";
    	if ($where !="") $requete=$requete." WHERE ".$where;
    	if ($orderby !="") $requete=$requete." ORDER BY ".$orderby;
    	echo $requete;
    	$result = mysql_query($requete);
    	return mysql_fetch_array($result);
    }
    Merci d'avance car là je n'ai aucune idée du problème.
    Gscorpio

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 199
    Par défaut
    essaye d´enlever
    dans ton while.

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Bonjour

    Il est logique que tu te retrouves dans une boucle infinie car tu ré-executes la requête à chaque tour de boucle.
    J'explique :
    premier tour : pour tester la condition dans le while, le script exécute la fonction database. Cette fonction exécute un mysql_query, donc exécute la requête, puis renvoie le résultat.
    2e tour : pour tester la condition, le script execute à nouveau la fonction, donc la requête, obtient un résultat (le même qu'avant) et valide la condition
    Et ainsi de suite ad infinitam...

    Si tu veux conserver ta fonction database qui exécute la requête, fais-liu renvoyer le résultat de la requête (sans mysql_fetch_array) et applique comme condition un mysql_fetch sur le retour de cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    function database ($databasename, $champs, $table, $where, $orderby) { //send a query to database and return the result
     
    	$host = "sql2"; // adresse du serveur mysql
    	$username = "*****"; // nom d'utilisateur mysql
    	$pass = "*****"; // mot de passe mysql
     
    	mysql_connect($host, $username, $pass); // on se connecte...
    	mysql_query("SET NAMES 'utf8'");
    	mysql_select_db($databasename); // on selectionne la base de donn&eacute;es
     
    	$requete ="SELECT ".$champs." FROM ".$table." ";
    	if ($where !="") $requete=$requete." WHERE ".$where;
    	if ($orderby !="") $requete=$requete." ORDER BY ".$orderby;
    	echo $requete;
    	$result = mysql_query($requete);
    	return $result;
    }
    et on l'utilise ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $results = database ("alliancefrancai_news", "*", "News", "", "id DESC");
    while ($resultat = mysql_fetch_array($results ))
    { .... }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Par défaut
    mmmmh... En effet. C'est tellement logique, je sais pas comment ça a pu m'échapper. J'étais persuadé que ça marchait avec cette méthode mais je dois me tromper. Comme quoi un regarde neuf ça aide.
    Merci beaucoup!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/11/2009, 16h22
  2. [Débutant]Boucle sans fin : Wend non reconnu
    Par SebHoule dans le forum IHM
    Réponses: 5
    Dernier message: 12/06/2006, 16h49
  3. C : utilisation de getopt - il boucle sans fin...
    Par moussmouss dans le forum C
    Réponses: 14
    Dernier message: 21/12/2005, 11h35
  4. Boucle sans fin : danger pour le serveur ?
    Par Rémiz dans le forum Langage
    Réponses: 4
    Dernier message: 09/12/2005, 16h52
  5. [SQL SERVER 2000] Fonction utilisateur : boucle sans fin
    Par galinijay dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/09/2005, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo