Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Requête préparée avec un Order by RAND()

ORDER BY RAND() ne respecte pas la clause WHERE

Sujet résolu
    29 novembre 2018 à 2:54:32

    Bonjour, 

    Cela fait des années que je suis inscrit à OpenCLassRooms et en temps normal quand je bloque sur un sujet j'essaye de me débrouiller mais là je sèche..

    Mon problème : depuis 3 ans à Noël ma famille me demande d'organiser le tirage au sort des cadeaux, j'avais donc conçu une appli web en PHP pour le faire. Le principe : on se connecte avec un id et un mdp et cela crée une variable $_SESSION['auth'] avec les attributs suivants : 

    Array
    (
        [0] => stdClass Object
            (
                [id] => 12
                [username] => jerome
                [password] => jerome85
                [code_family] => 8
                [email] => **************@gmail.com
                [gift_user_id] => 0
                [deja_tire] => 0
            )
    
    )

    une fois connecté on arrive sur une page account.php sur laquelle on a soit un bouton submit si on a pas encore tiré au sort, soit le nom de la personne tirée au sort s'affiche.

    Mon problème est au niveau du tirage au sort : je fais une requête qui est sensée empêcher de se tirer soit même et qui empêche de tirer au sort quelqu'un qui le même code_famille (sorte de pondération pour pas tirer son conjoint) et qui empêche de tirer au sort quelqu'un qui a déjà été tiré au sort.. et bien ce petit bout de code ne fonctionne pas : je peux me tirer au sort moi même et je peux tirer ma conjointe..

    Voici le bout de code : 

    <?php session_start();
    
    require_once 'inc/functions.php';
    
    
       if(isset($_POST['submit'])){
        require_once 'inc/db.php';
        require_once 'inc/functions.php';
        $selfId = [$_SESSION['auth']->id];
        $familyCode = [$_SESSION['auth']->code_family];
        
        $req = $pdo->prepare("SELECT * FROM user WHERE (id <> :selfId AND code_family <> :codeFamily AND deja_tire = 0) ORDER BY Rand() LIMIT 1");
        $req->bindValue(':selfId', $selfId, PDO::PARAM_INT);
        $req->bindValue(':codeFamily', $familyCode, PDO::PARAM_INT);
        $req->execute();
        $gift_receiver = $req->fetch();
     
     
        
        $req2 = $pdo->prepare("UPDATE user SET gift_user_id = ? WHERE id = ?");
        $req2->execute([$gift_receiver->id, $_SESSION['auth']->id]);
        
       
        $req3 = $pdo->prepare("UPDATE user SET deja_tire = 1 WHERE id = ?");
        $req3->execute([$gift_receiver->id]);
        
        unset($_POST['submit']);
        $_SESSION['auth']->gift_user_id = $gift_receiver->id;
        
       
        $page = $_SERVER['PHP_SELF'];
        $sec = "0";
        header("Refresh: $sec; url=$page");
        exit();*/
      }

    Merci d'avance pour votre aide ou les pistes que vous pourriez me donner :)

    -
    Edité par Jérôme S. 29 novembre 2018 à 2:58:57

    • Partager sur Facebook
    • Partager sur Twitter

    Problème Requête préparée avec un Order by RAND()

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown