Script sur 2 bases de données

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Script sur 2 bases de données

Re: Script sur 2 bases de données

par Invité » 23 févr. 2011, 16:25

Merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci, merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,merci, merci,merci,

Re: Script sur 2 bases de données

par Invité » 23 févr. 2011, 15:44

Mais c'est bon sang mais c'est bien sur.

En fait elle l'etait mais j'ai les deux requetes en doublon.

En plus une fois juste et une fois fausse.

J'ai donc modifié la requete fausse et cela fonctionne.

Je teste en enlevant le doublon et revient ici.

Merci, merci merci

Re: Script sur 2 bases de données

par xTG » 23 févr. 2011, 15:29

Ta requête $reponse1 n'est toujours pas celle donnée par Myrina. ;)

Re: Script sur 2 bases de données

par Invité » 23 févr. 2011, 15:01

Hello,

ca va déjà mieux. J'ai refait selon vos conseil :
<?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,email as mail FROM jom15_users
WHERE email in ($where) LIMIT 0 , 30"); 

// On fait une boucle pour lister tout ce que contient la table :
//***********************************************************************************************************************
if ($reponse)
{
//*************************************************************************************************************************
while( $donnees = mysql_fetch_assoc($reponse ))
{
    $tableau[] = $donnees['mail'];
    $result[$donnees['mail']] = array( 'mdp' => $donnees['mdp'], 'mail' => $donnees['mail'], 'username' => "");
}
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

// 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

}
et j'ai ce resultat : username : | mdp : 123456 | email : [email protected]
username: | mdp : 345678 | emaiil : [email protected]
username : test1 | mdp : | email :

C'est déja mieux car je récupère l'username de [email protected], mais pas sur la bonne ligne et je ne recupére pas l'username de [email protected]

On s'approche mais ce n'est pas encore tout à fait cela.

En tout cas merci encore pour votre aide
Amicalement

Re: Script sur 2 bases de données

par Myrina » 23 févr. 2011, 13:55

Ou est passé ceci?
// récupération de la seconde requête
while($resultat = mysql_fetch_array($reponse1))
  $result[$resultat['mail']]['username'] = $resultat['username'];
Et en relisant ce qui a disparu, il manque une colonne dans le 2e select:
$reponse1 = mysql_query("SELECT username,email as mail FROM jom15_users
WHERE email in ($where) LIMIT 0 , 30"); // Requête SQL

Re: Script sur 2 bases de données

par Invité » 23 févr. 2011, 12:54

Oulha, je dois merder car j'ai toujours le même resultat : tout sauf username.

Je commence a perdre mon latin dans le code. Dis moi stp si j'ai fait une bétise :

Code : Tout sélectionner

<?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) { //************************************************************************************************************************* while( $donnees = mysql_fetch_assoc($reponse )) { $tableau[] = $donnees['mail']; $result[$donnees['mail']] = array( 'mdp' => $donnees['mdp'], 'mail' => $donnees['mail'], 'username' => ""); } 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 // 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 }

Re: Script sur 2 bases de données

par xTG » 23 févr. 2011, 12:41

Dans ton script (avec ma solution, bien que celle de Myrina s'en rapproche de plus en plus), la requête est fausse puisqu'on n'a pas récupéré les emails.
Il faut donc faire :
$reponse1 = mysql_query("SELECT username FROM jom15_users LIMIT 0 , 30"); // Requête SQL
Cela dit, pourquoi ce limit ? Tu n'as que 30 utilisateurs ? Tu as prévu un système de pagination ?

Re: Script sur 2 bases de données

par Myrina » 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' => "");
}

Re: Script sur 2 bases de données

par Invité » 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

Re: Script sur 2 bases de données

par Invité » 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

Re: Script sur 2 bases de données

par Invité » 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

Re: Script sur 2 bases de données

par Myrina » 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

Re: Script sur 2 bases de données

par xTG » 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.

Re: Script sur 2 bases de données

par Invité » 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!!!';
}
//****************************************************************************************************
?>

Re: Script sur 2 bases de données

par Invité » 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