20-09-2008, 05:54 PM
(Modification du message : 20-09-2008, 07:56 PM par Sephi-Chan.)
Hello!
petit soucis sur un script me permettant de faire une vente enter un perso (vendeur) et un marchand (acheteur).
Testé avec et sans transaction, aucune différence.
c'est une page appelée vie ajax. une paramètre qui sert à rien (sauf détecter une tentative de triche plus tard)
variable session:
$_SESSION[magasin]["offre"] contient la dernière offre acceptée
$_SESSION[magasin]["liste"] contient la liste des ID des objets vendus (séparés par virgule si besoin)
le script doit donc:
1) changer l'identifiant du propriétaire (Pxx => Sxx)
2) créditer le compte du PJ
3) débiter la caisse du magasin
-------------------------
4) mise à jour de la "demande" des objets concernés (bref: demande-1 sur table objet)
Je n'ai aucune erreur en retour
TOUTES les requetes passent directement sous MySQL
champ 'Demande' est bien décrémenté au final (requete 4)
LES 3 premières sont sans effets
Je suis largué.. Help Me please!!!!
petit soucis sur un script me permettant de faire une vente enter un perso (vendeur) et un marchand (acheteur).
Testé avec et sans transaction, aucune différence.
c'est une page appelée vie ajax. une paramètre qui sert à rien (sauf détecter une tentative de triche plus tard)
variable session:
$_SESSION[magasin]["offre"] contient la dernière offre acceptée
$_SESSION[magasin]["liste"] contient la liste des ID des objets vendus (séparés par virgule si besoin)
le script doit donc:
1) changer l'identifiant du propriétaire (Pxx => Sxx)
2) créditer le compte du PJ
3) débiter la caisse du magasin
-------------------------
4) mise à jour de la "demande" des objets concernés (bref: demande-1 sur table objet)
Je n'ai aucune erreur en retour
TOUTES les requetes passent directement sous MySQL
champ 'Demande' est bien décrémenté au final (requete 4)
LES 3 premières sont sans effets
Je suis largué.. Help Me please!!!!
Code PHP :
<?php
session_start();
header('Content-type: text/html; charset=iso-8859-1');
if(isset($_GET["chaine"]) && strlen($_GET["chaine"])>0)
{
$tarif=substr(htmlentities($_GET["chaine"]),1);
require_once('../../Admin/config.php');
require_once('../../Fcts/Fcts_generales.php');
//charger l'historique marchand/PNJ
$req='SELECT `Nb_achats`,`Indice` FROM `magasin_modif_perso` WHERE `ID_magasin`='.$_SESSION["ID_magasin"].' AND `ID_perso`='.$_SESSION["ID_perso"].' LIMIT 1';
$res=mysql_query($req,$base_id) or die ('Impossible de savoir ce que pense ce vendeur de vous');
if(mysql_num_rows($res)==1)
{
$inconnu=0;
$hist=mysql_fetch_assoc($res);
mysql_free_result($res);
//calcul du modificateur
$mod_marchand=2-modif_marchand($hist["Nb_achats"],$hist["Indice"]);
}
else{$inconnu=1; $hist=array("Nb_achats"=>0,"Indice"=>1); $mod_marchand=1;}
//récupérer les objets et l'offre acceptée
$liste=$_SESSION["magasin"]["liste"];
$offre=$_SESSION["magasin"]["offre"];
//A-t-il ennuyé le marchand pour accepter cette offre?
$essais=$_SESSION["magasin"][$liste]["Nb"];
$error=0;
$raison='';
// 1) transférer les objets du perso => magasin
$Req='UPDATE `inventaire` SET `Proprio`="S'.$_SESSION["ID_magasin"].'", `ID_conteneur`=NULL WHERE `Proprio`="P'.$_SESSION["ID_perso"].'" AND `ID` IN ('.$liste.')';
$res=mysql_query($req,$base_id) or die ('Plantage Objets');
//echo 'Requete des objets : '.$Req;
if(mysql_affected_rows()==0){$error=1; $raison="Transfert des objets incomplet";}
else
{
//echo '=====> OK';
// 2) Ajouter les sous au perso vendeur
$Req='UPDATE `perso` SET `Bourse`=`Bourse`+'.$offre.' WHERE `ID`='.$_SESSION["ID_perso"].' LIMIT 1';
$res=mysql_query($req,$base_id) or die('Plantage Bourse');
//echo '<br />Requete du perso : '.$Req;
if(mysql_affected_rows()!=1)
{
$error=1; $raison="Récupération de l'argent par le vendeur";
//défaire ce qui a été fait
$Req='UPDATE `inventaire` SET `Proprio`="P'.$_SESSION["ID_perso"].'" WHERE `Proprio`="S'.$_SESSION["ID_magasin"].'" AND `ID` IN ('.$liste.')';
$res=mysql_query($req,$base_id) or die ('Plantage Objets');
//echo '<br />Requete des objets : '.$Req;
if(mysql_affected_rows()==0){$raison.='<br />Récupération Objets incomplète ('.$liste.')';}
else{$raison.='<br /> ====> Récupération Objets complète ('.$liste.')';}
}
else
{
//3) Décompter cet argent de la caisse du Marchand
$Req='UPDATE `magasins` SET `Caisse`=`Caisse`-'.$offre.' WHERE `ID`='.$_SESSION["ID_magasin"].' LIMIT 1';
$res=mysql_query($req,$base_id) or die('Plantage Caisse');
//echo '<br />Requete de la caisse : '.$Req;
if(mysql_affected_rows()!=1)
{
$error=1; $raison="Caisse du marchand non débitée"; //pas grave, mais bon...
//1) corriger les objets
$Req='UPDATE `inventaire` SET `Proprio`="P'.$_SESSION["ID_perso"].'" WHERE `Proprio`="S'.$_SESSION["ID_magasin"].'" AND `ID` IN ('.$liste.')';
$res=mysql_query($req,$base_id) or die ('Plantage Objets');
//echo 'Requete des objets : '.$Req;
if(mysql_affected_rows()==0){$raison.='<br />Récupération Objets incomplète ('.$liste.')';}
else{$raison.='<br /> ====> Récupération Objets complète ('.$liste.')';}
//2)corriger la bourse du perso
$Req='UPDATE `perso` SET `Bourse`=`Bourse`-'.$offre.' WHERE `ID`='.$_SESSION["ID_perso"].' LIMIT 1';
$res=mysql_query($req,$base_id) or die('Plantage Bourse');
//echo '<br />Requete du perso : '.$Req;
if(mysql_affected_rows()==0){$raison.='<br />Correction Bourse du perso incomplète ('.$offre.')';}
else{$raison.='<br /> ====> Correction Bourse du perso complète ('.$offre.')';}
}
else{$raison='tout s\'est bien déroulé';}
}
}
//$error=1; //a virer
if($error==0) //rien à redire à cette transaction
{
//mémoriser les objets ayant été échangés pour leur cours économique
//les marchands offrant tjs moins que la valeur, on ne modifie donc pas le cours en bdd. Ce sera corrigé par le cghron, si l'offre est >>>> Demande.
//récupérer les cours actuels de ces objets
$Req='SELECT o.`ID`,o.`nom`,o.`Valeur`, o.`Prix`, o.`Stabilite`, o.`Demande` FROM `inventaire` i LEFT JOIN `objets` o ON i.`ID_objet`=o.`ID` WHERE i.`ID` IN ('.$liste.')';
//echo '<p>Requete des Cours : '.$Req.'</p>';
$res=mysql_query($Req,$base_id) or die('Impossible de récupérer le cours de ces objets<br />Erreur :'.mysql_error().'<br />Requete : '.$Req);
if(mysql_num_rows($res)==0){echo 'Aucun cours économique récupéré';}
else
{
$obj=array();
while($o=mysql_fetch_assoc($res))
{
if(isset($obj[$o['ID']])){$obj[$o['ID']]["Qtt"]+=1;}
else{$obj[$o['ID']]=array("Nom"=>$o["nom"], "Val"=>$o["Valeur"], "Cours"=>$o["Prix"],"Indice"=>$o["Stabilite"],"Demande"=>$o["Demande"],"Qtt"=>1);}
}
mysql_free_result($res);
}
//on mémorise les changements (en laissant ouvert pour changement de méthode ultérieure)
$err='';
foreach($obj as $ID => $d)
{
$Req='UPDATE `objets` SET `Demande`=`Demande`-'.$d["Qtt"].' WHERE `ID`='.$ID.' LIMIT 1';
//echo '<p>UPDATE des Cours : '.$Req.'</p>';
$res=mysql_query($Req,$base_id);
if(mysql_affected_rows()==0){$err.='<br />Erreur lors de la mise à jour de la demande de l\'objet N°'.$ID;}
}
//remettre l'inventaire à jour=> fait automatiquement. L'Objet Perso sera remis à jour à la sortie du magasin.
//sortie finale
echo '<p>Voilà pour vous...Et voilà pour moi.<br />C\'est un plaisir de faire affaire avec vous. N\'hésitez pas à revenir plus tard.</p>';
if(strlen($err)!=0){echo '<p class="erreur">'.$err.'</p>';}
}
else
{
echo 'Ah, désolé, mais mon tiroir-caisse ne veut pas s\'ouvrir. Pourriez-vous revenir plus tard pour finir cette transaction? Merci</p>';
echo '<p class="erreur">Erreur lors de l\'échange. Raison invoquée : '.$raison.'</p>';
}
mysql_close($base_id);
}
else{echo 0;}