Aller au contenu
Top-Metin2.org - Vous êtes à la recherche d'un serveur Metin 2 ? ×
×
×
  • Créer...
  • 0

beug site ithem shop


mandrilux²

Question

Hello a tous .

Ceci est mon premier post . Je vien ici car je souhaite avancer mon petit serveur .

Avant mon ouverture , je teste tout et j ai un enorme soucis

Mon site ne donne pas tout les objet acheter sur le site mais debite le "cash"

Si on en achete un , sa va mais si on en achete plusieur sans les retirer de l ithem shop, on recois souvent le dernier et pas les autres

J ai un soucis principalement avec les pierre et les perles

Est ce que quelqun a deja eu le soucis avec son site ?

 

Version des files : j utilise les files 2012

Domaine (Base de données, Core, etc.) : il s agit du site web

Votre niveau (débutant, intermédiaire, avancé) : je suis debutant en la matiere

Comment reproduire le problème : en achetant des nouveau ithems ithem shops

Recherches et tests effectué : j ai essayer de modifier la requette sql mais cest

En postant ma demande d'aide, j'affirme avoir lu et accepté le règlement des demandes d'aides.

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 10
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans cette question

10 réponses à cette question

Messages recommandés

  • 0
Bienvenue dans l'item Shop de <?php echo $nomServeur; ?>



