Page 1 sur 1

1 colonne = ok ; 2 colonnes = ok ; mais 3 colonnes ??

Posté : 07 févr. 2010, 00:55
par caribou
Bonjour,
J'ai demandé de l'aide dernièrement pour conserver les cases cochées d'un checkbox lors d'un réaffichage de formulaire avec affichage dynamiques des valeurs ; ça fonctionne très bien.
(Merci à tous et à AB) php-debutant/checkbox-t251529.html
Par défaut, les checkbox s'affichent en une liste de haut en bas (mes codes sont à l'intérieur d'une form).
J'ai utilisé l'opérateur modulo pour créer 2 colonnes ; ça fonctionne. Voici le code :
<?php

	echo "<hr width='400px' align='left'>";	
	echo "<p>Genre(s) :<p/>";

echo '<table width="60%">';
$i = 0;
while ($i < 7)
{

$contenu = array(
"0" => "danse",
"1" => "conte",
"2" => "musique",
"3" => "théâtre",
"4" => "blues",
"5" => "chant",
"6" => "cirque",
);

foreach ($contenu as $key => $genr) 
{
if (($i % 2) == 0){ ?>
<tr><td><?php echo $genr ; ?> <input type='checkbox' name='genres[]' value='$id_genres' <?php if (isset($_POST['genres']) && is_array($_POST['genres']) && in_array($id_genres,$_POST['genres'])) echo 'checked="checked"'?>/> </td>
<?php }elseif (($i % 2) == 1){ ?>
<td><?php echo $genr ; ?> <input type='checkbox' name='genres[]' value='$id_genres' <?php if (isset($_POST['genres']) && is_array($_POST['genres']) && in_array($id_genres,$_POST['genres'])) echo 'checked="checked"'?>/> </td>
<?php }
$i++;
}
}
echo '</table>';

	echo "<font color='red'> $erreur6</font>";
	echo "<hr width='400px' align='left'>";	
?>

Je ne réussis pas à trouver comment afficher ma liste de genres en 3 colonnes au lieu de 2 (ni avec modulo ni avec la boucle for ($i = 0 ; $i < ... etc.). Merci pour des conseils.

Re: 1 colonne = ok ; 2 colonnes = ok ; mais 3 colonnes ??

Posté : 07 févr. 2010, 03:02
par Invité
salut

pti bout de code rapide:
il y avait un tuto d' un mamouth mais je l'ai pas retrouvé

$contenu = array(
"0" => "danse",
"1" => "conte",
"2" => "musique",
"3" => "théâtre",
"4" => "blues",
"5" => "chant",
"6" => "cirque",
);

$_POST['genres'] = explode ('-','0-4-6');
print_r($_POST['genres']);

echo '<table width="60%">';
foreach ($contenu as $key => $val) 
{
    $is_checked = (isset($_POST['genres']) AND in_array($key,$_POST['genres'])) ? 'checked="checked"' : null ;
    
    echo '<td ><input type="checkbox" name="genres[]" value="' . $key . '" '. $is_checked .'/>' . $val . '</td>';
    
    //%2 2 colonnes / %3 3 colonnes etc etc
    if ((($key % 3) == 0) and ($key != 0)) {

        echo '</tr><tr>';
    }
}
echo '</table>';
voila a+

Re: 1 colonne = ok ; 2 colonnes = ok ; mais 3 colonnes ??

Posté : 07 févr. 2010, 12:27
par Ryle
il y avait un tuto d' un mamouth mais je l'ai pas retrouvé
Il y en a un dans la FAQ ;)
[Tuto]
 Nombre de Colonnes dynamique (opérateur Modulo)[/url]

Re: 1 colonne = ok ; 2 colonnes = ok ; mais 3 colonnes ??

Posté : 07 févr. 2010, 21:03
par caribou
Bonjour
Ça ne fonctionne pas tout à fait ; il y a bien 3 colonnes, mais en ajoutant plus de genres on se retrouve avec un "trou" dans la 3e colonne, à droite !?
Revoici le code
<?php

$contenu = array(
"0" => "danse",
"1" => "conte",
"2" => "musique",
"3" => "théâtre",
"4" => "blues",
"5" => "chant",
"7" => "jazz",
"8" => "chanson",
"9" => "blues",
"10" => "chant",
"11" => "jazz",
"12" => "chanson",
);

$_POST['genres'] = explode ('-','0-1-6');
print_r($_POST['genres']);

echo '<table width="60%">';
foreach ($contenu as $key => $val) 
{
    $is_checked = (isset($_POST['genres']) AND in_array($key,$_POST['genres'])) ? 'checked="checked"' : null ;
    
    echo '<td ><input type="checkbox" name="genres[]" value="' . $key . '" '. $is_checked .'/>' . $val . '</td>';
    
    //%2 2 colonnes / %3 3 colonnes etc etc
    if ((($key % 3) == 2) and ($key != 0)) {

        echo '</tr><tr>';
    }
}
echo '</table>';
?>

Re: 1 colonne = ok ; 2 colonnes = ok ; mais 3 colonnes ??

Posté : 07 févr. 2010, 23:51
par Ryle
Comme notre invité te l'a indiqué, c'est un bout de code rapide qu'il t'a proposé... en l'état il comporte quelques inconvénients et nécessite d'être complété :
- la première ligne de ton tableau ne comporte pas de balise <tr>, de même la dernière ligne ne comprend pas de </tr>
- si le tableau ne comporte pas exactement un nombre de cellules multiple de 3, le nombre de cellule de la dernière ligne ne sera pas cohérent
- la valeur de $key ne s'incrémente pas de façon séquentielle, du coup le fait qu'il y a des trous dans ton tableau (pas d'index n°6 par exemple) fait que ton opérateur modulo donne un résultat hasardeux...

bref, je t'invite à regarder de plus près le tutoriel mentionné ci-dessus ;)

Re: 1 colonne = ok ; 2 colonnes = ok ; mais 3 colonnes ??

Posté : 09 févr. 2010, 05:59
par caribou
En effet, le tuto
faq-tutoriels/nombre-colonnes-dynamique ... 41626.html
fonctionne à merveille avec mon code (pour faire 3 colonnes à partir de données dynamiques).
J'avais skipé (lire "sauté") le lien au tuto :roll:
Remerci

Re: 1 colonne = ok ; 2 colonnes = ok ; mais 3 colonnes ??

Posté : 09 févr. 2010, 15:54
par AB
salut
il y avait un tuto d' un mamouth mais je l'ai pas retrouvé
Houlà... grave problème de mémoire... confondre un piaf et un mammouth... :mrgreen: