JeuWeb (JeuPHP) - Crée ton jeu par navigateur

Version complète : Boucle for-où la placer ?Messagerie privée
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
Pages : 1 2
Bonjour.Je reviens avec mes histoires 10
Je viens de finir ma messagerie privée, avec un tas de fonctionnalité, un code à moi tout beau (surement illisible34)
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 :
<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...
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?
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".
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
Oula oui, c'est juste une démonstration, à toi de l'adapter 16
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é.
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 16
J'essayais juste de savoir ou il voulait en venir parce que je patauge un peu...
salut,
j'ai l'impression que le formulaire html n'est pas normal, tu ferme quand la balise 'option' ?
perso je ferrais ça :
Code PHP :
<select name="destinataire[]" multiple="multiple">
<?
php
    
while($payss mysql_fetch_array($pays))
    {
        echo 
'<option value="'.$payss['paysdispo'].'">'.$payss['paysdispo'].'</option>';
    }
?>
</select> 
c'est simplifier, j'ai pas bien comprit ce qui davais avoir dedans '^-^
et ensuite pour récupère le tout
Code PHP :
foreach($_POST['destinataire'] as $destinataire){
    echo 
"$destinataire <br />";


les [] à destinataire permet de retourner un tableau, $_POST['destinataire'] ressemble alors à ça :
$_POST['destinatire'] = array(
0 => distinataire 1,
1 = > destinataire 2,
....)
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 ?>16.
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.
@+
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.
Pages : 1 2
URLs de référence