Condition PHP

Résolu
troubadour2 Messages postés 284 Statut Membre -  
troubadour2 Messages postés 284 Statut Membre -
Bonjour,

Voilà je bloque sur une condition, si quelqu'un peux me donner une explication ?
Merci beaucoup de votre aide.

Mon script affiche dans un tableau les noms des utilisateurs qui jouent de la trompette ça c'est bon.
Mais je souhaiterai lorsqu'on a pas d'utilisateurs qui jouent de cet instrument la ligne TH (Trompette) ne s'affiche pas.
Je ne sais pas si c'est clair pour vous ce n'ai pas facile à expliquer.
Merci vraiment de votre aide.

<table style="width:25%; float:left"> 
	<tr>
		<td class="table-separateur">
<table width="100%" border="2" cellspacing="1" cellpadding="5">
	<tr>
		<td class="table-entete">DEBUTANT</td>
<?php
	echo'<tr>';
		echo'<th width="25%" class="table-sous-entete">Trompette</th>'; 
	echo'</tr>';
$resultats = $bdd->query	("SELECT *
							FROM utilisateur	
							WHERE 'utilisateur'.'membre_utilisateur' = 'Debutant'
							AND 'utilisateur'.'pupitre_utilisateur' = 'Trompette'
							ORDER BY nom_utilisateur ASC");
$donnees = $resultats->setFetchMode(PDO::FETCH_OBJ);
while ($donnees = $resultats->fetch())
{	
?>	
		<td width="25%" class="table-ligne1"><?php echo $donnees->nom_utilisateur . ' ' . $donnees->prenom_utilisateur; ?></td>	
	</tr>
<?php
}
?>
</table>
		</td>
	</tr>
</table>


21 réponses

  • 1
  • 2
  1. Utilisateur anonyme
     
    Bonjour,

    Je ferais quelques chose comme ça :

    <table style="width:25%; float:left">
    <tr>
    <td class="table-separateur">
    <table width="100%" border="2" cellspacing="1" cellpadding="5">
    <tr>
    <td class="table-entete">DEBUTANT</td>
    <?php

    $resultats = $bdd->query ("SELECT *
    FROM utilisateur
    WHERE 'utilisateur'.'membre_utilisateur' = 'Debutant'
    AND 'utilisateur'.'pupitre_utilisateur' = 'Trompette'
    ORDER BY nom_utilisateur ASC");
    $donnees = $resultats->setFetchMode(PDO::FETCH_OBJ);
    if (mysql_numrows($resultat)>0) {
    echo'<tr>';
    echo'<th width="25%" class="table-sous-entete">Trompette</th>';
    echo'</tr>';

    while ($donnees = $resultats->fetch())
    {
    ?>
    <td width="25%" class="table-ligne1"><?php echo $donnees->nom_utilisateur . ' ' . $donnees->prenom_utilisateur; ?></td>
    </tr>
    <?php
    }
    }
    ?>
    </table>
    </td>
    </tr>
    </table>

    On affiche le TH si la requête rend des lignes pour la requête grace à mysql_numrows

    Cordialement
    0
  2. troubadour2 Messages postés 284 Statut Membre 1
     
    Bonjour et merci de votre aide.

    Voilà l'erreur que ça met si vous pouvez encore m'aider merci beaucoup.

    Fatal error: Call to a member function setFetchMode() on a non-object in E:\wamp\www\cliquedecruet\page\musicien_debutant.php on line 14
    0
  3. chico200987 Messages postés 856 Statut Membre 144
     
    Salut,

    Essaie d'afficher les erreurs en mettant juste apres ta connection :

    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    


    Et rajoute un S a $resultat ligne 15 du code de internetwebservice

    Pour donner : "if (mysql_numrows($resultats)>0) {"
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. troubadour2 Messages postés 284 Statut Membre 1
     
    bonjour et merci de votre aide à tous

    Pour vous dire j'avais rajouté le s à $resultats.

    Ensuite pour ma connexion c'est tout en ordre, je ne l'ai simplement pas mis ici.

    Mais ma connexion fonctionne bien.

    Si vous pouvez encore m'aider, merci

    Fatal error: Call to a member function setFetchMode() on a non-object in E:\wamp\www\cliquedecruet\page\musicien_debutant.php on line 14
    0
    1. Yoda
       
      bah chez moi c'est mysql_num_rows, pas mysql_numrows
      0
  6. troubadour2 Messages postés 284 Statut Membre 1
     
    Je vous renvoie mon script et mon erreur
    Merci

    <table style="width:25%; float:left"> 
    	<tr>
    		<td class="table-separateur">
    <table width="100%" border="2" cellspacing="1" cellpadding="5">
    	<tr>
    		<td class="table-entete">DEBUTANT</td>
    	</tr>
    <?php
    $resultats = $bdd->query ("SELECT * FROM utilisateur WHERE 'utilisateur'.'membre_utilisateur' = 'Debutant' AND 'utilisateur'.'pupitre_utilisateur' = 'Trompette' ORDER BY nom_utilisateur ASC");
    $donnees = $resultats->setFetchMode(PDO::FETCH_OBJ);
    	if (mysql_num_rows($resultats)>0) {
    		echo'<tr>';
    		echo'<th width="25%" class="table-sous-entete">Trompette</th>';
    		echo'</tr>';
    
    		while ($donnees = $resultats->fetch()){
    ?>
    	<td width="25%" class="table-ligne1"><?php echo $donnees->nom_utilisateur . ' ' . $donnees->prenom_utilisateur; ?></td>
    </tr>
    <?php
    		}
    	}
    ?> 
    </table>
    		</td>
    	</tr>
    </table>
    
    0
    1. chico200987 Messages postés 856 Statut Membre 144
       
      Pourrais-tu juste rajouter le
      $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); que j'ai demande pour avoir plus d'infos sur l'erreur ?
      0
  7. tito23 Messages postés 318 Statut Membre 4
     
    Il faut remplacer ce code
    while ($donnees = $resultats->fetch()) 
    {	
    ?>	
    <td width="25%" class="table-ligne1"><?php echo $donnees->nom_utilisateur . ' ' . $donnees->prenom_utilisateur; ?></td>	
    </tr> 

    par
    while ($donnees = $resultats->fetch()) 
              {	echo'<tr><td width="25%" class="table-ligne1">'.$donnees->nom_utilisateur.' '.$donnees->nom_utilisateur.'</td></tr>';
    }
    
    0
  8. troubadour2 Messages postés 284 Statut Membre 1
     
    Bonjour et merci de votre aide

    Malheureusement cela n'affiche pas le titre "Trompette" mais par contre ça affiche bien les utilisateurs.
    Je vous redonne mon script complet avec vos modifs si vous pouvez encore m'aider.
    Je vous remercie beaucoup

    Voilà l'erreur
    Warning: mysql_num_rows() expects parameter 1 to be resource, object given in E:\wamp\www\cliquedecruet\page\musicien_debutant.php on line 16

    <table style="width:25%; float:left"> 
    	<tr>
    		<td class="table-separateur">
    <table width="100%" border="2" cellspacing="1" cellpadding="5">
    	<tr>
    		<td class="table-entete">DEBUTANT</td>
    	</tr>
    <?php
    $resultats = $bdd->query	("SELECT *
    							FROM utilisateur	
    							WHERE 'utilisateur'.'membre_utilisateur' = 'Debutant'
    							AND 'utilisateur'.'pupitre_utilisateur' = 'Tromptte'
    							ORDER BY nom_utilisateur ASC");
    $donnees = $resultats->setFetchMode(PDO::FETCH_OBJ);
    if (mysql_num_rows($resultats)>0) { 
    	echo'<tr>';
    		echo'<th width="25%" class="table-sous-entete">Tromptte</th>'; 
    	echo'</tr>';
    }
    while ($donnees = $resultats->fetch()) 
    {	echo'<tr>
    			<td width="25%" class="table-ligne1">'.$donnees->nom_utilisateur.' '.$donnees->nom_utilisateur.'</td>
    		</tr>';
    }
    ?>
    </table>
    		</td>
    	</tr>
    </table>
    
    0
    1. Utilisateur anonyme
       
      Désolé, je n'avais pas vu que vous utilisez PDO...
      mysql_rowcount ne marche pas avec
      il y a $resultats->rowCount(), mais ça ne fonctionne pas avec toutes les bases, je ne sais pas pour MySQL
      0
    2. Utilisateur anonyme
       
      mettez ça à la place

      $booEntete = false;
      while ($donnees = $resultats->fetch())
      {
      if (!$booEntete) {
      echo'<tr>';
      echo'<th width="25%" class="table-sous-entete">Tromptte</th>';
      echo'</tr>';
      $booEntete=true;
      }
      echo'<tr>
      <td width="25%" class="table-ligne1">'.$donnees->nom_utilisateur.' '.$donnees->nom_utilisateur.'</td>
      </tr>';
      }
      ?>

      de ça

      if (mysql_num_rows($resultats)>0) {
      echo'<tr>';
      echo'<th width="25%" class="table-sous-entete">Tromptte</th>';
      echo'</tr>';
      }
      while ($donnees = $resultats->fetch())
      { echo'<tr>
      <td width="25%" class="table-ligne1">'.$donnees->nom_utilisateur.' '.$donnees->nom_utilisateur.'</td>
      </tr>';
      }
      ?>
      0
  9. tito23 Messages postés 318 Statut Membre 4
     
    essai d'insérer ce code avant
    if (mysql_num_rows($resultats)>0) { 

    $sql = "SELECT COUNT(*) AS nb FROM utilisateur where 'utilisateur'.'membre_utilisateur' = 'Debutant'
    AND 'utilisateur'.'pupitre_utilisateur' = 'Tromptte' ";
        $result = $bdd->query($sql);
    
        $nb = $columns['nb'];
    

    puis remplacer
    <code>if (mysql_num_rows($resultats)>0) { 
    </code> par
    if($nb>0){

    En fait le problème provient du mixage entre le code php4 et php5
    Tu peux chercher une fonction qui retourne le nombre d'enregistrements d'une requête.
    tito
    0
  10. troubadour2 Messages postés 284 Statut Membre 1
     
    Merci de votre aide mais malheureusement je suis toujours en train de me prendre la tête alors si vous avez de nouveau le temps de m'aider?
    Merci beaucoup

    Ma connexion à ma BDD est en PHP5, j'ai essayé votre script mais l'erreur est...

    Notice: Undefined variable: columns in E:\wamp\www\cliquedecruet\page\musicien_debutant.php on line 15

    <?php
    $sql = "SELECT COUNT(*) AS nb FROM utilisateur where 'utilisateur'.'membre_utilisateur' = 'Debutant'
    AND 'utilisateur'.'pupitre_utilisateur' = 'Tromptte' ";
        $result = $bdd->query($sql);
    
        $nb = $columns['nb'];
    
        if($nb>0){
    	echo'<tr>';
    		echo'<th width="25%" class="table-sous-entete">Tambour</th>'; 
    	echo'</tr>';
    }
    while ($donnees = $resultats->fetch()){	
    	echo'<tr>';
    		echo'<td width="25%" class="table-ligne1">'.$donnees->nom_utilisateur.' '.$donnees->nom_utilisateur.'</td>';
    	echo'</tr>';
    }
    ?>
    
    0
    1. tito23 Messages postés 318 Statut Membre 4
       
      essai d'insérer ceci
      $columns = $result->fetch();
      
      avant
       $nb = $columns['nb'];

      j'ai oublié cette ligne.
      tito
      0
  11. troubadour2 Messages postés 284 Statut Membre 1
     
    donc j'ai fait comme vous me l'avez dit
    mais j'ai toujour une erreur

    Fatal error: Call to a member function fetch() on a non-object in E:\wamp\www\cliquedecruet\page\musicien_debutant.php on line 14

    <?php
    $sql = "SELECT COUNT(*) AS nb FROM utilisateur where 'utilisateur'.'membre_utilisateur' = 'Debutant'
    AND 'utilisateur'.'pupitre_utilisateur' = 'Tromptte' ";
        $result = $bdd->query($sql);
    $columns = $result->fetch();
        
        $nb = $columns['nb'];
    
        if($nb>0){
    	echo'<tr>';
    		echo'<th width="25%" class="table-sous-entete">Tambour</th>'; 
    	echo'</tr>';
    }
    while ($donnees = $resultats->fetch()){	
    	echo'<tr>';
    		echo'<td width="25%" class="table-ligne1">'.$donnees->nom_utilisateur.' '.$donnees->nom_utilisateur.'</td>';
    	echo'</tr>';
    }
    ?>
    
    0
  12. tito23 Messages postés 318 Statut Membre 4
     
    essais de modifier la requête
    $sql = "SELECT COUNT(*) AS nb FROM utilisateur where utilisateur.membre_utilisateur = 'Debutant'
    AND utilisateur.pupitre_utilisateur = 'Tromptte' ";
    
    0
  13. troubadour2 Messages postés 284 Statut Membre 1
     
    Ca commence à prendre forme il n'y a déjà plus de message d'erreur et le titre "trompette" ne s'affiche pas lorsqu'il n'y a pas d'utilisateur associé à cet instrument.

    Mais par contre les noms et prénom des utilisateurs ne s'affiche pas ça proviens surement de la boucle while?

    Merci encore de votre bonté et de votre temps passé à mon problème.
    0
  14. tito23 Messages postés 318 Statut Membre 4
     
    pour les noms je sais pas trop mais pour les prénoms
    Il faut modifier
    echo'<td width="25%" class="table-ligne1">'.$donnees->nom_utilisateur.' '.$donnees->nom_utilisateur.'</td>';
    
    par
    echo'<td width="25%" class="table-ligne1">'.$donnees->nom_utilisateur.' '.$donnees->prenom_utilisateur.'</td>';
    
    
    0
  15. troubadour2 Messages postés 284 Statut Membre 1
     
    Bonjour revoilà le script complet pour vvoir si tu peux me trouver la solution pour afficher les données il n'y a plus que ça.
    Sinon le reste c'est nickel.
    Très sincérement merci

    <?php
    $sql = "SELECT COUNT(*) AS nb FROM utilisateur where utilisateur.membre_utilisateur = 'Debutant'
    AND utilisateur.pupitre_utilisateur = 'Tambour' ";

    $result = $bdd->query($sql);
    $columns = $result->fetch();

    $nb = $columns['nb'];

    if($nb>0){
    echo'<tr>';
    echo'<th width="25%" class="table-sous-entete">Tambour</th>';
    echo'</tr>';
    }
    while ($donnees = $resultats->fetch()){
    echo'<tr>';
    echo'<td width="25%" class="table-ligne1">'.$donnees->nom_utilisateur.' '.$donnees->prenom_utilisateur.'</td>';
    echo'</tr>';
    }
    ?>
    0
    1. tito23 Messages postés 318 Statut Membre 4
       
      <?php 
      $sql = "SELECT COUNT(*) AS nb FROM utilisateur where utilisateur.membre_utilisateur = 'Debutant' 
      AND utilisateur.pupitre_utilisateur = 'Tambour' "; 
      
      $result = $bdd->query($sql); 
      $columns = $result->fetch(); 
      
      $nb = $columns['nb']; 
      echo'<table><tbody>';
      if($nb>0){ 
      echo'<tr>'; 
      echo'<th width="25%" class="table-sous-entete">Tambour</th>'; 
      echo'</tr>'; 
      } 
      while ($donnees = $resultats->fetch()){	
      echo'<tr>'; 
      echo'<td width="25%" class="table-ligne1">'.$donnees->nom_utilisateur.' '.$donnees->prenom_utilisateur.'</td>'; 
      echo'</tr>'; 
      } 
      echo'</tbody></table>';
      ?>

      Sinon t'es sur que la table utilisateur n'est pas vide?
      0
  16. troubadour2 Messages postés 284 Statut Membre 1
     
    En fait dans ma BDD table utilisateur il y a bien 2 membres qui correspond à l'instrument "tambour"

    Et dans mon tableau il ne sont pas affiché.
    0
    1. tito23 Messages postés 318 Statut Membre 4
       
      Voici le nouveau code
       $sql= "SELECT COUNT(*) AS nb FROM utilisateur where utilisateur.membre_utilisateur = 'Debutant'   
      AND utilisateur.pupitre_utilisateur = 'Tambour' ";   
      
      $result = $bdd->query($sql);   
      $columns = $result->fetch();   
      
      $nb = $columns['nb'];   
        
      if($nb>0){   
      echo'<tr>';   
      echo'<th width="25%" class="table-sous-entete">Tambour</th>';   
      echo'</tr>';   
      }   
      while ($donnees = $resultats->fetch()){   
      echo'<tr>';   
      echo'<td width="25%" class="table-ligne1">'.$donnees->nom_utilisateur.' '.$donnees->prenom_utilisateur.'</td>';   
      echo'</tr>';   
      }   
      echo'</table></td></tr></table>';  
      ?> 

      Sinon tu veux pas essayer avec un code non orienté objet?
      0
  17. troubadour2 Messages postés 284 Statut Membre 1
     
    J suis désolé toujours pareil rien ne s'affiche j'ai bien défini $bdd dans mon fichier de connexion.

    //On cré l'objet $bdd à l'aide de la commande new suivi du nom de la classe
    $bdd = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bdd, $PARAM_utilisateur, $PARAM_mot_passe);
    0
    1. tito23 Messages postés 318 Statut Membre 4
       
      Voici le nouveau code
      $sql= "SELECT COUNT(*) AS nb FROM utilisateur where utilisateur.membre_utilisateur = 'Debutant'
      AND utilisateur.pupitre_utilisateur = 'Tambour' ";

      $result = $bdd->query($sql);
      $columns = $result->fetch();

      $nb = $columns['nb'];

      if($nb>0){
      echo'<tr>';
      echo'<th width="25%" class="table-sous-entete">Tambour</th>';
      echo'</tr>';
      }
      while ($donnees = $resultats->fetch()){
      echo'<tr>';
      echo'<td width="25%" class="table-ligne1">'.$donnees->nom_utilisateur.' '.$donnees->prenom_utilisateur.'</td>';
      echo'</tr>';
      }
      echo'</table></td></tr></table>';
      ?>

      Sinon tu veux pas essayer avec un code non orienté objet?
      0
  18. troubadour2 Messages postés 284 Statut Membre 1
     
    Hélas ça ne fonctionne toujours pas

    Mais j'ai tout mon site en POO.
    0
    1. tito23 Messages postés 318 Statut Membre 4
       
      tu as dit dans un post précédent "mais par contre ça affiche bien les utilisateurs. "
      Vraiment c'est bizarre sinon essaie de copier coller le code tout complet.
      0
  19. troubadour2 Messages postés 284 Statut Membre 1
     
    Voilà en fait avec se script ça affiche bien les utilisateurs mais ça affiche aussi le titre dans ce cas "tambour" même si il n'y a pas d'utilisateur qui correspond à "Tambour".

    Contrairement à votre script c'est le contraire.
    C'est très complexe mais j'aimerai tant pouvoir y arriver.

    <table style="width:25%; float:left"> 
    	<tr>
    		<td class="table-separateur">
    <table width="100%" border="2" cellspacing="1" cellpadding="5">
    	<tr>
    		<td class="table-entete">DEBUTANT</td>
    	</tr>
    	
    	<tr>
    		<th width="25%" class="table-sous-entete">Tambour</th> 
    	</tr>
    <?php
    $resultats = $bdd->query("SELECT * FROM utilisateur WHERE 'utilisateur'.'membre_utilisateur' = 'Debutant' AND 'utilisateur'.'pupitre_utilisateur' = 'Tambour' ORDER BY nom_utilisateur ASC");
    $donnees = $resultats->setFetchMode(PDO::FETCH_OBJ);
    
    while ($donnees = $resultats->fetch())
    {
    ?>	
    <td width="25%" class="table-ligne1"><?php echo $donnees->nom_utilisateur . ' ' . $donnees->prenom_utilisateur; ?></td>	
    	</tr>
    <?php
    }
    ?>
    </table>
    		</td>
    	</tr>
    </table>
    
    0
  20. tito23 Messages postés 318 Statut Membre 4
     
    <?php 
    $sql = "SELECT COUNT(*) AS nb FROM utilisateur where utilisateur.membre_utilisateur = 'Debutant' 
    AND utilisateur.pupitre_utilisateur = 'Tambour' "; 
    
    $result = $bdd->query($sql); 
    $columns = $result->fetch(); 
    
    $nb = $columns['nb']; 
    $resultats = $bdd->query("SELECT * FROM utilisateur WHERE 'utilisateur'.'membre_utilisateur' = 'Debutant' AND 'utilisateur'.'pupitre_utilisateur' = 'Tambour' ORDER BY nom_utilisateur ASC");
    $donnees = $resultats->setFetchMode(PDO::FETCH_OBJ);
    if($nb>0){ 
    echo'<tr>'; 
    echo'<th width="25%" class="table-sous-entete">Tambour</th>'; 
    echo'</tr>'; 
    } 
    while ($donnees = $resultats->fetch()){	
    echo'<tr>'; 
    echo'<td width="25%" class="table-ligne1">'.$donnees->nom_utilisateur.' '.$donnees->prenom_utilisateur.'</td>'; 
    echo'</tr>'; 
    } 
    echo'</table></td></tr></table>'; 
    ?>

    ça doit marcher mnt.
    Merci de changer le problème en résolu quand vous trouvez une solution
    0
  • 1
  • 2