Résolu Insertion Mutiple des donnees d'un tableau dans une base de données Mysql en PHP

Solutions (4)
Tags :
  • Arraylist
  • Php
  • Array
  • Base de données
|
Bonjour à tous,

Voici ma configuration : développement de programme en PHP5 avec base de données Mysql

Tout d'abord il faut savoir que je débute en PHP.
Je suis en train de développer une application de gestion d’école à l'aide de PHP5 et d'une base de données Mysql.
Mon application est un système de gestion complet des routines des écoles: enregistrement de nouvel élèves, enregistrement des profs et bien sure l'enregistrement des notes obtenu lors des devoirs dans le but d’élaborer un bulletin de note pour chaque élève.

Mon contexte :
Suivant s'il y a des infos dans la base de données(infos=élève) j'affiche la liste de classe. Pour cela pas de problème mais c'est au niveau de l'enregistrement des notes saisit dans le tableau.
j'affiche les données dans un tableau, ces données concernent chaque élève de la classe(id,nom,prénom) puis un INPUT TYPE=TEXT en charge de récupérer les notes obtenu. Puis l’opérateur de saisi remplit les notes de chaque élève dans ce dit champs.

Mon soucis est le suivant :
je voudrais que quand on clique sur le bouton "Noter", les infos vont s'enregistrer dans la base de données plus précisément dans la table 'Note'. La est mon problème, je ne vois pas comment faire pour enregistrer dans ma base de données les informations provenant du champs INPUT TYPE=TEXT qui représente les notes de chaque élève. Je connais la ligne pour enregistrer dans une base de données mais la c un peu compliqué et je m'en sort pas a cause du fait que ces un élément de formulaire sans action .

J'ai fait une boucle pour afficher les infos cela marche. mais je sais pas comment les enregistrer ou les acheminer vers un ficher capable de traiter l'enregistrement dans la base de données, :??:  ???

Vraiment communauté j'ai besoin de votre aide sur ce coup, Cordialement
Merci d'avance

Je vous donne la partie ou j'affiche mes données
Code :
-------------------------------------------------------------------------------------------------------------------
//recuperation des valeurs du formulaire des eval depuis le fichier ajout_note.php
if( isset($_POST['noter']) and !empty($_POST['element_19']) ){
include CHEMIN_VUE.'ajout_note.php';
$evalid = $_POST['element_19'];
$classeid = $_POST['element_20'];
$max = $_POST['element_13'];
$ideta = $_SESSION['idetablissement'];
include \CHEMIN_MODELE .'functions.php';
$effectif = nombr($classeid, $ideta);
$nom_de_classe = nom_classe($classeid);
//definistion de la table ou compter le nombre de contenu
$table = 'eleve';
$resultats = 10; //vous choisissez le nombre de publications à afficher sur chaque page (réglé à 10 mais peut etre modifié).
$hote = "localhost";//votre hote
$base = "school_alerte";//votre nom de base de donne
$pseudo_bdd = "root";//pseudo
$mdp_bdd = "";//mot de passe
$bdd = PDO2::getInstance();// construction de lobjet PDO pour connection a ma base de donnees

//CALCUL DU NOMBRE DE PAGE
calcul_des_pages($table, $bdd, $resultats, $classeid);

//EXTRAIRE LES VALEURS DE $page, $nbr_pages, $premier ET $dernier DE LA FONCTION calcul_des_pages($table, $bdd, $resultats)
list($page, $nbr_pages, $premier_article, $dernier_article) = calcul_des_pages($table, $bdd, $resultats, $classeid);
$donnees= array();
// Je récupère tous les articles postés ainsi que le nombre de commentaire associés à chacuns
$req = $bdd->query(' SELECT ideleve, nom_ele, prenom_ele FROM '.$table.' WHERE classe_idclasse = '.$classeid.' ORDER BY nom_ele LIMIT '.$premier_article.', '.$dernier_article.' ');
echo '<div class= "component">';
echo ' <form id="form_1021003" class="" autocomplete="off" method="post" action="index.php?module=note&action=ele_classeCrtl"> ';
echo ' <table> <caption>Liste de la classe de: '.$nom_de_classe.' </br> Effectif de classe: '.$effectif.' </caption>
<thead>
<tr>

<th>nom </th>
<th>prenom(s) </th>
<th>noter </th>
</tr>
</thead>';
echo' <tbody>';
while ($donnees = $req->fetch(PDO::FETCH_ASSOC))
{

//vos données à afficher

echo'
<tr>

<td>' .utf8_encode($donnees['nom_ele']) .'</td>
<td>' .utf8_encode($donnees['prenom_ele']) .'</td>

<td><input id="element_13" name="element_" class="element text medium" type="text" maxlength="255" value=""/></td>';
}
echo'</tr>';
echo ' </tbody>';
echo '</table>' ;

echo '<div class="valider" style="display: inline; position: relative; right: 245px;"><input type="submit" name="valider" value="Valider"/></div>';
echo '</form>';

affichage_des_liens($page, $nbr_pages);
echo '</div>';

}else{
$erreurs_a[]= 'Veuillez remplir les champs obligatoires!';
include CHEMIN_VUE .'ajout_note.php';
}

--------------------------------------------------------------------------------------------------------------------
Plus de précision: Dans la partie en Gras, je crée un formulaire qui contient mon champs INPUT TYPE=TEXT, en charge de prendre les notes des élèves, et un bouton de type=submit qui lui déclenche le traitement du formulaire

