Page 1 sur 3
Choix de lignes d'une table ?
Posté : 23 mai 2006, 10:47
par travisbarker
Bonjour à tous !
Je voudrais savoir comment faire pour afficher des lignes d'un tableau qu'on aurait choisies (en les cochant par exemple).
Plus concretement :
- On fait l'affichage des données d'un table sous forme de tableau avec des cases à cocher devant chaque ligne
- On coche les cases correspondant aux lignes qu'on veut afficher
- On clique sur un bouton "afficher les cases cochées"
- On obtient un nouveau tableau avec uniquement les lignes qu'on a cochées avant
Merci d'avance pour le coup de main !
Posté : 23 mai 2006, 11:25
par ouckileou
Chaque case à cocher à pour valeur l'identifiant de la ligne en base, si elle est cochée cet identififiant est transmis
Il n'y a plus qu'à sélectionner uniquement les lignes qui correspondent à ces identifiants
Posté : 23 mai 2006, 12:07
par travisbarker
Et concrètement ça donne quoi ? j'avais bien compris le principe, mais je n'arrive pas à le faire fonctionner
J'ai ça dans le code principal :
case 'choix_joueur':
// Choix des joueurs pour la feuille de match
$sql = "SELECT * from joueur";
$resultat = $db->query($sql);
$tpl->assign('nombre_enregistrements', $resultat->numRows());
$resultat = $db->getAll($sql, DB_FETCHMODE_ASSOC );
$tpl->assign('joueur', $resultat);
$tpl->display('choix_joueur.tpl');
break;
et ça dans la template :
Code : Tout sélectionner
{include file="header.tpl"}
<h3>Liste des joueurs</h3>
<table border="1">
<tr>
<th bgcolor="#eeeeee"> </th>
<th bgcolor="#eeeeee">Numéro</th>
<th bgcolor="#eeeeee">Nom</th>
<th bgcolor="#eeeeee">Prénom</th>
<th bgcolor="#eeeeee">Position</th>
</tr>
{section name="un_joueur" loop=$joueur}
<tr>
<td>
<form name="test" action="" method="post">
<input type="checkbox" name="selectedId[]" value="1" />
</form>
</td>
<td>{$joueur[un_joueur].numero}</td>
<td>{$joueur[un_joueur].nom}</td>
<td>{$joueur[un_joueur].prenom}</td>
<td>{$joueur[un_joueur].position}</td>
</tr>
{sectionelse}
<tr>
<td><b><br>Aucun joueur trouvé</b></td>
</tr>
{/section}
</table>
<input type="submit" name="submit" value="Valider" />
{include file="footer.tpl"}[/code]
Posté : 23 mai 2006, 13:41
par ouckileou
et bien c'est presque ça sauf que là-dedans :
à la place du 1, tu mets l'identifiant de chaque ligne récupérée
Ce qui fait que quand tu transmettras ton formulaire, tu récupéreras la liste des identifiants sélectionnés

Posté : 23 mai 2006, 14:16
par travisbarker
et bien c'est presque ça sauf que là-dedans :
à la place du 1, tu mets l'identifiant de chaque ligne récupérée
Ce qui fait que quand tu transmettras ton formulaire, tu récupéreras la liste des identifiants sélectionnés

Ok et je fais comment pour afficher ce que j'ai récupéré ?
Posté : 23 mai 2006, 14:23
par ouckileou
Ok et je fais comment pour afficher ce que j'ai récupéré ?
Quoi ? Quand ? Tu pourrais être plus précis ?
Y'a pas de difficultés là :
1 - SELECT * FROM table
affichage des lignes via PHP, avec une checkbox qui a pour value l'identifiant de la ligne
--> transmission du formulaire
on récupère un tableau avec les identifiants
on crée une requête dynamiquement (concaténation des identifiants) pour qu'elle ressemble à ça :
SELECT * FROM table WHERE identifiant IN (1,2,3,4)
Posté : 23 mai 2006, 14:29
par travisbarker
Ok et je fais comment pour afficher ce que j'ai récupéré ?
Quoi ? Quand ? Tu pourrais être plus précis ?
Y'a pas de difficultés là :
1 - SELECT * FROM table
affichage des lignes via PHP, avec une checkbox qui a pour value l'identifiant de la ligne
--> transmission du formulaire
on récupère un tableau avec les identifiants
on crée une requête dynamiquement (concaténation des identifiants) pour qu'elle ressemble à ça :
SELECT * FROM table WHERE identifiant IN (1,2,3,4)
Je voulais savoir comment faire pour récupérer ce que j'ai coché... Faut créer un nouveau case ?
Posté : 23 mai 2006, 14:34
par ouckileou
Je voulais savoir comment faire pour récupérer ce que j'ai coché... Faut créer un nouveau case ?
http://www.phpfrance.com/forums/voir_sujet-5220.php
Posté : 23 mai 2006, 16:04
par travisbarker
Ce petit tuto m'a bien aidé, mais je suis toujours bloqué...
je résume ma situation :
Ce que j'ai dans mon code pincipal
case 'choix_joueur':
$sql = "SELECT * from joueur";
$resultat = $db->query($sql);
$tpl->assign('nombre_enregistrements', $resultat->numRows());
$resultat = $db->getAll($sql, DB_FETCHMODE_ASSOC );
$tpl->assign('joueur', $resultat);
$tpl->display('choix_joueur.tpl');
break;
case 'affiche_choix_joueur':
// vérifions que la variable a été transmise
$tabJoueurs = (isset($_POST['joueur']))?$_POST['joueur']:null;
echo "tabJoueur : ".$tabJoueurs;
// bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées
if (!empty($tabJoueurs)) {
foreach($tabJoueurs as $cle => $valeur) {
echo $cle.' : '.$valeur.'<br>';
}
}
$tpl->display('afficher_joueur.tpl');
break;
Je fais un echo de tab joueurs et il m'affiche :
tabJoueur : Array0 : on
1 : on
2 : on
Pourtant, mon tableau affiche désespérément "Aucun joueur trouvé"
Posté : 23 mai 2006, 16:45
par ouckileou
Pourquoi as-tu
0 on
1 on
2 on
Est-ce que 0, 1 et 2 sont bien des identifiants (clé primaires) des lignes joueurs de ta table ?
A quoi cela sert d'avoir "on" puisque tu n'as QUE les cases de cochées de transmises ?
Je verrais plutôt ce genre de tableau :
Array (
0 => 6,
1 => 7,
2 => 12
);
0, 1 et 2 sont les indices de cellules
6,7 et 12 sont les identifiants des joueurs à récupérer
Où est la requête utilisant ces identifiants transmis ? Ici, tu ne les utilises pas
Posté : 24 mai 2006, 08:31
par travisbarker
Pourquoi as-tu
0 on
1 on
2 on
Est-ce que 0, 1 et 2 sont bien des identifiants (clé primaires) des lignes joueurs de ta table ?
A quoi cela sert d'avoir "on" puisque tu n'as QUE les cases de cochées de transmises ?
Justement non. Si je coche 2 cases (n'importe ou), j'obtiens 0 et 1.
Je verrais plutôt ce genre de tableau :
Array (
0 => 6,
1 => 7,
2 => 12
);
0, 1 et 2 sont les indices de cellules
6,7 et 12 sont les identifiants des joueurs à récupérer
Oui c'est ça que j'aimerais avoir, mais pas moyen !
Où est la requête utilisant ces identifiants transmis ? Ici, tu ne les utilises pas
Euh... Je n'en ai pas. Ou en tout cas je ne vois pas comment faire cette requête...

Posté : 24 mai 2006, 09:38
par mere-teresa
Déjà montre nous ton HTML 
Posté : 24 mai 2006, 10:09
par travisbarker
Déjà montre nous ton HTML 
Voila !
Code principal:
<?php
include "connexionSmarty.php";
include "connexion.php";
$db=connexion("mysql");
// Message si erreur de connexion DB
if (DB::isError($db)) {
die ($db->getMessage());
}
/*
* Programme principal
*/
// Récupération de l'action utilisateur, avec priorité sur $_POST
if (isset($_POST['action'])) {
$action = $_POST['action'];
} elseif (isset($_GET['action'])) {
$action = $_GET['action'];
} else {
$action = '';
}
if ($_POST['action'] == 'ajouter_encadrement_DB'){
//intégrer la classe
require_once('classe_personne.php');
//Test
//personne valide
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
}
if ($_POST['action'] == 'ajouter_joueur_DB'){
//intégrer la classe
require_once('classe_personne.php');
//Test
//personne valide
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
}
// Aiguillage en fonction de l'action utilisateur
switch($action) {
case 'ajouter_encadrement':
// Affichage du formulaire d'ajout
$tpl->display('formulaire_ajout_encadrement.tpl');
break;
case 'ajouter_encadrement_DB' :
require_once('classe_personne.php');
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$personne = new personne($nom, $prenom);
$personne->estValide();
$personneManager = new personneManager();
$personneManager->add($personne);
// Insertion effective de la personne de l'encadrement en BD
$sql = 'INSERT INTO encadrement (nom, prenom, fonction)';
$sql .= ' VALUES (';
$sql .= '\'' . $_POST['nom']. '\',';
$sql .= '\'' . $_POST['prenom']. '\',';
$sql .= '\'' . $_POST['fonction']. '\'';
$sql .= ');';
$db->query($sql);
// pas de break, pour afficher la liste de contact après l'ajout
case 'afficher_encadrement':
// Affichage de tous les joueurs
$sql = "SELECT * from encadrement";
$resultat = $db->query($sql);
$tpl->assign('nombre_enregistrements', $resultat->numRows());
$resultat = $db->getAll($sql, DB_FETCHMODE_ASSOC );
$tpl->assign('encadrement', $resultat);
$tpl->display('afficher_encadrement.tpl');
break;
case 'ajouter_joueur':
// Affichage du formulaire d'ajout
$tpl->display('formulaire_ajout_joueur.tpl');
break;
case 'choix_joueur':
$sql = "SELECT * from joueur";
$resultat = $db->query($sql);
$tpl->assign('nombre_enregistrements', $resultat->numRows());
$resultat = $db->getAll($sql, DB_FETCHMODE_ASSOC );
$tpl->assign('joueur', $resultat);
$tpl->display('choix_joueur.tpl');
break;
case 'affiche_choix_joueur':
// vérifions que la variable a été transmise
$tabJoueurs = (isset($_POST['joueur']))?$_POST['joueur']:null;
echo "tabJoueur : ".$tabJoueurs;
// bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées
if (!empty($tabJoueurs)) {
foreach($tabJoueurs as $cle => $valeur) {
echo $cle.' : '.$valeur.'<br>';
}
}
$tpl->display('afficher_joueur.tpl');
break;
case 'supprimer':
//supprimer();
//afficher();
$sql = "DELETE FROM contacts WHERE numero = ".$_REQUEST['numero'];
print $_REQUEST['numero'];
$resultat = $db->query($sql);
if (DB::isError($resultat)) {
print "Une erreur est survenue, contact non supprimé";
} else {
print "Contact supprimé";
}
break;
case 'ajouter_joueur_DB' :
// Insertion effective du joueur en BD
$sql = 'INSERT INTO joueur (numero, nom, prenom, poste)';
$sql .= ' VALUES (';
$sql .= '\'' . $_POST['numero']. '\',';
$sql .= '\'' . $_POST['nom']. '\',';
$sql .= '\'' . $_POST['prenom']. '\',';
$sql .= '\'' . $_POST['poste']. '\'';
$sql .= ');';
$db->query($sql);
// pas de break, pour afficher la liste de contact après l'ajout
default:
case 'afficher_joueur':
// Affichage de tous les joueurs
$sql = "SELECT * from joueur";
$resultat = $db->query($sql);
$tpl->assign('nombre_enregistrements', $resultat->numRows());
$resultat = $db->getAll($sql, DB_FETCHMODE_ASSOC );
$tpl->assign('joueur', $resultat);
$tpl->display('afficher_joueur.tpl');
break;
}
?>
Template "choix":
{include file="header.tpl"}
<h3>Liste des joueurs à choisir</h3>
<form name="test" method="post" action="projet.php" >
<table border="1">
<tr>
<th bgcolor="#eeeeee"> </th>
<th bgcolor="#eeeeee">Numéro</th>
<th bgcolor="#eeeeee">Nom</th>
<th bgcolor="#eeeeee">Prénom</th>
<th bgcolor="#eeeeee">Position</th>
</tr>
{section name="un_joueur" loop=$joueur}
<tr>
<td><input type="checkbox"/ name="joueur[]"></td>
<td>{$joueur[un_joueur].numero}</td>
<td>{$joueur[un_joueur].nom}</td>
<td>{$joueur[un_joueur].prenom}</td>
<td>{$joueur[un_joueur].poste}</td>
</tr>
{sectionelse}
<tr>
<td>Aucun joueur trouvé</td>
</tr>
{/section}
</table>
<input type="hidden" name="action" value="affiche_choix_joueur">
<input type="submit" name="submit" value="Valider" />
</form>
{include file="footer.tpl"}
Posté : 24 mai 2006, 10:11
par ouckileou
Oui, fais par étapes
Tu dois obtenir un truc qui ressemble à ce que je t'ai montré au début :
name : un nom avec des crochets vide, ce qui fait que les valeurs des cases cochées transmises seront dans un tableau auto-indexé
value : l'identifiant de chaque joueur
Fais déjà ça et on verra la suite
Posté : 24 mai 2006, 10:12
par ouckileou
ça ce n'est pas du HTML mais bon...
Ici :
<td><input type="checkbox"/ name="joueur[]"></td>
tu n'as pas d'attribut "value", c'est pour ça qu'il met "on", par défaut
Tu dois rajouter un attribut "value", qui contiendra donc l'identifiant
A priori ça :
{$joueur[un_joueur].numero}