JeuWeb - Crée ton jeu par navigateur
Boucle for-où la placer ?Messagerie privée - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Boucle for-où la placer ?Messagerie privée (/showthread.php?tid=3002)

Pages : 1 2


Boucle for-où la placer ?Messagerie privée - biboum - 03-09-2008

Bonjour.Je reviens avec mes histoires :p
Je viens de finir ma messagerie privée, avec un tas de fonctionnalité, un code à moi tout beau (surement illisible^^)
Mais j'aimerai permettre d'envoyer un message à plusieurs personne en même temps. Pour cela j'ai crée un formulaire html de <select multiple>
Mais là maintenant je suis completement perdu...A force de mettre des conditions et d'autres boucles pour le traitement des données, je ne sais pas où mettre (ni vraiment si c'est comme ca qu'il faut faire) ma boucle for pour que chaque $_POST['destinataire'] recoivent un mail/et le message dans leur boite(les actions du traitement quoi...).
Code PHP :
<?php 
<SELECT NAME="destinataire" MULTIPLE="multiple" SIZE=9>
<?
php $pays = mysql_query("SELECT paysdispo FROM pays");
while(
$payss = mysql_fetch_array($pays)) {?>
<option><?php echo''.$payss['paysdispo'].'';}?>
<OPTION SELECTED><?php echo''.$donnees_reponse['expediteur'].''; ?>
</SELECT>
</fieldset>
<input type="submit" value="Envoyer le message" />
</form>
<?php
}
}
// sinon si la variable $_GET['action'] est égale à 'traitement' alors on traite les données envoyées par le fomulaire
elseif(isset($_GET['action']) AND $_GET['action'] == 'traitement' AND $_SESSION['login'] == true)
{
// si le message le sujet et le destinataire ne sont pas vide
if(!empty($_POST['sujet']) AND !empty($_POST['destinataire']) AND !empty($_POST['message']))
{
// on regarde si il existe une entrée avec le pseudo du destinataire
$nbr_entree = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM pays WHERE paysdispo='".$_POST['destinataire']."'")or die(mysql_error());
$nbr_entrees = mysql_fetch_array($nbr_entree);
// si il existe
if($nbr_entrees['nbre_entrees'] == 1)
{
// on sécurise les valeurs envoyées
$sujet = addslashes(htmlentities($_POST['sujet']));
$destinataire = addslashes(htmlentities($_POST['destinataire']));
$message = addslashes(nl2br(htmlentities($_POST['message'])));
$expedteur = mysql_query("SELECT paysjoue from membres_tbl where Login ='".$_SESSION['login']."'");
$expediteur = mysql_fetch_array($expedteur);
$timestamp = time();
// on récupère le dernier message envoyé au destinataire
$retour = mysql_query("SELECT destinataire, sujet, message FROM mp WHERE expediteur='".$expediteur['paysjoue']."' ORDER BY id DESC LIMIT 0,1");
$donnees = mysql_fetch_array($retour);
// si c'est le même que celui qu'on veut envoyer
if($donnees['destinataire'] == $destinataire AND $donnees['sujet'] == $sujet AND $donnees['message'] == $message)
{
// on l'enregistre pas et on affiche un message d'erreur
echo 'Vous ne pouvez pas poster le même message 2 fois d\'affilée';
}
// sinon ce n'est pas un double post
else
{
// alors on enregistre dans la base de données
mysql_query("INSERT INTO mp(sujet, expediteur, destinataire, message, timestamp, vu, efface) VALUES('" . $sujet . "', '" . $expediteur['paysjoue'] . "', '" . $destinataire . "', '" . $message . "', '" . $timestamp . "', '0', '0')")or die(mysql_error());
// on met un message
echo 'Votre message a bien été envoyé à '.$destinataire.'. Vous allez être redirigé vers votre boîte de réception dans une seconde.';
// et on redirige vers la boîte de réception

$mailto = mysql_query('SELECT Password, mail, email FROM membres_tbl WHERE Login = "'. $_SESSION['login'].'"') or die (mysql_error());
if(
$mailtop['email']==oui){
while (
$mailtop = mysql_fetch_array($mailto)) {

$mail = $mailtop['mail']; // c'est la personne qui recevra le message !

$sujet ='Nouveau message'; // pas besoin de commenter ça -_-

$from = $expediteur; // c'est le nom du contact qui sera affiché
$from_mail = 'stephane.delatorre@gmail.com'; // c'est l'adresse à partir de laquelle le mail est envoyé, veillez à ce que l'adresse existe bien
$headers = "From: \"$from\"<$from_mail>\n";
$headers .='Reply-To: stephane.delatorre@gmail.com'."\n"; // c'est l'adresse utilisée pour la réponse , laissez la même que pour l'envoi, ça évite les soucis
$headers .= "MIME-Version: 1.0\n";
$headers .='Content-Type: text/html; charset="iso-8859-1"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
$txt .= "Vous avez reçu un nouveau message dans votre boite de réception. Il vient de '".$destinataire."'.
http://lantimonde.free.fr/identification.php . Si vous ne souhaitez plus en être informé, aller le modifier dans votre profil. "
;

mail($mail, $sujet, $txt, $headers)or die (mysql_error());
}
}
redirection('boitedereception.php');
}
}
// sinon le membre n'est pas enregistré dans la table
else
{
// alors on affiche un message d'erreur
echo 'Le membre à qui vous souhaitez envoyer ce message n\'existe pas/plus. Vous allez être redirigé vers votre boîte de réception dans 2 secondes';
// et on redirige vers la boîte de réception
redirection('boitedereception.php');

}
}
// sinon tous les champs sont pas remplis
else
{
// alors on affiche un message d'erreur et un lien
echo 'Vous devez remplir tout les champs. <a href="ecriremp.php?action=ecrire">Recommencer</a>.';
}
}
?>

