Script sur 2 bases de données

Invité
Invité n'ayant pas de compte PHPfrance

22 févr. 2011, 15:53

Bonjour, j'ai un problème sur un script qui prend en compte 2 bases de données.

Je m'explique

Dans la premiere base et dans la table jom15_users, j'ai des logins avec des adresse mails.

Dans la deuxième base, dans ma table inscriptions j'ai les adresses mails et les mots de passe. Dans ma table oubli, j'ai des adresses mails.

Mon but, prendre l'adresse mail de ma table oubli et la comparer a l'adresse mail contenu dans ma table inscription pour pouvoir recuperer le mot de passe correspondant.
Puis toujours avec l'adresse mail, la comparer avec celle de la premiere base dans ma table jom15_users pour cette fois recuperer le login (username).

Jusque la, j'ai fait ceci mais je ne recupere que le mail et le mot de passe mais pas l'username :
<html lang="fr"><head><meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type"></head>
<body>
<basefont face="Tahoma" size="2"> 
<br>

<center><table width="600" border="1" cellspacing="0" cellpadding="0">

  <tr>
	<td width="5"><font face="tahoma" size="2"><span style="color: rgb(92, 168, 10);"><div align="center">login</div><span></font></td>
  
	<td width="5"><font face="tahoma" size="2"><span style="color: rgb(92, 168, 10);"><div align="center">Mdp</div><span></font></td>

	<td width="5"><font face="tahoma" size="2"><span style="color: rgb(92, 168, 10);"><div align="center">Mail</div><span></font></td>

</tr>
<?php

//Connection Mysql
mysql_connect("mysql5-11.perso","**************","***************")or die("Problème avec la base de données");
mysql_select_db("joomla")or die ("pas de connection");

$reponse = mysql_query("SELECT inscriptions.mdp,inscriptions.mail FROM inscriptions,oubli WHERE inscriptions.mail = oubli.mail
LIMIT 0 , 30"); // Requête SQL


mysql_connect("sql4.modules","1184102-1","********")or die("Problème avec la base de données");
mysql_select_db("1184102-1")or die ("pas de connection");

$reponse1 = mysql_query("SELECT username FROM jom15_users
WHERE email = '$reponse[1]' LIMIT 0 , 30"); // Requête SQL

// On fait une boucle pour lister tout ce que contient la table :
//***********************************************************************************************************************
if (($reponse) && ($reponse1))
{
//*************************************************************************************************************************
while (($donnees = mysql_fetch_array($reponse)) || ($donnees1 = mysql_fetch_array($reponse1)))

{

?>

  <tr>

	<td><center><font face="tahoma" size="2"><?php echo $donnees1['username']; ?></font></center></td>
  
	<td><center><font face="tahoma" size="2"><?php echo $donnees['mdp']; ?></font></center></td>
	
	<td><center><font face="tahoma" size="2"><?php echo $donnees['mail']; ?></font></center></td>

  </tr>

<?php

}



//mysql_close(); // Déconnexion de MySQL
//****************************************************************************************************
}
else
{
echo 'Pas de champs!!!';
}
//****************************************************************************************************
?>
</table></center>
<br><br>
</body></html>
	
Pouvez vous m'aider svp

Amicalement

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 févr. 2011, 16:15

salut,

il faut que tu nomme les connections

$connectionperso = mysq_connect(perso);
$connectionEnligne = mysql_connect(en ligne);

ensuite utiliser le second argument des fonctions mysql_select_db et mysql_query
mysql_select_db('base',$connectionperso);
mysql_query(requete,$connectionperso) afin de différentier la chose.

il est aussi possible que ton hébergeur refuse tous simplement la connection depuis toute machine ne provenant pas de son parc informatique (question de sécu tous ça ;) )


@+
Il en faut peu pour être heureux ......

ViPHP
xTG
ViPHP | 7331 Messages

22 févr. 2011, 16:18

Tu ne récupère rien de ta première requête, $reponse est une ressource MySQL et non un tableau contenant les enregistrements.
Il faut donc utiliser une fonction de récupération (mysql_result() ou bien les mysql_fetch_xxx()).

Ensuite, ton while est super pas beau. :/
Dans tous les cas pour qu'il fonctionne correctement il aurait fallu un && au lieu du ||.

Invité
Invité n'ayant pas de compte PHPfrance

22 févr. 2011, 16:32

Tout d'abord merci à tous.

xTG, je ne comprend pas quand tu me dis que je ne récupère rien de ma première requete puisque la seule chose qui s'affiche dans mon tableau est justement le résultat de ma première requête. Je récupére le mail et le mot de passe. C'est la deuxième phase qui ne s'affiche pas. (username)
Je suis un tout petit débutant en php et je ne comprend pas comment utiliser la foncion de récupération (mysql_result() ou les mysql_fetch_XXX()). Peut tu m'éclairer stp ?

Pour mon while, je suis complétement d'accord, et en particulier sur l'utilisation des && au lieu des ||. J'ai essayé mais cette fois la plus aucun résultat.

Ce qui est surprenant, c'est que si je fais les deux requetes dans deux scripts différents, cela fonctionne. Par contre quand je les réunis, ... et bien catastrophe #-o

moogli, je vais essayer de nommer comme tu me l'as suggerer les connexions et je reviendrais donner le resultat.

En tout cas merci à tous les deux.

Amicalement

Invité
Invité n'ayant pas de compte PHPfrance

22 févr. 2011, 16:38

Bon, j'ai testé en nommant les connexions et cette fois, je ne récupère plus rien.

J'ai juste le else, pas de champs

Amicalement

ViPHP
xTG
ViPHP | 7331 Messages

22 févr. 2011, 17:23

Tu utilises le résultat de la première requête dans la seconde, mais tu ne récupères pas le résultat de ta première requête (tu ne le fais que dans le while).
Affiches la variable $reponse et tu comprendras. ;)

Pour ta boucle il faudrait quelque chose d'un peu plus propre, tu peux stocker les résultats dans un tableau unique. Par exemple :
$result = array();
// récupération de la première requête
while($resultat = mysql_fetch_array($reponse))
  $result[$resultat['mail']] = array( 'mdp' => $resultat['mdp'], 'mail' => $resultat['mail'], 'username' => "");
// récupération de la seconde requête
while($resultat = mysql_fetch_array($reponse1))
  $result[$resultat['mail']]['username'] = $resultat['username'];

// boucle propre
foreach($result as $compte)
{
  echo "username : {$compte['username']} | mdp : {$compte['mdp']} | email : {$compte['mail']}<br />";
}
Modifié en dernier par xTG le 23 févr. 2011, 11:05, modifié 1 fois.

Invité
Invité n'ayant pas de compte PHPfrance

22 févr. 2011, 17:51

Merci beaucoup,

Je regarde, je comprend, je teste et te tient au courant.

Merci encore
Amicalement

Invité
Invité n'ayant pas de compte PHPfrance

23 févr. 2011, 09:20

Hello,

Je viens d'essayer et j'ai un message d'erreur sur la boucle : Invalid argument supplied for foreach() in etc

Après relecture de ton message, je suis un peu surpris que tu me dises que ma variable reponse ne renvoit rien car ce sont seulement les données de cette requete qui s'affiche.

J'essaie de voir le problème de ma boucle et revient.

Encore merci pour ta patience et ton aide.

Amicalement

Invité
Invité n'ayant pas de compte PHPfrance

23 févr. 2011, 09:41

J'ai essayé autrement mais cette fois pas de message du else (Pas de champs), pas d'erreur... mais pas de données non plus !

C'est de la folie.

Mon code modifié :
<?php

//Connection Mysql
mysql_connect("mysql5-11.perso","********","**********")or die("Problème avec la base de données");
mysql_select_db("joomla")or die ("pas de connection");

$tableau = array();
$reponse = mysql_query("SELECT inscriptions.mdp,inscriptions.mail FROM inscriptions,oubli WHERE inscriptions.mail = oubli.mail
LIMIT 0 , 30"); // Requête SQL
while( $donnees = mysql_fetch_assoc($reponse ))
{
    $tableau[] = $donnees;
}

mysql_connect("sql4.modules","1184102-1","*****")or die("Problème avec la base de données");
mysql_select_db("1184102-1")or die ("pas de connection");

$reponse1 = mysql_query("SELECT username FROM jom15_users
WHERE email = '$tableau[1]' LIMIT 0 , 30"); // Requête SQL

// On fait une boucle pour lister tout ce que contient la table :
//***********************************************************************************************************************
if (($reponse) && ($reponse1))
{
//*************************************************************************************************************************
while ($donnees1 = mysql_fetch_array($reponse1))

{
?>

  <tr>

	<td><center><font face="tahoma" size="2"><?php echo $donnees1['username']; ?></font></center></td>
  
	<td><center><font face="tahoma" size="2"><?php echo $tableau[0]; ?></font></center></td>
	
	<td><center><font face="tahoma" size="2"><?php echo $tableau[1]; ?></font></center></td>

  </tr>

<?php

}



//mysql_close(); // Déconnexion de MySQL
//****************************************************************************************************
}
else
{
echo 'Pas de champs!!!';
}
//****************************************************************************************************
?>

ViPHP
xTG
ViPHP | 7331 Messages

23 févr. 2011, 11:08

Erreur de ma part, j'ai modifié mon code. ^^

Pour ton dernier essai l'erreur de récupération de données est toujours présente.
Si tu fais une boucle sur la première requête, tu récupères plusieurs adresses email. C'est donc impossible de récupérer tous les autres enregistrements avec une seule variable texte (qui n'est pas une String d'ailleurs mais un array).

Après ton while fais ceci :
echo"<pre>";var_dump($tableau);echo"</pre>";
Tu devrais comprendre le soucis. :)

C'est pour cela que soit il faut tout récupérer dans les deux tables sans passer de condition WHERE et ensuite tout conditionner dans un tableau (voir mon code).
Soit faire une boucle sur la seconde requête, au moment de récupérer les données de la première requête, avec l'email en argument du WHERE.

Eléphanteau du PHP | 12 Messages

23 févr. 2011, 11:25

suite au premier select, il faut garder que les mails:
while( $donnees = mysql_fetch_assoc($reponse ))
{
    $tableau[] = $donnees['mail'];
}
ensuite, pour le second select, il faut fournir l'ensemble des mails trouvés:
function quoteStr($str) {
	return "'".$str."'";
}

$where=implode(',',array_map(quoteStr,$tableau));
$reponse1 = mysql_query("SELECT username FROM jom15_users
WHERE email in ($where) LIMIT 0 , 30"); // Requête SQL

Invité
Invité n'ayant pas de compte PHPfrance

23 févr. 2011, 11:55

Bonjour et merci encore pour ton aide.

Alors je viens de tester ta solution mais je n'arrive toujours pas à recuperer l'username. Le reste fonctionne mais pas cette requete.

Je te donne le code utilisé :

Code : Tout sélectionner

//Connection Mysql mysql_connect("mysql5-11.perso","*********","*********")or die("Problème avec la base de données"); mysql_select_db("joomla")or die ("pas de connection"); $reponse = mysql_query("SELECT inscriptions.mdp,inscriptions.mail FROM inscriptions,oubli WHERE inscriptions.mail = oubli.mail LIMIT 0 , 30"); // Requête SQL mysql_connect("sql4.modules","1184102-1","*******")or die("Problème avec la base de données"); mysql_select_db("1184102-1")or die ("pas de connection"); $reponse1 = mysql_query("SELECT username FROM jom15_users WHERE email = '$reponse[1]' LIMIT 0 , 30"); // Requête SQL // On fait une boucle pour lister tout ce que contient la table : //*********************************************************************************************************************** if (($reponse) && ($reponse1)) { //************************************************************************************************************************* $result = array(); // récupération de la première requête while($resultat = mysql_fetch_array($reponse)) $result[$resultat['mail']] = array( 'mdp' => $resultat['mdp'], 'mail' => $resultat['mail'], 'username' => ""); // récupération de la seconde requête while($resultat = mysql_fetch_array($reponse1)) $result[$resultat['mail']]['username'] = $resultat['username']; // boucle propre foreach($result as $compte) { //echo "username : {$compte['username']} | mdp : {$compte['mdp']} | email : {$compte['mail']}<br />"; ?> <tr> <td><center><font face="tahoma" size="2"><?php echo "username : {$compte['username']}"; ?></font></center></td> <td><center><font face="tahoma" size="2"><?php echo "mdp : {$compte['mdp']}"; ?></font></center></td> <td><center><font face="tahoma" size="2"><?php echo "email : {$compte['mail']}"; ?></font></center></td> </tr> <?php }
J'ai essayé en requerant sur la totalité de la table mais le resultat est identique.

Amicalement

Invité
Invité n'ayant pas de compte PHPfrance

23 févr. 2011, 11:57

Mince,

Je n'ai pas vu ton message Myrina avant de poster le mien.

Je regarde également et te tiens au courant

Merci

Invité
Invité n'ayant pas de compte PHPfrance

23 févr. 2011, 12:01

Euh Myrina,

si je garde que le mail de ma première requete, je perd le mot de passe que je veux recuperer non ?

Amicalement

Eléphanteau du PHP | 12 Messages

23 févr. 2011, 12:08

Effectivement, je ne conserve que le mail afin de pouvoir l'injecter dans la seconde requête.
Il faut le rajouter dans la boucle:
while( $donnees = mysql_fetch_assoc($reponse ))
{
    $tableau[] = $donnees['mail'];
    $result[$donnees['mail']] = array( 'mdp' => $donnees['mdp'], 'mail' => $donnees['mail'], 'username' => "");
}