Optimisation de bout de code

Eléphanteau du PHP | 38 Messages

01 mars 2007, 18:03

Bonjour tous le monde,
J'aimerais avoir votre avis sur un bout de code, les optimisations que je pourais lui apportais car celui me "parrait" assez lourd .
//On vérifie que le membre est connecté.
if (isset($_SESSION['logged']) && $_SESSION['logged'] === true)
	{
	$postprixble = $_POST['prix_ble'] ;
	$postprixo = $_POST['prix_avoine'] ;
	$postprixa = $_POST['prix_oignon'] ;
	//vente//
	//-------------------------- Recupe nombre denré ------------------
	$recup_denre = mysql_query ("SELECT id, ble, oignon, avoine FROM membres WHERE pseudo='$pseudo'"); 
	$denre_recup = mysql_fetch_array ($recup_denre) or die (mysql_error());
	$query_commerce_ble = mysql_query ("SELECT prix_denree, nombre_denree FROM commerce WHERE id_objet='1' AND prix_denree='$postprixble'"); 
	
	while ($vm = mysql_fetch_array ($query_commerce_ble))
		{
		$vmprix = $vm['prix_denree'];
		$vmnomb = $vm['nombre_denree'];
		}
	$query_commerce_oignon = mysql_query ("SELECT prix_denree, nombre_denree FROM commerce WHERE id_objet='2' AND prix_denree='$postprixo'"); 
	while ($vo = mysql_fetch_array ($query_commerce_oignon))
		{
		$voprix = $vo['prix_denree'];
		$vonomb = $vo['nombre_denree'];
		}
	$query_commerce_avoine = mysql_query ("SELECT prix_denree, nombre_denree FROM commerce WHERE id_objet='3' AND prix_denree='$postprixa'"); 
	while ($va = mysql_fetch_array ($query_commerce_ble))
		{
		$vaprix = $va['prix_denree'];
		$vanomb = $va['nombre_denree'];
		}
	//---------------Fin ------------------------------------------------
	//Necessaire à l'update du ble
	if (isset($_POST['ble']))
		{	
		if ( $denre_recup['ble'] < $_POST['ble'] )
			{
	   echo'Mise sur le marché impossible';
			}
		else
			{
			if ($_POST['ble'] > 0 && $_POST['prix_ble'] > 0 )
			{
			$nombre_ble = $_POST['ble'];
			$prix_ble = $_POST['prix_ble'];
			$noms_objet = ble ;
			$total = $denre_recup['ble'] - $nombre_ble;
			$id=$denre_recup['id'];
			mysql_query("UPDATE membres SET ble='$total' WHERE id='$id'");
			if($vmprix == $_POST['prix_ble'])
			{
			$denree_ble = ($vmnomb + $_POST['ble']);
			mysql_query("UPDATE commerce SET nombre_denree='".$denree_ble."' WHERE id_objet='1' AND prix_denree='$postprixble'");
			}
			else
			{
			mysql_query('INSERT INTO commerce VALUES ("", "'.$_POST['ble'].'", "'.$_POST['prix_ble'].'", "1")');
			}
			}
			}
	}
// fin de lupdate du ble
Les variable POST proviennent d'une autre pages, et les 2 des 3 boucles qui parraissent inutile servent enfaite à repeter le Necessaire à l'update du ble mais avec l'oignon et l'avoine .

Merci à vous .

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

01 mars 2007, 19:01

Tu peux déjà optimiser le début en effectuant une seule requête :
// j'ai ajouté id_objet dans le select et je ramene les 3 groupes de valeur
$sql = "SELECT id_objet, prix_denree, nombre_denree FROM commerce 
  WHERE (id_objet=1 AND prix_denree='".$postprixble."') 
  OR (id_objet=2 AND prix_denree='".$postprixo."') 
  OR (id_objet=3 AND prix_denree='".$postprixa."')";  // virer les apostrophes si $postprixble et autre sont des nombres

$query_commerce = mysql_query ($sql);
     
while ($vm = mysql_fetch_array ($query_commerce)) { 
  switch($vm['id_objet']) { // selon le cas
    case 1 :
      $vmprix = $vm['prix_denree']; 
      $vmnomb = $vm['nombre_denree']; 
      break;
    case 2 :
      $voprix = $vm['prix_denree']; 
      $vonomb = $vm['nombre_denree']; 
      break;
    case 3 :
      $vaprix = $vm['prix_denree']; 
      $vanomb = $vm['nombre_denree']; 
      break;
  }
} 
on doit surement pouvoir améliorer la suite également, mais ca sera déjà ca de fait ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 38 Messages

01 mars 2007, 19:37

Merci bien pour ce debut d'optimisation !

ViPHP
ViPHP | 4674 Messages

01 mars 2007, 19:57

Bonsoir,

pour ne rien te cacher, j'ai pas vraiment envie d'optimiser ton code ^^
Mais voici déjà quelques trucs qui me "choque".

Déjà : $noms_objet = ble ;, ce serait cool d'avoir $noms_objet = 'ble'; (on n'oublie pas les quotes !).
Et tu as pleins de variables qui te servent à rien (comme $noms_objet).
Regardes bien chaque variable, et regardes si elle intervient.

Et tu peux aussi faire un elseif() plutôt qu'un else { if () { } }.

Sinon le plus gros a été fait par Ryle.


Bonne soirée :)
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).