Insert dans une table avec un While

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Insert dans une table avec un While

par fraktz87 » 16 avr. 2009, 20:16

Et si tu tentait deux boucles independantes ?

par remy42 » 14 avr. 2009, 21:44

Aidez moi svp je suis dans le caca :)

Il faut que je valide cette insertion avant de pouvoir me projeter.

par remy42 » 10 avr. 2009, 23:16

Merci pour votre aide

J'ai essayer la 1 ere methode en faisant cela
echo "<td><select name='booljustif[$numeleve]'><option value='oui'>Oui</option><option value='non'>Non</option></select>";   
                                echo "<td><input type='text' value=''  name='justification[$numeleve]' size='10'></td>";
                                echo "<td><input type='checkbox' name='check_numeleve_abs[]' value='".$ligne['numeleve']."'></td>";
Sans succès

La deuxieme méthode j'ai pas trop compris le principe avec le switch $action etc
Je n'arrive pas a l'appliquer dans mon cas :S

par thehawk » 07 avr. 2009, 07:33

A okay je vois le décalé ... dur hier soir :)


Je plussoie Nours , pour récuperer tes variables tu peux proceder ainsi :
foreach ($_POST as $key => $value)

{
list($action , $id) = explode ("_" , $key);

switch ($action) {
case "justification" :
// Traitement 
break;
// ETC
default :
...
break;
}
}
ceci est un exemple ;)

par Nours312 » 07 avr. 2009, 01:31

en règle général pour ce genre de table, je force les parametres :


echo "<td><select name='booljustif[]'><option value='oui'>Oui</option><option value='non'>Non</option></select>";
echo "<td><input type='text' value='' name='justification[]' size='10'></td>";
echo "<td><input type='checkbox' name='check_numeleve_abs[]' value='".$ligne['numeleve']."'></td>";


Soit en mettant : justification[$id_eleve] // ou id row, ou ce que tu veux du moment que les id soit les memes pour tout la ligne ...

Soit : "'justification_'.$id_row.'"

Ainsi, je n'est jamais de problème avec une variable Vide qui n'est pas uploadée et "décalesé les cles de toutes les variables ...

@+

par thehawk » 06 avr. 2009, 21:21

Tu appel quoi décaler ?

par remy42 » 06 avr. 2009, 19:54

Bah de rien si ce peut servir.

Personne n'as d'idée car j'ai tjrs de probleme de decalage lors de l'insertion

Merci d'avance

par texghor » 02 avr. 2009, 14:17

Merci d'avoir exposé une partie de ta solution cela m'a servi et eviter de crée un sujet inutilement.
Je le souligne car beaucoup lorsqu'il ont la solution ne revienne pas sur le forum.

A bientôt

par remy42 » 31 mars 2009, 21:55

Encore un petit probleme. Je pense que ce n'est pas très grave sinon en gros ca marche merci beaucoup.

Lorsque j'insert mes absences si le premier eleve n'est pas cocher dans mon tableau comme "absent" alors ca decale tout lors de mes insertions dans ma base.

Voici l'interface pour vous aider
Image

Dans ce cas la ca devrait inserer deux ligne dans ma table absences sous forme de :

richioud florent 1986 non "vide"
angenieux loic 1986 oui "permis"

Et pourtant ca insere en decaler :

richioud florent 986 oui malade
angenieux loic 1986 non

En regardant le screenshot on voit que c'est decaler. Pourquoi je n'arrive pas a comprendre.

VOici mon while ( mon tableau ) :
while ($ligne = mysql_fetch_array($resultaffich_eleves))  
							{ 
								echo '<tr>';
								echo '<td bgcolor="#CCCCCC">'.$ligne["nomeleve"].'</td>';
								echo '<td bgcolor="#CCCCCC">'.$ligne["prenomeleve"].'</td>';
								echo '<td bgcolor="#CCCCCC">'.$ligne["anneenaissance"].'</td>';
								// Mise en place d'une Quatrieme colonne "checkbox" pour cocher les absents.
																
								// Modification DU 31 03 09 ajout justification
								echo "<td><select name='booljustif[]'><option value='oui'>Oui</option><option value='non'>Non</option></select>";   
                                echo "<td><input type='text' value=''  name='justification[]' size='10'></td>";
                                echo "<td><input type='checkbox' name='check_numeleve_abs[]' value='".$ligne['numeleve']."'></td>";
								// FIN Modification 31 03 09 ajout justification
								
								echo '</tr>'."\n";
	  						} 

Voici le bout de code pour ceux que ca pourrait aidé au niveau de la requete.
foreach ($eleveabsent as $key => $value)
			{
			// REQUETE SQL : Permettant d'inserer l'absence dans la base avec les données récolter auparavant
	$sql = "INSERT  INTO absences (dateabs,heuredebut,heurefin,booljustif,justification,numeleve,classe_numclasse)
            VALUES ('$datedujour', '$heuredebut', '$heurefin','$booljustif[$key]','$justification[$key]','$value', '$nom_classe_tampon') " ;

Il y a surment mieux niveau optimisation mais la je vais faire le fonctionnel et apres je retoucherai tout ca :)
[/php]

par thehawk » 31 mars 2009, 21:21

* a ta place je n'opererer pas de cette façon mais plutot :
for ($i=0 ; $i<count($eleveabsent) -1 ; $i++)
{
echo "Je m'appel ".$eleveabsent[$i]." ma justification est ".$justification[$i]."<br>";

}
normalment ca devrait te mettre sur la voie