<?php	
if(empty($_GET['action'])){
	$sqlCategories = "SELECT * FROM yurima.catIs"; 
			$resultCategories = $connexion->query($sqlCategories); // on va chercher tous les membres de la table qu'on trie par ordre croissant
			$resultCategories->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
			while($dataCategories = $resultCategories->fetch()) // on récupère la liste des membres
			{
				if(@$lignes->mAuthority == "IMPLEMENTOR")
					{
					$_SESSION['categorie'] = $dataCategories->categorie;
					$_SESSION['id_cat'] = $dataCategories->id;
			echo'
'.$dataCategories->categorie.'Supprimer';
					}else{

			echo'
'.$dataCategories->categorie.'
';

				}
			}
		}elseif(isset($_GET['action']) && $_GET['action'] == "categorie")
		{
			echo'

			Vous avez '.$cash.' '.$nomCash.' - Recharger mon compte 




';
				$myVar = intval($_GET['id']);
				$sqlVide = "SELECT * FROM yurima.itemIs WHERE categorie= '".$myVar."' AND actif = 1 ";
				$resultVide = $connexion->prepare($sqlVide);
				$resultVide->execute();
				$countVide = $resultVide->rowCount();
					if($countVide == 0)
					{
					echo'Il n\'y a aucun objet dans cette Catégorie';
					}
					$sqlItems = "SELECT * FROM yurima.itemIs WHERE categorie= '".$myVar."' AND actif = 1"; 
					$resultItems = $connexion->query($sqlItems); // on va chercher tous les membres de la table qu'on trie par ordre croissant
					$resultItems->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
					while($dataItems = $resultItems->fetch()) // on récupère la liste des membres
					{
					if(@$lignes->mAuthority == "IMPLEMENTOR")
					{
						$_SESSION['item'] = $dataItems->nameItem;
						$_SESSION['actif'] = $dataItems->actif;
						echo'
	';
					}
						echo'


x'.$dataItems->nbItem.' '.$dataItems->nameItem.'
'.$dataItems->infoItem.'
 '.$dataItems->prix.' 
Monnaie 




';

					}
					echo'
< Retour';
		}elseif(isset($_GET['action']) && $_GET['action'] == "acheter"){
			$myVar = intval($_GET['id']);
			$sqlItems = "SELECT * FROM yurima.itemIs WHERE actif = '1' AND id =".$myVar." "; 
			$resultItems = $connexion->query($sqlItems); // on va chercher tous les membres de la table qu'on trie par ordre croissant
			$resultItems->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
			while($dataItems = $resultItems->fetch()) // on récupère la liste des membres
				{
					echo'Vous êts sur le point d\'acheter




x'.$dataItems->nbItem.' '.$dataItems->nameItem.'
'.$dataItems->infoItem.'
 '.$dataItems->prix.' 
Monnaie 







< Retour';
				}
		}elseif(isset($_GET['action']) && $_GET['action'] == "valide")
		{
			$myVar = intval($_GET['id']);
			$sqlItem = "SELECT * FROM yurima.itemIs WHERE id= '".$myVar."'"; 

			$resultItem = $connexion->query($sqlItem); // on va chercher tous les membres de la table qu'on trie par ordre croissant
			$resultItem->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
			while($dataItem = $resultItem->fetch()) // on récupère la liste des membres
			{
				//on liste les variable utiliser
				$prix_item = $dataItem->prix;
				$nb_item = $dataItem->nbItem;
				$item = $dataItem->idItem;
				$nom_item = $dataItem->nameItem;
				//Si l'entrepot n'est pas plein
				if (is_numeric(verif_place_is($id_membre)))
				{//on verifie si le joueur a assez de monnaie
					if($cash >= $prix_item)
					{//on le debite
						$debite=$connexion->exec("UPDATE account.account SET cash=cash-'".$prix_item."' WHERE id = '".$id_membre."' LIMIT 1");
						$sqlPos = "SELECT * FROM player.item WHERE owner_id = '".$id_membre."'";
						$resultPos = $connexion->prepare($sqlPos);
						$resultPos->execute();
						$countPos = $resultPos->rowCount();

						if($countPos == 0){$pos = 0;}
							elseif($countPos == 1){$pos = 1 ;}
							elseif($countPos == 2){$pos = 2 ;}
							elseif($countPos == 3){$pos = 3 ;}
							elseif($countPos == 4){$pos = 4 ;}
							elseif($countPos == 5){$pos = 10 ;}
							elseif($countPos == 6){$pos = 11 ;}
							elseif($countPos == 7){$pos = 12 ;}
							elseif($countPos == 8){$pos = 13 ;}
							elseif($countPos == 9){$pos = 14 ;}
							elseif($countPos == 10){$pos = 20 ;}
							elseif($countPos == 11){$pos = 21 ;}
							elseif($countPos == 12){$pos = 22 ;}
							elseif($countPos == 13){$pos = 23 ;}
							elseif($countPos == 14){$pos = 24 ;}
							elseif($countPos == 15){$pos = 30 ;}
							elseif($countPos == 16){$pos = 31 ;}
							elseif($countPos == 17){$pos = 32 ;}
							elseif($countPos == 18){$pos = 33 ;}
							elseif($countPos == 19){$pos = 34 ;}

							$ajoutObjet=$connexion->exec("INSERT INTO player.item (owner_id, window, pos, count, vnum,socket0,socket1,socket2)	VALUES	('".$id_membre."', 'MALL', '".$pos."', '".$nb_item."', '".$item."','1','1','1')");
							//on ajoute dans l'historique de l'item shop
							$ajoutHistorique=$connexion->exec("INSERT INTO yurima.historiqueIs (idItem,nomItem,nbItem, nomMembre, idMembre,prix,type,date)	VALUES	('".$item."','".$nom_item."','".$nb_item."', '".$login."', '".$id_membre."', '".$prix_item."','1',NOW())");

								echo'Votre Objet a été ajouter avec succé dans votre item Shop

										Recuperez votre Objet avant d\'en racheter un

									Cela Evitera de faire beuguer votre item shop

									Redirection sur la page de l\'item shop dans 8 secondes



';

					}else{echo'Vous n\'avez pas assez de '.$nomCash.'

								Redirection sur la page de l\'item shop dans 5 secondes



';}	
				}else{echo'Votre entrepot est plein

						Redirection sur la page de l\'item shop dans 5 secondes



';}
			}
Lien vers le commentaire
Partager sur d’autres sites

  • 0

C'est parce que le script ne tient pas compte du faite que l'item puisse être empilable ou non.

 

Je ne sais pas quelle tête à ta fonction verif_place_is() mais elle doit être comme ceci (adaption pour PDO faite à l'arrache, non testée) :

 

function verif_place_is($account_id, $nb_item=1)
{

if(is_numeric($account_id))
{

	$requete = "SELECT COUNT(*) AS nb_safebox FROM player.safebox WHERE account_id = '$account_id'";
	$retour	= $connexion->query($requete)
	$donnees = $retour->fetch();
	if($donnees['nb_safebox'] == 1)//Si l'user a bien un entrepôt
	{

		$pos = 0;
		$go = false;
		while($go == false)
		{
			$retour = $connexion->query("SELECT COUNT(*) AS nb_pos FROM player.item WHERE owner_id = '$account_id' AND pos = '$pos' AND window = 'MALL'");
			$donnees = $retour->fetch();
			if($donnees['nb_pos'] >= 1) {$pos++;} else  {$go = true;}
		}

		if($pos > (44-$nb_item)) { return false; } // Si le MALL est plein
		else {return $pos;} // On renvoi le numéro de la position libre
	} else {return false;}
} else { return false; } // Si account n'est pas un chiffre

}

 

Ensuite, pour ton code, essaie de remplacer par ça. J'ai fais une sorte de mixe avec MT2-CMS un peu en live, j'ai pas testé donc c'est possible qu'il y ait quelques bugs :)

 

Bienvenue dans l'item Shop de <?php echo $nomServeur; ?>



   <?php    
   if(empty($_GET['action'])){
       $sqlCategories = "SELECT * FROM yurima.catIs"; 
               $resultCategories = $connexion->query($sqlCategories); // on va chercher tous les membres de la table qu'on trie par ordre croissant
               $resultCategories->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
               while($dataCategories = $resultCategories->fetch()) // on récupère la liste des membres
               {
                   if(@$lignes->mAuthority == "IMPLEMENTOR")
                       {
                       $_SESSION['categorie'] = $dataCategories->categorie;
                       $_SESSION['id_cat'] = $dataCategories->id;
               echo'
'.$dataCategories->categorie.'Supprimer';
                       }else{

               echo'
'.$dataCategories->categorie.'
';

                   }
               }
           }elseif(isset($_GET['action']) && $_GET['action'] == "categorie")
           {
               echo'

               Vous avez '.$cash.' '.$nomCash.' - Recharger mon compte 




';
                   $myVar = intval($_GET['id']);
                   $sqlVide = "SELECT * FROM yurima.itemIs WHERE categorie= '".$myVar."' AND actif = 1 ";
                   $resultVide = $connexion->prepare($sqlVide);
                   $resultVide->execute();
                   $countVide = $resultVide->rowCount();
                       if($countVide == 0)
                       {
                       echo'Il n\'y a aucun objet dans cette Catégorie';
                       }
                       $sqlItems = "SELECT * FROM yurima.itemIs WHERE categorie= '".$myVar."' AND actif = 1"; 
                       $resultItems = $connexion->query($sqlItems); // on va chercher tous les membres de la table qu'on trie par ordre croissant
                       $resultItems->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
                       while($dataItems = $resultItems->fetch()) // on récupère la liste des membres
                       {
                       if(@$lignes->mAuthority == "IMPLEMENTOR")
                       {
                           $_SESSION['item'] = $dataItems->nameItem;
                           $_SESSION['actif'] = $dataItems->actif;
                           echo'
    ';
                       }
                           echo'


x'.$dataItems->nbItem.' '.$dataItems->nameItem.'
'.$dataItems->infoItem.'
 '.$dataItems->prix.' 
Monnaie 




';

                       }
                       echo'
< Retour';
           }elseif(isset($_GET['action']) && $_GET['action'] == "acheter"){
               $myVar = intval($_GET['id']);
               $sqlItems = "SELECT * FROM yurima.itemIs WHERE actif = '1' AND id =".$myVar." "; 
               $resultItems = $connexion->query($sqlItems); // on va chercher tous les membres de la table qu'on trie par ordre croissant
               $resultItems->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
               while($dataItems = $resultItems->fetch()) // on récupère la liste des membres
                   {
                       echo'Vous êts sur le point d\'acheter




x'.$dataItems->nbItem.' '.$dataItems->nameItem.'
'.$dataItems->infoItem.'
 '.$dataItems->prix.' 
Monnaie 







< Retour';
                   }
           }elseif(isset($_GET['action']) && $_GET['action'] == "valide")
           {
               $myVar = intval($_GET['id']);
               $sqlItem = "SELECT * FROM yurima.itemIs WHERE id= '".$myVar."'"; 

               $resultItem = $connexion->query($sqlItem); // on va chercher tous les membres de la table qu'on trie par ordre croissant
               $resultItem->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
               while($dataItem = $resultItem->fetch()) // on récupère la liste des membres
               {
                   //on liste les variable utiliser
                   $prix_item = $dataItem->prix;
                   $nb_item = $dataItem->nbItem;
                   $item = $dataItem->idItem;
                   $nom_item = $dataItem->nameItem;
				$flag = $dataItem->flag;
				$temps = $dataItem->value0;

				if ($cash >= $prix_item)
				{
					if($flag==4 or $flag==20 or $flag==132 or $flag==2052 or $flag==8212)
					{
						//Si l'entrepot n'est pas plein
						if (is_numeric(verif_place_is($id_membre)))
						{

							//On le débite
							$debite=$connexion->exec("UPDATE account.account SET cash=cash-'".$prix_item."' WHERE id = '".$id_membre."' LIMIT 1");
							//On entre dans les logs
							$ajoutHistorique=$connexion->exec("INSERT INTO yurima.historiqueIs (idItem,nomItem,nbItem, nomMembre, idMembre,prix,type,date)    VALUES    ('".$item."','".$nom_item."','".$nb_item."', '".$login."', '".$id_membre."', '".$prix_item."','1',NOW())");

							//On ajoute l'objet
							$pos = verif_place_is($id_membre);
							$connexion->exec("INSERT INTO player.item (owner_id, window, pos, count, vnum, socket2)	VALUES	('$id_membre', 'MALL', '$pos', '$nb_item', '$item', '$temps')");

							 echo'Votre Objet a été ajouter avec succé dans votre item Shop

                                       Recuperez votre Objet avant d\'en racheter un

                                       Cela Evitera de faire beuguer votre item shop

                                       Redirection sur la page de l\'item shop dans 8 secondes



';

						}
						else
						{
							echo'Votre entrepot est plein

                           Redirection sur la page de l\'item shop dans 5 secondes



';
						}
					}

					//Sinon on regroupe les items
					else
					{
						//Si l'entrepot n'est pas plein
						if (is_numeric(verif_place_is($id_membre, $nb_item)))
						{
							//On le débite
							$debite=$connexion->exec("UPDATE account.account SET cash=cash-'".$prix_item."' WHERE id = '".$id_membre."' LIMIT 1");
							//On entre dans les logs
							$ajoutHistorique=$connexion->exec("INSERT INTO yurima.historiqueIs (idItem,nomItem,nbItem, nomMembre, idMembre,prix,type,date)    VALUES    ('".$item."','".$nom_item."','".$nb_item."', '".$login."', '".$id_membre."', '".$prix_item."','1',NOW())");
							//On ajoute l'objet
							for ($i = 1; $i <= $nb_item; $i++)
							{
								$pos = verif_place_is($id_membre);
								$connexion->exec("INSERT INTO player.item (owner_id, window, pos, count, vnum, socket2)	VALUES	('$id_membre', 'MALL', '$pos', '1', '$item', '$temps')");
							}

							echo'Votre Objet a été ajouter avec succé dans votre item Shop

                                       Recuperez votre Objet avant d\'en racheter un

                                       Cela Evitera de faire beuguer votre item shop

                                       Redirection sur la page de l\'item shop dans 8 secondes



';

						}
						else
						{
							echo'Votre entrepot est plein

                           Redirection sur la page de l\'item shop dans 5 secondes



';
						}								

					}


                   }
				else
				{
					echo'Vous n\'avez pas assez de '.$nomCash.'

                                   Redirection sur la page de l\'item shop dans 5 secondes



';
				}    

               }
		}
Lien vers le commentaire
Partager sur d’autres sites

  • 0

ma fonction est :

 

/** verif d'entrepot plein **/
function verif_place_is($id_membre, $nb_item=1)
{
include 'inc/config.php';
if(is_numeric($id_membre))
{

$retour = "SELECT * FROM player.safebox WHERE account_id = '".$id_membre."'";
			$resultRetour = $connexion->prepare($retour);
			$resultRetour->execute();
			$countRetour = $resultRetour->rowCount();

if($countRetour == 1)//Si l'user a bien un entrepôt
{

	$pos = 0;
	$go = false;
	while($go == false)
	{

$retour2 = "SELECT * FROM player.item WHERE owner_id = '".$id_membre."' AND pos= '".$pos."' AND window = 'MALL' '";
			$resultRetour2 = $connexion->prepare($retour2);
			$resultRetour2->execute();
			$countRetour2 = $resultRetour2->rowCount();
	if($countRetour2 >= 1) {$pos++;} else  {$go = true;}
	}

	if($pos > (44-$nb_item)) { return false; } // Si le MALL est plein
	else {return $pos;} // On renvoi le numéro de la position libre
} else {return false;}
} else { return false; } // Si account n'est pas un chiffre
}

Lien vers le commentaire
Partager sur d’autres sites

Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.


Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.