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 - 28 nov. 2022 à 10:01
- Comment intégrer les résultats d'une bouche sql dans des var
- Intégrer une vidéo dans un powerpoint - Guide
- Lexer resultats - Télécharger - Sport
- Resultats foot - Télécharger - Vie quotidienne
- Intégrer une liste déroulante dans excel - Guide
- Blob sql ✓ - Forum Webmastering
9 réponses
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...
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. }
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
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 )
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
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.
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
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
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?
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 ?
28 nov. 2022 à 09:45
N'est-il pas possible que deux personnes avec deux adresses email différentes utilisent le même pseudo?
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
28 nov. 2022 à 10:01
voila impeccable le plugin de wordpress empeche le doublon des noms d'utilisateur
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionModifié 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
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.
27 nov. 2022 à 17:11
non je ne pense pas
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
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.
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...
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 ... //.... }
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
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 !
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 ... //.... }
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.
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
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
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 )
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
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
27 nov. 2022 à 15:36
Tu dois supprimer les deux boucles qui commencent en ligne 24 et 65.
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'
28 nov. 2022 à 09:29
Encore mille fois merci pour cette correction c'est vrai que cela est nettement different de mon code
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
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
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_email']
$recipe['user_display']
$recipe['user_nicemane']
comme dans mon exemple de code ci dessous
je dois creer 4 boucles ?
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...
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
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..)