Selection multi utilisateurs

Eléphant du PHP | 149 Messages

31 mai 2005, 11:45

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...
"Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien."
JC Vandamme.

Mammouth du PHP | 19672 Messages

31 mai 2005, 12:00

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 ."'";
    }
}
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 149 Messages

31 mai 2005, 14:39

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?
"Si tu travailles avec un marteau-piqueur pendant un tremblement de terre, désynchronise-toi, sinon tu travailles pour rien."
JC Vandamme.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

31 mai 2005, 14:45

C'est équivalent, mais tu auras moins de mal à reconnaitre tes variables avec la 1ere solutions.

C'est juste du confort pour le developpeur
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer