Page 1 sur 1

Utilisation de mysql_fetch_assoc()

Posté : 23 oct. 2006, 19:49
par fiatt
Bonjour.

Après un "SELECT * FROM matable WHERE condition" je souhaite utiliser le résultat du mysql_fetch_assoc.

Avec le SELECT actuel le résultat de l'assoc comporte plusieurs enregistrements.

Comment puis-je sélectionner un enregistrement à la fois sans devoir faire plusieurs SELECT plus précis?

Par exemple existe-t-il une syntaxe équivalente à la dernière ligne:
$sql_stock = "SELECT * FROM stock WHERE id_joueur = '" . $_SESSION['id_joueur'] . "'";
		$result_stock = mysql_query($sql_stock) or die(mysql_error());
		$assoc_stock = mysql_fetch_assoc ($result_stock) or die(mysql_error());

//SYNTAXE INVENTEE
$qtt_tml = $assoc_stock['quantite_actuelle'] WHERE $assoc_stock['designation'] = 'tml';
En utilisant des "if" pour tous les enregistrements sur lesquels je veux travailler, cela sera-t-il efficace?
$sql_stock = "SELECT * FROM stock WHERE id_joueur = '" . $_SESSION['id_joueur'] . "'";
		$result_stock = mysql_query($sql_stock) or die(mysql_error());
		$assoc_stock = mysql_fetch_assoc ($result_stock) or die(mysql_error());


//UNE SUITE DE "IF" : EST-CE JUDICIEUX?
if ($assoc_stock['designation'] = 'tml')
{
    $qtt_tml = $assoc_stock['quantite_actuelle'];  
}

if ($assoc_stock['designation'] = 'ste')
{
    $qtt_ste = $assoc_stock['quantite_actuelle'];  
}

Merci pour votre aide.

Posté : 23 oct. 2006, 21:34
par Yoda54
Bonsoir,

Je n'ai peut-être pas bien saisi ce que vous souhaitez mais je pense que dans ce cas, il faut utiliser une boucle while:
$sql_stock = "SELECT * FROM stock WHERE id_joueur = '" . $_SESSION['id_joueur'] . "'";
$result_stock = mysql_query($sql_stock) or die(mysql_error());
while ($assoc_stock = mysql_fetch_assoc ($result_stock)) 
{
    $qtt[$assoc_stock['designation']]=$assoc_stock['quantite_actuelle']
}
Vous aurez ainsi un tableau qtt où à chaque désignation correspond la quantité actuelle. Est-ce bien ce que vous vouliez?

Posté : 23 oct. 2006, 22:43
par fiatt
Merci Yoda54.

Cette solution semble être pas mal! Je la testerai pour voir si cela fonctionne.

Das tous les cas merci bien!

