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 :

Traitement des données sur une checkbox - Formulaire [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 93
    Par défaut Traitement des données sur une checkbox - Formulaire
    Bonjour à tous,

    J'ai créé un formulaire avec trois tables :
    - une table formulaire (avec un id, un nom, ...),
    - une table intermédiaire nommée siteformulaire (avec id_formulaire et id_site)
    - une table site (qui contient un id et un nom), cette dernière étant reliée à une checkbox de mon formulaire.

    Je souhaite effectuer une requête qui met à jour automatiquement les champs de la checkbox par rapport aux données dans la table site.
    Exemple : si dans la table site, il y a deux noms affectés, il sera affiché dans le formulaire deux cases checkbox avec leur nom.

    Je souhaite obtenir le résultat suivant dans la table site formulaire :

    * Si un utilisateur rentre deux données, on aura le résultat suivant :
    - id_formulaire = 1 id_site = 1 (=>"Internet")
    - id_formulaire = 1 id_site = 2 (=>"Presse")

    * Si un deuxième utilisateur rentre ses données, on aura le résultat suivant :
    - id_formulaire = 2 id_site = 2 (=>"Presse")
    - id_formulaire = 2 id_site = 3 (=>"Autres")

    De plus je souhaiterais pouvoir afficher les noms affectés à la checkbox lorsque l'utilisateur coche telle ou telle case de la checkbox.

    J'ai essayé de convenir à cet objectif sans pouvoir y parvenir. Voici mon 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
    //Partie formulaire
     
    		<tr>
    			<td width="250"><label for="site[]">Comment avez vous connu le site ?</label></td>
    			<td>
     
    			<?php foreach($aSitesForm as $iSite => $sSite){ ?>
    				<input type="checkbox" name="site[]" value="<?php echo $iSite; ?>" /> <label><?php echo $sSite; ?></label>
    			<?php } ?>
     
    			</td>
    		</tr>
     
    //_______________________________________________________
     
     
    //Partie requête
     
    		    $sql = "INSERT INTO formulaire(id, nom, prenom, adresse, code_postal, ville, telephone, fax, email, client, devis, contact) 
    		    VALUES('','$nom','$prenom','$adresse','$code_postal','$ville','$telephone','$fax','$email', '$client', '$devis', '$contact')";
     
       			mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
     
        		$id_formulaire = mysql_insert_id();// on récupère l'id_formulaire qui vient d'être généré
     
    		if(is_array($aSite)){ // table site
    		foreach($aSite as $iSite){
     
    	        $sql = "INSERT INTO siteformulaire(id_formulaire, id_site) VALUES ('$id_formulaire','$iSite')";
    	        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
     
    			}
     
     
    		}
     
    		$sSQL = "SELECT * FROM site ORDER BY n_site";  
    		$qSite = mysql_query($sSQL);
     
    		$aSitesForm = array(); // table siteformulaire
    	while($aSite = mysql_fetch_assoc($qSite)){  // recherche id et nom trouvé dans la table site
     
    		//$aSite=array($iSite=>$sSite);
    		$aSitesForm[$aSite['id']] = $aSite['n_site']; // lie id avec nom de la table site
     
    		}
     
     
    //____________________________________
     
     
    //Partie affichage
     
        	echo '<b>Vous connaissez le site :</b><ul>';
     
        foreach($aSitesForm as $iSite){ //on insère pour chaque id_site
     
        	echo '<li>'.$aSitesForm[$iSite].'</li>';
        }
        	echo '</ul><br />';
    N'hésitez pas à me faire part de vos remarques.

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    il faut dire que tu nous compliques la vie :
    - appeler tes tables (de la BdD) "site" et "formulaire", avec des identifiants id_site et id_formulaire,
    - avoir plusieurs formulaires (<form> donc) ... identifiés ... id="id-formulaire" (?)
    - ($aSitesForm as $iSite => $sSite) - <... name="site[]" .....
    - ($aFormsForm as $iForm => $sForm) - <... name="form[]" .....

    Bref, ca sent les quiproquo (quiproqui ?) à gogo !
    Dernière modification par Invité ; 06/08/2011 à 11h04.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 93
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,
    il faut dire que tu nous compliques la vie :
    - appeler tes tables (de la BdD) "site" et "formulaire", avec des identifiants id_site et id_formulaire,
    - avoir plusieurs formulaires (<form> donc) ... identifiés ... id="id-formulaire" (?)
    - ($aSitesForm as $iSite => $sSite) - <... name="site[]" .....
    - ($aFormsForm as $iForm => $sForm) - <... name="form[]" .....

    Bref, ca sent les quiproquo (quiproqui ?) à gogo !
    Bonjour,

    Un seul formulaire est géré. Il y a bien un formulaire complet mais je n'ai repris que la partie checkbox.
    La table formulaire de ma bdd fait référence à tous les champs du formulaire qui sont de type texte (ou similaire).
    La table site fait également partie du formulaire (en référence aux données de la checkbox "Comment avez vous connu ce site ?") mais comme il s'agit de données de type tableau je l'ai lié à la table formulaire avec une table intermédiaire nommée site formulaire. Cette dernière a un id_formulaire qui renseigne l'id de la table formulaire et un id_site qui renseigne l'id de la table site.
    Lorsqu'il y a un "a", un "s" ou un "i" devant le "$" d'une clé, d'une valeur, ... cela fait référence eu type de ces données ("a" pour array, "i" pour integer et "s" pour string).

    S'il y a d'autres points qui vous paraissent peu clairs, dites le moi merci.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Un quiproquo est un malentendu survenu au cours d'un échange de paroles.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 93
    Par défaut
    Bonjour à tous,

    Pour en revenir au code que j'ai effectué (et qui marchait) juste avant celui présenté au dessus, le voici...


    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
     
     
    <?php 
    include ("configuration.php");// connexion à la base de données
     
     
    	//déclaration des variables à poster dans le formulaire
    	$id=$_POST['id'];
    	$nom=$_POST['nom'];
    	$prenom=$_POST['prenom'];
    	$adresse=$_POST['adresse'];
    	$code_postal=$_POST['code_postal'];
    	$ville=$_POST['ville'];
    	$telephone=$_POST['telephone'];
    	$fax=$_POST['fax'];
    	$email=$_POST['email'];
    	$client=$_POST['client'];
    	$aSite=$_POST['site'];
    	$aDemande=$_POST['demande'];
    	$devis=$_POST['devis'];
    	$contact=$_POST['contact'];
     
     
    	//************* AFFICHAGE DES DONNEES SUITE A LA SAISIE DU FORMULAIRE ******************
     
        echo "Bonjour !"."</br>"."</br>";
     
        if (isset($nom) && isset($prenom) && isset($adresse) && isset($code_postal) && isset($ville) && isset($telephone) && isset($fax) 
        && isset($email) && isset($client) && isset($aSite) && isset($aDemande) && isset($devis) && isset($contact)){
     
        // VOS COORDONNEES
     
        echo "Vous vous appelez " .$nom. " ".$prenom. " !"."</br>";
    	echo "Votre adresse est " .$adresse. " ".$code_postal. " ".$ville. " !"."</br>";
    	echo "Votre téléphone est ".$telephone. " !"."</br>";
    	echo "Votre fax est ".$fax. " !"."</br>";
    	echo "Votre email est ".$email. " !"."</br>";
     
    	// VOS INFORMATIONS
     
     
    	if ($client!="Oui")
    	echo "Vous n'êtes pas un client de l'entreprise"."</br>";
    	else echo "Vous êtes un client de l'entreprise"."</br>";
     
    			$sSQL = "SELECT n_site FROM site ORDER BY n_site" ;
    			$qSite = mysql_query($sSQL);
     
        echo '<b>Vous connaissez le site :</b><ul>';
     
        foreach($aSite as $n_site){
        	$aData = mysql_fetch_assoc($qSite);
            echo '<li>'.$aData['n_site'].'</li>';
        }
        echo '</ul><br />';
     
        		$sSQL = "SELECT n_demande FROM demande ORDER BY n_demande" ;
    			$qDemande = mysql_query($sSQL);
     
        echo '<b>Votre demande de site :</b><ul>';
     
        foreach($aDemande as $n_demande){
        	$aData = mysql_fetch_assoc($qDemande);
            echo '<li>'.$aData['n_demande'].'</li>';
        }
        echo '</ul><br />';
     
        //VOS OPTIONS
     
        if ($devis!="Oui")
    	echo "Vous ne souhaitez pas effectuer de demande de devis"."</br>";
    	else echo "Vous avez effectué une demande de devis"."</br>";
     
    	if ($contact!="Oui")
    	echo "Vous ne souhaitez pas effectuer de demande de contact"."</br>";
    	else echo "Vous avez effectué une demande de contact"."</br>";
     
        echo "</br></br>"."Vos données ont été envoyées au webmaster !"; 
        }
        else{
        echo "Vous n'avez pas rempli tous les champs !"."</br>";
        echo "Vos données n'ont pu être envoyées au webmaster !"; 
        }
     
    		//**************************** ENVOI DES DONNEES DANS LA BASE **************************
     
        $sql = "INSERT INTO formulaire(id, nom, prenom, adresse, code_postal, ville, telephone, fax, email, devis, contact) 
        VALUES('','$nom','$prenom','$adresse','$code_postal','$ville','$telephone','$fax','$email', '$devis', '$contact')";
        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
     
      	$id_formulaire = mysql_insert_id();// on récupère l'id_formulaire qui vient d'être généré
     
    	if(isset($aSite)){
    		foreach($aSite as $n_site){
     
           $sql = "INSERT INTO siteformulaire(id_formulaire, id_site) VALUES ('$id_formulaire','$n_site')";
            mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
     
    			}
    			echo "<pre>";
        	print_r($aSite);
        	echo "</pre>";
        	die();
     
    		}
     
    		if(isset($aDemande)){
    			foreach($aDemande as $n_demande){
     
    		$sql = "INSERT INTO demandeformulaire(id_formulaire, id_demande) VALUES ('$id_formulaire','$n_demande')";
            mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
     
    			}
    		}
     
    ?>
     
     
    <form method="post" action="essai.php">
     
     
    	<fieldset style="margin:50px">
    	<legend><b>Vos coordonnées</b></legend>
    	<table>
    		<tr>
    			<td width="220"><label for="nom">Nom :</label></td>
    			<td><input type="text" name="nom" value="<?php if(isset($nom)){htmlentities($nom, ENT_QUOTES);}?>"/></td>
    		</tr>
     
    		<tr>
    			<td width="220"><label for="prenom">Prénom :</label></td>
    			<td><input type="text" name="prenom" value ="<?php if(isset($prenom)){htmlentities($prenom, ENT_QUOTES);}?>"/></td>
    		</tr>
     
    		<tr>
    			<td width="220"><label for="adresse">Adresse :</label></td>
    			<td><input type="text" name="adresse" value ="<?php if(isset($adresse)){htmlentities($adresse, ENT_QUOTES);}?>"/></td>
    		</tr>
     
    		<tr>
    			<td width="220"><label for="code_postal">Code postal :</label></td>
    			<td><input type="text" name="code_postal" value="<?php if(isset($code_postal)){htmlentities($code_postal, ENT_QUOTES);}?>"/></td>
    		</tr>
     
    		<tr>
    			<td width="220"><label for="ville">Ville :</label></td>
    			<td><input type="text" name="ville" value="<?php if(isset($ville)){htmlentities($ville, ENT_QUOTES);}?>"/></td>
    		</tr>
     
    		<tr>
    			<td width="220"><label for="telephone">Téléphone :</label></td>
    			<td><input type="text" name="telephone" value="<?php if(isset($telephone)){htmlentities($telephone, ENT_QUOTES);}?>"/></td>
    		</tr>
     
    		<tr>
    			<td width="220"><label for="fax">Fax :</label></td>
    			<td><input type="text" name="fax" value="<?php if(isset($fax)){htmlentities($fax, ENT_QUOTES);}?>"/></td>
    		</tr>
     
    		<tr>
    			<td width="220"><label for="email">Email :</label></td>
    			<td><input type="text" name="email" value="<?php if(isset($email)){htmlentities($email, ENT_QUOTES);}?>"/></td>
    		</tr>
     
    	</table>
    	</fieldset>
     
    	<fieldset style="margin:50px">
    	<legend><b>Vos informations</b></legend>
    	<table>
     
    		<tr>
    			<td width="270"><label for="client[]">Souhaitez vous une demande de contact ?</label></td>
    			<td>
    			<input type="radio" name="client[]" value="Oui"/> <label for="oui">Oui</label>
    			<input type="radio" name="client[]" value="Non"/> <label for="non">Non</label>
    			</td>
    		</tr>
     
    		<tr>
    			<td width="250"><label for="site[]">Comment avez vous connu le site ?</label></td>
    			<td>
     
    			<?php 
    			$sSQL = "SELECT * FROM site ORDER BY n_site";
    			$qSite = mysql_query($sSQL);
    			?>
     
    			<?php while($aData = mysql_fetch_assoc($qSite)){ ?>
    				<input type="checkbox" name="site[]" value="<?php echo $aData['id']; ?>" /> <label><?php echo $aData['n_site']; ?></label>
    			<?php } ?>
     
    			</td>
    		</tr>
     
    		<tr>
    			<td width="270"><label for="demande[]">Quelles sont vos demandes de site ?</label></td>
    			<td>
     
    			<?php
    			$sSQL = "SELECT * FROM demande ORDER BY n_demande";
    			$qDemande = mysql_query($sSQL);
    			?>
     
    			<?php while($aData = mysql_fetch_assoc($qDemande)){ ?>
    				<input type="checkbox" name="demande[]" value="<?php echo $aData['id']; ?>" /> <label><?php echo $aData['n_demande']; ?></label>
    			<?php } ?>
     
    			</td>
    		</tr>
     
    	</table>
    	</fieldset>
     
    	<fieldset style="margin:50px">
    	<legend><b>Vos options</b></legend>
    	<table>
     
    		<tr>
    			<td width="220"><label for="devis[]">Demande de devis :</label></td>
    			<td>
    			<input type="radio" name="devis[]" value="Oui"/> <label for="oui">Oui</label>
    			<input type="radio" name="devis[]" value="Non"/> <label for="non">Non</label>
    			</td>
    		</tr>
     
    		<tr>
    			<td width="220"><label for="contact[]">Demande de contact :</label></td>
    			<td>
    			<input type="radio" name="contact[]" value="Oui"/> <label for="oui">Oui</label>
    			<input type="radio" name="contact[]" value="Non"/> <label for="non">Non</label>
    			</td>
    		</tr>
     
    	</table>
    	</fieldset>
     
    	<fieldset style="margin:50px">
    	<legend><b>Opérations</b></legend>
    	<table>
    		<tr>
    			<td width="250"><label for="valider"></label></td>
    			<td><input type="submit" value="Valider" name="valider"/></td>
    			<td><input type="reset" value="Effacer" name="valider"></td>
    		</tr>
    	</table>
    	</fieldset>
     
    </form>
    Remarque : Dans le code, vous pourrez voir non pas une checkbox mais bien deux à savoir une pour la table "demande" et l'autre pour la table "site", cependant l'exemple reste le même. A donc été créé une table intermédiaire nommée "demandeformulaire" (avec id_formulaire et id_demande) et une table "demande" (avec id et n_demande).

    En fait, si je rassemble tout le code du formulaire sur un seule page (comme présenté ci dessus) je n'ai pas de problème au niveau des requêtes pour les deux tables intermédiaires ("demandeformulaire" et "site") mais si je sépare mon code sur deux fichiers pour pouvoir séparer la partie formulaire de la partie traitement (comme vu en premier message de cette discussion) seule la requête pour la table "siteformulaire" est prise en compte et je voudrais bien évidemment que la requête concernant la table "demandeformulaire" soit également fonctionnelle. Je ne vois vraiment pas comment faire et je ne maîtrise vraiment pas l'association de requêtes avec boucle while, mysql_fetch_assoc et foreach. On m'a dit d'utiliser ce moyen pour pouvoir dissocier les requêtes de chaque checkbox mais je ne vois vraiment pas comment faire. Merci de bien vouloir m'éclairer.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    D'abord, bravo et merci pour ton codage clair, propre, commenté et bien indenté.
    Quelques remarques :
    -> sort le code html du code php
    -> mauvaise utilisation des "label for=" (for -> id, pas name)
    -> aucune "gestion d'erreur" (ne serait-ce que la validité de l'email)
    -> tes requêtes ne sont PAS DU TOUT protégées contre les injections SQL ! -> mysql_real_escape_string()

    Sinon ... si ton code ci-dessus fonctionne, quel est le problème ?
    Le fait de "séparer" traitement et formulaire ne change pas grand'chose ...
    Ou je ne comprends pas ce que tu entends par "séparer" (sur 2 pages différentes ?)
    Dernière modification par Domi2 ; 09/08/2011 à 07h09.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] Traitement des valeurs d'une CheckBox
    Par Alex70 dans le forum Langage
    Réponses: 12
    Dernier message: 18/04/2007, 16h38
  2. récupérer des données sur une clef USB
    Par mullger dans le forum Périphériques
    Réponses: 6
    Dernier message: 25/09/2006, 18h38
  3. [Formulaires] Traitement des données dans une autre page...
    Par sekiryou dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/03/2006, 09h08
  4. [PHP-JS] Traitement des données dans une autre page...
    Par sekiryou dans le forum Langage
    Réponses: 5
    Dernier message: 04/03/2006, 09h06
  5. Récupérer des données sur une page HTML
    Par rupeni dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 18/11/2005, 17h22

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