Que pensez-vous de ce script?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Que pensez-vous de ce script?

par fiatt » 16 oct. 2006, 13:36

ok merci beaucoup!

par Cyrano » 15 oct. 2006, 23:22

Je ne note rien de particulier sinon deux choses :
- le mysql_free_result() après une requête UPDATE est inutile, on ne l'utilise qu'après un SELECT, SHOW, DESCRIBE ou EXPLAIN;
- Les index dans un tableau doivent être encadrés d'apostrophes ou de guillemets.
Ce qui donne au final :
<?php
//CALCUL DU NOMBRE DE SECONDE DEPUIS LE DERNIER CALCUL ET MISE A JOUR DE LA DATE DU DERNIER CALCUL
$sql = "UPDATE calculs ".
       "SET nombre_secondes = TIMESTAMPDIFF( SECOND, TIMESTAMP(date_dernier_calcul), CURRENT_TIMESTAMP()) , ".
       "    date_dernier_calcul = NOW()".
       "WHERE id_joueur = 1";
     //"WHERE id_joueur = '" . $_SESSION[id_joueur] . "'";

$result = mysql_query($sql) or die(mysql_error());

//$sql2 = "SELECT nombre_secondes FROM calculs WHERE id_joueur = '" . $_SESSION[id_joueur] . "' " .
$sql2 = "SELECT nombre_secondes ".
        "FROM calculs ".
        "WHERE id_joueur = 1 " .
        "AND nombre_secondes >= '60'";
$result2 = mysql_query($sql2) or die(mysql_error());

//si num_rows différent de 1 alors calcul demandé depuis moins d'1 minute
if (mysql_num_rows($result2) != 1)
{
    //réafficher les données du dernier calcul et arrêter le sript
    echo "attendre 1 minute!!";
}
else
{
    //COMBIEN DE MINUTES DEPUIS DERNIER CALCUL
    $assoc2  = mysql_fetch_assoc($result2) or die(mysql_error());;
    $minutes = round ( $assoc2['nombre_secondes'] / 60 );
    mysql_free_result ($result2);

    //FAIRE LE CALCUL POUR LA RESSOURCE TML
    $sql3 = "SELECT * ".
            "FROM machines, possessions ".
            "WHERE machines.id_machines = possessions.id_machines " .
            "  AND machines.ressource_produite = 'trimétilène' " .
            "  AND possessions.id_joueur = 1";
          //"  AND possessions.id_joueur = '" . $_SESSION[id_joueur] . "'";

    $result3 = mysql_query($sql3) or die(mysql_error());

    $prod_tml = 0;
    while ($assoc3 = mysql_fetch_assoc($result3))
    {
        $prod_tml += ( ($assoc3['production_minute'] * $minutes) * $assoc3['quantite'] );
    }
    mysql_free_result ($result3);

    //$sql4 = "SELECT * FROM stock WHERE id_joueur = '" . $_SESSION[id_joueur] . "'";
    $sql4 = "SELECT * FROM stock WHERE id_joueur = '1'";
    $result4 = mysql_query($sql4) or die(mysql_error());
    $assoc4 = mysql_fetch_assoc($result4) or die(mysql_error());

    if ( $assoc4['quantite_max'] >= ($assoc4['production_minute'] + $prod_tml) )
    {
        $sql5 = "UPDATE stock ".
                "SET quantite_actuelle = '" . $prod_tml ."' ".
                "WHERE stock.designation = 'trimétilène' " .
                "  AND stock.id_joueur = '1'";
              //"  AND stock.id_joueur = '" . $_SESSION[id_joueur] . "'";
        $result5 = mysql_query($sql5) or die(mysql_error());
        mysql_free_result ($result5);
    }
    else
    {
        $sql6 = "UPDATE stock ".
                "SET quantite_actuelle = '" . $assoc4['quantite_max'] ."' ".
                "WHERE stock.designation = 'trimétilène' " .
                "  AND stock.id_joueur = '1'";
              //"  AND stock.id_joueur = '" . $_SESSION[id_joueur] . "'";
        $result6 = mysql_query($sql6) or die(mysql_error());
        mysql_free_result ($result6);
    }

    //faire de meme pour toutes les ressources
}
mysql_close();
?>