* en sachant notament qu'avec foreach cela aurait marché en faisant :
foreach ($eleveabsent as $key => $value)
{
echo "Je m'appel ".$eleveabsent[$key]." ma justification est ".$justification[$key]."<br>"; // a la place de $eleveabsent[$key] , $value aurait marché
}

Voila mon avis :)

Possible que cela ne correspondent pas (notamment au niveau des noms de variables) , en tout cas cela peut te mettre sur la une voie

Bye Hawk

par remy42 » 31 mars 2009, 19:08

Merci pour l'info ca m'a pas sauter au yeux. Je viens d'essayer cependant il y a toujours un problème :)

Au dessus de mon FOREACH j'ai mis 3 echo des variables principales

echo $eleveabsent;
echo $booljustif;
echo $justification;
Les trois me retourne comme valeur: Array

Dans ma base pour booljustif j'ai "Arr" normal j'ai limiter a trois caractere (oui ou non)
Et dans le champ justification j'ai : Array

J'ai vu que mon
echo $eleveabsent; 
au dessus de FOREACH me retourne array et une fois passer dans le Foreach $eleveabsent as $valabs et bien $valabs contient bien la valeur de la clé primaire de $eleveabsent.

Je pense que c'est pour cela que ca marche pas car le foreach s'applique que sur 1 seul champ non ??


Merci en tout cas pour ton aide

par Ryle » 31 mars 2009, 18:58

Si tu ne mets pas de crochets dans le nom des champs de ton formulaire, ils ne sont pas considérés comme des tableaux, et la dernière valeur viendra écraser toute les autres :
- name='justification[]' au lieu de name='justification' , idem pour booljustif :)

Insert dans une table avec un While

par remy42 » 31 mars 2009, 18:50

Le sujet peut parraitre compliquer mais je ne savais pas comment l'expliquer :)

Alors en fait je suis toujours sur mon projet d'intranet de gestion d'absence.

Pour expliquer brievement j'ai une base avec des tables : CLASSES, ELEVES, ABSENCES

J'ai une page : ajoutabsence.php

dedans il y a un une liste avec les "classes", ont choisis la classe on valide et la un tableau contenant tous les eleves de classe apparait

				<?php 
					// Si nom de classe n'est pas vide alors....
					if (isset ($_POST["nom_classe"]))
						{ 
						$affichage_eleves = "SELECT eleves.* from classe , eleves where classe.numclasse=eleves.classe_numclasse and classe.numclasse=".$_REQUEST['nom_classe'];  
						$resultaffich_eleves = mysql_query($affichage_eleves); 
				
							while ($ligne = mysql_fetch_array($resultaffich_eleves))  
							{ 
								echo '<tr>';
								echo '<td bgcolor="#CCCCCC">'.$ligne["nomeleve"].'</td>';
								echo '<td bgcolor="#CCCCCC">'.$ligne["prenomeleve"].'</td>';
								echo '<td bgcolor="#CCCCCC">'.$ligne["anneenaissance"].'</td>';
								// Mise en place d'une Quatrieme colonne "checkbox" pour cocher les absents.
																
								// TEST DU 31 03 09 ajout justification
								echo "<td><select name='booljustif'><option value='oui'>Oui</option><option value='non'>Non</option></select>";   
                                echo "<td><input type='text' value=''  name='justification' size='10'></td>";
                                echo "<td><input type='checkbox' name='check_numeleve_abs[]' value='".$ligne['numeleve']."'></td>";

								// FIN TEST 31 03 09 ajout justification
								
								echo '</tr>'."\n";
	  						} 
						
						}  
						//.... Sinon 
						else {echo "Veuillez choisir votre classe";}
				?>
Au debut il y avait 4 colonnes : nom , prénom , annenaissance , cocher si absent
Ca marchait nikel. J'ai voulu rajouter deux colone "JUSTIFIE ( oui ou non )" et la JUSTIFICATION ( le motif)

Cependant quand je valide et j'insere mes données dans la base ça me garde que la derniere valeur du tableau pour "justification" et "Motif" du tableau.

Voici le code de la page ajoutabsences2.php qui gere l'insertion

<?php
	echo $eleveabsent;
			echo $valabs;
			echo $booljustif;
			echo $justification;
			
			
			
			
			foreach ($eleveabsent as $valabs)
			{
			// REQUETE SQL : Permettant d'inserer l'absence dans la base avec les données récolter auparavant
	$sql = "INSERT  INTO absences (dateabs,heuredebut,heurefin,booljustif,justification,numeleve,classe_numclasse)
            VALUES ('$datedujour', '$heuredebut', '$heurefin','$booljustif','$justification','$valabs', '$nom_classe_tampon') " ;
		
			// Exécution de la requęte SQL:
	$requete = mysql_query($sql) or die( mysql_error() ) ;
			}
  // Affichage des résultats, pour savoir si l'insertion a marchée:
		if($requete)
			{
			echo("L'insertion a été correctement effectuée") ;
			}
				else
				{
				echo("L'insertion ŕ échouée") ;
				}
			
		}
	
		
?> 
Un peu long mais j'espere que c'est clair :)

Merci d'avance pour vos réponse car je n'arrive pas a trouver d'ou ca vient meme si je pense que c'est un probleme de boucle qui se fait mal.