Variable en non de champs

Fermé
delaville81 Messages postés 195 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 2 juin 2024 - 25 nov. 2013 à 16:51
Xavierdu34 Messages postés 216 Date d'inscription lundi 2 décembre 2013 Statut Membre Dernière intervention 10 octobre 2016 - 2 déc. 2013 à 08:10
Chers confrères,
Je sollicite votre aide en PHP.
J'ai créer un suivi de règlements de cotisations.
Pour pouvoir gérer plusieurs années, j'ai utilisé un tableau années.
Ma requête d'insert récupère le même tableau.
mon problème et que j'aimerais utilisé ma variable tableau comme nom de champs dans ma requête d'insert.
//////////////////////////////////////////////
//Il y a au dessus le </table> le <tr> ma requête SELECT
$tab_annee = array("2013","2014","2015","2016","2017","2018","2019","2020");
			
			for($j=0;$j<count($tab_annee);$j++){
				
			$annea = 'a'.$tab_annee[$j]; 
			$channeea = '$a'.$tab_annee[$j];
			
			if ($row[$annea]==1)
			{
			?>
				<td align="center" BGCOLOR="green">
				<input type='checkbox' name='<?php echo $annea; ?>[]' value='<?php echo $var['id']."-0";?>' <?php ($channeea==1?"checked":"")?> />
				</td>	
			<?php
			}else{			
			?>
				<td align="center" BGCOLOR="red">
				<input type='checkbox' name='<?php echo $annea; ?>[]' value='<?php echo $var['id']."-1";?>'  <?php ($channeea==1?"checked":"")?> />	
				</td>								
			<?php
			}
			}

//L'insert

for($h=0;$h<count($tab_annee);$h++){
			 
			$annea = 'a'.$tab_annee[$h]; 
			

			echo '<br />'.$tab_annee[$h].' : '.count($_POST[$annea]).'<br />';
			
			if(count($_POST[$annea]) > 0); 
			{
			$sql = "INSERT INTO cotisation (id_user,date,".$annea.")
			values (:id_user,:date,:".$annea.")";
			
			echo $sql.'<br />';
	     	//$stmt=$pdo->prepare($sql); 
			
				for($i=0;$i<count($_POST[$annea]);$i++)
					{ 
						$id_user	= $_POST[$annea][$i];
						$id_ckeck 	= explode("-",$id_user);
						$user_id 	= $id_ckeck[0];
						$check  	= $id_ckeck[1];
						$datedujour	= "2013-11-22";
						//secho $user_id.' - '.$check.'<br />';
					
					echo '<br />'.$user_id.' - '.$datedujour.' - '.$check.'<br />';
					//exécution de l'insert
					$nb = $stmt->execute(array(':id_user'=>$id_user,':date'=>$datedujour, "C'est ici que je ne sais pas quoi et comment l'écrire"=>$check));	




Comment faire pour que ma variable $annea soit comme nom de champs.
a2013, a2014, a2015 dans mon execute.

Merci d'avance


4 réponses

mpmp93 Messages postés 6648 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 340
25 nov. 2013 à 16:57
Bonjour,

Sincèrement votre solution n'est pa sviable.

Une table par année, c'est une hérésie!

rajoutez une colonne année et filtrez par année. mySQL est assez costaud pour encaisser des requêtes sur des centaines de milliers d'enregistrements si c'est bien indexé.

Cordialement
0
delaville81 Messages postés 195 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 2 juin 2024
25 nov. 2013 à 17:18
Merci de ta réponse.

Tu me dis de rajouter un colonne année, elle existe déjà.
Je ne vois pas d'autres solutions pour pouvoir si j'ai besoin rajouter des années facilement

Si tu as une méthode à me conseiller, je suis preneur.

Merci
0
mpmp93 Messages postés 6648 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 340
Modifié par mpmp93 le 25/11/2013 à 20:57
En BDD (Base de Données), une colonne = 1 champ.

Vous créez un champ "ANNEE" sur 4 caractères et vous mettez le millésime de l'année: 2013 pour l'année en cours.

Le même gars y fait quéque chose en 2014, on met 2014. On fait pas une colonne 2014!!!!

Zé puis dans vot'listing:


$id_user = $_POST[$annea][$i];

un id de user c'est un numéro séquentiel, pas une valeur calculée.

Je vous conseille très sérieusement de vous pencher sur:
- les fonctions de gestion de date en PHP
- les champs type DATE et DATETIME en SQL. On fait des trucs ultra-formidables en 2 lignes.

A+
0
delaville81 Messages postés 195 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 2 juin 2024
26 nov. 2013 à 14:22
Petite précision,
Dans le code que j'ai mis, ce n'est pas la fiche d'un adhérent mais c'est la liste de tous les adhérents.

C'est là que j'ai un problème

Le code depuis le début
$sql = 'SELECT adherent.id, nom, prenom
			FROM adherent
			ORDER BY nom		
			';
		
		//exex requete
		$pdo->exec('SET NAMES utf8');
		$resultat = $pdo->query($sql);
		$num = 0;
		
		
		//on boucle
		while($var = $resultat->fetch()){
			
			$id_ad = $var['id'];
			
			
			echo "<tr align=\"left\" bgcolor=\""; echo switchcolor(); echo "\">\n";
			echo '<td align=\'center\' height="25">' .(++$num).'</td>';
			echo '<td>  ' .stripcslashes($var['nom']).'</td>';
			echo '<td>  ' .stripcslashes($var['prenom']).'</td>';
			
			
			//requet sur cotisation
			$req = 'SELECT id_user,a2013,a2014,a2015,a2016,
			adherent.id, adherent.nom,adherent.prenom
			FROM cotisation
			INNER JOIN adherent ON  id_user	= "'.$id_ad.'"		
			';
			$pdo->exec('SET NAMES utf8');
			$res = $pdo->query($req);
			$row = $res->fetch();
			


ensuite mon tab_année
0
Xavierdu34 Messages postés 216 Date d'inscription lundi 2 décembre 2013 Statut Membre Dernière intervention 10 octobre 2016 21
2 déc. 2013 à 08:10
au risque de dire une connerie, il se fait tard ... ou tôt...
$nb = $stmt->execute(array(':id_user'=>$id_user,':date'=>$datedujour, $annea=>$check));

ça ne fonctionne pas ça ?
0