Page 1 sur 1

Checbox - BDD et Numérotation -- Urgent plz

Posté : 28 juil. 2005, 10:23
par Fr4nsou3
je vous explique, je développe mon formulaire avec Quickform mais ça fait tellement longtemps que je suis sur ce formulaire que j'ai oublié plein de trucs en PHP.

J'ai 2 questions :

Dans ce formulaire j'ai des cases à cocher dont le nom est secteur[]...
Quand je fais :

Code : Tout sélectionner

foreach ($_POST['secteur'] as $index => $val) { echo $index.' : '.$val; }
il m'affiche les différents secteurs.

Maintenant si je veux enregistrer ces résultats dans une base de données, comment je fais?

Parce qu'en fait, j'ai une table ou sont répertoriées toutes les coordonnées de la personne qui s'inscrit, dans laquelle elle est classé grace à la valeur NUM_ADRESSE et une autre table ou on retrouve juste NUM_ADRESSE et COD_SECTEUR.

Ce que je voudrais c'est que s'il par exemple l'utilisateur choisi le secteur 1 et le 2, que cela enregistre dans la base

Code : Tout sélectionner

NUM_ADRESSE : 00001 COD_SECTEUR : 1 et NUM_ADRESSE : 00001 COD_SECTEUR : 2
Autre question concernant le NUM_ADRESSE : comment je fais pour qu'à chaque nouvel entregistrement, il vérifie le NUM_ADRESSE de la personne qui s'est inscrite avant pour que les numéros se suivent... ex : la 1ere personen qui s'inscrit portera le NUM_ADRESSE : 00001 et la deuxieme le 00002.

Merci
J'ai mis ça dans débuter parce qu'a part du Quickform, je sais plus rien faire

Posté : 28 juil. 2005, 10:36
par mere-teresa
Maintenant si je veux enregistrer ces résultats dans une base de données, comment je fais?
Tu construis une requête INSERT dans ta boucle et tu insères à chaque fois les données, ou bien tu ajoutes à chaque tour de boucle des données à insérer à la fin de ta requête (en concaténant avec .=)
comment je fais pour qu'à chaque nouvel entregistrement, il vérifie le NUM_ADRESSE de la personne qui s'est inscrite avant pour que les numéros se suivent... ex : la 1ere personen qui s'inscrit portera le NUM_ADRESSE : 00001 et la deuxieme le 00002.

