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

Langage PHP Discussion :

Interdire certaines données vides d'aller dans un mysql_fetch_array


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut Interdire certaines données vides d'aller dans un mysql_fetch_array
    Salut tout le monde,

    J'ai une chaine sql que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$sql_id_cours_NORMAL_TP = "SELECT ID FROM inscrits_en WHERE MNEMONIC = '".$nom_des_cours['MNEMONIC']."' AND CATEGORIE = '" . NORMAL."' AND TYPE_DE_COURS = '".TP."'";
    l'echo me donne ceci :

    SELECT NOTE FROM inscrits_en WHERE ID_COURS = AND MATRICULE_ET = '40522' SELECT NOTE FROM inscrits_en WHERE ID_COURS = AND MATRICULE_ET = '40522' SELECT NOTE FROM inscrits_en WHERE ID_COURS = AND MATRICULE_ET = '40522' SELECT NOTE FROM inscrits_en WHERE ID_COURS = AND MATRICULE_ET = '40522' SELECT NOTE FROM inscrits_en WHERE ID_COURS = AND MATRICULE_ET = '40522' SELECT NOTE FROM inscrits_en WHERE ID_COURS = AND MATRICULE_ET = '40522' SELECT NOTE FROM inscrits_en WHERE ID_COURS = AND MATRICULE_ET = '40522' SELECT NOTE FROM inscrits_en WHERE ID_COURS = AND MATRICULE_ET = '40522' SELECT NOTE FROM inscrits_en WHERE ID_COURS = AND MATRICULE_ET = '40522'
    Vous remarquerez que les deux derniers n'existent pas :

    SELECT NOTE FROM inscrits_en WHERE ID_COURS = AND MATRICULE_ET = '40522' SELECT NOTE FROM inscrits_en WHERE ID_COURS = AND MATRICULE_ET = '40522'
    la requête qui va avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req_id_cours_NORMAL_TP = mysql_query($sql_id_cours_NORMAL_TP);
    j'obtiens une erreur avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nombre_resultat_th = mysql_num_rows($req_cote_th);
    et avec ceci :

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\PDF\RN\RN.php on line 91
    Je me demandais si il était possible d'éviter de mettre dans le tableau (mysql_fetch_array) les données vides car c'est ça qui fait que ma requête ne fonctionne pas.

    Un var_dump de $cote_th me donne ceci :

    bool(false)
    Sauriez-vous me dire comment je peux résoudre ce problème svp ?

    Merci d'avance.

    beegees

  2. #2
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    si tu écris
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $req_id_cours_NORMAL_TP = mysql_query($sql_id_cours_NORMAL_TP);

    il faut écrire
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $nombre_resultat_th = mysql_num_rows($req_id_cours_NORMAL_TP);

    et non pas
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $nombre_resultat_th = mysql_num_rows($req_cote_th);


    Après... pour ne pas avoir d'erreur avec mysql_fetch_array() [PS : mysql_fetch_assoc() c'est mieux ] il suffit de regarder que ton mysql_num_rows() soit plus grand que 0

    PS : (oui encore) tu montres 3 bouts de code, mais ils n'ont rien à voir l'un avec l'autre.... .. .. .. .. .. .. ..

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Salut,

    Merci pour ta réponse.

    En fait, c'est ici que j'ai un problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //je sélectionne l'ID du cours pour pouvoir afficher la cote de l'étudiant plus facilement
    $sql_id_cours_NORMAL_TH = "SELECT ID FROM cours WHERE MNEMONIC = '".$nom_des_cours['MNEMONIC']."' AND CATEGORIE = '" . NORMAL."' AND TYPE_DE_COURS = '".TH."'";
    echo $id_cours_NORMAL_TH;
    $req_id_cours_NORMAL_TH = mysql_query($sql_id_cours_NORMAL_TH );
    $id_cours_TH = mysql_fetch_array($req_id_cours_NORMAL_TH);
    Le problème est qu'il sélectionne aussi des champ dont la valeur est NULL ou vide, faudrait éviter ces valeurs.

    Quelle est la différence entre mysql_fetch_Array et assoc ?

    Pourquoi assoc est mieux ?

    Voici mon code en entier :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    <?php
    session_start();
    require('../fpdf.php');
    require('../mysql_table.php'); 
    //Connexion a la base
    mysql_connect('localhost','root','mdp');
    mysql_select_db('pharma');
     
    $sql_annee = "SELECT Nom_complet FROM annees WHERE NOM_ANNEE = '".$_SESSION['choix_annee']."'";
    $req_annee = mysql_query($sql_annee);
    $annee = mysql_fetch_array($req_annee);
     
    //$sql_table_decisions = "SELECT * FROM decisions WHERE NOM_ANNEE = '".$_SESSION['choix_annee']."'";
    $sql_table_decisions = "SELECT decisions.*, NOM_ET, PRENOM_ET FROM decisions INNER JOIN etudiants ON decisions.MATRICULE_ET = etudiants.MATRICULE_ET WHERE NOM_ANNEE = '".$_SESSION['choix_annee']."'";
    //echo $sql_table_decisions;
    $req_table_decisions = mysql_query($sql_table_decisions);
    $table_decisions = mysql_fetch_array($req_table_decisions);
     
     
     
    	class PDF extends PDF_MySQL_Table
    	{
    		//En-tete
    		function Header()
    		{
    			//Logo
    			$this->Image('../../Images/logo.png',10,8,17);
    			//Police Arial gras 15
    			$this->SetFont('Arial','B',12);
    			//Décalage a droite
    			$this->Cell(80);
    			$this->Ln(20);
    		}
     
    	}
     
     
     
    	//Instanciation de la classe dérivée
    	$pdf=new PDF();
    	$pdf->AddPage();
    	$pdf->SetFont('Arial','B',12);
    	$pdf->Cell(30,10,'Institut de Pharmacie : '. $annee['Nom_complet'],0,'C');
    	$pdf->Ln(5);
    	$pdf->Cell(30,10,'Université Libre de Bruxelles',0,'C');
    	$pdf->Ln(5);
    	$pdf->Cell(30,10,'Délibération du : '.$table_decisions['Date_delibe'],0,'C');
    	$pdf->Ln(15);
    	$pdf->Cell(30,10,'Informations de l\'étudiant : ',0,'C');
    	$pdf->Ln(5);
    	$pdf->Cell(30,10,$table_decisions['MATRICULE_ET']. ' ' . $table_decisions['NOM_ET']. ' ' . $table_decisions['PRENOM_ET'],0,'C');
    	$pdf->Ln(5);$pdf->Ln(5);$pdf->Ln(5);$pdf->Ln(5);
    	$cours = array();
    	$i = 0;
     
    	//echo $liste_cours;
    	//echo 'ici ' . $chaine_cours_id;
     
    	$pdf->AddCol('MNEMONIC',25,'MNEMONIC');
    	$pdf->AddCol('NOM_COURS',150,'NOM_COURS');
    	$pdf->AddCol('PROFESSEUR(S)',12,'ECTS');
     
    	//$chaine_cours = implode(",",$cours);	
    	$liste_cours_NORMAL = "SELECT DISTINCT MNEMONIC, NOM_COURS, ECTS FROM cours WHERE NOM_ANNEE = '".$_SESSION['choix_annee']."' AND CATEGORIE = '" . NORMAL."'";
    	$req_liste_cours_NORMAL = mysql_query($liste_cours_NORMAL);
     
    	while($nom_des_cours = mysql_fetch_array($req_liste_cours_NORMAL))
    	{
    		$sql_info_prof = "SELECT NOM_PROF, PRENOM_PROF FROM professeurs WHERE MATRICULE_PROF IN (SELECT DISTINCT MATRICULE_PROF FROM enseigner WHERE MNEMONIC = '".$nom_des_cours['MNEMONIC']."')";
    		//echo $sql_info_prof;
    		$req_info_prof = mysql_query($sql_info_prof);
    		$info_prof = mysql_fetch_array($req_info_prof);
     
    	//je sélectionne l'ID du cours pour pouvoir afficher la cote de l'étudiant plus facilement
    	$sql_id_cours_NORMAL_TH = "SELECT ID FROM cours WHERE MNEMONIC = '".$nom_des_cours['MNEMONIC']."' AND CATEGORIE = '" . NORMAL."' AND TYPE_DE_COURS = '".TH."'";
    	echo $id_cours_NORMAL_TH;
    	$req_id_cours_NORMAL_TH = mysql_query($sql_id_cours_NORMAL_TH );
    	$id_cours_TH = mysql_fetch_array($req_id_cours_NORMAL_TH);
     
    	$sql_id_cours_NORMAL_TP = "SELECT ID FROM inscrits_en WHERE MNEMONIC = '".$nom_des_cours['MNEMONIC']."' AND CATEGORIE = '" . NORMAL."' AND TYPE_DE_COURS = '".TP."'";
    	$req_id_cours_NORMAL_TP = mysql_query($sql_id_cours_NORMAL_TP);
    	$id_cours_TP = mysql_fetch_array($req_id_cours_NORMAL_TP);
     
    	$sql_cote_th = "SELECT NOTE FROM inscrits_en WHERE ID_COURS = ".$id_cours_TH['ID']." AND MATRICULE_ET = '".$table_decisions['MATRICULE_ET']."' AND ID_COURS != '' ";
    	echo $sql_cote_th;	
    	//$req_cote_th = mysql_query($sql_cote_th);
    	//$nombre_resultat_th = mysql_num_rows($req_cote_th);
    	//echo $nombre_resultat_th;
    	//l'erreur provient de cette ligne
     
    	//$cote_th = mysql_fetch_array($req_cote_th);
    	//var_dump($cote_th);
     
    	//$sql_cote_TP = "SELECT NOTE FROM inscrits_en WHERE ID_COURS = ".$id_cours_TP['ID']." AND MATRICULE_ET = '".$table_decisions['MATRICULE_ET']."' ";
    	//echo $sql_cote_TP;
    	//$req_cote_TP = mysql_query($sql_cote_TP);
    	//$cote_TP = mysql_fetch_array($req_cote_TP);
     
     
    		 $pdf->Cell(30,10,$nom_des_cours['MNEMONIC'],0,'C');	
    		//$pdf->MultiCell(70,5,$nom_des_cours['NOM_COURS'],1,'L'); Le L permet d'aligner à gauche (voir sur le site fpdf.org dans manule => MultiCell), le 0 juste avant inique que l'on n'utilise pas d'encadrement pour la cellule.
    		//le "\n" ajoute un retour à la ligne, il doit être entre guillemets
    		$pdf->MultiCell(80,5,$nom_des_cours['NOM_COURS']."\n".' (Professeur '. $info_prof['NOM_PROF']. ' )',0,'L');
    		/*if($cote_th['NOTE'] != "")
    		{
    			$pdf->MultiCell(10,5,$cote_th['NOTE']);
    			$pdf->Ln();
    		}*/
    	}
     
     
     
     
     
    	$pdf->AliasNbPages();
    	//$pdf->Output();
     
    ?>
    Merci encore.

    beegees

  4. #4
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    le fait d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_id_cours_NORMAL_TH = "SELECT ID FROM cours WHERE MNEMONIC = '".$nom_des_cours['MNEMONIC']."' AND CATEGORIE = '" . NORMAL."' AND TYPE_DE_COURS = '".TH."'";
    signifie que NORMAL et TH ont été défini par la fonction define(), est-ce bien le cas ?

    Et ce que l'ont fait en général, ca serait plutot quelque chose comme ça :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $sql = "SELECT ID FROM cours WHERE MNEMONIC = '".$nom_des_cours['MNEMONIC']."'";
    if( !empty($normal) ) {
         $sql .= " AND CATEGORIE = '".$normal."'";
    }
    if( !empty($th) ) {
         $sql .= " AND TYPE_DE_COURS= '".$th."'";
    }
    $q = mysql_query($sql) or die(mysql_error());
    if( mysql_num_rows($q) > 0 ) {
         while( $r = mysql_fetch_assoc($q) ) {
              /// j'affiche mes trucs
         }
    }

  5. #5
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    le fait d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_id_cours_NORMAL_TH = "SELECT ID FROM cours WHERE MNEMONIC = '".$nom_des_cours['MNEMONIC']."' AND CATEGORIE = '" . NORMAL."' AND TYPE_DE_COURS = '".TH."'";
    signifie que NORMAL et TH ont été défini par la fonction define(), est-ce bien le cas ?
    Non pas du tout, je l'écris en dure.

    Mais je vais améliorer cela.

    Pour l'instant, je fait comme ça.

    beegees

  6. #6
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    si tu l'écris en dur, alors écrit simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE CATEGORIE = 'NORMAL' AND TYPE_DE_COURS = 'TH'
    PS : j'avais effacé le post


    Sinon pour ton prob :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // correction avec le petit truc au dessus
    $sql_id_cours_NORMAL_TH = "SELECT ID FROM cours WHERE MNEMONIC = '".$nom_des_cours['MNEMONIC']."' AND CATEGORIE = 'NORMAL' AND TYPE_DE_COURS = 'TH'";
    echo $id_cours_NORMAL_TH; // Ici déjà je comprends pas comment t'arrives à avoir ton echo :P (mais j'ai pas look le code en entier mais c'est surement pas la dernier requete :p
    $req_id_cours_NORMAL_TH = mysql_query($sql_id_cours_NORMAL_TH ) or die("<strong>ERREUR DANS LA REQUETE :</strong> ".$sql_id_cours_NORMAL_TH."<br />". mysql_error()); // déjà ici on ajoute un petit debug :)
    // Avant d'effectuer le mysql_fetch_ on va check qu'il y a au moins 1 row
    if( mysql_num_rows($req_id_cours_NORMAL_TH) > 0 ) {
         $id_cours_TH = mysql_fetch_assoc($req_id_cours_NORMAL_TH); // j'ai mis un fetch_assoc pcq c'est mieux :p
    }

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

Discussions similaires

  1. Recherche dans un texte et extraire certaines données
    Par morgan47 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 24/12/2007, 10h14
  2. Copier certaines données d'un formulaire dans un état
    Par pche76 dans le forum Modélisation
    Réponses: 1
    Dernier message: 08/08/2007, 21h41
  3. Réponses: 12
    Dernier message: 21/02/2007, 09h44
  4. Comment cacher certaines données dans le rapport?
    Par Ta|ia dans le forum Débuter
    Réponses: 2
    Dernier message: 31/10/2006, 11h23
  5. Filtrer sur les données vides dans un formulaire
    Par jevany dans le forum Access
    Réponses: 7
    Dernier message: 29/05/2006, 08h50

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