Maintenant, la partie Gras en Bleu, affiche dans une boucle le nom et le prénom des élèves, ces données viennent d'une requête qui ramène un tableau $donnees[], ainsi que le champs INPUT TYPE=TEXT, qui lui contient les notes des différents élèves.

Ce que je tente de réaliser est qu'en cliquant sur le button VALIDER, l'id des eleves ainsi que leur note aillent se stocker dans ma table NOTER(ideleve,note) mais en réalisant toutes les insertion. je ne sais pas quoi écrire dans le contrôleur du formulaire?
Peut être que mon procédé n'est pas bon, alors SVP veuillez m'indiquer un procédé fonctionnel pour mon problème.
Vraiment besoin d'aide , bien merci d'avance communauté Tom's Guide
  • sayhaxis a édité ce message
  • sayhaxis a édité ce message
Contenus similaires
Meilleure solution
partage
, Vieux c*n psychorigide |
Re,

Citation :

Merci Archipeldufond, mais avec ta solution c'est répéter le bouton INPUT TYPY=submit, on aura au devant de chaque élève un bouton OK après le champs des notes. Ce que je veux c'est un bouton unique au bas du formulaire, qui gere le l'enregistrem

STP archipeldufond, je viens d'apporter plus de clarté à ma question peut tu regarder mon post, tu me soulagera énormément. Mn pprobleme est comment enregistrer les notes dans ma Table NOTER, mais avec un botton SUBMIT du formulaire. Merci d'avance


Re,

Il y a (au moins) deux façon de procéder :

La première c'est de créer un formulaire qui va englober tout le tableau, et pour chaque élève tu créer un champs input qui est suffixé par son identifiant unique :

<form action="addnote.php" method="POST">
1 prenom nom <input name="addnote_1"/>
2 prenom nom <input name="addnote_2"/>
3 prenom nom <input name="addnote_3"/>
<input type="submit" value="Envoyer les notes"/>
<form>


Et dans le addnote.php, tu pourras récupérer les notes de cette façon :
for( $i = 0; $i < $nombre_eleves; $i++){

if( !empty($_POST['addnote_'.$i])){ // si une note a été tapée dans le champs

Ensuite tu lance la requete suivante :
insert into notes(id_eleve, note) values($i, $_POST['addnote_'.$i]);
}


La deuxième façon revient à peut près au même, l'idée est d'utiliser les tableaux de cette façon :

<form action="#" method="POST">
prenom nom <input name="addnote[]" value="1"/>
prenom nom <input name="addnote[]" value="">
prenom nom <input name="addnote[]" value="3"/>
<input type="submit" value="Envoyer les notes"/>
<form>
  • sayhaxis a sélectionné cette solution comme la meilleure réponse
  • sayhaxis a voté pour cette réponse
  • archipeldufond a édité ce message
  • Commenter cette solution |
Score
0
òh
òi
, Vieux c*n psychorigide |
Citation :
Au fait comme pour la boucle FOR dans ta 1ere solution suivait l'ordre, 1,2,3 selon le nombre d’élève. Mais cette fois ci les élèves sont affiché par leur id, ce qui veut dire que nous ne pouvons plus utiliser FOR parce que l'id est soit 5,6,1,18,3




Oui.
Le plus simple à mon avis est de procéder comme ça :

Tu sais que tes noms de variables de notes sont préfixées par "addnote_", donc tu peux parcourir toutes les variables $_POST, et pour chaque case, si la clé (tableau associatif) commence par "addnote_" tu récupère l'id de l'élève via un split :


foreach( $_POST as $c=>val){
if(c.startwith("addnote_")
tab = explode("_",$c);
eleve_id = tab[1];

}

//startwith n'existe pas, tu peux utiliser substr() pour faire ça

Deuxième solution, tu dois refaire la reqûete qui servait à afficher la liste d'élève pour récupérer les id des élèves concernés.
  • Commenter cette réponse |
Score
0
òh
òi
, Vieux c*n psychorigide |
Citation :
Merci beaucoup Archipeldufond , je suis d'accord avec ta 1ere façon. Mais le proble est comment numeroter les lignes de mon formulaire lorsque je ne connais pas le nombre exct, vue que ma requette est dynamique. Peut tu me montrer comment faire selon



Quand tu récupéres tes éleves pour les afficher, tu dois avoir une boucle du genre :

while( $eleve = $query->fetch()){ // ou un foreach qui parcourt tes eleves

}

Tu peux utiliser l'id de l'élève pour créer le champs :

while( $eleve = $query->fetch()){ // ou un foreach qui parcourt tes eleves
echo $eleve->id.' '.$eleve->nom.' '.$eleve->prenom.' <input type="text" name"noteinput_'.$eleve->id.'"/>';
}


Citation :

PS: STP peut tu être un peut plus explicite sur ta 2eme solution, elle présente un caractère très intéressante. Merci beaucoup Archipeldufond


Quand tu mets truc[] en attribut name sur plusieurs elements du formulaire, ça crée un tableau :o  https://www.designedbyaturtle.co.uk/2014/submit-an-arra...
  • archipeldufond a édité ce message
  • Commenter cette réponse |
Score
0
òh
òi
, Vieux c*n psychorigide |
Salut,

Citation :
je m'en sort pas a cause du fait que ces un élément de formulaire sans action


Pourquoi ne pas créer ces actions ?

au lieux de

[colone nom][colone prenom] <input type="text" name="input_note" value=""/>

tu mets

[colone nom][colone prenom] <form action="newnote.php" method="POST"><input type="text" name="input_note" value=""/><input type="submit" value="OK"/></form>

eventuellement tu ajoutes un champs hidden qui contient l'id de l'éleve à qui ajouter la note
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS