Aller au contenu
ZeDevil

Modifier la couleur de fond d'une cellule

Noter ce sujet :

Recommended Posts

Bon j'ai réussi à inserer le tableau dans une autre page, il s'affiche pas de probleme, mais par contre au niveau de la taille du tableau, c'est pas bon car il redimensionne tout mes autres tableaux.

Pfffffffff, j'm'en sortirais pas.......en plus j'ai chaud !!!

Modifié par ZeDevil

Partager ce message


Lien à poster
Partager sur d’autres sites

Dans les attributs HTML. ils sont en % et une bordure de "0". Donc evidemment ca me met une bordure partout.

Pour ecrire du texte dans ton tableau avec les fond de couleur........tu met le texte ou ?

Parce que, pour un calendrier, le plus pratique consiste quand même à utiliser une base de données.

Sans que tu m'explique tout car tu m'as deja a mon avis assez aidé et tu dois te dire, mais alors lui il est pas doué.

Bah non, pour une fois ca n'est pas le cas....... :P

Je fais comme je peux ;)

Un calendrier avec db ?

Modifié par ZeDevil

Partager ce message


Lien à poster
Partager sur d’autres sites

Là, de la manière où il est construit dynamiquement en fonction des paramètres qui lui sont passés), le seul moyen d'y ajouter du texte, est de le mettre dans un array, comme pour les couleurs.

Mais si ton tableau a une taille fixe, tu peux le construire 'à la main'.

Partager ce message


Lien à poster
Partager sur d’autres sites
le seul moyen d'y ajouter du texte, est de le mettre dans un array, comme pour les couleurs.

Mais si ton tableau a une taille fixe, tu peux le construire 'à la main'.

Oui, ca va faire un peu compliqué apres, j'vais essayer à la main. Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Par contre, tu perds l'avantage de la boucle, ce qui fait que tu devras faire autant de vérifications de style, que de cellules.

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui c'est ce que je viend de voir.

As tu lu mon message un peu plus haut, j'ai édité au moment ou tu as posté. Pour la db.

Partager ce message


Lien à poster
Partager sur d’autres sites
le seul moyen d'y ajouter du texte, est de le mettre dans un array, comme pour les couleurs.

Salut,

J'ai essayé d'afficher les semaines de 1 à 52 dans un array, mais je n'y arrive pas.

J'ai compris qu'il fallait afficher les nombres à la place de l'espace ici:

echo '<td'.$class.'> </td>';

Mais cela m'affiche 'array' dans les cases.

J'ai en haut mis ca:

$semaines = array(
1 => array('10'),
2 => array('20'),
);

J'imagine que ca ne va pas.... :nonono:

Je crois qu'il faut mettre cette phrase afin ca puisse marcher, mais je ne vois pas le code a mettre

foreach($semaines as $num => $tab_coul)
echo '.coul_'.$num.' { background-color: #'.$tab_coul[1].'}';
?>

Si tu pouvais m'expliquer une derniere fois comment afficher mes semaines dans le 'array'.......

Merci.

Modifié par ZeDevil

Partager ce message


Lien à poster
Partager sur d’autres sites
$semaines = array(
1 => array('10'),
2 => array('20'),
);

Dans la logique de l'array, il est à utiliser lorsque tu veux mettre en relation plusieurs valeurs.

Là, tu me crées un tableau multidimensionnel, alors que tu n'en as pas réellement besoin.

Ton souci, c'est que j'imagine qur tu appelles ton truc, de cette manière:

echo $semaines[1];

Ce qui se passe, c'est que la valeur de 1, est un array (d'où le retour 'Array').

Dans ce cas de figure, il faut retourner le premier index de cet array (c'est-à-dire la valeur numéro 0) :

echo $semaines[1][0];

Mais ça ne reste logique que si ce dernier array peut contenir plusieurs valeurs.

Dans le cas contraire, une simple assignation de valeur est suffisante :

$semaines = array(
1 => '10',
2 => '20'
);

Et dont tu pourras appeler les valeurs par :

echo $semaines[1];

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour ta réponse captain,

Alors ca marche, mais je n'ai pas fait le tableau à la main, mais laissé comme tu l'avais fait, donc en dynamique et simplement modifié la taille de celui ci dans la valaur <table>. Ce qui rend tres bien.....

Tout ca pour dire que si je met:

<? echo $semaines[18] ?>

Dans la cellule, bah ca me le met dans toute.........

Partager ce message


Lien à poster
Partager sur d’autres sites

Si tu mets '18' en dur, c'est normal qu'à chaque boucle, il te ressorte la même chose ;)

