Bonjour à tous et merci d'être ici,

Voila j'apprends à programmer depuis bientôt trois mois, je suis un gros débutant.
Et je rencontre un petit problème avec mon code.

Ce que je fais

J'affiche une phrase aléatoirement (qui est dans une base de donné, dans une table sentenceen(id, type, phrases)).
Et à chaque clique de l'utilisateur la phrase change et je met l'id des phrases dans une session crée avec session_start();

PAGE D'ACCUEIL

<?php
    session_start();
    include 'connexionBDD.php';
?>
<!DOCTYPE html>
<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script> //Ce script permet d'aller sur la page load-type-page.php et d'appeler le script php sans rafraîchir la page
            //jQuery code here!
    $(document).ready(function() {
        var commentCount = 1;
        $("button").click(function() {
            commentCount = commentCount;
            $("#comments").load("load-type-phrase.php", {
                commentNewCount: commentCount
            });
        });
    });
        </script>
    </head>
    <body>
        <?php
        $sql = "SELECT * FROM sentencesen ORDER BY rand() LIMIT 1"; //Affiche en random une ligne de la table 
        $result = mysqli_query($conn, $sql); //la connexion qui est gérée dans "connexionBDD.php"
        if (mysqli_num_rows($result) > 0) {
            while ($row = mysqli_fetch_assoc($result)) {  //On met les valeurs de la table sentencesen dans $row
                echo "<p>";
                echo $row['type']; //Affiche le type de phrase
                echo "<br>";
                echo $row['phrases']; //Affiche la phrase
                echo "</p>";
                $id = $row['id']; //Je met l'id de la phrase affichée dans une variable
                $_SESSION['stockID'] = array(); //Je dis que cette global est un tableau
                array_push($_SESSION['stockID'], $id); //J'envoi dans le tableau la valeur de $id
                print_r($_SESSION['stockID']); //J'affiche le tableau pour voir si c'est bon
            }
    }   else {echo "BUG !"; }   ?>
</div>
<button>Changer la phrase</button> <!-- Ce bouton redirige vers le script jQuery en haut -->

SCRIPT PHP qui change la phrase et ajoute les id dans une variable.

<?php
    include 'connexionBDD.php';
    $commentNewCount = $_POST['commentNewCount'];
    $sql = "SELECT * FROM sentencesen ORDER BY rand() LIMIT 1";
    $result = mysqli_query($conn, $sql);
    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result)) {
            echo "<p>";
            echo $row['type'];
            echo "<br>";
            echo $row['phrases'];
            echo "</p>";
            $id = $row['id']; 
            $_SESSION['stockID'] = array();
            $add = array_push($_SESSION['stockID'], $id);
            array_push($_SESSION['stockID'], $id);
            print_r($_SESSION['stockID']);

        }
    } else {
        echo "There is a problem, could you refresh the page ?";
    }
?>

Ce que je veux

j'aimerais récupérer l'id des phrases affichées et à chaque clique de l'utilisateur, les stockées dans la session de l'utilisateur et crée un script afin qu'il ne puisse pas retomber sur des phrases déjà vu.

Ce que j'obtiens

Dès que je clique sur mon bouton cela ne remplis pas la variable $_SESSION avec l'ancienne affiche juste deux fois le même id.
(Exemple : Array ( [0] => 101 [1] => 101 )

Donc je n'arrive même pas à ajouter les id dans une variable... C'est très frustrant car cela fait trois jours que je travail sur ce code et je suis complètement perdu.

Si quelqu'un de gentil peut m'aider ce serait vraiment cool car je ne pense pas pouvoir y arriver sans aide.

11 réponses


Carouge10
Réponse acceptée

Ah oui, tu n'as pas fait de session_start(); sur cette page

Bonsoir,

Pour ton problème, a chaque fois que tu appelles ta phrase, tu vides le tableau qui stocke tes id avec cette instruction:

$_SESSION['stockID'] = array();

donc il est normale que tu n'est qu'un id à chaque fois.

Salut Carouge10 super merci du conseil je ne savais pas !
Donc j'ai bien supprimé cette partie mais j'ai une erreur...

Dis-moi ton erreur

Ok ça marche !
Donc après modification du code :

<?php
    include 'connexionBDD.php';

    $commentNewCount = $_POST['commentNewCount'];

    $sql = "SELECT * FROM sentencesen ORDER BY rand() LIMIT 1";
    $result = mysqli_query($conn, $sql);
    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result)) {
            echo "<p>";
            echo $row['type'];
            echo "<br>";
            echo $row['phrases'];
            echo "</p>";
            $id = $row['id']; 
            array_push($_SESSION['stockID'], $id);
            print_r($_SESSION['stockID']);

        }
    } else {
        echo "There is a problem, could you refresh the page ?";
    }
?>

J'obtiens cette erreur :
Warning: array_push() expects parameter 1 to be array, null given in C:\UwAmp\www\DEBATONS\load-type-phrase.php on line 16

C'est ce que je pensais.
Avant de faire le "array_push", il faut vérifier que "$_SESSION['stockID']" existe et que ce soit un array

Oh je vois !
Mais ce qui est bizarre c'est que dans ma page index je l'ai déjà déclaré comme tableau...
$_SESSION['stockID'] = array();
et le session_start(); devrait le garder en mémoire nan ?

C'est pas faux.
Si tu fais ton print_r avant le array_push, qu'est que cela donne ?

Cela fait une nouvelle erreur :
Notice: Undefined variable: _SESSION in C:\UwAmp\www\DEBATONS\load-type-phrase.php on line 16

OMG BRAVO !!
Tu as réussi !!!!
Le problème venait donc de session-start();
J'ai donc mis le session_start dans mon autre page PHP et ça marche !!

J'upload la réponse ici si quelqu'un rencontre le même problème que moi

<?php
    include 'connexionBDD.php';
    session_start();  //BIEN PENSER A METTRE ÇA !
    $commentNewCount = $_POST['commentNewCount'];

    $sql = "SELECT * FROM sentencesen ORDER BY rand() LIMIT 1";
    $result = mysqli_query($conn, $sql);
    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result)) {
            echo "<p>";
            echo $row['type'];
            echo "<br>";
            echo $row['phrases'];
            echo "</p>";
            $id = $row['id']; 
            array_push($_SESSION['stockID'], $id);
            print_r($_SESSION['stockID']);      
        }
    } else {
        echo "There is a problem, could you refresh the page ?";
    }
?>

Merci à toi Carouge10 tu es un génie !!!!! 3 jours que je suis dessus et en 15 minutes c'est finis !

Super je passe donc à l'étape finale de mon projet qui est de ne plus afficher les phrases déjà affiché.

Merci Carouge10 vraiment

Je t'en prie.
Un oeil externe est souvent le bienvenu.
De plus, je t'ai montré un peu qu'il faut débugger ton code quand cela ne fonctionne pas et vérifier au fur et à mesure que tes varaibles contiennent bien ce que tu souhaites.
90% du temps, l'erreur fournit par php aide beaucoup.