[PHP/MYSQL]

Résolu/Fermé
WzT - 2 févr. 2011 à 03:19
 Utilisateur anonyme - 3 févr. 2011 à 18:11
Bonjour,

J'ai un formulaire de recherche, ou je peux faire un multiselect.
Je veux qu'après avoir sélectionné ces personnes, le serveur me renvoie les adresses mails correspondantes.

Pour chaque noms renvoyés par mon formulaire, il faut qu'il m'envoie l'@ mail correspondante.

Quelqu'un peut il m'aider?

Merci d'avance

6 réponses

Bonjour,

Tout dépend de la structure de votre table MySQL, on l'avoir ?

Votre formulaire de recherche, c'est une balise SELECT dans laquelle il y a les noms de personnes, ou TEXT dans lequel les noms sont séparés ? Je n'ai pas compris avec le multiSelect désolé...

Mais au final le truc sera du genre :

$sql = 'select mail from table where nom in (';

ici traitement sur les données postées du formulaire pour compléter $sql

$sql .=') order by mail';

try {
$objBase = new PDO(DSN, USER, PWD);
$mails = $objBase->query($sql);
} catch (PDOException $e) {
exit;
}

foreach($mail as $mail) {
echo $mail;
}

Signature non conforme - Publicité supprimée Modération CCM
0
En fait mon select renvoi les id de la table
ma table a 3 champs id , noms , et adressemail

Ce que je veux c'est que pour chaque id envoyé par mon form, que ça aille chercher dans ma table les adresses mails correspondante.

j'ai essayé avec foreach mais j'ai pas réussi.
0
Mettons que la balise <SELECT> aie pour name='select[]', que votre formulaire soit posté (<form method='post'>), que la table contenant les mail soit table

Le code PHP pour récupérer les valeurs des mails serait celui-ci :

$sql = 'select mail from table where id in ('.implode(',' , $_POST['select']).') order by mail';

try {
$objBase = new PDO(DSN, USER, PWD);
$mails = $objBase->query($sql);
} catch (PDOException $e) {
exit;
}

foreach($mail as $mail) {
echo $mail;
}
Signature non conforme - Publicité supprimée Modération CCM
0
J'ai essayé et ça ne fonctionne pas.

Au départ j'étais parti sur ceci :

$select=$_POST['select'];
$res=mysql_query ("SELECT mail FROM users WHERE id='$select'");

foreach ($select as $select)
{ echo $res;
};

Et ça m'affichait toujours "Resource id #5"
0

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

Posez votre question
J'ai enfin réussi.

$select=$_POST['select'];
$rez = implode(',', $select);
$mysql = mysql_query("SELECT mail FROM users WHERE id IN($rez) ");

while ($row=mysql_fetch_array($mysql)){
echo $row['mail'];
echo '<br/>';
};


C'était tout simple en fait et j'ai vraiment galéré! Merci pour ton aide sans toi je n'aurai jamais pensé au "IN".

:p
0
Oui logique et désolé j'ai mis des coquilles dont mon code

écrit ceci à la place de ton code

// attention select est un tableau de valeurs
$res=mysql_query ("SELECT mail FROM users WHERE id in ('.implode(',' , $_POST['select']).')

while ($row = mysql_fetch_assoc($res)) {
echo $row['mail'].'<br/>';
}

J'explique, tout d'abord tu fais bien un mysql_connect quelque part avant ça, sinon ça ne marchera pas. Il faut se connecter à la base.

Ensuite tu reçois dans $_POST['select'] un tableau (array) de id
implode(',',...) va transformer ce tableau en chaine de caractère avec les id séparés par des virgules 2,4,6 par exemple

donc la requête devient select mail from users where id in (2,4,6) ok ?

Ta requête va donc renvoyer plusieurs lignes $res, n'est qu'une ressource système inexploitable via echo, rien à voir donc, pour parcourir les valeurs de ta requête tu dois utiliser mysql_fetch qui te renvoie un tableau associatif, $row ici, contenant tous les champs demandés dans ta requête, ici juste 'mail'

Tu boucle avec un while jusqu'à ce que mysql_fecth renvoie false, c'est à dire plus de valeur

$row['mail'] contient le mail pour une ligne donnée

regarde ce lien pour plus d'info https://www.php.net/manual/fr/function.mysql-query.php
Signature non conforme - Publicité supprimée Modération CCM
0