Page 1 sur 1

Selection multi utilisateurs

Posté : 31 mai 2005, 11:45
par manuscle
Je suis en train de faire un formulaire qui doit afficher sur une meme page l'activité de plusieurs utilisateurs que l'on a choisi avec des cases à cocher.

Voici la façon dont je recupère et traite les infos:
(j'utilise un template pour 'affichage)

Code : Tout sélectionner

// Le checkbox de chaque membre <input type="checkbox" name="membre[]" value="{membreId}" /> // Après validation du formulaire je crée la requette if (isset($_POST['membre'])) { $membre = $_POST['membre']; // Requette pour la semaine sélectionnée $sql = "SELECT a.act_id, DATE_FORMAT(a.act_date,'%d %m %Y') AS datefr, a.contenu "; $sql .= "FROM activite a "; $sql .= "LEFT JOIN utilisateur b ON a.util_id = b.util_id "; $sql .= "WHERE WEEK(a.act_date) BETWEEN '$weekDebut' AND '$weekFin'"; foreach ($membre as $m) { $sql .= "AND b.util_id = '$m' "; } }
Est-ce la bonne methode pour concaténer la requette avec un foreach?
PS = je pose cette question car je ne suis pas sûr de ce que je fait...

Posté : 31 mai 2005, 12:00
par Cyrano
Tu n'auras probablement aucun résultat à cause des ajouts dans le foreach:
Il faudrait faire:
// Le checkbox de chaque membre
?>
<input type="checkbox" name="membre[]" value="{membreId}" />
<?php
// Après validation du formulaire je crée la requette

if (isset($_POST['membre']))
{
    $membre = $_POST['membre'];
    $nb_membres = count($membre);
    // Requette pour la semaine sélectionnée
    $sql = "SELECT a.act_id, DATE_FORMAT(a.act_date,'%d %m %Y') AS datefr, a.contenu ";
    $sql .= "FROM activite a ";
    $sql .= "LEFT JOIN utilisateur b ON a.util_id = b.util_id ";
    $sql .= "WHERE WEEK(a.act_date) BETWEEN '". $weekDebut ."' AND '". $weekFin ."' AND ";
    for($i = 0; $i < $nb_membres; $i++)
    {
        $sql .= $i < ($nb_membres-1)?"b.util_id = '". $m ."' OR ":"b.util_id = '". $m ."'";
    }
}

Posté : 31 mai 2005, 14:39
par manuscle
Merci, j'ai refait la requette comme suit:
	$nb_membre = count($membre);
	if ($nb_membre == 0)
	{
	echo '<SCRIPT language="Javascript">
	<!--
	alert("Vous devez choisir au moins 1 utilisateur!");
	// -->
	</SCRIPT>';
	}
	else
	{
			
	$sql = "SELECT a.act_id, WEEK(a.act_date) AS semaine, DATE_FORMAT(a.act_date,'%d %m %Y') AS datefr, a.contenu, ";
	$sql .= "b.util_prenom, b.util_nom ";
	$sql .= "FROM activite a ";
	$sql .= "LEFT JOIN utilisateur b ON a.util_id = b.util_id ";
	$sql .= "WHERE WEEK(a.act_date) BETWEEN '$weekDebut' AND '$weekFin' AND ";
		
	for($i = 0; $i < $nb_membre; $i++)
	  {
		$sql .= $i < ($nb_membre-1) ? "b.util_id = '$membre[$i]' OR " : "b.util_id = '$membre[$i]' ";
	  } 
				
	$sql .= "ORDER BY semaine ASC ";
	$req = mysql_query($sql) or die ('Erreur selection activité : '.mysql_error());
Par contre j'ai une autre questions:

C'est quoi la meilleur syntaxe entre ces deux concaténation:
1- $sql .= "WHERE WEEK(a.act_date) BETWEEN '". $weekDebut ."' AND '". $weekFin ."' AND ";
2- $sql .= "WHERE WEEK(a.act_date) BETWEEN '$weekDebut' AND '$weekFin' AND ";
Car on m'a déjà dit sur un forum que l'une ou l'autre solution était équivalente et que c'était une question de gout, isn't it?

Posté : 31 mai 2005, 14:45
par zeus
C'est équivalent, mais tu auras moins de mal à reconnaitre tes variables avec la 1ere solutions.

C'est juste du confort pour le developpeur