Comment intégrer les résultats d'une bouche sql dans des var

Résolu

Bonjour,

Je fais une requête en boucle pour obtenir tous les user_nicename après 2022-09-04 00:00:00

Cela fonctionne très bien

Cela me renvoie le user_nicename que j'affiche avec l'écho

j'ai par exemple comme sortie

Alain

Rock

Paul

James

je voudrais que chaque user_nicename soit contenu dans une variable différente

$sqlQuery = 'SELECT * FROM _users  WHERE user_registered > "2022-09-04 00:00:00 "';
$recipesStatement = $bdd->prepare($sqlQuery);
$recipesStatement->execute();
$recipes = $recipesStatement->fetchAll();
$x=1;
// On affiche chaque donnee une à une
foreach ($recipes as $recipe) {
    //var_dump($recipe);
?>
    <p><?php 
    echo ' user_nicename= <span style ="color: #f90c2d;background-color: #f0e20e;">'.$recipe['user_nicename'].'" </span>; ?></p>
    
<?php
}


Windows / Chrome 107.0.0.0

9 réponses

Résumé de la discussion

Le problème central porte sur l'extraction des user_nicename des utilisateurs enregistrés après une date donnée et l'affichage dans des variables distinctes, via une requête SQL et une boucle PHP. La meilleure réponse propose de remplacer deux requêtes et boucles successives par une seule requête joignant les tables _users et _usermeta, afin d'obtenir directement les noms et le statut de confirmation. En cas de date, la condition user_registered et le filtre sur meta_key _wpmem_user_confirmed sont recommandés, et l'exemple montre l'utilisation d'un alias et d'un formatage simple. D'autres conseils soulignent l'importance de ne pas recréer les fonctions dans la boucle, de clarifier les connexions et de veiller à la cohérence entre les tables pour éviter les doublons.

