Page 1 sur 3

Lignes autonomes malgré une boucle php

Posté : 02 janv. 2011, 12:28
par swampsong
Bonjour

J'ai une question de php... que j'espère pouvoir résoudre grâce au php:

J'ai un tableau html, dans une page index.php

* Il contient 1 ligne, de 10 colonnes

* Chaque case contient un compteur (via CSS) qui incrémente son numéro de case: Donc les cases de la 1ère ligne sont numérotées de 1 à 10...

* Cette ligne est répétée 10 fois grâce à une boucle 'while' en php: J'ai donc 10 lignes (mais qui sont en réalité chacune une copie de la 1ère ligne, puisqu'il s'agit d'une boucle...)

* Et j'aurais besoin de faire en sorte que chacune de ces cases, soit parfaitement autonome bien que dupliquées de la 1ère ligne:
--> En un mot, je veux faire en sorte que la case 51 (par exemple) ne soit pas juste une copie de la case 1, mais soit bien une case autonome, la case "51"... alors même que j'ai fait une boucle...

Mon objectif: Pouvoir assigner un contenu différent dans la case 1 et dans la case 11 (qui est pourtant la copie de la case 1 du fait de la boucle)

A votre avis, est ce faisable simplement en php ?

Je pensais jouer avec une variable et avec une DB MySQL, pour assigner chaque case à une entrée de la DB, dans l'ordre des cases...

Si je n'ai pas été clair, j'essaierai d'expliciter !

Merci d'avance, et bonne année à vous :)

Alex

Re: Lignes autonomes malgré une boucle php

Posté : 02 janv. 2011, 12:38
par xTG
J'ai franchement rien compris...
Assigner un contenu différent ? Le plus simple est de tout stocker dans un array à l'indice correspondant à la case.

Ainsi :
$tab = array( '0' => "texte 1", '1' => "texte 2", '4' => "texte 4");
$i = 0;
echo "<table><tr>";
while( $i < 5 )
{
  echo "<td>";
  if( !empty($tab[$i]) )
    echo $tab[$i];
  echo "</td>";
}
echo "</tr></table>";

Re: Lignes autonomes malgré une boucle php

Posté : 02 janv. 2011, 12:59
par swampsong
Ok, je n'ai pas dû être très clair, désolé !

Voilà un exemple imagé de mon tableau (bien que pour l'exemple, je n'ai mis que 3 lignes)

1ère ligne: |1ère case | 2è case | 3è case | 4è case | 5è case | 6è case | 7è case | 8è case | 9è case | 10è case

2è ligne: |11è case | 12è case | 13è case | 14è case | 15è case | 16è case | 17è case | 18è case | 19è case | 20è case

3è ligne: 21è case | 22è case | 23è case | 24è case | 25è case | 26è case | 27è case | 28è case | 29è case | 30è case

La 1ère ligne est créée en html

La 2è ligne est une répétition de la 1ère ligne grâce à la fonction 'while' en php;

La 3è ligne est aussi une répétition de la 1ère ligne (et ce jusqu'à 10 fois)

Ma question: Comment faire pour mettre un contenu dans la 1ère case, sans que celui ci n'apparaisse également dans la 11è, ni dans la 21è case ?

Je voudrais pouvoir insérer un contenu différent dans chaque case...

Est ce que cela est bien faisable avec l'array ?

Merci de m'avoir lu !

Alex

Re: Lignes autonomes malgré une boucle php

Posté : 02 janv. 2011, 14:35
par xTG
Bah oui je t'ai donné la solution... :/
Il faut pas raisonner en ligne ou colonne, raisonnes en case et tu verras que le problème reste le même que celui que j'ai mis sur table.

Re: Lignes autonomes malgré une boucle php

Posté : 02 janv. 2011, 14:40
par swampsong
Merci beaucoup pour cette réponse...

Elle semble en effet être la plus adaptée à mon tableau !

:)

Re: Lignes autonomes malgré une boucle php

Posté : 02 janv. 2011, 20:26
par swampsong
Bon, ce code fonctionne bien sûr, et du coup, je me suis mis à réviser les bases sur les arrays...

Mais je n'arrive pas à comprendre comment superposer l'array au tableau html, de manière à ce que chaque case de l'array corresponde à une case du tableau html...

Auriez vous un conseil ??

Merci d'avance,

Alex

Re: Lignes autonomes malgré une boucle php

Posté : 02 janv. 2011, 22:36
par moogli
salut,

un truc dans le genre
<?php
$tab= array(); // les x valeurs dont tu a besoin
$i = 0;
echo '<table><tr>';
foreach ($tab as $case) {
if ( ($i% $nbcaseparligne)==0) {
echo '</tr><tr>';
}
echo '<td>',$case,'</td>';
$i++;
}
//finir le tableau proprement
?>
Voila comment faire à partir de la méthode de xTG, ensuite il faut voir d'ou sorte ces données, il est possible aussi de faire ça avec des données issue d'une base de données.

Sans voir ce que tu a déjà fait on ne peut pas plus t'aider.

@+

Re: Lignes autonomes malgré une boucle php

Posté : 03 janv. 2011, 17:40
par swampsong
Thx pour la réponse !

Je m'aperçois qu'il serait bon que je reprenne les bases du php avant d'utiliser cette réponse, je la mets donc dans un coin...

Sur mon bout de code, savez vous comment empecher un retour à la ligne systématique ? Tel quel, il affiche tout sur une colonne, et j'aimerais pouvoir tout mettre sur une ligne, puis passer à la 2è ligne...
<?php





try

{

    // On se connecte à MySQL

    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;

    $bdd = new PDO('mysql:host=localhost;dbname=MABASE', 'root', '', $pdo_options);

    

    // On récupère tout le contenu de la table MATABLE

    $reponse = $bdd->query('SELECT * FROM MATABLE');

    

    // On affiche chaque entrée une à une

    while ($donnees = $reponse->fetch())                 // Tant que $donnees contient $reponse (chose), affiche CHOSE)

    {							// Début du while {

    ?>							<!-- Marque la fin du code php et l'insertion du code html (le tableau html) -->

<table>							

	<tr>

		<td> <?php echo $donnees['CHOSE']; ?> </td>

	</tr>

</table>						<!-- Fin du code html (tableau html -->

    <?php						// Et reprise du code php

    }							// Fin du while

    

    $reponse->closeCursor(); // Termine le traitement de la requête



}

?>


Re: Lignes autonomes malgré une boucle php

Posté : 03 janv. 2011, 17:52
par moogli
je qu'il te faut revoir les bses du html aussi, car la tu créer une table par info.

je te conseil de regarder ce que j'ai fait et voir comment ça fonctionne, l'utilisation pour ton code sera ensuite, normalement, trivial.


@+

Re: Lignes autonomes malgré une boucle php

Posté : 03 janv. 2011, 22:38
par swampsong
Oui, reprendre les fondamentaux du html pourrait être intéressant également, c'est vrai,
Mais que veux tu dire par "une table par info" ?

Re: Lignes autonomes malgré une boucle php

Posté : 03 janv. 2011, 23:52
par moogli
ben dans ton code a chaque 'toutr' du while tu affiche
<table>
<tr>
<td> <?php echo $donnees['CHOSE']; ?> </td>
</tr>
</table> <!-- Fin du code html (tableau html -->

donc une table par tuple retourné.

regarde le source html généré (ctrl + u sur firefox) et tu y verra autant de balise <table></table> que d'info et c'est pour cela que tu n'a pas l'affichage voulu.
si tu regarde le code que j'ai fait ces balises sont en dehors. dans la boucle tu ne doit gérer que les <tr> (ligne) et td (case d'une ligne)

@+

Re: Lignes autonomes malgré une boucle php

Posté : 04 janv. 2011, 12:21
par swampsong
Merci d'avoir pris le temps de m'expliquer !
je crois avoir compris mes erreurs, et ton bout de code en php également !

Il va m'être très utile je pense, et je vais essayer de l'adapter selon mes besoins !

Thx :D

Alex

Re: Lignes autonomes malgré une boucle php

Posté : 04 janv. 2011, 16:26
par swampsong
Bien, donc je confirme que ce code correspondait exactement à mes besoins, et je l'ai un peu adapté pour récupérer des données non d'un array mais d'une DB (ou plutôt j'ai essayé disons...)
<?php




 // On se connecte à MySQL

    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;

    $bdd = new PDO('mysql:host=localhost;dbname=MABASE', 'root', '', $pdo_options);




 // On récupère tout le contenu de la table MATABLE

    $reponse = $bdd->query('SELECT * FROM MATABLE');




$i = 0;

$nbcaseparligne = 10;



echo '<table> <tr>';



foreach ($reponse as $case) {



if ( ($i% $nbcaseparligne)==0) {



echo '</tr><tr>';



}



echo '<td>',$case['CHOSE'],'</td>'; // Dans case (qui prend dans $reponse), récupère les données de la colonne CHOSE



$i++;



}



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

?>

Par contre, j'ai fait plusieurs essais, mais je n'arrive pas à faire en sorte qu'un nombre "n" de cases s'affiche, et qu'elles soient toutes vides, sauf si une donnée correspondante existe dans la table MySQL...
En gros, comment puis je obtenir un tableau de 10 x 5 lignes, d'office, qu'il y ait ou non des données dans la table. Et que les données que je rentre après dans la table s'affichent au fur et à mesure, dans les cases correspondantes (qui étaient donc vides au départ)...

Je crois vraiment qu'il faut que votre code est adapté à ce que je recherche et qu'il faut donc que je continue dessus: En plus de revoir les bases, on apprend beaucoup aussi en modifiant au gré des besoins !!
Simplement je ne comprend pas à quel endroit je pourrais le modifier pour obtenir ce que je viens de vous exposer,

Thx !

Alex

Re: Lignes autonomes malgré une boucle php

Posté : 04 janv. 2011, 17:34
par moogli
la question qui te manque : Comment fait on la liaison entre une donnée de la table et une case tu tableau ?

avec la variable $i te permet d'indexer les cases du tableau (à partir de zéro) il suffit de caller les données sur ces cases.

Le plus simple étant de créer un tableau avec tes 50 valeurs (de 0 à 49 donc) et de le remplir à partir de ta base avec un truc du genre $tablo[ $indexDepuisLaBase] = $data['chose'];
ensuite tu affiche avec le code que j'ai fournis au début ;)


@+

Re: Lignes autonomes malgré une boucle php

Posté : 04 janv. 2011, 17:49
par sadeq
Bonjour,

C'est simple, en imposant à la boucle de tourner un nombre fois bien précis tout en lisant et plaçant les données de la requête s'il y en a. Voici comment:
<?php
// On se connecte à MySQL
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=MABASE', 'root', '', $pdo_options);

// On récupère tout le contenu de la table MATABLE
$req = $bdd->prepare('SELECT * FROM MATABLE');
$req->execute();
$reponse = $req->fetchAll(); //lire tous les résultats de la requête dans un tableau $reponse

$nbcolonnes = 10;
$nblignes = 5;

echo '<table border="1">'; //début de la table HTML

for ($ligne = 0; $ligne<$nblignes; $ligne++) {
    echo '<tr>'; //début de la ligne Table HTML
    if (isset($reponse[$ligne])) $case = $reponse[$ligne]; else $case = null; //assigne à $case soit une ligne de données existante ou rien

   for ($colonne=0; $colonne<$nbcolonnes; $colonne++){
       echo '<td>'; //début de la cellule Table HTML
       if (isset($case[$colonne])) {   //afficher une donnée, si elle existe, dans la cellule Table HTML
              echo $case[$colonne];  // Dans case (qui prend dans $reponse), récupère les données de la colonne CHOSE
        }
       echo '</td>'; //fin de la cellule Table HTML
    }
   echo '</tr>'; //fin de la ligne Table HTML
}

echo '</table>';  //fin de la Table HTML

?>
Dans ce script php, le programme affiche toujours les 10 colonnes et les 5 lignes de la table HTML même s'il n'y a pas de données équivalente dans le résultat retourné par la requête. Car les 2 boucles FOR imposent le bouclage 5x10 fois et n'affiche une donnée d'une case que si elle existe dans la séquence de lecture de la réponse de la requête.