Je vous remercie d'avance si vous pouviez me donner une petite piste...de où placer "for($i = 0; $i < count($destinataire); $i++)"
Enfin si déjà c'est la bonne façon de faire que de faire un for au lieu d'un while ou d'un foreach...


RE: Boucle for-où la placer ?Messagerie privée - Kassak - 03-09-2008

Euh, la boucle for tu l'a met quand tu traites la réponse du formulaire, tu fais sûrement une requête d'insertion non?

Moi je n'utilise que des boucles while, donc ça doit donner quelque chose comme ça :

Code PHP :
<?
while($destinataire != 0){
REQUETE INSERT
}
?>


Je piges pas la difficulté dans ta question?


RE: Boucle for-où la placer ?Messagerie privée - biboum - 03-09-2008

La difficulté...arrivé à dire de faire la même chose pour toutes les valeurs que contient $_post['destinataire']

Code PHP :
<?
while($destinataire != 0){
REQUETE INSERT
}
?>
Donc ce code le permettrait ? != je le voyais plus comme voulu signifier "si c'est pas vide" que "tant que ce n'est pas vide".


RE: Boucle for-où la placer ?Messagerie privée - Ter Rowan - 03-09-2008

je peux me tromper mais n'essaie pas ce code

en effet si

$destinataire vaut autre chose que 0 alors tu as une boucle infinie

il faut que tu modifies le $destinataire dans le while pour pouvoir sortir

je pense que le message de kassak était une illustration pas un code qui fonctionne


RE: Boucle for-où la placer ?Messagerie privée - Kassak - 03-09-2008

Oula oui, c'est juste une démonstration, à toi de l'adapter Wink


RE: Boucle for-où la placer ?Messagerie privée - keke - 03-09-2008

Est-ce que tu sais qu'il est possible de faire des insert multiple (dans une seule table à la fois par contre)

La syntaxe est proche de :