Bobot (l’IA à votre service)
  1. Modérateur

    Bonjour,

    Tes variables sont déjà stockées dans des "variables différentes" .... elles sont dans un array ($recipes )

    Le premier est dans $recipes[0],  le second dans $recipes[1] .. etc...


    1
    1. Bonjour jordane

      Merci our la reponse

      ah ben oui evident mais a present si je veux recuperer plusieurs donnee dans des variables du style 

      $recipe['user_pseudo']

      $recipe['user_email']

      $recipe['user_display']

      $recipe['user_nicemane']

      comme dans mon exemple de code  ci dessous 

      je dois creer 4 boucles ?

      $sqlQuery = 'SELECT * FROM _users  WHERE user_registered > "2022-09-04 00:00:00 "';
      $recipesStatement = $bdd->prepare($sqlQuery);
      $recipesStatement->execute();
      $recipes = $recipesStatement->fetchAll();
      $x=1;
      // On affiche chaque dobbee une à une
      foreach ($recipes as $recipe) {
          //var_dump($recipe);
      ?>
          <p><?php 
          echo ' user_nicename= <span style ="color: #f90c2d;background-color: #f0e20e;">'.$recipe['user_nicename'].'" </span>
           echo ' user_nicename= <span style ="color: #f90c2d;background-color: #f0e20e;">'.$recipe['user_email'].'" </span>
      	  echo ' user_nicename= <span style ="color: #f90c2d;background-color: #f0e20e;">'.$recipe['user_display'].'" </span> 
      	   echo ' user_nicename= <span style ="color: #f90c2d;background-color: #f0e20e;">'.$recipe['user_pseudo'].'" </span>; ?></p>
      <?php
      }
      1
    2. Modérateur
      @flexi2202

      Ta boucle est déjà faîte...  Qu'est ce que tu veux faire au juste... Ce n'est pas clair...

      1
    3. @jordane45

      Merci pour la reponse

      dans ma variable brute $recipe j'ai les donnees des derniers utilisateurs enregistres 

      leurs adresses emails , leurs user_nicemame , leurs user_display et leurs user_pseudo

      imaginons que j'ai 3 utilisateurs qui sortent de ma requetes 

      je souhaiterais par exemple 

      avoir 3 vaiables differentes avec les 3 emails

      3 varaibles differentes avec leurs user_nicemame

      3 variables differentes avec leurs user_display

      et 3 variables differentes avec leurs user_pseudo

      donc en tout 12 variables differentes 

      0
    4. Modérateur
      @flexi2202

      Pour en faire quoi de ces variables ????

      Car tu as déjà tout ce qu'il faut dans ton array (qui est déjà une variable..)

      1
  2. Modérateur

    oulalala ....

    Bon.. je vois ce que tu veux faire...  mais ton code est complètement raté !

    Déjà, est-ce que toutes tes tables sont dans la même BDD ou as tu deux BDD différentes ?

    Si deux bdd différentes, où se trouvent les codes de connexion à tes 2 bdd (il y en a un dans base2.php et l'autre dans 'base.php'  je suppose...  ) et quelle tête ils ont ? ( tu as bien mis deux variables différentes pour la connexion ( un $bdd et un $bdd2 par exemple ?? )

    Ensuite, qu'est-ce qui permet de faire le lien entre la table _usermeta  et ta table users ? ( le champ qui permet de faire la correspondance entre ces deux tables )

    A noter également que tes fonctions ne foivent pas être recréées à chaque tour de boucle .. et vu qu'elles concernes ta première bdd .. autant les mettre directement dans ton fichier base.php

    // je cree la fonction query
    function query($sql, $datas = null)
    {
        global $bdd;
        //Execution de la requete
        try
        {
            $requete = $bdd->prepare($sql);
            $requete->execute($datas);
            return $requete;
        }
        catch(Exception $e)
        {
    
            // en cas d'erreur :
            echo " Erreur ! " . $e->getMessage();
            echo " Les datas : ";
            print_r($datas);
        }
    }
    
    
    function getUserByMail($email)
    {
        //préparation de la requête et des variables afin de verifier si l email est present dans la table
        $sql = "SELECT pseudo, email, password FROM utilisateurs WHERE email = ?";
        $datas = [$email];
        $res = query($sql, $datas);
        return $res->fetch();
    }
    
    //fonction qui ajoute l'utilisaeur
    function addUser($pseudo, $email, $password, $ip, $key, $confirme)
    {
        // $password = password_hash($password, PASSWORD_BCRYPT, $cost);
        //$ip = $_SERVER['REMOTE_ADDR'];
        $sql = 'INSERT INTO utilisateurs(pseudo, email, password, ip, token ,confirmkey,confirme) VALUES(:pseudo, :email, :password, :ip, :token ,:confirmkey,:confirme)';
        $datas = array(
            'pseudo' => $pseudo,
            'email' => $email,
            'password' => $password,
            'ip' => $ip,
            'token' => bin2hex(openssl_random_pseudo_bytes(24)) ,
            'confirmkey' => $key,
            'confirme' => $confirme
        );
        $res = query($sql, $datas);
        return getLastId(); //on retourne l'id créé par l'insert.
        
    }

    1
    1. Merci pour l'aide

      Ben oui jordane je me doute que c'est complètement raté mon code , malgre le temps passé dessus 

      Comme à présent tu vois ce que je veux faire cela sera plus facile

      mon site en wordpress qui est en domaine principal et hébergé chez hostinger

      Mon site en php qui lui est dans un sous domaine et héberge également chez hostinger

      Donc deux bases de données différentes 

      Je parviens à communiquez avec la base de donnée de wordpress lorsque je fais des requêtes vers cette base a partir de mon site en php

      Oui voilà j'ai base2.php et l'autre base.php ou sont héberge les codes de connexion 

      Première erreur j'ai utilisé la même variable pour la connexion (je corrige de suite)

      Alors pour cette question 

      Ensuite, qu'est-ce qui permet de faire le lien entre la table _usermeta  et ta table users ? ( le champ qui permet de faire la correspondance entre ces deux tables )

      wordpress fonctionne un peu bizarrement et les informations sont souvent éparpillées dans deux tables différentes 

      Donc dans la première table users je regarde les derniers utilisateurs enregistres et je cree mes variables que j'aurais besoin pour les rentrer dans la base de donnée en php

      Puis je vais voir dans la table _usermeta si les membres sont confirmés ou pas 

      C'est vrai qu'il existe une methode de jointure mais avec laquelle je ne suis pas du tout à l'aise

      Une fois que j'ai les informations voulues je peux m'occuper du code pour entrer ls informations dans la base de données de php à condition que l'adresse email ne s'y trouve pas 

      A noter également que tes fonctions ne foivent pas être recréées à chaque tour de boucle .. et vu qu'elles concernes ta première bdd .. autant les mettre directement dans ton fichier base.php

      ah ben oui c 'est vrai ca 

      0
    2. Modérateur
      @flexi2202

      Puis je vais voir dans la table _usermeta si les membres sont confirmés ou pas 

      Et comment fais tu ça ? ( c'est ce "lien" entre les deux tables qui m'intéresse )

      1
    3. @jordane45

      Merci de ton aide dans ce projet

      en fait le seul endroit ou je peux voir si les utilisateurs ont confirme leurs compte ou pas est lorsque la meta_key contient la valeur " _wpmem_user_confirmed"

      dans la table user j'ai ces donnees 

      et dans la table usermeta ceci ou sont sont stockes mille et une chose et qui est le seul endroit ou je peux savoir si l'utilisaeur est confirmer ou pas 

      0
    4. Contributeur Ambassadeur
      @flexi2202

      Tu dois donc utiliser cette requête pour obtenir les nouveaux utilisateurs confirmés:

      SELECT u.ID as ID, u.display_name as display_name, u.user_registered as user_registered,
      m.meta.meta_key as meta_key
       FROM _users as u,   _usermeta as m 
      WHERE u.ID = m.user_id
      and meta_key ="_wpmem_user_confirmed" 
      and user_registered > "2022-09-04 00:00:00 "

      Tu peux alors supprimer la seconde requête et la seconde boucle.

      1
  3. Contributeur Ambassadeur

    suggestion:

    <?php
    //on demarre la session
    session_start();
    error_reporting(E_ALL);
    ini_set('display_errors', true);
    ini_set('display_startup_errors', true);
    
    //je souhaite tester les dernieres enregistrements dans wordpress , afin de les enregistrer vers le site en php directement je lancerais ce fichier une fois par semaine
    //on se connecte a la base de donnee de wordpress
    include ('basewordpress.php');
    
    //je fais ma requete afin de connaitre les nouveaux utilisateurs
    $sqlQuery = 'SELECT u.ID as ID, u.display_name as display_name, u.user_registered as user_registered,
    	m.meta.meta_key as meta_key
    	 FROM _users as u,   _usermeta as m 
    	WHERE u.ID = m.user_id
    	and meta_key ="_wpmem_user_confirmed" 
    	and user_registered > "2022-09-04 00:00:00 "';
    $recipesStatement = $bdd2->prepare($sqlQuery);
    $recipesStatement->execute();
    $recipes = $recipesStatement->fetchAll();
    
    // On affiche les utilisateurs avec leurs id un a un
    foreach ($recipes as $recipe)
    {
    	//var_dump($recipe);
    	//je recupere les infomrations et je cree des variables
    	$identifiant = $recipe['ID'];
    	$pseudo = $recipe['display_name'];
    	$email = $recipe['user_email'];
    
    	//je recupere aussi leurs date d'enregistrement
    	$date = $recipe['user_registered'];
    
    	// Création du timestamp à partir du date donnée
    	$timestamp = strtotime($recipe['user_registered']);
    
    	// Créer le nouveau format à partir du timestamp
    	$date = date("d-m-Y", $timestamp);
    
    	//je teste mes variables recuperees
    	echo $date;
    	echo $identifiant;
    	echo $pseudo;
    	echo $email;
    
    	$key = $recipe['meta_key'];
    
    	//echo $key;
    	//echo $identifiant ;
    	//echo $pseudo ;
    	//echo $email  ;
    	//je coupe la connection
    	$sqlQuery = null;
    	$bdd2 = null;
    
    	//debut du traitement vers l'inscription du site en php
    	//je me connecte a la base de donnee du site en php
    	require_once 'basewordpress-vers-php.php';
    
       
    
    	//je verifie si l'email est present dans la table
    	$row = getUserByMail($email);
    	if (empty($row))
    	{
    
    		//puisque l'utilisateur est present dans la base de donnee de wordpress et qu'il y est deja confirme alors je peux l'inscrire sans danger
    		//je place la confirmation a 1
    		$confirme = 1;
    		
    		//je construis les variables pour le password
    		$cost = ['cost' => 12];
    		$password =147852;
    		
    		//je cree un password il devra le modifier  lors de la premiere connection
    		$password = password_hash($password, PASSWORD_BCRYPT, $cost);
    
    		//je cree une key
    		$key .= mt_rand(0, 9);
    echo $key;
    		//je recupere l'adresse ip
    		$ip = $_SERVER['REMOTE_ADDR'];
    echo $ip;
    echo $email;
    		//on créé le user
    		//$id = addUser($pseudo, $email, $password, $ip, $key, $confirme);
    
    		//je ferme la session du site en php
    		$id = null;
    		$bdd = null;
    	} //fin du traitement de la mise dans la base de donnee
    
    
    } //fin de boucle $recipes
    1
    1. Merci pour le code et desole pour le retard mais j'ai tellement ete absorbe par cela et ou au final apres une nuit blanche

      encore une mdrrr

      je suis parvenu a faire fonctionner mon code que j'avais presente mais bien evidement pas optimise

      je ne sais pour quelle raison je n'ai pas recu de notifications de nouveaux messages 

       ce n'est pas la premiere fois que cela arrive

      je teste donc la derniere version du code donne par jordane

      0
  4. Contributeur Ambassadeur

    Tu vérifies que l'email n'est pas présent dans la base PHP.  Ne devrais- tu pas vérifier que le pseudo n'est pas présent non plus?

    1
    1. en fait il est impossible que je puisse avoir deux adresses email les memes ...

      donc pourquoi devoir tester le pseudo en plus  ?

      0
    2. Contributeur Ambassadeur
      @flexi2202

      N'est-il pas possible que deux personnes avec deux adresses email différentes utilisent le même pseudo?

      1
    3. @yg_be

      ah oui juste mais alors je dois regler cela avec wordpess pour regler le soucis a la base 

      Merci pour l'eclaircissement 

      Quand jordane me disait que c'est mieux un site en php qu'en wordpress je ne comprenais pas bien le pourquoi

      Mais a present je comprends nettement mieux avec wordpress on a les pieds et les mains liees aux plugins et on sait pas trop faire ce que l'on veux 

      0
    4. @flexi2202

      voila impeccable le plugin de wordpress empeche le doublon des noms d'utilisateur

      0
  5. Modérateur

    Ton code devrait donc ressembler à un truc du genre

    <?php
    
    //on demarre la session
    session_start();
    error_reporting(E_ALL);
    ini_set('display_errors', true);
    ini_set('display_startup_errors', true);
    
    //----------------------------------------------------------------//
    // CONNEXION A LA BDD
    //-----------------------------------------------------------------//
    
    require_once 'base.php';
    require_once ('base2.php');
    
    
    //je fais ma requete afin de connaitre les nouveaux utilisateurs
    $sqlQuery = "SELECT U.* 
        ,UM.*               
    , U,DATE_FORMAT(U.user_registered ,'%d/%m/%Y') as USER_REGISTERED_FR
                FROM _users U 
                LEFT JOIN  _usermeta UM ON UM.user_id = U.ID
                WHERE U.user_registered > '2022-09-04 00:00:00' 
                AND UM.meta_key ='_wpmem_user_confirmed' ";
    $recipesStatement = $bdd2->prepare($sqlQuery);
    $recipesStatement->execute();
    $recipes = $recipesStatement->fetchAll();
    
    //au passage je compte le nombre de nouveaux utilisateurs afin de creer mon compteur
    $nbre_resultats = (count($recipes));
    
      // On affiche les utilisateurs avec leurs id un a un
      foreach ($recipes as $recipe) {
        //var_dump($recipe);
        //je recupere les infomrations et je cree des variables
        $identifiant = $recipe['ID'];
        $pseudo = $recipe['display_name'];
        $email = $recipe['user_email'];
        $date = $recipe['USER_REGISTERED_FR'];
        $key = $recipe['meta_key'];
    
        //je teste mes variables recuperees
        echo $date;
        echo $identifiant;
        echo $pseudo;
        echo $email;
    
      //je verifie si l'email est present dans la table
      $row = getUserByMail($email);
      if (empty($row)){
    
          //puisque l'utilisateur est present dans la base de donnee de wordpress et qu'il y est deja confirme alors je peux l'inscrire sans danger
          //je place la confirmation a 1
          $confirme = 1;
    
          //je cree un password il devra le modifier  lors de la premiere connection
          $password = password_hash($password, PASSWORD_BCRYPT, $cost);
    
          //je cree une key
          $key .= mt_rand(0, 9);
    
          //je recupere l'adresse ip
          $ip = $_SERVER['REMOTE_ADDR'];
    
          //on créé le user
          $id = addUser($pseudo, $email, $password, $ip, $key, $confirme);
      } //fin du traitement de la mise dans la base de donnee
           
    } //fin de boucle $recipes

    1
    1. Contributeur Ambassadeur

      en ligne 39, plutôt

      $key = '_wpmem_user_confirmed' ;

      ou bien ajouter le champ meta_key dans la requête.

      1
    2. Modérateur
      @yg_be

      non je ne pense pas

      1
  6. par exemple je souhaiterais utiliser les adresses emails de la base de donnee de wordpress et savoir si elles existent dans ma base de donnee en php

    si elles n'existent pas les integrer avec le pseudo ect...

    Mais cela de facon automatique , enfin j'espere 

    0
    1. Contributeur Ambassadeur

      bonjour,

      Tu peux faire ce que tu souhaites dans une seconde boucle "foreach ($recipes as $recipe)".  Tu as toutes les informations dans la variable $recipes. 

      1
    2. @yg_be

      Merci pour la reponse

      oui voila c'est ce que je pensais

      je ferais donc une boucle l'email 

      une autre pour le pseusdo 

      une autre les user_display ect...

      0
    3. Modérateur
      @flexi2202
      // On affiche chaque dobbee une à une
      foreach ($recipes as $recipe) {
        //var_dump($recipe);
        // Tes variables sont déjà Là ! Pourquoi refaire d'autres boucles ????
        $user_nicename = $recipe['user_nicename'];
        $user_email = $recipe['user_email'];
        $user_display = $recipe['user_display'];
        $user_pseudo = $recipe['user_pseudo'];
      
        echo "<p>";
          echo ' user_nicename= <span style ="color: #f90c2d;background-color: #f0e20e;">'.$user_nicename." </span>";
          echo ' user_nicename= <span style ="color: #f90c2d;background-color: #f0e20e;">'.$user_email." </span>";
      	  echo ' user_nicename= <span style ="color: #f90c2d;background-color: #f0e20e;">'.$user_display." </span>";
      	  echo ' user_nicename= <span style ="color: #f90c2d;background-color: #f0e20e;">'.$user_pseudo ." </span>";
        echo "</p>";
        
         // ICI tu peux faire ce que tu veux avec tes variables ...
         //....
      
      }
      1
    4. @jordane45

      Merci pour le code jordane 

      jusque la je suis entierement d'accord avec toi 

      Mais comment je fais pour recuperer en variable par exemple les 4 differents user_nicename qui sont sans la boucle

      car dans le code jci dessous tous les use_nicemame auont le meme nom de variable 

      Comment avoir par exemple

      $user_nicename1
      $user_nicename2
      $user_nicename3
      $user_nicename4
      0
    5. Modérateur
      @flexi2202

      mais.. NON NON ET NON !!!   Tu n'as pas à les mettre dans des variables différentes  !!!

      Tu dois simplement faire le traitement que tu veux DANS LA BOUCLE !

      1
  7. Merci pour la reponse 

    mais avec le code donne et que j'utilisais deja en prennant par exemple 

    juste user_nicename

    je vais me retrouver 

    avec comme resultat 

    pierre

    paul

    jacques 

    bertrand

    mais qui auront tous comme varaible 

    $user_nicename
    // On affiche chaque dobbee une à une
    foreach ($recipes as $recipe) {
      //var_dump($recipe);
      // Tes variables sont déjà Là ! Pourquoi refaire d'autres boucles ????
      $user_nicename = $recipe['user_nicename'];
    
    
      echo "<p>";
        echo ' user_nicename= <span style ="color: #f90c2d;background-color: #f0e20e;">'.$user_nicename." </span>";
      
      echo "</p>";
      
       // ICI tu peux faire ce que tu veux avec tes variables ...
       //....
    
    }
    0
    1. Contributeur Ambassadeur

      Montre le code que tu veux exécuter pour le premier user_nicename, nous t'expliquerons comment faire cela pour tous.

      0
    2. @yg_be

      Merci pour la reponse yg_be

      c'est justement cela le soucis ...

      je sais qu'il se situe a l'emplacement [0] et que je dois le recuperer de cette maniere 

      $recipe['user_nicename']

      mais je ne parviens pas associer les  deux 

      0
    3. @flexi2202

      j'ai essayer ceci

       echo $recipe[0]["user_nicename"];

      mais j'ai une erreur

      Notice: Undefined offset: 0 in /home/u434600775/domains/pecheperle.be/public_html/phil/test2.php on line 70

      0
    4. Modérateur
      @flexi2202

      Mais tu es sacrément têtu ..

      Tu ne dois pas essayer de récupérer "manuellement" chaque variable ... tu les as déjà dans l'array issu de ta requête !

      Tu dois donc réaliser le traitement voulu DANS LA BOUCLE ...   à chaque itération de la boucle, ton code passera automatiquement à la valeur suivante !

      Donc, comme te l'a demandé Yg_be ..  MONTRE NOUS le code que tu veux REALISER avec ta première variable ...

      ( à noter que le contenu de ta requête se trouve dans la variable $recipes ... ($recipe (sans S ), c'est la variable qui correspond à l'itération de ta boucle )

      1
    5. @jordane45

      Bonjour jordane et yg_be

      ok je comprends mieux la demarche , merci pour l'aide et la comprehension 

      apres plusieurs heures a chercher et tester je suis parvenu a un resultat

      j'ai un soucis pour sortir de mon traitement ma boucle ne se termine jamais 

      <?php
      //on demarre la session
      session_start();
      error_reporting(E_ALL);
      ini_set('display_errors', true);
      ini_set('display_startup_errors', true);
      
      //je souhaite tester les dernieres enregistrements dans wordpress , afin de les enregistrer vers le site en php directement je lancerais ce fichier une fois par semaine
      //on se connecte a la base de donnee de wordpress
      include ('base2.php');
      
      //je fais ma requete afin de connaitre les nouveaux utilisateurs
      $sqlQuery = 'SELECT * FROM _users  WHERE user_registered > "2022-09-04 00:00:00 "';
      $recipesStatement = $bdd->prepare($sqlQuery);
      $recipesStatement->execute();
      $recipes = $recipesStatement->fetchAll();
      
      //au passage je compte le nombre de nouveaux utilisateurs afin de creer mon compteur
      $nbre_resultats = (count($recipes));
      
      //debut de mon compteur pour sortir une fois que j'ai fait le tour des utilisateurs enegistre
      $x = 1;
      echo $nbre_resultats;
      while ($x <= $nbre_resultats)
      {
          echo '$x contient la valeur ' . $x . '<br>';
      
          $x++;
          echo $x;
          echo $nbre_resultats;
      
          // On affiche les utilisateurs avec leurs id un a un
          foreach ($recipes as $recipe)
          {
              //var_dump($recipe);
              //je recupere les infomrations et je cree des variables
              $identifiant = $recipe['ID'];
              $pseudo = $recipe['display_name'];
              $email = $recipe['user_email'];
      
              //je recupere aussi leurs date d'enregistrement
              $date = $recipe['user_registered'];
      
              // Création du timestamp à partir du date donnée
              $timestamp = strtotime($recipe['user_registered']);
      
              // Créer le nouveau format à partir du timestamp
              $date = date("d-m-Y", $timestamp);
      
              //je teste mes variables recuperees
              echo $date;
              echo $identifiant;
              echo $pseudo;
              echo $email;
      
              //je dois verifier si ces utilisateurs ont bien confirmrer leurs comptes
              // On affiche les utilisateurs avec leurs id un a un
              //je fais ma requete afin de SAVOIR si les utilisateurs ont confirmer leurs comptes
              $sqlQuery = 'SELECT * FROM _usermeta WHERE meta_key ="_wpmem_user_confirmed"';
              $recipesStatement = $bdd->prepare($sqlQuery);
              $recipesStatement->execute();
              $recipesconfirme = $recipesStatement->fetchAll();
              //$x=1;
              //lorsque j'ai mes utilisateurs avec leurs comptes confirmes  je realise une boucle afin de verifier cette fois si leurs adresse email exite oui ou non dans ma base de donnee de mon site en php
              foreach ($recipesconfirme as $recipeconfirme)
              {
                  //var_dump($recipeconfirme);
                  $key = $recipeconfirme['meta_key'];
      
                  //echo $key;
                  //echo $identifiant ;
                  //echo $pseudo ;
                  //echo $email  ;
                  //je coupe la connection
                  $sqlQuery = null;
                  $bdd = null;
      
                  //debut du traitement vers l'inscription du site en php
                  //je me connecte a la base de donnee du site en php
                  require_once 'base.php';
      
                  // je cree la fonction query
                  function query($sql, $datas = null)
                  {
                      global $bdd;
                      //Execution de la requete
                      try
                      {
                          $requete = $bdd->prepare($sql);
                          $requete->execute($datas);
                          return $requete;
                      }
                      catch(Exception $e)
                      {
      
                          // en cas d'erreur :
                          echo " Erreur ! " . $e->getMessage();
                          echo " Les datas : ";
                          print_r($datas);
                      }
                  }
      
                  //fonction qui verifie si l'email est present dans la table
                  function getUserByMail($email)
                  {
                      //préparation de la requête et des variables afin de verifier si l email est present dans la table
                      $sql = "SELECT pseudo, email, password FROM utilisateurs WHERE email = ?";
                      $datas = [$email];
                      $res = query($sql, $datas);
                      return $res->fetch();
                  }
      
                  //fonction qui ajoute l'utilisaeur
                  function addUser($pseudo, $email, $password, $ip, $key, $confirme)
                  {
                      // $password = password_hash($password, PASSWORD_BCRYPT, $cost);
                      //$ip = $_SERVER['REMOTE_ADDR'];
                      $sql = 'INSERT INTO utilisateurs(pseudo, email, password, ip, token ,confirmkey,confirme) VALUES(:pseudo, :email, :password, :ip, :token ,:confirmkey,:confirme)';
                      $datas = array(
                          'pseudo' => $pseudo,
                          'email' => $email,
                          'password' => $password,
                          'ip' => $ip,
                          'token' => bin2hex(openssl_random_pseudo_bytes(24)) ,
                          'confirmkey' => $key,
                          'confirme' => $confirme
                      );
                      $res = query($sql, $datas);
                      return getLastId(); //on retourne l'id créé par l'insert.
                      
                  }
      
                  //je verifie si l'email est present dans la table
                  $row = getUserByMail($email);
                  if (empty($row))
                  {
      
                      //puisque l'utilisateur est present dans la base de donnee de wordpress et qu'il y est deja confirme alors je peux l'inscrire sans danger
                      //je place la confirmation a 1
                      $confirme = 1;
      
                      //je cree un password il devra le modifier  lors de la premiere connection
                      $password = password_hash($password, PASSWORD_BCRYPT, $cost);
      
                      //je cree une key
                      $key .= mt_rand(0, 9);
      
                      //je recupere l'adresse ip
                      $ip = $_SERVER['REMOTE_ADDR'];
      
                      //on créé le user
                      $id = addUser($pseudo, $email, $password, $ip, $key, $confirme);
      
                      //je ferme la session du site en php
                      $id = null;
                      $bdd = null;
                  } //fin du traitement de la mise dans la base de donnee
                  
              } //fin de boucle $recipesconfirme
              //lorsque le nombre de traitement est atteind je sors
              if ($x == $nbre_resultats)
              {
                  break;
              }
          }
      } //fin de boucle $recipes
      
      
      0
  8. je vous presente mes 3 nouveaux fichiers 

    celui pour la connexion a la base de donnée de php

    <?php
    try{
    $bdd =new PDO("mysql:host=localhost;dbname=u434charset=utf8", "u43le", "S");
    // Activation des erreurs PDO
     $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
     $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } catch(PDOException $e) {
        die('Erreur : ' . $e->getMessage());
    }
    
     // je cree la fonction query
                function query($sql, $datas = null)
                {
                    global $bdd;
                    //Execution de la requete
                    try
                    {
                        $requete = $bdd->prepare($sql);
                        $requete->execute($datas);
                        return $requete;
                    }
                    catch(Exception $e)
                    {
    
                        // en cas d'erreur :
                        echo " Erreur ! " . $e->getMessage();
                        echo " Les datas : ";
                        print_r($datas);
                    }
                }
    
                //fonction qui verifie si l'email est present dans la table
                function getUserByMail($email)
                {
                    //préparation de la requête et des variables afin de verifier si l email est present dans la table
                    $sql = "SELECT pseudo, email, password FROM utilisateurs WHERE email = ?";
                    $datas = [$email];
                    $res = query($sql, $datas);
                    return $res->fetch();
                }
    
                //fonction qui ajoute l'utilisaeur
                function addUser($pseudo, $email, $password, $ip, $key, $confirme)
                {
                    // $password = password_hash($password, PASSWORD_BCRYPT, $cost);
                    //$ip = $_SERVER['REMOTE_ADDR'];
                    $sql = 'INSERT INTO utilisateurs(pseudo, email, password, ip, token ,confirmkey,confirme) VALUES(:pseudo, :email, :password, :ip, :token ,:confirmkey,:confirme)';
                    $datas = array(
                        'pseudo' => $pseudo,
                        'email' => $email,
                        'password' => $password,
                        'ip' => $ip,
                        'token' => bin2hex(openssl_random_pseudo_bytes(24)) ,
                        'confirmkey' => $key,
                        'confirme' => $confirme
                    );
                    $res = query($sql, $datas);
                    return getLastId(); //on retourne l'id créé par l'insert.
                    
                }
    ?>

    ensuite celui pour me connecter a la base de donnee de woordpress

    <?php
    try{
    $bdd2 =new PDO("mysql:host=localhost;dbname=u4lone;charset=utf8", "u43one", "S");
    // Activation des erreurs PDO
    $bdd2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
    $bdd2->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
    
    }
    

    et pour finir celui du code principal

    <?php
    //on demarre la session
    session_start();
    error_reporting(E_ALL);
    ini_set('display_errors', true);
    ini_set('display_startup_errors', true);
    
    //je souhaite tester les dernieres enregistrements dans wordpress , afin de les enregistrer vers le site en php directement je lancerais ce fichier une fois par semaine
    //on se connecte a la base de donnee de wordpress
    include ('basewordpress.php');
    
    //je fais ma requete afin de connaitre les nouveaux utilisateurs
    $sqlQuery = 'SELECT * FROM _users  WHERE user_registered > "2022-09-04 00:00:00 "';
    $recipesStatement = $bdd2->prepare($sqlQuery);
    $recipesStatement->execute();
    $recipes = $recipesStatement->fetchAll();
    
    //au passage je compte le nombre de nouveaux utilisateurs afin de creer mon compteur
    $nbre_resultats = (count($recipes));
    
    //debut de mon compteur pour sortir une fois que j'ai fait le tour des utilisateurs enegistre
    $x = 1;
    echo $nbre_resultats;
    while ($x <= $nbre_resultats)
    {
        echo '$x contient la valeur ' . $x . '<br>';
    
        $x++;
        echo $x;
        echo $nbre_resultats;
    
        // On affiche les utilisateurs avec leurs id un a un
        foreach ($recipes as $recipe)
        {
            //var_dump($recipe);
            //je recupere les infomrations et je cree des variables
            $identifiant = $recipe['ID'];
            $pseudo = $recipe['display_name'];
            $email = $recipe['user_email'];
    
            //je recupere aussi leurs date d'enregistrement
            $date = $recipe['user_registered'];
    
            // Création du timestamp à partir du date donnée
            $timestamp = strtotime($recipe['user_registered']);
    
            // Créer le nouveau format à partir du timestamp
            $date = date("d-m-Y", $timestamp);
    
            //je teste mes variables recuperees
            echo $date;
            echo $identifiant;
            echo $pseudo;
            echo $email;
    
            //je dois verifier si ces utilisateurs ont bien confirmrer leurs comptes
            // On affiche les utilisateurs avec leurs id un a un
            //je fais ma requete afin de SAVOIR si les utilisateurs ont confirmer leurs comptes
            $sqlQuery = 'SELECT * FROM _usermeta WHERE meta_key ="_wpmem_user_confirmed"';
            $recipesStatement = $bdd2->prepare($sqlQuery);
            $recipesStatement->execute();
            $recipesconfirme = $recipesStatement->fetchAll();
            //$x=1;
            //lorsque j'ai mes utilisateurs avec leurs comptes confirmes  je realise une boucle afin de verifier cette fois si leurs adresse email exite oui ou non dans ma base de donnee de mon site en php
            foreach ($recipesconfirme as $recipeconfirme)
            {
                //var_dump($recipeconfirme);
                $key = $recipeconfirme['meta_key'];
    
                //echo $key;
                //echo $identifiant ;
                //echo $pseudo ;
                //echo $email  ;
                //je coupe la connection
                $sqlQuery = null;
                $bdd2 = null;
    
                //debut du traitement vers l'inscription du site en php
                //je me connecte a la base de donnee du site en php
                require_once 'basewordpress-vers-php.php';
    
               
    
                //je verifie si l'email est present dans la table
                $row = getUserByMail($email);
                if (empty($row))
                {
    
                    //puisque l'utilisateur est present dans la base de donnee de wordpress et qu'il y est deja confirme alors je peux l'inscrire sans danger
                    //je place la confirmation a 1
                    $confirme = 1;
                    
                    //je construis les variables pour le password
                    $cost = ['cost' => 12];
                    $password =147852;
                    
                    //je cree un password il devra le modifier  lors de la premiere connection
                    $password = password_hash($password, PASSWORD_BCRYPT, $cost);
    
                    //je cree une key
                    $key .= mt_rand(0, 9);
    echo $key;
                    //je recupere l'adresse ip
                    $ip = $_SERVER['REMOTE_ADDR'];
    echo $ip;
    echo $email;
                    //on créé le user
                    //$id = addUser($pseudo, $email, $password, $ip, $key, $confirme);
    
                    //je ferme la session du site en php
                    $id = null;
                    $bdd = null;
                } //fin du traitement de la mise dans la base de donnee
                
            } //fin de boucle $recipesconfirme
            //lorsque le nombre de traitement est atteind je sors
            if ($x == $nbre_resultats)
            {
                break;
            }
        }
    } //fin de boucle $recipes

    Lors de l'execution le premier passage est bon mais lorsque je passe au deuxieme utilisateur j'ai une erreur

    que je ne parviens pas a comprendre puisque pour le premier utilisateur tout semble bien se passer

    Fatal error: Uncaught Error: Call to a member function prepare() on null in /home/u434600775/domains/pecheperle.be/public_html/phil/basewordpress-vers-php.php:19 Stack trace: #0 /home/u434600775/domains/pecheperle.be/public_html/phil/basewordpress-vers-php.php(39): query('SELECT pseudo, ...', Array) #1 /home/u434600775/domains/pecheperle.be/public_html/phil/test_inscrption_vers_php.php(85): getUserByMail('jean.girard71@o...') #2 {main} thrown in /home/u434600775/domains/pecheperle.be/public_html/phil/basewordpress-vers-php.php on line 19

    0
    1. Contributeur Ambassadeur

      Tu dois supprimer les deux boucles qui commencent en ligne 24 et 65.

      1
  9. Merci pour le code jordane 

    mais j'ai une erreur dans la requete avec le parametre U

    d'ailleurs j'ai du mal a comprendre une partie de la requete

    Fatal error: Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'U' in 'field list' in /home/u434600775/domains/pecheperle.be/public_html/phil/test3.php:26 Stack trace: #0 /home/u434600775/domains/pecheperle.be/public_html/phil/test3.php(26): PDOStatement->execute() #1 {main} thrown in /home/u434600775/domains/pecheperle.be/public_html/phil/test3.php on line 26

    Mais il faut dire aussi que j'ai remis mon prefixe qui est devant mes tables dans la requete

    voici la requete avec une partie de mon prefixe

    SELECT U.* 
        ,UM.*               
    , U,DATE_FORMAT(U.user_registered ,'%d/%m/%Y') as USER_REGISTERED_FR
                FROM 2202_users U 
                LEFT JOIN  2202_usermeta UM ON UM.user_id = U.ID
                WHERE U.user_registered > '2022-09-04 00:00:00' 
                AND UM.meta_key ='_wpmem_user_confirmed'
    0
    1. Encore mille fois merci pour cette correction c'est vrai que cela est nettement different de mon code

      0
    2. Modérateur
      @flexi2202

      Il y a un U qui s'est glissé en trop dans ma requête

      SELECT U.* 
            ,UM.*               
          , U,DATE_FORMAT(U.user_registered ,'%d/%m/%Y') as USER_REGISTERED_FR
      FROM 2202_users U 
             

      A changer par

      SELECT U.* 
          ,UM.*               
          ,DATE_FORMAT(U.user_registered ,'%d/%m/%Y') as USER_REGISTERED_FR
      FROM 2202_users U 
             
      1
    3. @jordane45

      Ah ok jordane 

      Ben c'est nickel 

      merci beaucoup tout fonctionne a merveille et c'est bien plus rapide que ce que j'avais pondu , meme si au final j'avais reussi a faire tourner ma machine a gaz

      Mais ton code est top de chez top 

      fini les manipulations manuelle

      encore merci

      0