Que pensez-vous de ce script?

par fiatt » 15 oct. 2006, 22:30

Bonjour tout le monde.

Je viens de finir un script et il me semble fonctionner mais comme je suis un éternel insatisfait et plutôt perfectionniste je me demandais s'il était possible de le simplifier.

D'après mes premiers essais il semble fonctionner mais je ne l'ai pas encore essayé avec beaucoup d'enregistrements. Peut-être que quelquechose vous sautera aux yeux?
//CALCUL DU NOMBRE DE SECONDE DEPUIS LE DERNIER CALCUL ET MISE A JOUR DE LA DATE DU DERNIER CALCUL   
$sql = "UPDATE calculs ".
	   "SET nombre_secondes = TIMESTAMPDIFF( SECOND, TIMESTAMP(date_dernier_calcul), CURRENT_TIMESTAMP()) , ".
       "date_dernier_calcul = NOW()".
	   "WHERE id_joueur = '1'"; 
       //"WHERE id_joueur = '" . $_SESSION[id_joueur] . "'";
 
$result = mysql_query($sql) or die(mysql_error()); 
mysql_free_result ($result);


//$sql2 = "SELECT nombre_secondes FROM calculs WHERE id_joueur = '" . $_SESSION[id_joueur] . "' " .
$sql2 = "SELECT nombre_secondes FROM calculs WHERE id_joueur = '1' " .
		"AND nombre_secondes >= '60'";
$result2 = mysql_query($sql2) or die(mysql_error());

//si num_rows différent de 1 alors calcul demandé depuis moins d'1 minute
if (mysql_num_rows($result2) != 1)
{
//réafficher les données du dernier calcul et arrêter le sript
echo "attendre 1 minute!!";
} else
	{
	//COMBIEN DE MINUTES DEPUIS DERNIER CALCUL
	$assoc2 = mysql_fetch_assoc($result2) or die(mysql_error());;
	$minutes = 	round ( $assoc2[nombre_secondes] / 60 );
	mysql_free_result ($result2);
	
	//FAIRE LE CALCUL POUR LA RESSOURCE TML
	$sql3 = "SELECT * FROM machines, possessions WHERE " .
	"machines.id_machines = possessions.id_machines " .
	"AND machines.ressource_produite = 'trimétilène' " .
	"AND possessions.id_joueur = '1'";
	//"AND possessions.id_joueur = '" . $_SESSION[id_joueur] . "'";
	 
	$result3 = mysql_query($sql3) or die(mysql_error());
	
	$prod_tml = 0;
	while ($assoc3 = mysql_fetch_assoc($result3)) 
		{
      $prod_tml += ( ($assoc3[production_minute] * $minutes) * $assoc3[quantite] );
	 	}
	mysql_free_result ($result3);
		
	//$sql4 = "SELECT * FROM stock WHERE id_joueur = '" . $_SESSION[id_joueur] . "'";
	$sql4 = "SELECT * FROM stock WHERE id_joueur = '1'";
	$result4 = mysql_query($sql4) or die(mysql_error());
	$assoc4 = mysql_fetch_assoc($result4) or die(mysql_error());
	
	if ( $assoc4[quantite_max] >= ($assoc4[production_minute] + $prod_tml) )
		{
		$sql5 = "UPDATE stock SET quantite_actuelle = '" . $prod_tml .
		"' WHERE stock.designation = 'trimétilène' " .
		"AND stock.id_joueur = '1'";
		//"AND stock.id_joueur = '" . $_SESSION[id_joueur] . "'";
		$result5 = mysql_query($sql5) or die(mysql_error());
		mysql_free_result ($result5);
		} else
			{
			$sql6 = "UPDATE stock SET quantite_actuelle = '" . $assoc4[quantite_max] .
			"' WHERE stock.designation = 'trimétilène' " .
			"AND stock.id_joueur = '1'";
			//"AND stock.id_joueur = '" . $_SESSION[id_joueur] . "'";
			$result6 = mysql_query($sql6) or die(mysql_error());
			mysql_free_result ($result6);
			}
		
	//faire de meme pour toutes les ressources
		
	}



mysql_close();
N'hésitez pas sur les critiques car étant débutant je suis loin de penser à tout!