Utilisation de mysql_fetch_assoc()

Eléphanteau du PHP | 28 Messages

23 oct. 2006, 19:49

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.

Petit nouveau ! | 4 Messages

23 oct. 2006, 21:34

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?
Modifié en dernier par Yoda54 le 24 oct. 2006, 10:13, modifié 1 fois.

Eléphanteau du PHP | 28 Messages

23 oct. 2006, 22:43

Merci Yoda54.

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

Das tous les cas merci bien!

Eléphanteau du PHP | 28 Messages

29 oct. 2006, 19:47

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 )

ViPHP
ViPHP | 1961 Messages

30 oct. 2006, 03:52

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 ???
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 oct. 2006, 09:17

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) )
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 28 Messages

30 oct. 2006, 14:47

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é...

Eléphanteau du PHP | 28 Messages

05 nov. 2006, 20:20

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.