INSERT INTO table ( champs1, champs2, champs3) VALUES (x, y z), (toto, tata, truc), (pipi, caca, crote)
(Ref = http://dev.mysql.com/doc/refman/5.0/fr/insert.html)

Peut-être que ça peut t'aider. Il me semble aussi qu'au niveau mail, il est possible d'envoyer à une liste de gens...

Pour répondre à ta question et indépendament de ce que je viens de dire, je verrais bien ta boucle ici :
Code :
if($donnees['destinataire'] == $destinataire AND $donnees['sujet'] == $sujet AND $donnees['message'] == $message)
{
///
}
// sinon ce n'est pas un double post
else
{
boucle for <----
}
Kéké.


RE: Boucle for-où la placer ?Messagerie privée - biboum - 03-09-2008

Il semblerait que j'ai un problème au niveau de mon formulaire en fait. Je pensais que c'était ma boucle, mais c'est mon formulaire.

Si je ne met pas les [] à name="destinataire" il ne me renvoie qu'une seule valeur, peu importe combien j'en selectionne...la premiere. Si je met les [] alors il ne me reconnait plus rien du tout et ne m'affiche aucune valeur. Donc forcement il ne peux pas faire de boucle.

Pour info, je n'ai pas essayer la boucle de kassak Wink
J'essayais juste de savoir ou il voulait en venir parce que je patauge un peu...


RE: Boucle for-où la placer ?Messagerie privée - jo_link_noir - 03-09-2008




RE: Boucle for-où la placer ?Messagerie privée - khiguard - 03-09-2008

Escusez moi, je me permet de dévier sensiblement de la question demandée mais j'aimerais juste faire une remarque:

biboum, je vois dans ton code que tu ouvre et ferme fréquement les balises php (<?php ?>).
Si je peut me permettre un conseil ne fait pas comme cela. Plus tard tu le regretera. Cette façon de faire alourdis innutilement le temps de traitement d'une page.
Je te conseil de mettre tout ton code HTML (ou autre) dans une variable et d'imprimer cette variable à la fin du document seulement.

Idéalement voila comment ca devrait se passer:
Connexion base de donnée
$VARIABLE='CODE';
... traitement divers...
$VARIABLE.='encore du code ou le résultat de tes echo';
Deconnexion de la base
echo $VARIABLE;

Ne pas faire d'impression entre la connexions à la base de donnée, et stocker tout dans une variable que l'on imprime après la fermeture. Je peut t'assurer que cette façon de faire te fera gagner pas mal de temps sur tes pages.
Car si tu a beaucoup de joueur sur ton jeu, et que tu a besoin d'accélerer le traitement de tes pages, tu devra toute les refaires.

Bonne chance.
@+


RE: Boucle for-où la placer ?Messagerie privée - biboum - 04-09-2008

J'abbandonne pour cette partie là du site. Je voulais faire en sorte de faire des envoie à plusieurs personnes en même temps. Mais il ne voulait pas m'envoyer ma requête aux différents destinataire. Même quand il me reconaissait tous mes destinataire, il ne me l'envoyait qu'au premier, et dans ma base de donnée, il ne m'en reconaissait aucun...
Trop compliqué pour un débutant comme moi ? Surement, je le met de coté et j'y reviendrais une autre fois.
merci à vous de m'avoir "soutenu" et de m'avoir proposé des pistes, que je n'ai pas su exploiter...Mais ca m'a malgré tout permis de m'habituer au code PHP dans son ensemble...on apprend tout doucement.

Je note aussi Khiguard pour la façon de faire pour le code. Je vais tenter de faire au mieux de cette façon. D'habitude je sépare chaque élement dans une autre page, mais là il était plus simple de tout mettre sur la même page. Et à force d'y rajouter des élements (bbcode, présentation, nombre de message, boite de reception globale, message anonyme, destinataire=pays et non le pseudo comme ce le fut au début, zone de saisi et d'insertion en javascript des messages ...etc...bah le code s'est alourdit fortement. Mais je prend bonne note et ferais au mieux.
Il y aura surement bientôt un exemple pour les curieux qui souhaiteront venir voir.

P.S : pour la balise option, on dirait d'après ce que j'ai vu qu'il y a deux script d'écriture possible. Certains la ferme, d'autres non.