Il va falloir récupérer le numéro précédent. Donc tu dois récupérer le numéro le plus grand de la table (ORDER BY permet de classer par ordre croissant ou décroissant et LIMIT permet de ne sélectionner qu'un seul résultat) et l'incrémenter de 1.

Posté : 28 juil. 2005, 11:08
par Fr4nsou3
mettre le insert dans la boucle, ça devrait aller, maintenant pour incrémenter la valeur, ça va etre dur...

il faudrait faire ça :

Code : Tout sélectionner

SELECT NUM_ADRESSE FROM sg_adresse ORDER BY NUM_ADRESSE
mais apres comment récupérer la plus petite valeur?

Merci Mere thérésa

Posté : 28 juil. 2005, 11:15
par mere-teresa
Il va falloir récupérer le numéro précédent. Donc tu dois récupérer le numéro le plus grand de la table (ORDER BY permet de classer par ordre croissant ou décroissant et LIMIT permet de ne sélectionner qu'un seul résultat) et l'incrémenter de 1.

Posté : 28 juil. 2005, 11:21
par pjl
Tu as aussi les fonctions SQL MIN et MAX.

Posté : 28 juil. 2005, 13:22
par Invité
ok...

Maintenant, dernier prob... ça se complique pas mal...enfin pour moi en tout cas.

J'ai un formulaire en plusieurs étapes, qui change d'étapes a chaque bouton submit...toutes ces étapes se trouve dans le même fichier php...je récupère les valeur POST à chaque changement d'étapes pour finalement envoyer toutes mes valeurs dans ma derniere étape en "hidden" qui seront traités dans un autre fichier php.

Les secteurs sont une de ces étape et malheureusement pour moi, pas la derniere... ce qui fait que je dois les récupéré avant et donc avoir un systeme qui me permet de les récupérer grace à une variable qui s'incrémenterai...

est-ce que quelqu'un pourrait m'aider...si vous ne trouvez pas ce que je viens d'écrire assez claire, faites moi le savoir.

Posté : 28 juil. 2005, 13:57
par Fr4nsou3
ok...

Maintenant, dernier prob... ça se complique pas mal...enfin pour moi en tout cas.

J'ai un formulaire en plusieurs étapes, qui change d'étapes a chaque bouton submit...toutes ces étapes se trouve dans le même fichier php...je récupère les valeur POST à chaque changement d'étapes pour finalement envoyer toutes mes valeurs dans ma derniere étape en "hidden" qui seront traités dans un autre fichier php.

Les secteurs sont une de ces étape et malheureusement pour moi, pas la derniere... ce qui fait que je dois les récupéré avant et donc avoir un systeme qui me permet de les récupérer grace à une variable qui s'incrémenterai...

est-ce que quelqu'un pourrait m'aider...si vous ne trouvez pas ce que je viens d'écrire assez claire, faites moi le savoir.
Ouais donc, je vous mets un bout de code pour que vous voyez un peu
if ($etape==2){
      genereEntete("Inscription - Etape 2/5"); 
      connection('127.0.0.1', 'Fr4nsou3', 'ii', 'mailinglist');
      $form = new HTML_QuickForm('formstep2', 'post');
      $form->addElement('header','EnTete','Etape 2 - Communiqués de Presse 1/2');
      $renderer =& $form->defaultRenderer();
      $renderer->setHeaderTemplate("<tr><td class='header2' colspan='4'><b>{header}<br /></b></td></tr>");
      $spe3="<tr><td></td><td>{element} ";
      $spe4=" {element}</td></tr>";
      $spe2="<tr><td align='right' valign='top'><b>{label}</b></td><td valign='top' align='left'>{element} <a onmouseover="javascript:mouseOver('untitled.jpg',300,150)" onmouseout="javascript:mouseOut()"><img src="question2.gif" alt='aide'><img src="aide.jpg" alt="aide2"></a><br></td></tr>"; //utile pour l'aide qui s'affiche, voir function.js
      $spe = "<tr><td align='right' valign='top'><b>{label}</b></td><td valign='top' align='left'><div class="endessous">{element}</div><br /></td></tr>";
      $form->addElement('html', '<tr><td colspan=\'2\'><b>Vous souhaitez recevoir nos communiqués de presse par :</b></td></tr>');
      $form->addElement('radio', 'communiques', '', 'Fax', 'fax');
      $form->addElement('radio', 'communiques', '', 'Courrier électronique (e-mail)', 'mail'); 
      $form->addElement('radio', 'communiques', '', 'Je ne souhaite pas recevoir vos communiqués de presse', 'non');                         
      $form->addElement('html', '<tr><td>&nbsp;</td></tr><tr><td colspan=\'2\'><b>Selectionnez vos centres d\'intérêts : </b></td></tr>');                         
      $paysSelect = & $form->addElement('select', 'grouppays', 'Groupe Pays : ');
      $paysSelect->load($result);
      $paysSelect->loadQuery($dsn, 'SELECT * FROM `sg_group_pays`', 'NOM_GROUP_PAYS', 'COD_GROUP_PAYS');
      connection('127.0.0.1', 'Fr4nsou3', 'ii', 'mailinglist');
      $req=mysql_query('SELECT * FROM `sg_objectif`');
      while($secteur = mysql_fetch_array($req)){
          $i+=1;
          $form->addElement('html', "<tr><td><b>$titresecteur</b></td><td align='left'><input type='checkbox' name='secteur[]' value='".$secteur['COD_OBJECTIF']."'> ".$secteur['NOM_OBJECTIF']."</td></tr>") ;
          $titresecteur='';
      } 
      $renderer->setElementTemplate($spe2,'grouppays');
      $renderer->setElementTemplate($spe,'organisme');
      $renderer->setElementTemplate($spe,'langue');    
      $form->addRule('communiques', 'Vous devez choisir si vous désirez recevoir nos communiqués de presse', 'required','','client');
      $form->addElement('html', '<input type="hidden" name="etape" value="3">');
      $form->addElement('reset', 'bouton_clear', 'Effacer', 'class=\'button\'');
      $form->addElement('submit', 'bouton_effacer', 'Etape 3 -->', 'class=\'button\'');
      $form->setRequiredNote('<span style="color: #ff0000">*  </span> champs obligatoires');
      $form->setJsWarnings('Erreur de saisie','Veuillez corriger');
      $renderer->setElementTemplate($spe3,'bouton_clear');
      $renderer->setElementTemplate($spe4,'bouton_effacer');
      $form->display();
      genereFin();
      $_SESSION['nom']=$_POST['nom'];
      $_SESSION['prenom']=$_POST['prenom'];
      $_SESSION['organisme']=$_POST['organisme'];
      $_SESSION['autrorga']=$_POST['autrorga'];
      $_SESSION['adresse']=$_POST['adresse'];
      $_SESSION['email']=$_POST['email'];
      $_SESSION['codepostal']=$_POST['codepostal'];
      $_SESSION['ville']=$_POST['ville'];
      $_SESSION['pays']=$_POST['pays'];
      $_SESSION['telephone']=$_POST['telephone'];
      $_SESSION['fax']=$_POST['fax'];
  }
  
  if ($etape==1){                                
      genereEntete("Inscription - Etape 1/5"); 
      connection('127.0.0.1', 'Fr4nsou3', 'ii', 'mailinglist');
      $form = new HTML_QuickForm('formstep1', 'post');
      $renderer =& $form->defaultRenderer();
      $form->addElement('header','EnTete','Etape 1 - Vos coordonnées');
      $renderer->setHeaderTemplate("<tr><td class='header2' colspan='4'><b>{header}</b></td></tr>");
      $spe1="<tr><td></td><td>{element} ";
      $spe2=" {element}</td></tr>";
      $form->addElement('text', 'nom', ' Nom : '); //nom
      $form->addElement('text', 'prenom', ' Prénom : '); //prénom
      $form->addElement('html', "<tr><td align='right' valign='top'><b>Vous êtes :</b></td>
          <td valign='top' align='left'><select name='organisme' onChange='afficherAutre()'>
          <option value='1'>Un organisme de presse</option>
          <option value='2'>Un particulier</option>
          <option value='3'>Une Organisation Non Gouvernementale</option>
          <option value='4'>Autre</option>
      </select><br> 
      <tr><td align='right'><span id=autre style="display: none"><b> Autre :</b><br /></span></td><td>
      <input type="text" id="mots" name="autrorga" style="display: none"></td></tr>"); //organisme, voir function.js
      $form->addElement('text', 'email', ' E-mail : ');// E-mail
      $form->addElement('text', 'adresse', ' Adresse : '); // Adresse
      $form->addElement('text', 'codepostal', ' Code postal : '); //Code postale
      $form->addElement('text', 'ville', ' Ville : '); //ville
      $paysSelect = & $form->addElement('select', 'pays', ' Pays :'); //Pays
      $paysSelect->load($result);
      $paysSelect->loadQuery($dsn, 'SELECT * FROM `sg_pays`', 'NOM_PAYS', 'COD_PAYS'); //Pays, directement de la base de données
      $form->addElement('text', 'telephone', ' Téléphone : '); //téléphone
      $form->addElement('text', 'fax', 'Fax : ');   //fax
      $form->addElement('html', '<input type="hidden" name="etape" value="2">');
      $form->addRule('prenom', 'Vous devez saisir un prenom', 'required','','client'); //champs requis, si non rempli, alerte JavaScript
      $form->addRule('nom', 'Vous devez saisir un nom', 'required','','client');
      $form->addRule('adresse', 'Vous devez saisir une adresse', 'required','','client');
      $form->addRule('codepostal', 'Vous devez saisir un code postal', 'required','','client');
      $form->addRule('ville', 'Vous devez saisir une ville', 'required','','client');
      $form->addRule('email', 'Vous devez saisir une adresse de courrier électronique', 'required','','client');
      $form->addRule('telephone', 'Veuillez entrez un numéro de téléphone valide', 'numeric', '', 'client');
      $form->addRule('fax', 'Veuillez entrez un numéro de Fax valide', 'numeric', '', 'client');
      $form->applyFilter('nom','trim') ; //enlève les espace à la fin
      $form->applyFilter('prenom','trim') ;
      $form->setRequiredNote('<span style="color: #ff0000">*  </span> champs obligatoires');
      $form->setJsWarnings('Erreur de saisie','Veuillez corriger');
      $form->addElement('reset', 'bouton_clear', 'Effacer', 'class=\'button\'');
      $form->addElement('submit', 'bouton_effacer', 'Etape 2 -->', 'class=\'button\'');
      $renderer->setElementTemplate($spe1,'bouton_clear');
      $renderer->setElementTemplate($spe2,'bouton_effacer');
       
       if ($form->validate()) {
       	echo "Toutes les règles sont respectées<br>";
  	}
       else {
      	$form->display();
  	}
      genereFin();
  }
EDIT : Ouais, désolé pour le double post mais j'avais commencé le message et quand j'ai fini le message et que je l'ai envoyé, j'étais plus loggué.

Posté : 28 juil. 2005, 14:43
par mere-teresa
Modération : Clique sur éditer (petit bouton à droite, en haut de ton message) et mets des balises PHP au lieu de Code autour de ton code, et il sera en couleurs !

Posté : 29 juil. 2005, 09:48
par Fr4nsou3
J'ai édité mon message précédent... merci pour votre aide

Posté : 29 juil. 2005, 13:57
par Invité
je comprends pas très bien ce que tu veux? Tu peux être un peu plus clair

Posté : 29 juil. 2005, 14:04
par Fr4nsou3
Alors,

J'ai des checkbox dans mon formulaire...elle s'appelle toute secteur[], ce qui fais que plusieurs choix sont possibles.

Maintenant, ce que je voudrais exactement c'est une fonction ou un petit script qui me fasse qu'a chaque secteur choisi, une variable, prenne la valeur d'un secteur...

Exemple :
Si l'utilisateur choisi comme secteur "Environnement" et "Energie" et "Trannsport", je voudrais avoir quelque chose qui ressemble à ça
$secteur1 = "Energie"
$secteur2 = "Environnement"
$secteur3 = "Transport"
et ainsi de suite, afin de pouvoir les envoyer à la fin de toutes les étapes a un fichier php qui traitera le formulaire et pourra enregistrer chacune des valeurs dans la base de données...

pour arriver à ça :

Code : Tout sélectionner

NUM_ADRESSE : 00001 COD_SECTEUR : ENER NUM_ADRESSE : 00001 COD_SECTEUR : TRAN NUM_ADRESSE : 00001 COD_SECTEUR : ENV
Au fait, merci encore Mère thérésa, j'ai réussi avec l'incrémentation du num_adresse ;)