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();
?>
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]<?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();
?>[/php]