Erreur dans une variable

Résolu/Fermé
jobouille Messages postés 286 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 27 septembre 2017 - 22 avril 2015 à 18:42
Yuh12 Messages postés 184 Date d'inscription mercredi 7 mai 2014 Statut Membre Dernière intervention 28 septembre 2017 - 25 avril 2015 à 01:47
Bonjour à tous !

Sur mon site j'ai fait un petit système de marché virtuel.

Ici, lorsqu'on achète du Blé ($Ble), celui-ci coûte 3 pièces d'or ($piecedor) et on est limité à 20 articles ($articles) toutes les 12h.

Tout fonctionne parfaitement sauf la variable $articles :

je m'explique, si on achète 3 blé par exemple alors $articles = $articles + 3 blé. $articles ne doit jamais dépasser 20 et quand il est à 20 alors le membre doit attendre 12h.
Cette variable $articles fonctionne une fois sur deux ce qui est assez gênant.

Le code est assez long mais j'espère que vous saurez me dire quoi changer :

$erreur ="";
$datetime1 = strtotime($user['articlesT']);
$now = date('Y-m-d H:i:s');
$datetime2 = strtotime($now);
                    
$interval  = abs($datetime2 - $datetime1);
$hours= round($interval / 3600);
$id = isset($_SESSION['id'])?$_SESSION['id']:NULL;
$articles = $user['articles'];
$achat = $user['achat'];
 
 
if(isset($_SESSION['id'])) {
 
    if($user['mission'] <= 4)
    {
        header ('Location: ma_ferme.php');
    }
    //DEBUT CODE ACHAT BLE
    if(isset($_POST['achatBle']))
    {
 
        if(htmlspecialchars($_POST['qttBle']))
        {
            $qttBle = htmlspecialchars($_POST['qttBle']);
            if(ctype_digit($qttBle) === true)
            {
                $requser = $bdd->prepare("SELECT * FROM membres WHERE id = ?");
                $requser->execute(array($_SESSION['id']));
                $user = $requser->fetch();
                $Ble = $user['Ble'];
                $piecedor = $user['piecedor'];
                if($achat != 1)
                {
                    if($piecedor >= $qttBle * 3)
                    {
                        $articles = $user['articles'];
                        if($articles + $qttBle <= 20)
                        {
                            $Ble = $Ble + $qttBle;
                            $piecedor = $piecedor - (3 * $qttBle);
                            $pieceObtenue = 3 * $qttBle;
                            $articles = $articles + $qttBle;
                            $reqoper = $bdd->prepare("UPDATE membres SET Ble = ?, piecedor = ?, articles = ? WHERE id = ?");
                            $reqoper->execute(array($Ble, $piecedor, $articles, $_SESSION['id']));
                            $erreur ='Vous avez acheté '.$qttBle.' épis de Blé contre '.$pieceObtenue.' pièces d\'Or !';
                            header ('Refresh: 2; marche.php');
                            if($user['mission'] == 5)
                            {
                                $missionok =  $bdd->exec('UPDATE membres SET missionOK = 5 WHERE id = '.$_SESSION['id']);
                            }
                        }
                        else
                        {
                            $erreur ='Vous ne pouvez pas acheter plus de 20 articles par jour.';
                            header ('Refresh: 2; marche.php');
                        }
                    }
                    else
                    {
                        $erreur = "Vous n'avez pas assez de pièces d'Or.";
                    }
                }
                else
                {
                    $erreur ="Vous devez attendre 12h avant de pouvoir acheter.";
                }
            }
            else
            {
                $erreur ='Veuillez saisir un nombre.';
            }
        }
    }
    //FIN CODE ACHAT BLE
if($articles >= 20 AND $achat != 1)
    {
        $sql = "UPDATE membres SET articlesT = '$now' WHERE id = '$id' ";
        $articlesT =  $bdd->exec($sql) or die(print_r($db->errorInfo(), true));
        $achat =  $bdd->exec('UPDATE membres SET achat = 1 WHERE id = '.$_SESSION['id']);
    }
 
    if($hours > 12 AND $achat != 0)
    {
        $achat =  $bdd->exec('UPDATE membres SET achat = 0 WHERE id = '.$_SESSION['id']);
        $articles =  $bdd->exec('UPDATE membres SET articles = 0 WHERE id = '.$_SESSION['id']);
        header ('Location: marche.php');
    }


Merci et bonne journée
A voir également:

1 réponse

Yuh12 Messages postés 184 Date d'inscription mercredi 7 mai 2014 Statut Membre Dernière intervention 28 septembre 2017 24
23 avril 2015 à 04:22
Il faut que tu cherche le problème en faisant des
echo $articles; 
entre tout tes if.

Cela te permettra de voir à quoi il est égal à chaque passage de boucle et certainement d'identifier la source du problème.

La comme ça sans la base, sans tester, cela me parait difficile de te répondre plus précisément (pour ma part).
0
jobouille Messages postés 286 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 27 septembre 2017 10
Modifié par jobouille le 23/04/2015 à 07:46
Je l'ai déjà affiché plus bas.
Je ne l'ai pas mis entre tous les if car il est constamment affiché.
Faut-il que je mette le "echo $articles" entre tous les if en plus ?

Merci de votre réponse :)
0
Yuh12 Messages postés 184 Date d'inscription mercredi 7 mai 2014 Statut Membre Dernière intervention 28 septembre 2017 24
25 avril 2015 à 01:47
La valeur de $articles change en fonction de ce que tu lui met
$articles = $user['articles'];
$articles = $articles + $qttBle;


Si tu fais ce genre de test
echo "Test 1 : ".$articles" // dans le 1er if
echo "Test 2 : ".$articles" // dans le 2eme if
etc...

Tu verras ce qu'il vaudra à chaque instant T dans ton code, si le problème c'est qu'à la fin, il ne vaut pas la valeur que tu veux, alors oui affiche le pour savoir quand est-ce qu'il rate le tir.
0