Posté : 29 oct. 2006, 19:47
par fiatt
J'ai un soucis avec ce script:
if (isset($_POST['envoyer']))   //si formulaire envoyé
{
	if ($_POST['envoyer'] == 'Construire') 
	{	
	 	include './includes/mysql_connect.php';
		//PRENDRE LES STOCKS DU JOUEUR
		$sql_stock = "SELECT * FROM stock WHERE id_joueur = '" . $_SESSION['id_joueur'] . "'";
		$result_stock = mysql_query($sql_stock) or die(mysql_error());
		
		while ($assoc_stock = mysql_fetch_assoc ($result_stock)) 
			{
    			$qtt_ . $assoc_stock['designation'] = $assoc_stock['quantite_actuelle'];
			} 
		
		 
		//PRENDRE LES COUTS DE L HABITATION DEMANDE
		$sql = "SELECT * FROM cout_fabrication_joueur WHERE id_joueur = '" . $_SESSION['id_joueur'] . "' " .
		"AND nom_objet = 'habitation' AND niveau_objet = '" . $_POST['habitation'] . "'";
		$result = mysql_query($sql) or die(mysql_error());
		$assoc_cout = mysql_fetch_assoc ($result) or die(mysql_error());
		
		 
		//COMPARER LES COUTS AVEC LES STOCKS
		if ( $assoc_cout['cout_tml'] > $qtt_trimetilene OR $assoc_cout['cout_ste'] > $qtt_stenium OR $assoc_cout['cout_pol'] > $qtt_polytes OR $assoc_cout['cout_blo'] > $qtt_bloc )
		{
			$texte = "<font color = red>Vous ne possedez pas assez de ressources!</font>";
		} 
		else
		{
		 	$new_qtt_tml = $qtt_trimétilène - $assoc_cout['cout_tml'];
			$new_qtt_ste = $qtt_sténium - $assoc_cout['cout_ste'];
			$new_qtt_pol = $qtt_polytes - $assoc_cout['cout_pol'];
			$new_qtt_blo = $qtt_bloc - $assoc_cout['cout_blo'];
			mysql_free_result ($result);
			
			//MISE A JOUR DES STOCKS
			$sql3 = "UPDATE stock SET quantite_actuelle = '" . $new_qtt_tml . "' WHERE id_joueur = '" . $_SESSION['id_joueur'] . "' AND designation = 'trimétilène'";
			$result3 = mysql_query($sql3) or die(mysql_error()); 
			
			
			$sql4 = "UPDATE stock SET quantite_actuelle = '" . $new_qtt_ste . "' WHERE id_joueur = '" . $_SESSION['id_joueur'] . "' AND designation = 'sténium'";
			$result4 = mysql_query($sql4) or die(mysql_error()); 
			
			
			$sql5 = "UPDATE stock SET quantite_actuelle = '" . $new_qtt_pol . "' WHERE id_joueur = '" . $_SESSION['id_joueur'] . "' AND designation = 'polytes'";
			$result5 = mysql_query($sql5) or die(mysql_error()); 
			
			
			$sql6 = "UPDATE stock SET quantite_actuelle = '" . $new_qtt_blo . "' WHERE id_joueur = '" . $_SESSION['id_joueur'] . "' AND designation = 'bloc'";
			$result6 = mysql_query($sql6) or die(mysql_error());
Tout semble bien se dérouler jusqu'à la partie //COMPARER LES COUTS AVEC LES STOCKS:
Le résultat de ce if est inversé et je ne sais pas pourquoi:
		if ( $assoc_cout['cout_tml'] > $qtt_trimetilene OR $assoc_cout['cout_ste'] > $qtt_stenium OR $assoc_cout['cout_pol'] > $qtt_polytes OR $assoc_cout['cout_blo'] > $qtt_bloc )

Posté : 30 oct. 2006, 03:52
par Ajoloca
Bonsoir,
Le résultat de ce if est inversé et je ne sais pas pourquoi:
Inversé, OK. Mais il donne quoi, et il devrait donner ???

Posté : 30 oct. 2006, 09:17
par zeus
Essaye de mettre entre parenthèse chaque membre du test afin de donner explicitement les priorités des tests :
if ( ($assoc_cout['cout_tml'] > $qtt_trimetilene) OR ($assoc_cout['cout_ste'] > $qtt_stenium) OR ($assoc_cout['cout_pol'] > $qtt_polytes) OR ($assoc_cout['cout_blo'] > $qtt_bloc) )

Posté : 30 oct. 2006, 14:47
par fiatt
Pour éclaircir un peu j'ai essayé ceci:
if ( $assoc_cout['cout_tml'] > $qtt_trimetilene )
{
            $texte = "<font color = red>Vous ne possedez pas assez de ressources!</font>";
        } 
        else
        {
            [php] $new_qtt_tml = $qtt_trimétilène - $assoc_cout['cout_tml'];
            $new_qtt_ste = $qtt_sténium - $assoc_cout['cout_ste'];
            $new_qtt_pol = $qtt_polytes - $assoc_cout['cout_pol'];
            $new_qtt_blo = $qtt_bloc - $assoc_cout['cout_blo'];
            mysql_free_result ($result)
;

//MISE A JOUR DES STOCKS
etc etc etc[/php]

Lorsque
$assoc_cout['cout_tml'] > $qtt_trimetilene
qui est la condition à remplir, alors les requètes
$new_qtt_tml = $qtt_trimétilène - $assoc_cout['cout_tml'];
            $new_qtt_ste = $qtt_sténium - $assoc_cout['cout_ste'];
            $new_qtt_pol = $qtt_polytes - $assoc_cout['cout_pol'];
            $new_qtt_blo = $qtt_bloc - $assoc_cout['cout_blo'];
            mysql_free_result ($result)
, qui font parties du else, sont effectuées.

Par contre si
$assoc_cout['cout_tml'] < $qtt_trimetilene
, qui est l'inverse de la condition, alors c'est
$texte = "<font color = red>Vous ne possedez pas assez de ressources!</font>";
J'ai contrôler tout le début du script mais je ne trouve pas d'erreur...

Si je rajoute ! devant la condition alors les résultats sont ok mais le raisonnement reste inversé...

Posté : 05 nov. 2006, 20:20
par fiatt
Le problème est résolu. Il y avait une erreur de syntaxe:
while ($assoc_stock = mysql_fetch_assoc ($result_stock))
            {
                $qtt_ . $assoc_stock['designation'] = $assoc_stock['quantite_actuelle'];
            }
ne fonctionne pas.

Il faut mettre:
while ($assoc_stock = mysql_fetch_assoc ($result_stock))
            {
                ${$assoc_stock['designation']} = $assoc_stock['quantite_actuelle'];
            }
Merci de votre aide.