[PHP/MYSQL] Débutant demande conseils.

smile-boy -  
 smile-boy -
Bonjour,

J'aimerais créer un tableau qui contienne:
-1ere colonne: les mois
-2/3/4/5eme colonnes les semaines

Tout cela est stocker dans ma base de donnée, avec comme champs: id, mois, dates.

Mais je ne sais pas comment faire ma boucle en php pour qu'a chaque ligne on est en 1ere colone le mois et par la suite les semaines.

Dsl je ne m'exprime pas très clairement.
Merci.

20 réponses

  1. Irresistibledemon Messages postés 98 Statut Membre 9
     
    Bonjour,
    Le champ "dates" correspond à quoi ?
    0
  2. tremeur53 Messages postés 299 Statut Membre 84
     
    Salut
    Tu sais faire une boucle pour afficher (sans tableau) des données de ta base ?
    Si c'est le cas le reste est simple :
    tu fais une boucle while (tant que je n'ai pas lu le dernier enregistrement)
    {
    tu insères une ligne de ton tableau (2 cellules horiz.) contenant la variable lue provenant de ta table
    }
    et tu refermes la base !
    Si tu connais les div c'est jouable sans table.
    0
  3. Alain42
     
    Non ce n'est pas très clair.

    Tu veux:

    mois- sem1- sem2- sem3 - sem 4 ?

    Mais un mois ne commence pas forcément par une semaine entière

    Ensuite dans ta base tu as quoi comme valeur dans ton champ date ?
    0
  4. smile-boy
     
    Le champ dates correspond aux semaines sous la forme 10>17.

    Pour ce qui est de la boucle c'est la qu'est mon problème je m'explique:

    voila la boucle

     while ($donnees = mysql_fetch_array($reponse) )
    {

    Maintenant je créer un ligne <tr>, j'affiche une colonne qui contiendra le mois <td>, ensuite un autre cellule pour la 1ere semaine <td>.
    Mais maintenant si je veu afficher les autre semaine du même mois je fais comment ?

    -si je remet des <td> avec $donnees['dates'] ca va me remettre les même dates ( c'est normal)
    -si je ferme la boucle ça va me recréer une ligne avec le mois

    Pouvez vous m'éclairer un peu svp !

    Cordialement.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. smile-boy
     
    C'est bon je pense avoir trouvé un solution mais j'ai une erreur avec ma requette SQL la voici:

    $reponse2 = mysql_query("select * from tp where mois="$donnees1['mois']");


    Ou est l'erreur ?
    0
  7. Alain42
     
    Tu as des " dans une chaine qui commence et finit par " donc pb

    fais:

    $critere=$donnees1['mois'];
    $reponse2 = mysql_query("SELECT * FROM tp WHERE mois='$critere'");
    
    


    et avec des majuscules c'est plus facile à lire donc à debugger
    0
  8. smile-boy
     
    Merci !!!
    Encore une petite question ( je suis chian je sais lol )

    voici mon bou de code:
    $reponse1 = mysql_query("SELECT * FROM tp");
    
    while ($donnees1 = mysql_fetch_array($reponse1) )
    {
    ?>
    <tr><td><p>
    <small>
    <b><?php echo $donnees1['mois']; ?></b></small>
    </p>
    </td>
    <?php
    $critere=$donnees1['mois'];
    $reponse2 = mysql_query("SELECT dates FROM tp WHERE mois='$critere'"); 
    while ($donnees2 = mysql_fetch_array($reponse2))
    {
    ?>
    <td><p><small><b>
    <?php echo $donnees2['dates']; ?></b></small>
    </p>
    </td><?php                      
    }
    }
    ?>


    Maintenant les dates s'affiche bien après chaque mois , mais a chaque fois il a plusieurs ligne de mois.
    Je vois vrément pas comment je pourrais faire pour qu'il n'y en ai qu'une par mois.

    A moins peut être une condition mais je ne c'est pas ça serais très correcte.
    0
  9. smile-boy
     
    Merci !!
    Encore une petite question ( Je suis chian je sais! lol )

    Bon voila mon bout de code :
    $reponse1 = mysql_query("SELECT * FROM tp");
    
    while ($donnees1 = mysql_fetch_array($reponse1) )
    {
    ?>
    <tr><td><p>
    <small>
    <b><?php echo $donnees1['mois']; ?></b></small>
    </p>
    </td>
    <?php
    $critere=$donnees1['mois'];
    $reponse2 = mysql_query("SELECT dates FROM tp WHERE mois='$critere'"); 
    while ($donnees2 = mysql_fetch_array($reponse2))
    {
    ?>
    <td><p><small><b>
    <?php echo $donnees2['dates']; ?></b></small>
    </p>
    </td><?php                      
    }
    }
    ?>


    Maintenant les dates s'affiche bien à la suite des mois, mais il y a plusieurs ligne de mois.
    Comment faire pour n'en avoir qu'une par mois ?

    Peut être avec un condition, mais je ne sais pas si ça serait très correct ?
    0
  10. Alain42
     
    Bonsoir,

    Il faut que tu opères en deux temps:
    1- extraction BDD stockage dans un array multidimensions
    2- affichage a partir de cet array

    Essayes ça (je n'ai pas testé !):
    $reponse1 = mysql_query("SELECT * FROM tp");
    // on va genrer un tableau a deux dimensions, premiere dimension du tableau index=noms des mois, ensuite chaque elemnt contient un sous array avec les dates
    $array_aff=array();
    while ($donnees1 = mysql_fetch_array($reponse1) ){
    	$index_array=$donnees1['mois']; 
    	$critere=$donnees1['mois'];
    	$reponse2 = mysql_query("SELECT dates FROM tp WHERE mois='$critere'"); 
    	while ($donnees2 = mysql_fetch_array($reponse2)){
    		$array_aff[$index_array][]= $donnees2['dates'];           
    	}
    }
    // un petit print_r  juste pour te monter ce qu'il contient, tu l'enlèves après
    echo"<pre>";
    print_r($array_aff);
    echo"</pre>";
    //
    
    //ensuite on affiche en parcourant l'array multidimension
    if(sizeof($array_aff)>0){
    	foreach($array_aff as $cle=>$s_array){//parcours du premier niveau de l'array
    		echo "<tr><td><p><small><b>".$cle."</b></small></p></td>";// a mon avis les <p> </p> sont inutiles
    		foreach($s_array as $value){//parcours des sous niveaux
    			echo "<td><p><small><b>".$value."</b></small></p></td>";
    		}
    		echo "</tr>";
    	}
    }
    
    0
  11. Alain42
     
    Mais ton code devrait marcher aussi, il manque juste un </tr> a la fin de la première boucle while et enlèves aussi les <p></p>:
    <?
    $reponse1 = mysql_query("SELECT * FROM tp");
    
    while ($donnees1 = mysql_fetch_array($reponse1) )
    {
    ?>
    <tr><td><p>
    <small>
    <b><?php echo $donnees1['mois']; ?></b></small>
    </p>
    </td>
    <?php
    $critere=$donnees1['mois'];
    $reponse2 = mysql_query("SELECT dates FROM tp WHERE mois='$critere'"); 
    while ($donnees2 = mysql_fetch_array($reponse2))
    {
    ?>
    <td><p><small><b>
    <?php echo $donnees2['dates']; ?></b></small>
    </p>
    </td><?php                      
    }
    ?>
    </tr>
    <?php
    }
    ?>
    
    0
  12. Alain42
     
    Après une nuit de repos pour ma petite tête:

    pour éviter d'avoir plusieurs lignes avec le même mois:

    $reponse1 = mysql_query("SELECT DISTINCT mois FROM tp");


    et ensuite tu fais comme le topic ci dessus.
    0
  13. smile-boy
     
    Ça marche niquel!
    c'est vrai que je n'avais pas pensé à vérifier si il existait ce critère de sélection.

    En tout cas, je te remercie Alain42 de t'être cassé la tête pour moi, c'est vraiment sympa !

    Encore merci et puis peut être à une prochaine fois!
    Bye
    0
  14. smile-boy
     
    Bonsoir,

    J' ai encore besoin d'un peu d'aide pour un script:

    j'ai plusieurs formulaires sous forme de tableau contenant chacun une date,
    quand je valide, j'aimerais que ça modifie la bdd (sachant que c'est la même que précédemment c-a-d "id,mois,dates")
    Mais comment faire pour que ça modifie ligne après ligne dans la bdd ?

    De plus j'ai un second problème, le formulaire et la modification doivent se faire dans la même page, l'envoi du formulaire se fait par $_POST mais quand je fais un test pour voir si cette variable existe ca ne marche pas.

    Voila le code:
    $reponse1 = mysql_query("SELECT * FROM tp WHERE mois='$critere'");
    ?>
    <table><form method="post" action="tp3.php">
    <?php
    $i = 0;
    while($donnees1 =  mysql_fetch_array($reponse1))
    {
    $i = $i + 1;
    ?>
    <tr><td>
    <input type="text" value="<?php echo $donnees1['dates']; ?>" name="dates<?php echo $i;?>" />
    </td></tr>
    <?php
    }
    ?> <input value="Envoyer" type="submit" /></form>
    <?php
    }
    elseif(isset ($_post['dates1']))
    {
    echo "test";
    }
    else 
    {echo "Erreur";}
    ?>


    Merci
    0
  15. Alain42
     
    Bonsoir:

    $_post['dates1'])

    Attention la casse des variables en php est importante et $_POST doit être en majuscules.

    et pour debugger il vaudrait mieux faire:

    elseif(isset ($_POST['dates1']))
    {
    echo "Recu: ".$_POST['dates1'];
    }
    else 
    {echo "Erreur";}
    


    @lain

    pour incrémenter $i tu peux aussi faire $i+=1; ou tout simplement $i++;
    0
  16. smile-boy
     
    A oui merci c'est une erreur bête,

    Et sinon une idée pour dire a mysql quel ligne doit t-il modifier ??
    0
  17. Alain42
     
    Oui tu utilises
    UPDATE .......................... WHERE champ_n='critere'

    et critere c'est une des valeurs postées par exemple l'id ou mois, en tout cas une valeur unique dans ta table.
    0
  18. smile-boy
     
    Après ca :
    $reponse1 = mysql_query("SELECT * FROM tp WHERE mois='$mois2'");


    Comment je peut faire pour en extraire le premier id de la sélection ?
    0
  19. Alain42
     
    Par exemple:
    $reponse1 = mysql_query("SELECT * FROM tp WHERE mois='$mois2' LIMIT 0,1");
    $ligne1=mysql_fetch_array($reponse1);
    $premier_id=$ligne1['id'];
    
    0
  20. smile-boy
     
        mysql_connect("localhost", "root", "");
    mysql_select_db("tests");
    $reponse1 = mysql_query("SELECT * FROM tp LIMIT 0,1");
    $ligne1=mysql_fetch_array($reponse1);
    $premier_id=$ligne1['id'];
    echo $id ;
    mysql_close();


    Ça ne m'affiche rien c'est normal ?
    0