Tu pourras mettre un screenshot de ton tableau, pour qu'on voie bien comment il est affiché ?

Parce que tel que je l'ai créé, les valeurs d'un élément sont valables pour une cellule d'une ligne, ce qui donnerait :

echo $semaines[$l][$c];

Partager ce message


Lien à poster
Partager sur d’autres sites

Bah oui, c'est en dur, je sais bien c'est pour ca que je cherche le dynamisme.... :P

Mais je ne sais pas comment augmenter le nombre de 1 à chaque fois que ca change de cellule.

Voilà le screen

test.jpg

J'espere que c'est ca que tu voulais.

J'ai pas osé mettre trop grand.

Modifié par ZeDevil

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon, j'ai modifié un peu le code, pour gérer un aujout d'élément textuel pour chaque ligne du tableau.

Tu auras besoin de créer un nouveau fichier, appelé valeurs.csv, au même endroit que le script (renomme également tableau.txt en tableau.csv) : comme on utilise des valeurs séparées par des points-virgules (= Comma Separated Values), il est logique d'utiliser une extension appropriée.

Je te copie-colle le nouveau code, avec en rouge les nouveaux éléments.

<?php
// On définit le nombre de lignes et de colonnes qu'on désire pour les tableaux
$nb_lignes = 10;
$nb_cell = 10;

// On choisit un fichier dans lequel seront stockéés les infos de couleur
$fichier_coul = 'tableau.csv';

[color="#FF0000"]// On choisit un fichier dans lequel seront stockées les infos textuelles
$fichier_val = 'valeurs.csv';[/color]

// On met les couleurs disponibles dans un array, pour pouvoir en ajouter facilement si besoin
$couleurs = array(
1 => array('Noir', '000'),
2 => array('Blanc', 'FFF'),
3 => array('Rouge', 'F00'),
4 => array('Bleu', '00F'),
5 => array('Vert', '0F0'),
6 => array('Orange', 'FF8247')
);
?>
<html>
<head>
<style type="text/css">
td {
width: 30px;
height: 30px;
}
table, td {
border: 1px solid black;
}
<?php
// On effectue une boucle pour créer une classe CSS par élément de notre tableau $couleurs
foreach($couleurs as $num => $tab_coul)
echo '.coul_'.$num.' { background-color: #'.$tab_coul[1].'}';
?>
</style>
</head>
<body>
<?php
// Le code qui remplit le tableau (array) avec les valeurs demandées dans le formulaire
$tab_couleurs = array();
if(isset($_POST['Envoi'])) {
for($l = 1; $l <= $nb_lignes; $l++) {
for($c = 1; $c <= $nb_cell; $c++) {
$tab_couleurs[$l][$c] = $_POST['sel_'.$l.'_'.$c];
[color="#FF0000"]$tab_valeurs[$l][$c] = str_replace(';', '{POINTVIRGULE}', $_POST['val_'.$l.'_'.$c]);[/color]
}
}
// On enregistre le résultat dans le fichier tableau.txt
$contenu_coul = '';
foreach($tab_couleurs as $liste_couleurs)
$contenu_coul .= implode(';', $liste_couleurs)."\r\n";
$file = fopen($fichier_coul, 'w+');
fwrite($file, $contenu_coul);
fclose($file);

[color="#FF0000"]// On enregistre le résultat dans le fichier valeurs.txt
$contenu_val = '';
foreach($tab_valeurs as $liste_valeurs)
$contenu_val .= implode(';', $liste_valeurs)."\r\n";
$file = fopen($fichier_val, 'w+');
fwrite($file, $contenu_val);
fclose($file);[/color]
}

// On lit le fichier pour créer l'array couleurs
$array = file($fichier_coul);
array_unshift($array, 0);
foreach($array as $l => $cellules) {
$tab_cellules = explode(';', $cellules);
array_unshift($tab_cellules, 0);
foreach($tab_cellules as $c => $couleur)
$tab_couleurs[$l][$c] = $couleur;
}

[color="#FF0000"]$array = file($fichier_val);
array_unshift($array, 0);
foreach($array as $l => $cellules) {
$tab_cellules = explode(';', $cellules);
array_unshift($tab_cellules, 0);
foreach($tab_cellules as $c => $valeur)
$tab_valeurs[$l][$c] = str_replace('{POINTVIRGULE}', ';', $valeur);
}[/color]


// Tu peux activer ce morceau de code si tu veux voir le contenu de l'array
/*
echo '<pre>';
print_r($tab_couleurs);
[color="#FF0000"]print_r($tab_valeurs);[/color]
echo '</pre>';
*/

// Construction du premier tableau, en fonction du nombre de lignes et de colonnes
echo '<table>';
for($l = 1; $l <= $nb_lignes; $l++) {
echo '<tr>';
for($c = 1; $c <= $nb_cell; $c++) {
$class = (isset($tab_couleurs[$l][$c])) ? ' class="coul_'.$tab_couleurs[$l][$c].'"' : '';
echo '<td'.$class.'>'.[color="#FF0000"]htmlentities($tab_valeurs[$l][$c])[/color].'</td>';
}
echo '</tr>';
}
echo '</table>';


echo '<h2>Formulaire : </h2>';

// Constructiion du même tableau que précédemment, mais avec les champs de formulaire
echo '<form name="test" method="post" action="'.$_SERVER['PHP_SELF'].'">';
echo '<table>';
for($l = 1 ; $l <= $nb_lignes; $l++) {
echo '<tr>';
for($c = 1; $c <= $nb_cell; $c++) {
$class = (isset($tab_couleurs[$l][$c])) ? ' class="coul_'.$tab_couleurs[$l][$c].'"' : '';
echo '<td'.$class.'>';
// Chaque select est construit de la manière suivante : sel_numeroligne_numerocolonne
echo '<select name="sel_'.$l.'_'.$c.'">';
// On génère ici autant d'options qu'on a d'éléments dans l'array $couleurs
foreach($couleurs as $num => $tab_couleur) {
$selected = ($tab_couleurs[$l][$c] == $num) ? ' selected="selected"' : '';
echo '<option value="'.$num.'"'.$selected.'>'.$tab_couleur[0].'</option>';
}
echo '</select>';
[color="#FF0000"]echo '<input type="text" name="val_'.$l.'_'.$c.'" value="'.$tab_valeurs[$l][$c].'" />';[/color]
echo '</td>';
}
echo '</tr>';
}
echo '</table>';
echo '<input type="submit" name="Envoi" value="Envoyer" />';
echo '</form>';
echo '</body>';
echo '</html>';
?>

Comme les valeurs sont enregistrées dans un fichier équivalent à un CSV (j'ai modifié l'extension par confort), il est important de ne pas avoir de point-virgule dans tes textes. C'est pourquoi je fais une transformation avec str_replace, que tu verras dans le code, en une entité {POINTVIRGULE}, qu'il faut bien évidemment retransformer pour l'affichage.

J'ai également ajouté quelques couleurs (mais il ne tient qu'à toi d'en ajouter d'autres), pour améliorer la lisibilité de ton tableau.

Pour finir, un conseil : Lis, relis et comprends le code.

Ca ne sert à rien de copier-coller. L'idéal étant que tu puisses le refaire 'à ta sauce', sans avoir à regarder l'original.

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour ce travail captain,

Il est evident que je ne vais pas faire un simple copier coller. Ca ne m'apprendra pas grand chose.

En plus ca m'a l'air assez complexe, vu d'ou je suis. Donc, à comprendre obligatoirement.

Je vais deja voir ce que donne ton code.

Encore merci pour ta précieuse aide.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon apres compréhesion du script, j'ai une petite question.

J'ai réussi à faire tout ce que je voulais au niveau des modification sauf une chose.

Les champs de texte, je n'en ai en fait pas réélement besoin pour ce que je veux faire actuellement (mais ca va me servir pour autre chose). Vu que mon texte est fixe, je n'ai pas besoin de le changer tout le temps.

J'ai essayé de virer les input, enfin j'ai pas essayé je les ai enlevé, mais lors de l'envoie, ca envoie comme si ils étaient vide. Alors qu'il faudrait juste qu'il ne modifie pas le fichier valeur.csv.

Je fais en fait juste afficher le texte à la place du input.

Modifié par ZeDevil

Partager ce message


Lien à poster
Partager sur d’autres sites

Il faut donc tout d'abord que tu enlèves la création de l'array $tab_valeurs, puis que tu enlèves l'écriture du fichier.

Ensuite, il faudra juste gérer l'affichage dans ton second tableau, en faisant comme pour le premier.

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour l'affichage, y'a pas de probleme, c'est deja fait, mais c'est le fait d'avoir l'ecriture du fichier que je n'arrivais pas a comprendre.

Je vais tester.

EDIT:

Voilà je pense que c'est bon, en tout cas ca ne modifie plus les données mais les laisse affichées.

Ca m'a l'air terminé, j'ai encore des modif de couleurs a faire et des changements de tableau, mais rien que je ne puisse faire seul je pense.

Merci captain !!!

Modifié par ZeDevil

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×