Bonjour,

J'ai actuellement une base de donnée avec plusieurs clé CD (pas de jeux, mais de mon logiciel), j'ai créer ma page en PHP pour pouvoir activer la clé CD si elle correspond a celle dans la base de donnée et cela m'ajoute normalement 30 jours pour utiliser le logiciel.
J'effectue donc un essai, je rentre ma clé valide, et j'appuie sur valider pour effectuer le $_POST. Ma page s'actualise, normal quoi.
Je constate quoi ? Que la clé ne fonctionne pas (aucun message d'erreur), mais la clé est valide (vu qu'elle est dans la BDD).
J'aurais aimer savoir, comment régler ce problème? Voici mon bout de code qui effectue le POST

if(isset($_POST['key_chlenix'])){
    $post_key = $_POST['key_chlenix'];

    $keys_from_db = $database->get("keys_table", "chlenix_1mnth", [
        "id" => 1
    ]);

    $keys_from_db_array = explode(" ", $keys_from_db);

    if (in_array($post_key, $keys_from_db_array)) {
        $array_key = array_search($post_key, $keys_from_db_array);

        unset($keys_from_db_array[$array_key]);

        $end_post_request = implode(" ", $keys_from_db_array);

        $date_wallhack = $database->get("users", "date", [
            "name" => $_SESSION["username"]
        ]);

        if($date_wallhack < date('Y-m-d')) {
            $curdateplus30 = date('Y-m-d', strtotime("+30 days"));

            $database->update("users", [
                "date" => $curdateplus30
            ], [
                "name" => $_SESSION["username"]
            ]);
        }
        else {
            $newdate = date('Y-m-d', strtotime($date_wallhack) + 30 * 24 * 3600);

            $database->update("users", [
                "date" => $newdate
            ], [
                "name" => $_SESSION["username"]
            ]);
        }

         $database->update("keys_table", [
                "chlenix_1mnth" => $end_post_request
            ], [
                "id" => 1
            ]);
    }
}

En l'attente de votre réponse.

13 réponses


xnooztv
Auteur
Réponse acceptée

Résolu, j'ai fait comme sa:

            $Currentdate = date('Y-m-d');
            $endDate = date("Y-m-d", strtotime("$Currentdate +30 days"));
            //$update_date =$bdd->prepare("SELECT user UPDATE date='". $endDate ."' WHERE name='".$_SESSION["username"]."'");
            $update_date =$bdd->prepare("UPDATE users SET date='". $endDate ."' WHERE name='".$_SESSION["username"]."'");
            $update_date->execute();

Merci de m'avoir aider! :)

xnooztv
Auteur

J'ai effectuer un debug + complet

J'ai mis des echo un peu partout pour voir ou sa bloque

    echo "OK 12";
    if(isset($_POST['key_chlenix'])){
        $post_key = $_POST['key_chlenix'];
        echo "OK 11";
        $keys_from_db = $database->get("keys_table", "chlenix_1mnth", [
            "id" => 1
        ]);
        echo "OK 26";
        $keys_from_db_array = explode(" ", $keys_from_db);
        echo "OK 27<br>";
        print_r($post_key);
        echo "<br>";
        echo "<br>";
        print_r($keys_from_db_array);
        echo "<br>";
        echo "<br>";
        print_r($keys_from_db);
        if (in_array($post_key, $keys_from_db_array)) {
            echo "OK 1";
            $array_key = array_search($post_key, $keys_from_db_array);
            echo "OK 2";

            unset($keys_from_db_array[$array_key]);
            echo "OK 3";

            $end_post_request = implode(" ", $keys_from_db_array);
             echo "OK 4";
            $date_wallhack = $database->get("users", "date", [
                "name" => $_SESSION["username"]
            ]);
            echo "OK 28";
            if($date_wallhack < date('Y-m-d')) {
                echo "OK 6";
                $curdateplus30 = date('Y-m-d', strtotime("+30 days"));
                echo "OK 7";

                $database->update("users", [
                    "date" => $curdateplus30
                ], [
                    "name" => $_SESSION["username"]
                ]);
                echo "OK 35";
            }
            else {
                echo "OK 8";
                $newdate = date('Y-m-d', strtotime($date_wallhack) + 30 * 24 * 3600);
                echo "OK 9";
                $database->update("users", [
                    "date" => $newdate
                ], [
                    "name" => $_SESSION["username"]
                ]);
                echo "OK 10";
            }
            echo "OK 94";
             $database->update("keys_table", [
                    "chlenix_1mnth" => $end_post_request
                ], [
                    "id" => 1
                ]);
                echo "OK 20";
        }
    }

Le site me retourne:

`OK 12 OK 11 OK 26 OK 27

Donc je pense que c'est après le "OK 27" que sa bug.
A partir de cette ligne:

if (in_array($post_key, $keys_from_db_array)) {around

J'ai donc par la suite mis des print avant cette ligne

        $keys_from_db_array = explode(" ", $keys_from_db);
        echo "OK 27<br>";
        print_r($post_key);
        echo "<br>";
        echo "<br>";
        print_r($keys_from_db_array);
        echo "<br>";
        echo "<br>";
        print_r($keys_from_db);
        if (in_array($post_key, $keys_from_db_array)) {

Avec le print, $post_key retourne la clé que j'ai entrée, $keys_from_db_array me retourne l'array de toutes les clé de ma base de donnée et $keys_from_db me retourne aussi toutes les clé de ma base de donnée (et cet fois ci, sans array).

Bonjour,

Pourquoi ne fait tu tout simplement pas une requête pour récupérer la ligne en bdd qui correspond à ta clé et si il n'y en a pas, elle n'est pas valide !

xnooztv
Auteur

Bonjour,

Car je ne sais pas si cette méthode fonctionne avec ma manière de faire.
Les clé son comme dans la base de donnée:

Tu croit que c'est possible de le faire à ta manière ?

Tu as une seule ligne avec toutes tes clés ?

xnooztv
Auteur

Oui, j'ai une ligne avec plusieurs colonne pour les différentes clé (par exemple, 1 mois, complet, ou version gratuit) qui conserve toutes mes clés.
Je n'ai pas les clé ligne par ligne ^^

Puisque si tu créer une BDD avec 1 ligne par code tu leurs attribut un type, je m'explique par exemple type = int(1) elle est valable 1 mois.
Ce qui aussi te simplifie la vie si tu doit en supprimer ou en rajouter !

Donc en ayant une clé par ligne tu peut faire une requête du genre :

SELECT * FROM mes_cles WHERE cle = :la_cle_envoyer

Et donc après tu teste tout simplement le type pour rajouter les jours d'utilisation de ton logiciel !

xnooztv
Auteur

C'est vrai que ta méthode est plus simple, je vais essayer et je te tiens au courant !
Merci de ton aide :)

xnooztv
Auteur

J'ai effectuer comme cela:

    if(isset($_POST['key_chlenix']))
    {
        $reponse = $bdd->query("SELECT chlenix_1mnth FROM keys_table WHERE chlenix_1mnth='".$_POST['key_chlenix']."'");
        $reponse->execute();
        $donnees = $reponse->fetch();
        $reponse->closeCursor();

        if($donnees) {
            echo "existe";
            $count=$bdd->prepare("DELETE FROM keys_table WHERE chlenix_1mnth='".$_POST['key_chlenix']."'");
            $count->execute();
        } else {
            echo "existe pas";
        }

    }

Et sa fonctionne très bien ! :)

xnooztv
Auteur

Par contre j'ai un problème avec l'ajout de 30 jour pour l'utilisateur, toutes mes requetes s'execute, mais celle pour ajouter 30 jour ne fonctionne pas.

            echo "existe";
            $update_date =$bdd->prepare("SELECT date WHERE users='".$_SESSION["username"]."'");
            $update_date->execute();
            $curdateplus30 = date('Y-m-d', strtotime("+30 days"));
            $newdate = date('Y-m-d', strtotime($update_date) + 30 * 24 * 3600);

            $update_date2 =$bdd->prepare("UPDATE users SET date='". $newdate ."' WHERE users='".$_SESSION["username"]."'");
            $update_date2->execute();

            $deletecle=$bdd->prepare("DELETE FROM keys_table WHERE xenos_full_1mois='".$_POST['cle_xenosfull']."'");
            $deletecle->execute();
        } else {
            echo "existe pas";
        }
        if($cle_existe) {
            echo "existe";
            $update_date =$bdd->prepare("SELECT date WHERE users='".$_SESSION["username"]."'");
            $update_date->execute();
            $curdateplus30 = date('Y-m-d', strtotime("+30 days"));
            $newdate = date('Y-m-d', strtotime($date_wallhack) + 30 * 24 * 3600);

            $update_date2 =$bdd->prepare("UPDATE users SET date='". $newdate ."' WHERE users='".$_SESSION["username"]."'");
            $update_date2->execute();

            $deletecle=$bdd->prepare("DELETE FROM keys_table WHERE xenos_full_1mois='".$_POST['cle_xenosfull']."'");
            $deletecle->execute();
        } else {
            echo "existe pas";
        }

Une solution svp ?

Que te donne comme valeur ta requête $update_date ?
À quoi sert ce code $curdateplus30 = date('Y-m-d', strtotime("+30 days")); ? Tu ne te sert jamais de cette variable !

xnooztv
Auteur

La requete me donne:
PDOStatement Object ( [queryString] => SELECT date WHERE users='xnooztv' )

Logique quoi. Mais je n'arrive pas à ajouter les 30 jours pour l'utilisateur..

N'oublie pas de passer ton sujet en résolu ! :D