IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Inscription à la cantine, adodb ? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 44
    Points : 29
    Points
    29
    Par défaut Inscription à la cantine, adodb ?
    Bonjour madame, bonjour monsieur !

    Je suis en train de travailler sur un tout petit projet permettant aux salariés de la fondation pour laquelle je travaille de s'inscrire à la cantine via un petit tableau.
    Celui-ci contient les dates de la semaine ainsi que de la semaine suivante, et permet de choisir le type de menu que l'on souhaite (liste déroulante avec pour choix : non inscrit, normal, végétarien).

    Je n'ai pas de soucis pour le moment en ce qui concerne la création du tableau, la sauvegarde des données en base MySQL ni avec la récupération des données et leur affichage.
    Par contre, il doit être donné à l'utilisateur la possibilité de rajouter des lignes, pour inscrire d'autres personnes, soit un collègue, soit un invité.

    Ma responsable, qui fait du développement, mais pas trop de php, m'a parlé d'adodb, qui permettrait de créer facilement de nouvelles lignes d'enregistrement, de faire des updates plus dynamiques, et de gérer toutes les données plus facilement.
    A priori, je fais une requête avec mes données sous forme de tableau, dans lequel je peux facilement rajouter une ligne ou en supprimer une, et ensuite, il me suffit de renvoyer le tableau en base, et c'est adodb qui se charge de savoir si un nouvel enregistrement, une suppression ou un update.
    Première question : est-ce bien ça ?
    Deuxième question : est-ce que vous connaîtriez des tutoriaux qui me permettraient d'expérimenter cela ? Je ne trouve rien de spécifique là-dessus, alors je me demande si adodb est la bonne méthode.

    Evidemment, si vous pensez que adodb ne convient pas, ou bien si vous connaissez un autre moyen de résoudre ma problématique, je serai heureux de l'information.

    Je vous remercie pas avance pour le temps que vous accorderez à mes questionnements !

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Citation Envoyé par Helianza Voir le message
    BPremière question : est-ce bien ça ?
    Non.
    Tu dois confondre avec la technologie AJAX (asynchronous JavaScript and XML).
    Ensuite pour rajouter des lignes à un tableau du côté du navigateur, c'est du javascript seulement et une fois fini, tu peux soumettre le formulaire en totalité pour traitement.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 44
    Points : 29
    Points
    29
    Par défaut
    J'ai précisément fait du JS pour créer les lignes en dynamique, mais à priori, elle me dit que ce n'est plus comme ça qu'on fait.
    Le mode "je crée mon tableau pour mettre la donnée que je viens de chercher en base, avant de m'amuser à retraiter chaque donnée une par une, en devant vérifier si la donnée existe avant de la remettre en base" n'est plus d'actualité, à priori.
    Vous me confirmez, que si, c'est bien comme ça qu'il faudrait faire ?

    Mais dans ce cas, quel est l'intérêt d'adodb ?

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Heu, je pense que ta responsable doit clarifier ce qu'elle te dit parce que c'est du charabia (en tout cas pour moi) : elle parle adodb mais ça peut être plusieurs choses :
    - technologie Microsoft d'accès à une base de données (ADO)
    - projet github pour php d'une couche d'abstraction de base de données

    comme tu dis qu'elle ne code pas beaucoup, va falloir qu'elle te dise clairement ce qu'elle veut.
    Après l'interface côté client se pilote en javascript et c'est tout. Et la javascript est d'actualité plus que jamais.

    Je suis d'ailleurs en train de passer tous mes codes en ES6, je ne le crois pas moi-même, mais je vais être obligé de reconnaître que le Javascript devient très chouette à coder. Enfin

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    si tu connais PHP, PDO et JS, il n'y a pas de raison d'utiliser autre chose pour ce que tu décris.

    JS/Ajax permet de faire des traitements sans rechargement de page.
    Mais tu connais aussi, non ?

    Cela dit, tu n'as pas montré UNE seule ligne de code, qui permettrait d'évaluer ton niveau, ou au moins de savoir comment tu t'y prends...

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 44
    Points : 29
    Points
    29
    Par défaut
    Je n'ai jamais utilisé Ajax. Après, ici, je n'ai pas tellement besoin de recharger ma page, donc je pense que je ne vais pas avoir besoin de l'utiliser.
    Je débute, donc je ne comprends pas forcément toutes les potentialités des solutions proposées.

    Du coup, ma question devient :
    J'ai mon tableau, avec les informations qui vont bien. J'ai le dynamisme pour rajouter ou ôter une ligne.
    Du coup, j'ai un résultat comme ça (dans l'exemple, je prends une seule ligne)(et oui, le formatage, pour le moment, n'est pas très sympa).

    Nom : cantine.png
Affichages : 111
Taille : 12,5 Ko

    Comment je fais pour gérer une requête SQL à partir de ce tableau ? Je n'arrive pas bien à saisir le lien entre les différentes colonnes et ligne. Sur excel, par exemple, je peux dire que pour A2, le jour B1, il y a le choix B2. Mais ici, comment je récupère cette numérotation ? Si je regarde par exemple cet exemple, je n'ai que des TR/TD. Comment je me repère ?

    Je précise que je n'espère pas une réponse précise à mon problème, mais plutôt une méthode que je pourrais travailler par moi-même, afin de comprendre et de faire les choses correctement.

    A l'heure actuelle, je cherche avec le <select name='type_lundi'> pour le choix du menu, sauf que du coup, je dois forcément mettre un id, genre type_lundi1, sinon, en ajoutant une ligne, tous mes lundis seront type_lundi, et du coup, je ne pourrais pas distinguer les différentes personnes.

    Bref, je pense que mon problème ne se situe pas, ici, dans la création du tableau, mais dans sa manière de l'envoyer en base. Et du coup, si vous aviez une piste à m'indiquer pour travailler là-dessus, cela m'aiderait grandement.

    Le tableau que j'ai là à été rempli par une BDD MySql. Comment je gère la nouvelle inscription si je rajoute une ligne, alors que dans le même temps, l'utilisateur qui se connecte peut se désinscrire. J'utilise une table nom/date/type_menu, avec clé primaire sur nom/date, puisqu'il ne s'agit que du midi. Est-ce qu'il faudra que je fasse un if !exists(nom/date) => insert, else => update, et ce pour chaque donnée avec une boucle ?

    Et bien sûr, si mes demandes ne sont pas adaptées, ou s'il vous semble qu'il me faille d'autres connaissances avant, je veux bien le savoir.

    Merci d'avance

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    une copie d'écran ne suffit pas.

    Normalement, tous les <input> <select> ... du formulaire doivent avoir un name.
    En PHP, c'est ce name qui permet de récupérer les données.

    ...A l'heure actuelle, je cherche avec le <select name='type_lundi'>...
    On peut mettre des crochets au name :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name='type_lundi[]'>
    On récupère alors un array :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $type_lundi = $_POST['type_lundi']; // array
    On peut alors dupliquer/cloner les lignes sans souci.
    Pour l'enregistrement en BDD, il suffit de boucler avec un foreach().

    N.B. Mais c'est difficile de te donner une piste valable si tu ne montres pas un minimum de code...

    ...alors que dans le même temps, l'utilisateur qui se connecte peut se désinscrire...
    Alors là,.... c'est à TOI de DÉFINIR CLAIREMENT les choses !
    Si l'utilisateur se désinscrit, il se passe quoi ? (on doit supprimer aussi les "invités" ? ... ?)
    Ça fait partie du "cahier des charges", qui doit être défini AVANT de coder quoi que ce soit.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 44
    Points : 29
    Points
    29
    Par défaut
    Je comprends. Je mets le code un peu plus au propre, et je vous montre ce que j'ai déjà fait.
    Merci !

  9. #9
    Invité
    Invité(e)
    Par défaut
    ...alors que dans le même temps, l'utilisateur qui se connecte peut se désinscrire...
    Alors là,.... c'est à TOI de DÉFINIR CLAIREMENT les choses !
    Si l'utilisateur se désinscrit, il se passe quoi ? (on doit supprimer aussi les "invités" ? ... ?)

    Ça fait partie du "cahier des charges", qui doit être défini AVANT de coder quoi que ce soit.

    ...pour inscrire d'autres personnes, soit un collègue, soit un invité...
    DÉFINIS aussi CLAIREMENT cette partie !
    Ce que ça implique,...
    ex. :
    • le "collègue" aura-t-il la possibilité de se désinscrire lui-même ?
    • et l'invité ?
    • ... ?


    ...J'utilise une table nom/date/type_menu, avec clé primaire sur nom/date...
    Ça, ça m'a l'air complètement moisi...

    Existe-t-il une table "utilisateur" ? (qui devrait avoir un id auto-incrémenté ?)
    Une table "réservation" ?
    ... ?

    Là aussi, il faut BIEN RÉFLÉCHIR à la CONCEPTION des tables.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 44
    Points : 29
    Points
    29
    Par défaut
    Normalement, le truc est pensé correctement, du moins, je l'espère. Parlons-en, que je corrige éventuellement si c'est mal pensé.

    Je n'ai pas de table utilisateur, car l'utilisateur se connecte avec ses identifiants windows, et je tape sur l'AD en LDAP pour vérifier qu'il existe bien.
    Dans ma table repas_pris, j'ai :
    • nom
    • date
    • type_repas
    • inscrit_par

    Donc si je m'inscris, j'aurais : nom.damien/12-08-2019/1/nom.damien.

    • A la connexion, je prends les dates de la semaine courante (lundi=>vendredi), et de la semaine suivante (lundi=>vendredi aussi).
    • Ensuite, je cherche dans la table, sur les dates en cours, là où l'utilisateur connecté est dans nom ou dans inscrit_par.
    • Pour chaque utilisateur différent, je crée une ligne. Si je n'ai pas de données, je mets "non inscrit".
    • Ainsi, si mon collègue m'a inscrit, je peux me désinscrire, et la page mets alors à jour inscrit_par, et mon collègue n'a plus accès à mon choix.
    • Tant que je n'ai pas touché, mon collègue peut me désinscrire.
    • Les invités, eux, ne peuvent être désinscrits que par la personne qui les a inscrites. Ou par le responsable de la cuisine, mais cela est une autre page.
    • Si je fais une désinscription, je supprime le couple nom/date.



    Du coup, pour le moment, je n'ai besoin, à mon sens, que d'une table. Il est envisagé de faire une table pour les types de repas. Du coup, si je fais le type 1, je peux récupérer en table type_repas le nom du repas.

    Il s'agit vraiment d'un truc qui se doit d'être simple. Je pense même qu'en réalité, la possibilité d'inscrire son collègue est une chose qui ne sera que peu utilisée.

    Après, j'aurais d'autres choses à faire, comme bloquer la saisie après 10h pour le jour courant, et la bloquer pour les jours passés. Mais je me dis que cela, je peux l'envisager plus tard.

    Est-ce que j'ai totalement mal envisagé la chose ?

  11. #11
    Invité
    Invité(e)
    Par défaut
    OK.
    Tu as tout bien cadré.
    L'info importante ici, c'est la colonne "inscrit_par".

    Ça ne remet donc pas en cause la procédure que je t'ai indiquée, pour les name avec crochet.

    Cela dit, tu n'as toujours pas montrer :
    • le code (au moins un extrait) de ton tableau (HTML),
    • ni comment tu ajoutes une ligne (JS ?),
    • ni comment sont traitée les données (PHP + requête avec PDO ?)...

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 44
    Points : 29
    Points
    29
    Par défaut
    Bonjour !

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    <html>
     <head>
       <title>Inscription au Festin</title>
     
       <script type="text/javascript">
       // Fonction pour insérer une ligne en fin de tableau
       function insererLigne_Fin(){
    		var cell, ligne;
     
    		// on récupère l'identifiant (id) de la table qui sera modifiée
    		var tableau = document.getElementById("InsTable");
    		// nombre de lignes dans la table (avant ajout de la ligne)
    		var nbLignes = tableau.rows.length;
    		ligne = tableau.insertRow(-1); // création d'une ligne pour ajout en fin de table
     
    		// création et insertion des cellules dans la nouvelle ligne créée
    		cell = ligne.insertCell(0);
    		cell.innerHTML = "Deuxième inscrit";
     
    		cell = ligne.insertCell(1);
    		cell.innerHTML = "<SELECT name=\"type_Monday[]\" size=\"1\"><option value = \"0\">Non inscrit</option><option value = \"1\">Normal</option><option value = \"2\">Alternatif</option>";
     
    		cell = ligne.insertCell(2);
    		cell.innerHTML = "<SELECT name=\"type_Tuesday[]\" size=\"1\"><option value = \"0\">Non inscrit</option><option value = \"1\">Normal</option><option value = \"2\">Alternatif</option>";
     
    		cell = ligne.insertCell(3);
    		cell.innerHTML = "<SELECT name=\"type_Wednesday[]\" size=\"1\"><option value = \"0\">Non inscrit</option><option value = \"1\">Normal</option><option value = \"2\">Alternatif</option>";
     
    		cell = ligne.insertCell(4);
    		cell.innerHTML = "<SELECT name=\"type_Thursday[]\" size=\"1\"><option value = \"0\">Non inscrit</option><option value = \"1\">Normal</option><option value = \"2\">Alternatif</option>";
     
    		cell = ligne.insertCell(5);
    		cell.innerHTML = "<SELECT name=\"type_Friday[]\" size=\"1\"><option value = \"0\">Non inscrit</option><option value = \"1\">Normal</option><option value = \"2\">Alternatif</option>";
     
    		cell = ligne.insertCell(6);
    		cell.innerHTML = "<SELECT name=\"type_Monday[]\" size=\"1\"><option value = \"0\">Non inscrit</option><option value = \"1\">Normal</option><option value = \"2\">Alternatif</option>";
     
    		cell = ligne.insertCell(7);
    		cell.innerHTML = "<SELECT name=\"type_Tuesday[]\" size=\"1\"><option value = \"0\">Non inscrit</option><option value = \"1\">Normal</option><option value = \"2\">Alternatif</option>";
     
    		cell = ligne.insertCell(8);
    		cell.innerHTML = "<SELECT name=\"type_Wednesday[]\" size=\"1\"><option value = \"0\">Non inscrit</option><option value = \"1\">Normal</option><option value = \"2\">Alternatif</option>";
     
    		cell = ligne.insertCell(9);
    		cell.innerHTML = "<SELECT name=\"type_Thursday[]\" size=\"1\"><option value = \"0\">Non inscrit</option><option value = \"1\">Normal</option><option value = \"2\">Alternatif</option>";
     
    		cell = ligne.insertCell(10);
    		cell.innerHTML = "<SELECT name=\"type_Friday[]\" size=\"1\"><option value = \"0\">Non inscrit</option><option value = \"1\">Normal</option><option value = \"2\">Alternatif</option>";
     
    		cell = ligne.insertCell(11);
    		cell.innerHTML = "<a href=javascript:void(0); onclick=supprimerLigne_Fin()>X</a>";
    	}
     
    	// Fonction suppression de ligne
    	function supprimerLigne_Fin(){
    		// on récupère l'identifiant (id) de la table qui sera modifiée
    		var tableau = document.getElementById("InsTable");
    		if (tableau.rows.length)
    		{
    			tableau.deleteRow(-1); // suppression d'une ligne en fin de table
    								   // le paramètre est dans ce cas (-1)
    		}
    	}
       </script>
     </head>
     <body>
     
    <?php 
    //parametres de connexion du serveur AD
    $ad_host="xxxxxxxxxxxxxxxx";
    $ad_port="xxx";
    $dn_base_ad="xxxxxxxxxxxxxxxxx"; 
    $suffixe = "xxxxxxxxxxxxxxxx"; 
    $user=$_POST['user'];
    $password=$_POST['mdp'];
    $ldaptree = "xxxxxxxxxxxxxxx";
    $ldapsearch = "xxxxxxxxxxxxxxxxxxx";
    $ldapattributes = array(xxxxxxxxxxxxxxxxxxxxxxx);
    $connexion_ok=false;
    //setlocale(LC_TIME, 'french'); //Pour avoir les dates en français.
     
    //Connexion au serveur
    $ad = ldap_connect($ad_host, $ad_port) or die('Could not connect to LDAP server.');
    //ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
    //ldap_set_option($ad, LDAP_OPT_REFERRALS, 0);
     
     
     
    if (@ldap_bind($ad, $user.$suffixe, $password)) 
    {
    	//Vérification des informations de connexion
    	$erreur =  ldap_errno($ad);	
    	if($erreur==49) 
    	{
    		echo "Les informations saisies sont erronées.<br>";
    	} 
    	elseif ($erreur==-1)
    	{
    		echo "Problème de réseau - merci de contacter le service informatique.<br>";
    	} 
    	elseif ($erreur==0) 
    	{
    		$connexion_ok=true;
    	}
    }
     
    if ($connexion_ok)
    {
    	//Recherche LDAP
    	$result = ldap_search($ad,$ldaptree,$ldapsearch,$ldapattributes) or die ("Error in search query: ".ldap_error($ad));
        $data = ldap_get_entries($ad, $result);
     
    	//Résultats
    	print "Bonjour ".$data[0]['givenname'][0]." !<br><br>J'ai bien l'impression que tu as faim. Inscris-toi !<br><br>";// SHOW ALL DATA
     
    }
    ldap_unbind($ad);
     
    //Connexion à MySql
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=festin;charset=utf8', 'root', '');
    }
    catch (Exception $e)
    {
    		die('Erreur : ' . $e->getMessage());
    }
    ?>
     
     
    <form action="test.php" method="post">
    	<table id="InsTable">
    	<tr>
    		<td></td>
    		<?php
    		// On remplit la première ligne avec les jours des semaines courante et suivante
    		// Semaine courante
    		// On regarde le numéro de la semaine
    		$w = date("W",time()); 
     
    		// On cherche le premier jour de la semaine $w
    		for($i = 1; $i <= 366; $i++) {
    		  $week = date("W", mktime(0, 0, 0, 0, $i));
    		  if($week == $w) {
    			// Ensuite on affiche tous les jours de la semaine courante
    			for($d = 0; $d < 12; $d++) {
    				echo "<td align=\"center\" valign=\"center\">";
    				echo date("d/m/Y", mktime(0, 0, 0, 0, $i+$d)) . "<br />";
    				echo "</td>";
    				if ($d==4){
    					$d=6;
    				}
    			}
    			break;
    		  }
    		}
    ?>
    	</tr>
    	<tr>
    		<td><?php echo ($data[0]['givenname'][0]); ?>
    		</td>
    		<?php
    		// Récupération du code pour les dates
    		$w = date("W",time()); 
    		for($i = 1; $i <= 366; $i++) {
    			$week = date("W", mktime(0, 0, 0, 0, $i));
    		    if($week == $w) {
    			// On affiche les choix par jour, sinon, vide.
    				for($d = 0; $d < 12; $d++) {
    					$date_bdd = date("Y-m-d", mktime(0, 0, 0, 0, $i+$d));
    					$jour = date("l", mktime(0, 0, 0, 0, $i+$d));
    					$reponse = $bdd->query('select type from repas_pris where utilisateur = "'.$user.'" and date ="'.$date_bdd.'"');
    					echo "<td> <SELECT name=\"type_".$jour."[]\" size=\"1\">";
    					if($donnees = $reponse->fetch()) {
    						echo "<option value = \"0\">Non inscrit</option>";
    						if($donnees['type']==1){
    							echo "<option value = \"1\" selected>Normal</option>";
    							} 
    							else { 
    							echo "<option value = \"1\">Normal</option>";
    							}
    						if($donnees['type']==2){ 
    							echo "<option value = \"2\" selected>Alternatif</option>";
    							} 
    							else { 
    								echo "<option value = \"2\">Alternatif</option>";
    							}
    						echo "</SELECT>";
    						echo "</td>	";
    						if ($d==4){
    						$d=6;
    				}
    					} else {	
    						echo "<option value = \"0\">Non inscrit</option>";	
    						echo "<option value = \"1\">Normal</option>";	
    						echo "<option value = \"2\">Alternatif</option>";	
    						echo "</SELECT>";
    						echo "</td>	";
    						if ($d==4){
    						$d=6;}
    					}	
    				}
    				break;
    			}
    		}
    ?>
    		<td><a href=javascript:void(0); onclick=insererLigne_Fin()>+</a></td>
    	</tr>
    </table>
     
    <p><input type="submit" value="OK"></p>
    <br><a href="index.php">Revenir à la page de login</a>
    </body>
    </html>
    J'ai un fichier index, avec un formulaire qui récupère login/mdp, et qui charge cette page.

    Tout ce que je souhaite faire n'est pas encore là, mais je préfère, si cela ne vous dérange pas, voir avec vous si je vais dans la bonne direction ou pas.

    Quelques petites questions que j'ai :
    1. - j'ai deux if, pour D de 0 à 5 puis de 7 à 12. Est-ce qu'il existe un moyen de regrouper que je ne connais pas ?
      [EDIT : j'ai trouvé, en rajoutant un if qui teste si je suis à 4, et passe à 6]
    2. - je fait une requête dans la bdd, ligne par ligne, en cherchant par date.
      Est-ce qu'il serais possible de faire une plus grosse requête, qui pourrait me sortir plusieurs lignes (pour traiter les invités, les collègues que j'ai inscrits...), et qu'ensuite, j'ai juste à remplir mes td avec le choix, sans devoir à chaque fois vérifier la date ?

    En gros, une requête qui me sortirait nom/type_lundi semaine courante/type_mardi semaine courante..... jusqu'à type_vendredi semaine suivante, sous la forme
    • toto/1/2/1/1/2/2/1/1/1/1
    • tata/1/2/1/2/2/2/1/1/1/1

    Et du coup, je pourrais simplifier mon code, en prenant une ligne de résultat pour une ligne de tableau.

    Pour la suppression en javascript, pour l'instant, je triche. Quand je crée une ligne, il me rajoute un - pour supprimer la ligne, mais cette suppression supprimer toujours la dernière ligne.
    Dans les différents tutoriaux, je trouve toujours comment supprimer la première ligne, la dernière ligne, ou une ligne spécifique par son id. Mais je ne sais pas comment récupérer l'id de la ligne sur laquelle je clique. Est-ce qu'il y a un moyen de faire cela ?


    D'avance, merci !

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    j'ai regardé ton code... qui peut être très largement optimisé (on verra ça plus tard).

    Mais d'abord, MONTRE le code de TRAITEMENT du formulaire (enregistrement en BDD).

    QUESTION(S) :
    1- Comment fais-tu pour :
    • différencier les lignes entre "utilisateur" et "lignes ajoutées" ??
    • différencier un "invité" d'un "collègue" ?
    • différencier les semaines ? (à chaque ligne, on a 2 <select> "type_Monday", "type_Tuesday",... puisqu'on a 2 semaines)

    2- Et les dates ?? (elles ne sont pas récupérées via le formulaire ? )

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 44
    Points : 29
    Points
    29
    Par défaut
    j'ai regardé ton code... qui peut être très largement optimisé (on verra ça plus tard).
    Je n'en doute pas un seul instant.

    Mais d'abord, MONTRE le code de TRAITEMENT du formulaire (enregistrement en BDD).
    C'est justement là tout mon problème. Je ne sais pas comment traiter un tableau entier à plusieurs lignes pour un envoi en base de données.
    Je sais comment faire un insert en base de données, faire un update, et faire cela depuis ma page PHP, mais je ne sais pas comment relier la colonne 2 de ma ligne 2 (menu normal) avec la colonne 2 de ma ligne 1 (19/08/2019).
    Est-ce que cela fonctionne comme un tableau à double entrée, et donc ici InsTable[0][1] contient le nom de l'utilisateur ?

    QUESTION(S) :
    1- Comment fais-tu pour différencier :
    les lignes entre "utilisateur" et "lignes ajoutées" ??
    un "invité" d'un "collègue" ?
    A terme, quand on rajoutera une ligne, il y aura une recherche ldap pour rechercher un collègue (et du coup, on aura nom.prenom) ou alors un nom standard (Invité / Invité 2 / Invité 3) si j'invite quelqu'un.
    La première ligne sera toujours la ligne de la personne qui est connectée, et dont j'ai le nom dans la variable $user, et l'ordre des suivantes n'a pas d'importance.

    2- Et les dates ?? (elles ne sont pas récupérées via le formulaire ? )
    Si, quand j'aurais compris comment gérer le tableau pour faire une requête PHP=>SQL.

    différencier les semaines ? (à chaque ligne, on a 2 <select> "type_Monday", "type_Tuesday",... puisqu'on a 2 semaines)
    Ah, ben là, je pense que ce n'est pas bon, du coup. Donc il faut que je trouve un moyen de rajouter un indice différent pour les deux type.
    A la base, j'avais un for pour la semaine courante, un for pour la semaine suivante, et j'ai finalement mis les deux dans le même for. Du coup, c'est peut-être mieux de les scinder à nouveau, pour pouvoir différencier les select.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Je crois que tu ne sais pas TRAITER un formulaire en PHP, je me trompe ?...

    Le "tableau" (<table>) et sa structure (cellule x colonne y) n'est pas récupérable au moment du traitement.

    Ici, les seules données que tu vas récupérer, ce sont les <select>, grâce à $_POST['type_Monday'], $_POST['type_Tuesday'],.......
    • qui sont tous des array... (OK)
    • mais qui ne permettent pas de différencier, ni la ligne (utilisateur ? invité ?), ni la semaine (semaine 1 ou 2 ?)


    C'est donc au niveau de la <table>, et dans le name des <select>, qu'il faut différencier les lignes et colonnes dates.



    BON....
    Je suis en train de TOUT ré-écrire... (HTML, PHP et JS !)
    Dernière modification par Invité ; 21/08/2019 à 18h45.

  16. #16
    Invité
    Invité(e)
    Par défaut
    1- Voilà ce que ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    <?php if( empty(session_id()) ){ session_start(); }
    header('Content-type:text/html; charset=UTF-8');	// encodage UTF-8
    error_reporting(E_ALL); 	// en TEST !!
    // -----------------------------------------------
     
     
    // METTRE ICI TOUT le code de :
    // - autentification user (parametres de connexion du serveur AD, Connexion au serveur LDAP, .......)
    // - connexion à la BDD avec PDO (.......)
     
     
    // -----------------------------------------------
    $user_nom = 'Damien';	// TEST
    $user_id = 'nom.damien';
    // -----------------------------------------------
    // array des dates du lundi au vendredi, pour la semaine en cours et la semaine suivante
    function get_array_dates_lundi_vendredi_sur2semaines()
    {
    	$dates = array();
    	$year = date('Y');	// cette année
    	$week = date('W');	// cette semaine
    	for( $i=1; $i<6; $i++ ) // 1 à 5 (lundi à vendredi) (0=dimanche)
    	{
    		$date = new DateTime();
    		$date->setISOdate($year, $week, $i);	// semaine en cours
    		$dates[] = $date->format('Y-m-d');
    		$date->setISOdate($year, $week+1, $i);	// semaine suivante
    		$dates[] = $date->format('Y-m-d');
    	}
    	sort($dates);
    	return $dates;
    }
    // -----------------
    $dates_array = get_array_dates_lundi_vendredi_sur2semaines();
    //var_dump( $dates_array );	// TEST
    // -----------------
    // Requête pour cet utilisateur, et ces dates
    $pdo_params = array();
    $pdo_params[':user_id'] = $user_id;
    $dates_list = array();
    foreach( $dates_array as $idx => $date ){
    	$pdo_params[':date'.$idx] = $date;
    	$dates_list[] = ':date'.$idx;
    }
    $dates_list = implode(',',$dates_list);	// chaine de la forme :date0,:date1,:date2,...
    // ---------
    $rech_query = "SELECT nom_id, nom, date, type_repas
    	FROM repas_pris
    	WHERE inscrit_par = :user_id
    	AND date IN (".$dates_list.")
    	ORDER BY date ASC;";
     
    try {
    	$pdo_select = $pdo->prepare($rech_query);
    	$pdo_select->execute($pdo_params);
    	$rech_rowAll = $pdo_select->fetchAll();	// récupère toutes les lignes
    } catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
    // ---------
    // on crée un array des types par date et par nom_id
    $nom_date_types	= array();
    $nom_date_types[$user_id]['nom'] = $user_nom;
    $nom_date_types[$user_id]['type'] = array();
    foreach( $rech_rowAll as $row )
    {
    	$nom_date_types[$row['nom_id']]['nom'] = $row['nom'];
    	$nom_date_types[$row['nom_id']]['type'][$row['date']] = $row['type_repas'];
    }
    // ---------
    // options pour les select (qui sont les mêmes partout)
    $option_types = array(
    	//0 => 'Non inscrit',
    	0 => '...',
    	1 => 'Menu Normal',
    	2 => 'Menu Alternatif'
    );
    // -----------------
    	var_dump( $_POST ); // TEST
    // -----------------
    ?>
    <!DOCTYPE html>
    <html>
     <head>
       <title>Inscription au Festin</title>
     
    	<script>
    	"use strict";
    	let num_ligne = <?php echo count($nom_date_types); ?>; // variable globale
     
    	function entierAleatoire(min, max)
    	{
    		return Math.floor(Math.random() * (max - min + 1)) + min;
    	}
     
    	// Fonction pour insérer une ligne en fin de tableau
    	function insererLigne_Fin()
    	{
    		let cell, ligne, input, select_modele, select, option, button;
     
    		// on récupère l'identifiant (id) de la table qui sera modifiée
    		let tableau = document.getElementById("InsTable");
    		ligne = tableau.insertRow(-1); // création d'une ligne pour ajout en fin de table
     
    		// création et insertion des cellules dans la nouvelle ligne créée
    <?php	// ---------
    		$col = 0;
    ?>
    		// ---------
    		// Première cellule : nom + nom_id
    		cell = ligne.insertCell(<?php echo $col; ?>);
     
    		// <input type="text"> permettant d'écrire le NOM de l'invité
    		input = document.createElement('input');
    		input.type = 'text';
    		input.name = 'nom['+num_ligne+']';
    		input.value = 'Invité '+num_ligne; // nom par défaut
    		cell.appendChild( input );
     
    		// <input type="hidden"> permettant d'IDENTIFIER l'invité (dans la table de la BDD)
    		input = document.createElement('input');
    		input.type = 'hidden';
    		input.name = 'nom_id['+num_ligne+']';
    		input.value = 'invite_<?php echo time(); ?>_'+entierAleatoire(1000, 9999); // IDENTIFIANT unique
    		cell.appendChild( input );
     
    		// ---------
    		// Cellules suivantes : jours
    		// on crée d'abord un <select> (modèle) avec <options> (qui sont les mêmes partout)
    		select_modele = document.createElement('select');
    <?php	// ---------
    		// construction dynamique des <option> depuis l'array $option_types
    		foreach( $option_types as $option_value => $option_type )
    		{
    ?>
    		option = document.createElement('option');
    		option.value = '<?php echo htmlspecialchars($option_value); ?>';
    		option.textContent = '<?php echo htmlspecialchars($option_type); ?>';
    		select_modele.appendChild( option );
     
    <?php	} ?>
    		// ---------
    		// on met un clone du <select> (modèle) avec <options> dans les cellules du tableau
    <?php	// ---------
    		// Pour chaque Date (= Cellule du tableau) dans l'array $dates_array
    		foreach( $dates_array as $date )
    		{
    			$col++;	// 1 à 10
    ?>
    		cell = ligne.insertCell(<?php echo $col; ?>);
    		select = select_modele.cloneNode(true);
    		select.name = 'type['+num_ligne+'][<?php echo $date; ?>]';
    		cell.appendChild( select );
     
    <?php	} 
    			$col++;	// 11
    ?>
    		// ---------
    		// Dernière cellule : X
    		cell = ligne.insertCell(<?php echo $col; ?>);
    		button = document.createElement('button');
    		button.type = 'button';
    		button.title = 'Supprimer la ligne';
    		button.textContent = 'X';
    		button.addEventListener	( // le bouton "X" supprime toute la ligne <tr>
    			//"click",(e) => { // (PAS compatible I.E. !)
    			"click", function(e){
    				tableau.children[1].removeChild(e.target.parentElement.parentElement); // tableau.children[1] = <tbody>
    				e.preventDefault();
    			}
    		);
    		cell.appendChild( button );
     
    		// ---------
    		num_ligne++; // on incrémente la variable globale
    	}
       </script>
     
    </head>
    <body>
     
       <section>
    	<form action="test.php" method="post">
     
    			<input type="hidden" name="inscrit_par" value="<?php echo $user_id; ?>" />
     
    	<table id="InsTable" border="1">
    	<thead>
    	<tr>
    		<th>Nom</th>
    <?php	// ---------
    		// On remplit la première ligne avec les jours des semaines courante et suivante
    		foreach( $dates_array as $date )
    		{
    ?>
    		<th>
    			<?php 
    			setlocale(LC_ALL, 'fr_FR'); // Dates en Français
    			echo utf8_encode(strftime('%A', strtotime($date))).'<br />'.utf8_encode(strftime('%#d %b %Y', strtotime($date))); 
    			?>
    		</th>
    <?php
    		}
    		// ---------
    ?>
    		<th>&nbsp;</th>
    	</tr>
    	</thead>
    	<tbody>
    <?php
    // ---------
    // Affichage
    $num_ligne = 0;
    foreach( $nom_date_types as $nom_id => $nom_date_type )
    {
    ?>
    	<tr>
    		<td>
    <?php 		if( $nom_id == $user_id ){ ?>
    			<?php echo $nom_date_type['nom']; ?>
    			<input type="hidden" name="nom[<?php echo $num_ligne; ?>]" value="<?php echo $nom_date_type['nom']; ?>" />
    <?php		} else { ?>
    			<input type="text" name="nom[<?php echo $num_ligne; ?>]" value="<?php echo $nom_date_type['nom']; ?>" />
    <?php		} ?>
    			<input type="hidden" name="nom_id[<?php echo $num_ligne; ?>]" value="<?php echo $nom_id; ?>" />
    		</td>
    <?php
    		foreach( $dates_array as $date )
    		{
    ?>
    		<td>
    			<select name="type[<?php echo $num_ligne; ?>][<?php echo $date; ?>]" size="1">
    <?php		// -----
    			foreach( $option_types as $option_value => $option_type )
    			{
    				$option_selected = ( isset($nom_date_type['type'][$date]) && $nom_date_type['type'][$date] == $option_value )? ' selected="selected"' : '';
    ?>
    				<option value="<?php echo $option_value; ?>"<?php echo $option_selected; ?>><?php echo $option_type; ?></option>
    <?php		} ?>
    			</select>
    		</td>
    <?php
    		}
    		// ---------
    		$num_ligne++;
    ?>
    		<td></td>
    	</tr>
    <?php
    }
    // ---------
    ?>
    	</tbody>
    	</table>
    	<p><button type="button" onclick="insererLigne_Fin();">+ Ajouter un invité</button></p>
    	<p><input type="submit" name="validerTableau" value="OK" /></p>
     
    	</form>
     
    	<p><a href="index.php">Revenir à la page de login</a></p>
     
       </section>
     
    </body>
    </html>
    2- Voilà ce que va renvoyer le formulaire ($_POST) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    array (size=4)
      'nom' => 
        array (size=3)
          0 => string 'Damien' (length=6)
          1 => string 'Invité 1' (length=9)
          2 => string 'Invité 2' (length=9)
      'nom_id' => 
        array (size=3)
          0 => string 'nom.damien' (length=10)
          1 => string 'invite_1566402376_3188' (length=22)
          2 => string 'invite_1566402376_6146' (length=22)
      'type' => 
        array (size=3)
          0 => 
            array (size=10)
              '2019-08-19' => string '0' (length=1)
              '2019-08-20' => string '0' (length=1)
              '2019-08-21' => string '1' (length=1)
              '2019-08-22' => string '2' (length=1)
              '2019-08-23' => string '0' (length=1)
              '2019-08-26' => string '1' (length=1)
              '2019-08-27' => string '0' (length=1)
              '2019-08-28' => string '0' (length=1)
              '2019-08-29' => string '0' (length=1)
              '2019-08-30' => string '0' (length=1)
          1 => 
            array (size=10)
              '2019-08-19' => string '0' (length=1)
              '2019-08-20' => string '1' (length=1)
              '2019-08-21' => string '0' (length=1)
              '2019-08-22' => string '0' (length=1)
              '2019-08-23' => string '0' (length=1)
              '2019-08-26' => string '0' (length=1)
              '2019-08-27' => string '0' (length=1)
              '2019-08-28' => string '0' (length=1)
              '2019-08-29' => string '0' (length=1)
              '2019-08-30' => string '0' (length=1)
          2 => 
            array (size=10)
              '2019-08-19' => string '0' (length=1)
              '2019-08-20' => string '0' (length=1)
              '2019-08-21' => string '0' (length=1)
              '2019-08-22' => string '0' (length=1)
              '2019-08-23' => string '2' (length=1)
              '2019-08-26' => string '0' (length=1)
              '2019-08-27' => string '0' (length=1)
              '2019-08-28' => string '0' (length=1)
              '2019-08-29' => string '0' (length=1)
              '2019-08-30' => string '0' (length=1)
      'validerTableau' => string 'OK' (length=2)
    3- On peut voir que les dates sont aussi récupérées, avec le "type" associé au jour.
    Les <select> se présentent ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="type[0][2019-08-21]" size="1">
    On les récupère TOUS avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date_type_array = $_POST['type']; // array
    4- On récupère aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $nom_array = $_POST['nom']; // array
    $nom_id_array = $_POST['nom_id']; // array
    5- Dans la table repas_pris, il faudra ajouter une colonne "nom_id" :

    • nom_id
    • nom
    • date
    • type_repas
    • inscrit_par

    Le "nom" serait :
    • 'Damien'
    • 'Invité 1' (modifiable dans le tableau)
    • 'Invité 2' (modifiable dans le tableau)

    Le "nom_id" permettrait d'IDENTIFIER les lignes (utilisateur et invités), et donc de les restituer correctement dans le tableau
    • 'nom.damien'
    • 'invite_1566400256_9842' (NON modifiable)
    • 'invite_1566400256_9818' (NON modifiable)
    Dernière modification par Invité ; 22/08/2019 à 10h06.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Traitement du $_POST :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <?php
    // -----------------
    if( isset($_POST['validerTableau']) )
    {
    //	var_dump( $_POST ); // TEST
    	// -----------------
    	$inscrit_par	= $_POST['inscrit_par']; // COMMUN à tous
    	// -----------------
    	$nom_array = $_POST['nom']; // array
    	$nom_id_array = $_POST['nom_id']; // array
    	$date_type_array = $_POST['type']; // array
     
    	// -----------------
    	// Requêtes - PREPARATION (AVANT les boucles foreach)
    	// 1- DELETE
    	$delete_query = "DELETE FROM repas_pris
    		WHERE nom_id = :nom_id
    		AND date = :date;";
    	try {
    		$pdo_delete = $pdo->prepare($delete_query);
    	} catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
    	// 2- INSERT
    	$insert_query = "INSERT INTO repas_pris
    		(nom_id, nom, date, type_repas, inscrit_par) 
    		VALUES
    		(:nom_id, :nom, :date, :type_repas, :inscrit_par) ;";
    	try {
    		$pdo_insert = $pdo->prepare($insert_query);
    	} catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
     
    	// -----------------
    	foreach( $nom_id_array as $idx => $nom_id )
    	{
    		$nom = $nom_array[$idx];
    		echo '<p>nom : '.$nom.' ('.$nom_id.')</p>';
    		foreach( $date_type_array[$idx] as $date => $type )
    		{
    			// 1- on va d'abord SUPPRIMER la ligne avec : même nom_id ET même date
    			try {
    				$pdo_delete->execute(array(
    					':nom_id' => $nom_id,
    					':date' => $date,
    					));
    			} catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
     
    			// 2- on n'INSERT QUE les dates où type != 0
    			if( !empty($type) )
    			{ 
    				echo '<p>date : '.$date.' - type : '.$type.'</p>'; 
    				// 2- on peut INSERER en BDD
    				try {
    					$pdo_insert->execute(array(
    						':nom_id' => $nom_id,
    						':nom' => $nom,
    						':date' => $date,
    						':type_repas' => $type,
    						':inscrit_par' => $inscrit_par,
    						));
    				} catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
    			}
    		}
    	}
    	// -----------------
    }
    ?>
    N.B. AVANT d'enregistrer les nouvelles lignes en BDD, il faut d'abord SUPPRIMER les anciennes (même nom_id, pour ces mêmes dates)
    Dernière modification par Invité ; 21/08/2019 à 18h50.

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 44
    Points : 29
    Points
    29
    Par défaut
    Oh ! Merci beaucoup !

    J'ai un peu de boulot maintenant pour déchiffrer, bien tout comprendre et tenter de comprendre pourquoi certains trucs ne marchent pas (la fonction de suppression de ligne, par exemple qui ne s'affiche pas).
    Il faut aussi que je modifie la requête, parce qu'en l'état, si ma collègue que j'ai inscrite se connecte, elle ne voit pas les données qui la concerne.

    Je me plonge là-dedans, certaines choses étant totalement nouvelles pour moi.

    Merci !

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par Helianza Voir le message
    ...(la fonction de suppression de ligne, par exemple qui ne s'affiche pas)...
    Il n'y a plus de fonction de suppression de ligne.

    Le code qui permet d'ajouter un évènement sur le bouton "X" est celui-ci :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		button.addEventListener	( // le bouton "X" supprime toute la ligne <tr>
    			//"click",(e) => { // (PAS compatible I.E. !)
    			"click", function(e){
    				tableau.children[1].removeChild(e.target.parentElement.parentElement); // tableau.children[1] = <tbody>
    				e.preventDefault();
    			}
    		);

    N.B. J'ai MODIFIE le script JS ce matin.
    Reprends-le depuis le message #16 : à copier-coller tel quel.
    Dernière modification par Invité ; 22/08/2019 à 10h07.

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 44
    Points : 29
    Points
    29
    Par défaut
    Oui, j'ai bien le bon code, mais IE me dit qu'il y a une erreur de syntaxe. Tandis que Chrome, lui, est d'accord.
    J'ai modifié le code comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    button.addEventListener	( // le bouton "X" supprime toute la ligne <tr>
    			"click",function(e)	{
    				tableau.children[1].removeChild(e.target.parentElement.parentElement); // tableau.children[1] = <tbody>
    				e.preventDefault();
    			}
    		);
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		button.addEventListener	( // le bouton "X" supprime toute la ligne <tr>
    			"click",(e) => {
    				tableau.children[1].removeChild(e.target.parentElement.parentElement); // tableau.children[1] = <tbody>
    				e.preventDefault();
    			}
    		);
    Est-ce que c'est correct ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. erreur bigint requete Employee.fdb via AdoDb
    Par jflebegue dans le forum Connexion aux bases de données
    Réponses: 7
    Dernier message: 04/01/2005, 11h03
  2. Formulaire d'inscription
    Par Gourouni dans le forum ASP
    Réponses: 6
    Dernier message: 02/12/2004, 16h28
  3. [ADODB]probleme de comprehension
    Par flogreg dans le forum ASP
    Réponses: 2
    Dernier message: 15/11/2004, 16h15
  4. Inscription dans un site ???
    Par fuXdas dans le forum Web & réseau
    Réponses: 2
    Dernier message: 04/10/2004, 21h53
  5. [VB6]ADODB Command, recuperer l'info d'un RollBack
    Par Mouse dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 19/05/2003, 16h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo