Partage
  • Partager sur Facebook
  • Partager sur Twitter

Boucle qui ne s'incremente pas bien

    23 septembre 2017 à 2:45:53

    bonsoir, débutant en php je galère sur un projet. A chaque fois que je pense avoir résolu un problème un autre apparait.

    Je veux créer un tableaux de disponibilités où plusieurs utilisateurs peuvent cocher des checkbox afin de préciser si ils sont dispos ou non.


    Je pensais avoir réussi à faire en sorte que les données se stockent bien dans la bdd mais j'ai limpression que ma boucle s'incrémente de façon bizarre, en effet quand je créé une variable et que j'ystock  le moteur de la boucle, la variable j + un nombre, ce nombre differe en fonction  des tours ce qui est mathématiquement illogique.

    Si quelqu'un saurait m'aider ! Merci beaucoup

    <?php
    //La page où s'exécute mon _$post :
    //déclaration de bdd
        $database = new PDO('mysql:host=db;dbname=dispos','root','*********') ;
    
    
    //méthode pour récupérer les données des checkbox
    if ($_SERVER["REQUEST_METHOD"] == "POST")
    {
        
        for ($i = 1; $i <= 5; $i++) {
            for ($j = 1; $j < 4; $j++){
                $jludo =$j +3;  $jseb = $j+6;  $jnico = j+9; 
                    
                    echo "ludo".$jludo. "-";
                    echo "seb".$jseb. "-";
                    echo "nico".$jnico. "-";
                
                
                if (isset($_POST['checkbox_'.$i.$j]) ){
                    $database -> query ('INSERT INTO dispo (id_personne, id_moment, jour, coche) VALUES ("1","'.$j.'","'.$i.'","1")') ;
                }
                else {
                    $database -> query ('INSERT INTO dispo (id_personne, id_moment, jour, coche) VALUES ("1","'.$j.'","'.$i.'","0")') ;
                }
        
                   if (isset($_POST['checkbox_'.$i.$jludo]) ){
                    $database -> query ('INSERT INTO dispo (id_personne, id_moment, jour, coche) VALUES ("2","'.$j.'","'.$i.'","1")') ;
                }
                else {
                    $database -> query ('INSERT INTO dispo (id_personne, id_moment, jour, coche) VALUES ("2","'.$j.'","'.$i.'","0")') ; 
                }
                
                      if (isset($_POST['checkbox_'.$i.$jseb]) ){
                    $database -> query ('INSERT INTO dispo (id_personne, id_moment, jour, coche) VALUES ("3","'.$j.'","'.$i.'","1")') ;
                }
                else {
                   $database -> query ('INSERT INTO dispo (id_personne, id_moment, jour, coche) VALUES ("3","'.$j.'","'.$i.'","0")') ; 
                }
                
                      if (isset($_POST['checkbox_'.$i.$jnico]) ){
                    $database -> query ('INSERT INTO dispo (id_personne, id_moment, jour, coche) VALUES ("4","'.$j.'","'.$i.'","1")') ;
                }
                else {
                    $database -> query ('INSERT INTO dispo (id_personne, id_moment, jour, coche) VALUES ("4","'.$j.'","'.$i.'","0")') ; 
                   
                }
                
            }
        
        }
    }
    ?>
    <?php 
              
    
    //la page principale
    
    
    
    
    // -- Pour les colonnes avc le nom de tes potos
    $gens = array('Julien', 'Ludo', 'Seb', 'Nico');
    
    
    
    
    
    
    // -- les différentes plages horaires
    $plagesHoraire = array('Matin', 'Aprèm', 'Nuit');
    
    // -- On en déduit le nombre de fois qu'il faudra itérer sur chaque ligne
    $nbGens = count($gens);
    $nbPlagesHoraires = count($plagesHoraire);
    $nbIterations = $nbGens * $nbPlagesHoraires;
    ?>
    <!DOCTYPE html>
    <html>
    
    <head>
     
        <link rel="stylesheet" href="style.css"/>
        <meta charset="UTF-8">
        <title> Disponibilités </title>
        
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    
    </head>
    
    <body>
    
    <form id="dispo_form" method="post" action="checkbox.php" role="form">
    
        <caption>Disponibilités pour Octobre 2017</caption>
    
        <div>
            <!-- Nom des gens -->
            <div class=cellule></div>
            <?php foreach ($gens as $cleytus) { ?>
                <div class="cellule_personne"><?php echo $cleytus; ?></div>
            <?php } ?>
        </div>
    
        <!-- Plages horaires : HEAD -->
        <div id="first">
            <div class="first">Date</div>
            <?php for ($i = 0; $i < $nbIterations; $i++) { ?>
                <div class="cellule_moment" class="first<?php echo $i+1; ?>">
                    <?php echo $plagesHoraire[$i % $nbPlagesHoraires]; ?>
                </div>
            <?php } ?>
        </div>
        
        <!-- Plages horaires : BODY -->
        <?php for ($jour = 1; $jour <= 31; $jour++) { ?>
            <div id="line<?php echo $jour; ?>">
                <div class="date"><?php echo $jour; ?></div>
    
                <?php for ($i = 0; $i < $nbIterations; $i++) { ?>
                    <div class="cellule cellule<?php echo $i+1; ?>">
                        <input class="checkbox<?php echo $i+1; ?>" type="checkbox" name="checkbox <?php echo $jour. $i+1 ?>" />
                    </div>
                <?php } ?>
        </div>
    
        
        <?php } ?>
    
                    <div>
                        <div class="cellule" id="allbox">Tout cocher</div>
                        <?php for ($i = 0; $i < $nbIterations; $i++) { ?>
                        <div class="footer cellule<?php echo $i+1; ?>">
                        <input class="all<?php echo $i+1; ?>" type="checkbox">
                    </div>    
            <?php } ?>
    
            <div>
            <div class="valider"><input id ="valider" type="submit" value="Valider"></div>
                        </div></div>
    
    
    
    
    
    </form>
    <script src="javascript.js"></script>
    </body>
    
    </html>
    .tableau, .cellule_personne,.first,.cellule_moment,.date,.footer
    {
    	display: table-cell;
    	border: 1px solid black;
    	text-align: center;
    	table-layout: fixed;
    	overflow: none ;
    	border-collapse: collapse;
    
    }
    
    .cellule3,.cellule6,.cellule9
    {
        display: table-cell;
        text-align: center;
    	table-layout: fixed;
    	overflow: none ;
    	border-collapse: collapse;
        
    }
    
    .first,.cellule_moment,.date,.cellule
    {
    	width: 60px;
    
    }
    
    .cellule_personne
    {
    	width: 184px;
    }
    
    .footer
    {
    	display: table-cell;
    	vertical-align: middle;
    	width: 60px;
    }
    
    .date
    {
    	background: #DBEAE8 ;
    }
    
    .cellule_personne
    {
    	background: #84F4E5;
    }
    
    .cellule_moment
    {
    	background: #B5E8BF;
    }
    
    .first
    {
    	background: #DBEAE8 ;
    }
    
    .valider
    {
    	padding-top: 10px;
    	margin-left: 400px;
    }




    -
    Edité par JulienMantovani 23 septembre 2017 à 12:24:31

    • Partager sur Facebook
    • Partager sur Twitter
      23 septembre 2017 à 12:02:03

      Salut, tu pourrais mettre ton css, pour que je vois ce que ça donne au niveau du formulaire. Il y a surement moyen de le simplifier.
      • Partager sur Facebook
      • Partager sur Twitter
        23 septembre 2017 à 12:27:15

        Merci pour ta réponse ;) ! j'ai rajouté le css dans le post original !

        C'est cette boucle là qui déconne, quand je fais un echo j'obtiens des valeurs bizarre.{

        for ($j = 1; $j < 4; $j++){
        $jludo =$j +3;  $jseb $j+6;  $jnico = j+9;
        echo "ludo".$jludo"-";
        echo "seb".$jseb"-";
        echo "nico".$jnico"-";
        • Partager sur Facebook
        • Partager sur Twitter
          23 septembre 2017 à 13:25:48

          oui c'est une usine à gaz et tu t'y perd, c'est normal.

          je t'ai fait un ptit exemple, je te laisse essayer de comprendre le programme.

          <?php
          	/*
          	fonction PHP utilisées :
          	- extract()
          	- explode()
          	- implode()
          	Cherche dans la doc à quoi elles servent
          	*/
          	if(!empty($_POST)){
          		
          		extract($_POST);
          		//$dispo
          		$values = array();
          		foreach($dispo as $v){
          			$vc = explode("-",$v);
          			$values[] = "(".$vc[0].",".$vc[1].",".$vc[2].",1)";
          		}
          		$values_req = implode(",", $values);
          		
          		$requete = "INSERT INTO dispo (id_personne, id_moment, jour, coche) VALUES ".$values_req;
          		
          		echo $requete;
          	}
          	$gens = array(
          			1 => 'Julien', 
          			2 => 'Ludo', 
          			3 => 'Seb', 
          			4 => 'Nico'
          			);
          	/*
          	id_moment
          	matin   : 1
          	ap-midi : 2
          	nuit    : 3
          	*/
          	
          ?>
          <style>
          	td, th{
          		padding: 5px 10px;
          		text-align: center;
          		border: 1px solid black;
          	}
          </style>
          <form method="post" action="">
          <table>
          	<tr>
          		<td>Nom >></td>
          		<?php
          			foreach($gens as $v){
          			?>
          				<th colspan="3"><?php echo $v; ?></th>
          			<?php
          			}
          		?>
          	</tr>
          	<tr>
          		<td>Plages >></td>
          		<?php
          			foreach($gens as $v){
          			?>
          				<th rowspan="2">MATIN</th>
          				<th rowspan="2">APRES-MIDI</th>
          				<th rowspan="2">NUIT</th>
          			<?php
          			}
          		?>
          	</tr>
          	<tr>
          		<th>Jour</th>
          	</tr>
          	<?php
          		for($i = 1; $i < 32; $i++){
          		?>
          			<tr>
          				<th><?php echo $i." Octobre"; ?></th>
          				<?php
          					foreach($gens as $k=>$v){
          					?>
          						<td><input type="checkbox" name="dispo[]" value="<?php echo $k.'-1-'.$i; ?>" /></td>
          						<td><input type="checkbox" name="dispo[]" value="<?php echo $k.'-2-'.$i; ?>" /></td>
          						<td><input type="checkbox" name="dispo[]" value="<?php echo $k.'-3-'.$i; ?>" /></td>
          					<?php
          					}
          				?>
          			</tr>
          		<?php
          		}
          	?>
          </table>
          <input type="submit">
          </form>
          



          • Partager sur Facebook
          • Partager sur Twitter

          Boucle qui ne s'incremente pas bien

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown