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 :

Probleme boucle avec requete SQL


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 77
    Par défaut Probleme boucle avec requete SQL
    Bonjour a tous,

    Le principe:
    Je suis actuellement en train de programmer un site comportant un planning mensuel pour une ecole.
    Je fais choisir la classe de l'éléve, le mois est l'année => son planning doit s'afficher.

    La technique:
    Pour chaque jour je recherche dans la base si il y a un cours ( select avec en critere le jour, mois, annee et le code de la classe) en oubliant pas a chaque fois le mysql_close.
    Si il y a un cours je retoure 1 sinon 0 => après je grise ou pas la case

    Le probleme:
    Sur mon pc windows avec easy php => pas de soucis ca fonctionne super
    Sur mon server ftp => blocage au 12eme jour je sais pas pourquoi avec lerreur:
    Fatal error: mysql_num_rows(): supplied argument is not a valid MySQL result resource
    En cherchant, voyant l'erreur sur le 12eme jour , je place le debut de ma boucle à 10 pour aller direct au probleme. Et la magique le 12eme jour passe impecable, et c'est le 19eme jour qui me fait la meme erreur

    Donc j'en deduis que le probleme viens de la boucle qui doit saturer a un moment, ou alors du server (free).

    NB, j'ai egalement un planning pour les prof/salle qui lui fonctionne correctement sur 31 jours. Les pages php sont identiques (sauf le select).

    voici la tete du select:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $requete_sql="SELECT `t_cours`.`NumCours` 
    	            FROM t_cours 
    				WHERE ( Month(`t_cours`.`DateCours`)=$m)
    				AND ( Day(`t_cours`.`DateCours`)=$j)
    				AND ( Year(`t_cours`.`DateCours`)=$a)
    				AND `t_cours`.`Horaire`=$heure
    				AND `t_cours`.`Codeclass`=$class;";
    Est ce que quelqu'un aurait une idee du probleme ou de la manière pour identifier exactement pourquoi au x jour ca plante?

  2. #2
    Membre expérimenté Avatar de Gaara-Manga
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Avril 2007
    Messages : 247
    Par défaut
    As tu fait un echo sur ta requête pour voir ce qu'elle valler lors de l'erreur ?

    echo $requete_sql;

    Si oui montrer la tête que sa a.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 77
    Par défaut
    Salut, merci de prendre un peu de ton temps:
    je viens a l'instant de faire le echo que tu demande:

    Requete : SELECT `t_cours`.`NumCours` FROM t_cours WHERE ( Month(`t_cours`.`DateCours`)=01) AND ( Day(`t_cours`.`DateCours`)=12) AND ( Year(`t_cours`.`DateCours`)=2005) AND `t_cours`.`Horaire`=1 AND `t_cours`.`Codeclass`=21;
    la requete est bonne, mais je pense qu'au bout de x fois, ca bloque mais pas d'idée pourquoi.

    et si je deplace le debut de la boucle ( de 1 je me position a 10, la 12eme ligne pose pas de probleme)

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Est-ce qu'on pourrait voir le tout avec la boucle ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 77
    Par défaut
    Bonjour et merci de prendre un peu de temps pour mon probleme

    J'utilise des fonctions. Je vous met les principales appelées dans la boucle.
    Je ne dis pas que mes fonction soient optimales, mais elle fonctionnent très bien pour mes autres pages

    La boucle dans la page est la suivante:
    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
    19
    20
    For ($i=1;$i<=$nbjour;$i++)//Boucle sur le nombre de jour du mois
    {
       //Date de la ligne du tableau
       $d="$i/$mois/$annee";
       //Recherche du libelle du jour
       $ljour=Joursem($d);
       $coulj=Couleurjour($d);// retourne gris ou blanc en hexa
       // On test si c est un week end
       If ($coulj=="#696969")
       {//week end donc tout en gris
         $coursAM=0;
         $coursPM=0;
       }
       else
       {//semaine 
       //Recherche si il y a un cours le matin et apres midi
       $coursAM=RechercheCours($dispo,1,$i,$mois,$annee);
       $coursPM=RechercheCours($dispo,2,$i,$mois,$annee);
       }
    }
    ensuite en fonction des variables coursAM et courPM je gère l'affichage

    Fonction RechercheCours:

    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
    19
    20
    21
    22
    function RechercheCours($dispo,$heure,$j, $m, $a) 
    {
    	//Requete de recherche
    	$requete_sql="SELECT `t_cours`.`NumCours` 
    	            FROM t_cours 
    				WHERE ( Month(`t_cours`.`DateCours`)=$m)
    				AND ( Day(`t_cours`.`DateCours`)=$j)
    				AND ( Year(`t_cours`.`DateCours`)=$a)
    				AND `t_cours`.`Horaire`=$heure
    				AND `t_cours`.`CodeDispo`=$dispo;";
    	//Execution de la requete
    	$Result = Execute_requete($requete_sql);
    	//Retour
    	if($Result['ligne'] > 0)//Si il y a un résultat
    		{
    		return $Result[0];
    		}
    	else// Aucun résultat
    		{
    		return 1;
    		}
    }

    et la dernière fonction Execute_requete:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    function Execute_requete($requete_sql) 
    {
    	$sql_dbname = $_SESSION['sql_dbname'];
    	$id_sql= $_SESSION['id_sql'];
    	// Execution de la requete
    	//echo"<br> requete: $requete_sql <br>";
    	$res = @mysql_db_query($sql_dbname,$requete_sql,$id_sql);
    	//On compte le nombre de resultat
    	$result['ligne'] =@mysql_num_rows($res);
    	$result['champ']= @mysql_num_fields($res);
    	//echo"<br>requete a resultat: ".$result['ligne']."ligne et ".$result['champ']."colonne";
    	//test si il y a des resultats
    	if($result['ligne']< 1)
    	{// Aucun resultat
    		$result['ligne']=0;
    		$result['champ']=0;
    	}
    	else
    	{// Il y a des resultats
    		//On recherche le nom des colonnes
    		For($j=0;$j<$result['champ'];$j++)
    		{
    			$nom = @mysql_field_name($res,$j);
    			if(isset($temp)){$temp=$temp." ".$nom;} else {$temp=$nom;}
    			//$temp= $temp." ".$nom;
    		}
    		$result['entete']= $temp;
    		//boucle sur le nombre de ligne
    		$i=0;
    		while ($ligne= @mysql_fetch_row($res))
    		{
    			// Boucle sur le nombre de colonne
    			$temp="";
    			for($j=0;$j<$result['champ'];$j++)
    			{
    				$temp=$temp." ".$ligne[$j];
    			}
    			$result[$i]=$temp;
    			$i=$i+1;
    		}
    	}
      return $result;
      @mysql_close();
    Si il vous manque encore des infos n'hesiter pas a demander.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si tu mysql_close a chaque requete, je suppose que tu mysql_connect aussi pour chaque requete ?
    Tu as essayé de faire une seule connexion pour toute l'execution du script ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 77
    Par défaut
    pour le connect, je le fait de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id_sql=mysql_connect($sql_serveur,$sql_user,$sql_passe);
    Tu as essayé de faire une seule connexion pour toute l'execution du script ?
    Je viens de tester a l'instant en enlevant le mysql_close toujours pareil bloquer au 12eme jour.

    La fonction execute requete est bonne car je l'utilise dans le planning prof/salle de la meme manière.
    le planning prof/salle fonctionne bien pour les 31 jours.
    le probleme est donc soit dans la boucle soit dans la fonction recherchecours.

    De plus si je met i a 10 dès le debut, le 12eme jour est ok, le blocage arrive au 19eme jour.

    je cherche encore quelque jour sinon je tenterai une autre technique ( dommage je voulais que toute mes page soit identique)

    Je comprend pas pourquoi en local sur mon pc ca fonctionne et pas sur le server. Est ce qu'il se peut qu'il y ai une limitation au niveau du server qui me bloque?

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je viens de tester a l'instant en enlevant le mysql_close toujours pareil bloquer au 12eme jour.
    Si tu retires le close mais que tu fais toujours 12 x connect, le probleme reste identique si on imagine que le serveur se bloque.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [MySQL] probleme affichage avec requete sql
    Par kate59 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/06/2015, 13h43
  2. probleme avec requete SQL dans code VB6
    Par captainamerica75 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 30/05/2007, 21h36
  3. [C# 2.0] Probleme avec requete SQL
    Par Sion_Sempai dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/09/2006, 23h45
  4. Réponses: 3
    Dernier message: 18/09/2006, 20h55
  5. probleme avec requete sql aime pas les strings
    Par lil_jam63 dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/02/2004, 14h45

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