Problème de logique...

Eléphanteau du PHP | 14 Messages

17 mars 2012, 21:04

Bonjour le but de ce code étant d'afficher tout les utilisateur existant et aussi de cocher les cases des utilisateur présent dans le groupe que l'on sélectionne dans la page du GET précédent ... le problème c'est que sa ne marche pas , il n'y a pas d'erreur sa affiche tout utilisateur mais sa ne les coche pas a par le premier ( qui est toujours admin donc c'est obligatoirement cocher ).
Merci de bien vouloir m'aidez a trouver l'erreur de logique dedans car je suis bloquez dessus depuis 1h ...
Cordialement Jery.
<?php

if(empty($_GET["numgroupe"]))
{
$numgroupe="0";
}

else
{
$numgroupe=$_GET["numgroupe"];
}

require ("connect.php");
$connect=mysql_connect($serveurweb,$nomutil,$mdp);
mysql_select_db($bdd,$connect);

if($connect)
{

$requete5="select numutilisateur from ug where numgroupe=".$numgroupe."  ";
$result5 = mysql_query($requete5) or die(mysql_error());


$requete6="select numutilisateur,pseudo,numdroit from utilisateur  ";
$result6 = mysql_query($requete6) or die(mysql_error());

echo"
		<table>
	";
	
while($ligne6=mysql_fetch_assoc($result6))
	{
	
									
		echo"
				<tr><td>".$ligne6['pseudo']."</td><td><input type='checkbox' name='util[]' value='".$ligne6['numutilisateur']."' 
			";

		if ($ligne6['numdroit']==1)
			{
				echo"
						disabled checked
					";
			}	
			
			$requetepourvoir=mysql_query($requete5);
			$total=mysql_num_rows($requetepourvoir);
			$bobol=false;
				
while($ligne5=mysql_fetch_assoc($result5) && $bobol=false )
			{
		
				
				if($ligne6['numutilisateur']==$ligne5['numutilisateur'])
					{
						echo"
								checked 
							";
						
						$bobol=true;
							
					}
				
			}
			
		echo"		
				/></td></tr>
			";
										
	}
	
echo"
		</table>
	";

	echo $total;
}

else
{
	echo "probleme de connexion";
}

mysql_close();

?>

Mammouth du PHP | 1967 Messages

17 mars 2012, 21:28

J'ai pas regarder tout ton code, mais tu ferais bien mieux de faire une seule requète avec une jointure entre tes tables. tu test un champs de ta table ug si il est NULL, c'est que l'utilisateur n'a pas le bon groupe
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 14 Messages

17 mars 2012, 22:46

Un ami a trouver la solution ( merci a Thibaud C ) , pas besoin de jointure , en fait le problème venait de la requête result5 qu'il fallait placer a l'intérieur de la boucle avant le while sinon sa ne recommencez pas au début de la premier ligne de la requête .... voici le bon code si un jour quelqu'un en aurait besoin :
<?php

if(empty($_GET["numgroupe"]))
{
$numgroupe="0";
}

else
{
$numgroupe=$_GET["numgroupe"];
}

require ("connect.php");
$connect=mysql_connect($serveurweb,$nomutil,$mdp);
mysql_select_db($bdd,$connect);

if($connect)
{




$requete6="select numutilisateur,pseudo,numdroit from utilisateur  ";
$result6 = mysql_query($requete6) or die(mysql_error());

echo"
                <table>
        ";
        
while($ligne6=mysql_fetch_assoc($result6))
        {
        
                                                                        
                echo"
                                <tr><td>".$ligne6['pseudo']."</td><td><input type='checkbox' name='util[]' value='".$ligne6['numutilisateur']."' 
                        ";

                if ($ligne6['numdroit']==1)
                        {
                                echo"
                                                disabled checked
                                        ";
                        }       
                        
$requete5="select numutilisateur from ug where numgroupe=".$numgroupe."  ";
$result5 = mysql_query($requete5) or die(mysql_error());
                        $requetepourvoir=mysql_query($requete5);
                        $total=mysql_num_rows($requetepourvoir);
                     
                                
while($ligne5=mysql_fetch_assoc($result5) )
                        {
                
                                
                                if($ligne6['numutilisateur']==$ligne5['numutilisateur'])
                                        {
                                                echo"
                                                                checked 
                                                        ";
                                                
                                                $bobol=true;
                                                        
                                        }
                                
                        }
                        
                echo"           
                                /></td></tr>
                        ";
                                                                                
        }
        
echo"
                </table>
        ";

        echo $total;
}

else
{
        echo "probleme de connexion";
}

mysql_close();

?>
 

Mammouth du PHP | 1967 Messages

18 mars 2012, 01:12

Ton code marche peut être très bien, mais tu fait autant de requète qu'il n'y a d'utilisateur dans ta base (+1) alors que tu peux n'en faire qu'une et ainsi optimiser ton code. Une jointure qui associe le numéro du groupe et un simple if pour vérifier sa valeur devrait être plus optimal
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 14 Messages

18 mars 2012, 02:07

Effectivement si le nombre d'utilisateur est immense ( qui a dit fb ? ) une jointure est mieux , dans mon cas c'est un petit truc pour le bts donc rien d'important donc je m'attarde pas trop decu vu que sa marche maintenant ^^ , merci pour ton aide en tout cas !

Mammouth du PHP | 2278 Messages

18 mars 2012, 15:29

Si j'étais le prof je sanctionnerais une solution qui ignore la jointure, car elle suggère que la notion sur laquelle porte l'exercice n'a as été comprise, d'autant que les jointures sont optimisées:
http://dev.mysql.com/doc/refman/5.0/fr/ ... ation.html

J'ai connu des étudiants qui, devant inverser des matrices 4x4 m'ont répondu qu'ils ne voyaient pas l'intérêt de chercher une solution générale, puisque l'exercice éait résolu, et furent dans un grand embarras quand leur projet de maitrise exigea d'eux qu'ils inversassent de très grandes matrices, ce que leur programme ne savait pas faire. Heureusement, mon bureau nageait sous les outils e calcul formel...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 mars 2012, 17:48

Et moi j'dis qu'un prof qui maîtriserai jointure et imparfait du subjonctif ça devrait imposer le respect ! ;)

Effectivement, pour un petit projet l'optimisation et la gestion des ressources n'est pas forcément de mise, mais avoir de bonnes pratiques, quelque soit la taille du projet, c'est important ! D'autant que tu ne sais pas comment il risque d'évoluer :)

Alors effectivement ton projet ne concerne pas les utilisateurs de facebook, mais même s'il ne concerne que 50 personnes aujourd'hui, et peut être 300 demain, ça veut dire que rien que ce bout de code (sans parler de ce que ton script fait d'autre) va exécuter 50 ou 300 requêtes vers la base de données, au lieu d'une seule pour le même résultat :)

Donc ça vaut la peine d'y jeter un coup d'oeil même si tu ne t'en sers pas ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...