Bonjour,
J'ai récemment créé un système de MP pour un forum (code juste en dessous) et j'aimerai savoir comment envoyer un message à plusieurs utilisateurs en même temps ? Par exemple, dans le champs où l'on doit mettre le nom d'utilisateur de la personne, on écrit @users et avec un if() ça fait en sorte que le message soit envoyé à tous les utilisateurs enregistrés sur le forum.
Code :
<?php
session_start();
include("../config/SQL.php");
if(isset($_GET"action"])){
if($_GET"action"] == "create"){
if(!empty($_POST"pour"])
&& !empty($_POST"contenu"])){
/ **************************************************** /
#### MA REQUETE JUSTE ICI : ##########################
/ **************************************************** /
if($_POST"pour"] == "@users"){
$pour = "*";
$contenu = $_POST"contenu"];
$expediteur = $_SESSION"username"];
mysql_query("INSERT INTO mp (expediteur,pour,contenu) VALUES ('".$expediteur."','".$pour."','".$contenu."')") or die(mysql_error());
header("Location: ../mps/p=create&success=create");
}
/ ****************************FIN REQUETE, COMMENT FAIRE ?******* /
###################################################################
###################################################################
else{$verif_req = mysql_query("SELECT * FROM users WHERE username='".$_POST'pour']."'");
$verif = mysql_num_rows($verif_req);
if($verif == 1){
$pour = $_POST"pour"];
$contenu = $_POST"contenu"];
$expediteur = $_SESSION"username"];
mysql_query("INSERT INTO mp (expediteur,pour,contenu) VALUES ('".$expediteur."','".$pour."','".$contenu."')");
header("Location: ../mps/?p=create&success=create");
} else {
header("Location: ../mps/?p=create&error=username");
}
}
} else {
header("Location: ../mps/?p=create&error=champs");
}
}
else{
?>
<h1>Erreur</h1>
<h4>Cette action n'existe pas ou plus.</h4>
<?php
}
} else {
header("Location: ../mps.php");
}
?>
Merci d'avance de votre aide,
Myloit
C'est bon ! J'ai réussi à trouver une requête :
if($_POST"pour"] == "@users"){
$sql = "SELECT username FROM users";
$req = mysql_query($sql);
while($data = mysql_fetch_assoc($req)){
mysql_query("INSERT INTO mp (expediteur,pour,contenu) VALUES ('Equipe d\'Orthophorum','".$data'username']."','".$_POST'contenu']."')");
}
}
Bonjour,
Je sais pas si ça passerait mais une boucle qui fait cette requête en listant tout les utilisateurs pourrait passer?
En gros ta requête recommence tant qu'il y a des utilisateurs et tout $pour liste tout les utilisateurs.
Je sais pas si c'est top niveau lourdeur de requête par contre.
Si quelqu'un envoie un MP a tout le monde et que tu as 1000 inscrits, ca fait 1000 requêtes successives en quelques secondes, ce qui est loin d’être génial.
Je suggérerais plutot une boucle PHP pour la construction d'une seule requête, qui fera l'ensemble des insert.
La requète finale devra ressembler a quelque chose comme cela:
INSERT INTO
mp
(expediteur,pour,contenu)
VALUES
('".$expediteur."','".$pour[0]."','".$contenu."'),
('".$expediteur."','".$pour[1]."','".$contenu."'),
('".$expediteur."','".$pour[2]."','".$contenu."');
(voir la doc pour le détail)
A toi de voir comment tu peux construire ton array $pour, et tu n'as plus qu'a faire un truc du genre
$inserts = array();
foreach( $pour as $user ){
// Chaque insert est construit et enregistré dans un tableau
$inserts] = "('$expediteur', '$user', '$contenu')";
}
$query = "INSERT INTO mp (expediteur,pour,contenu) VALUES " . implode(',', $inserts) . ";";
pour construire la requête.
La meilleur méthode consiste à soulager MySQL au maximum, c'est la principale raison des goulots d'etranglement sur un site web.
Tu doit d'abord récupérer tous les utilisateurs et générer via PHP ta requète, comme cela tu executera une seul requète insert.
Salut
@Myloit peux tu m'envoyer tes codes sources et tes tables? j'en ai vraiment besoin je n'arrive pas à créer un petit espace chat et le temps coule...