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

Résolu/Fermé
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 - Modifié le 26 nov. 2022 à 10:20
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 - 28 nov. 2022 à 10:01

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

A voir également:

9 réponses

jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
26 nov. 2022 à 10:22

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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
26 nov. 2022 à 10:37

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
jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
26 nov. 2022 à 12:21

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

1
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024
26 nov. 2022 à 12:38

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
jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
26 nov. 2022 à 12:53

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
jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
27 nov. 2022 à 12:56

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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
Modifié le 27 nov. 2022 à 14:34

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
jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
27 nov. 2022 à 14:57

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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024
27 nov. 2022 à 15:15

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
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 550 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
27 nov. 2022 à 15:31

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
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 Ambassadeur 1 550
27 nov. 2022 à 15:43

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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
28 nov. 2022 à 09:24

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
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 Ambassadeur 1 550
27 nov. 2022 à 15:47

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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
28 nov. 2022 à 09:24

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

donc pourquoi devoir tester le pseudo en plus  ?

0
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 550 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
28 nov. 2022 à 09:45

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

1
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024
28 nov. 2022 à 09:58

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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
28 nov. 2022 à 10:01

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

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
Modifié le 27 nov. 2022 à 16:50

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
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 550
27 nov. 2022 à 16:14

en ligne 39, plutôt

$key = '_wpmem_user_confirmed' ;

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

1
jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705 > yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024
27 nov. 2022 à 17:11

non je ne pense pas

1
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
Modifié le 26 nov. 2022 à 13:17

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
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 550
26 nov. 2022 à 13:22

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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024
26 nov. 2022 à 13:56

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
jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
26 nov. 2022 à 14:19
// 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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024
26 nov. 2022 à 14:37

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
jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
26 nov. 2022 à 16:33

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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
26 nov. 2022 à 16:52

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
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 550
26 nov. 2022 à 17:00

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

0
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024
Modifié le 26 nov. 2022 à 17:08

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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
26 nov. 2022 à 17:15

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
jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
26 nov. 2022 à 18:56

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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024
27 nov. 2022 à 11:23

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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
Modifié le 27 nov. 2022 à 15:02

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
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 550
27 nov. 2022 à 15:36

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

1
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
28 nov. 2022 à 09:27

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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187
28 nov. 2022 à 09:29

Encore mille fois merci pour cette correction c'est vrai que cela est nettement different de mon code

0
jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705 > flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024
28 nov. 2022 à 09:33

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
flexi2202 Messages postés 3801 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 octobre 2024 187 > jordane45 Messages postés 38306 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024
28 nov. 2022 à 09:54

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