Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1218 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU]isset d'un GET d'une checkbox

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU]isset d'un GET d'une checkbox

n°1862125
HpX_tech
Posté le 16-03-2009 à 15:43:38  profilanswer
 

Le titre du sujet n'est peut-être pas très explicite, mais je pense pouvoir me faire comprendre clairement :
J'ai un formulaire qui contient plusieurs champs afin de les enregistrer dans une base de données mySQL.
Parmi ces champs, de nombreux champs de textes divers et variés, et puis un champ "domaine d'activité" composé d'une checkbox.
 
 
Le HTML :

Citation :


<form name='envoi' action='#' method='get'>
<tr><td>* Nom d'affaire :</td><td><input type='text' name='nomaffaire' /></td>
<tr><td>* Nom :</td><td><input type='text' name='nom' /></td>
<tr><td>* Prenom :</td><td><input type='text' name='prenom' /></td>
<tr><td>* Adresse :</td><td><input type='text' name='adresse' /></td>
<tr><td>Site-Web :</td><td><input type='text' name='siteweb' /></td>
<tr><td>Latitude :</td><td><input type='text' name='lat' value='' /></td>
<tr><td>Longitude :</td><td><input type='text' name='lon' value='' /></td>
<tr><td>* Domaine d'activité :</td><td><input type="checkbox" name="choix[]" value="1" />Fruits et légumes
<br  /><input type="checkbox" name="choix[]" value="2" />Produits laitiers/fromages
<br  /><input type="checkbox" name="choix[]" value="3" />Viande
<br  /><input type="checkbox" name="choix[]" value="4" />Produits transformés/divers
<br  /><input type="checkbox" name="choix[]" value="5" />Artisanat/divers
<br  /><input type="checkbox" name="choix[]" value="6" />Economie solidaire</td>
<tr><td>Description :</td><td rowspan=2><TEXTAREA rows='3' cols='40' name='description' value='' ></TEXTAREA></td>
<tr><td></td><td></td></tr>
<tr><td><input type='submit' value='Enregistrer'/></td></tr></form></table>


 
 
 
Le Code PHP

Citation :


if (isset($_GET) && !empty($_GET)){
 if(!empty($_GET['nomaffaire'])  
 && !empty($_GET['nom'])  
 && !empty($_GET['prenom'])  
 && !empty($_GET['adresse'])
 && !empty($_GET['lat'])  
 && !empty($_GET['lon'])
 && is_null($_GET['choix']))
        {
                $link=mysql_connect('localhost','root','') or die ('Erreur : '.mysql_error());
  mysql_select_db('carte',$link);
   
                $sql1 = "INSERT INTO info_prod(Nom_affaire,nom_prod,prenom_prod,adresse_prod,description_prod,siteweb_prod,active)
  VALUES('".$_GET['nomaffaire']."','".$_GET['nom']."', '".$_GET['prenom']."', '".$_GET['adresse']."', '".$_GET['description']."','".$_GET['siteweb']."', 'false')";
  echo "entrée ajoutée avec succès!";
  $mysqlquery=mysql_query($sql1,$link) or die ('Erreur : '.mysql_error());
   
  $sql2 = "SELECT LAST_INSERT_ID()" ;
  $mysqlquery2=mysql_query($sql2,$link) or die ('Erreur : '.mysql_error());
  $query2=mysql_fetch_array($mysqlquery2,MYSQL_ASSOC);
   
  foreach($_GET['choix'] as $a)
  {
  $sql3 = "INSERT INTO liaison_domaine_prod(id_domaine,id_prod) VALUES('".$a."','".$query2['LAST_INSERT_ID()']."')";
  $mysqlquery3=mysql_query($sql3,$link) or die ('Erreur : '.mysql_error());
  }      
  mysql_close($link);  
 }
}
 


 
Le problème que je rencontre est visiblement lié à mes conditions, le symptôme est simple, lorsque je rempli qu'une partie des champs, la page ne reste en chargement, pendant plus de 30sec.
J'ai biensur essayé de changer mes conditions, mais malgré tous mes différents tests, je commence à ne plus savoir ou j'en suis.
 
Ce que je souhaite est très simple : Si les champs de texte obligatoires sont remplis, et si au moins une case est cochée, alors j'execute la connexion à la base.
 
Je suis ouvert à toute proposition d'amélioration de mon code et à tous conseils et commentaires constructifs.
 
Merci d'avance à tous ceux qui m'aiderons à résoudre ce problème.


Message édité par HpX_tech le 18-03-2009 à 15:14:39
mood
Publicité
Posté le 16-03-2009 à 15:43:38  profilanswer
 

n°1862135
FlorentG
Unité de Masse
Posté le 16-03-2009 à 16:02:49  profilanswer
 

On n'utilise pas la méthode GET pour insérer des données (effets de bords), cf. protocole HTTP. Il faut toujours utiliser la méthode POST dans ce cas


Message édité par FlorentG le 16-03-2009 à 16:03:01
n°1862136
HpX_tech
Posté le 16-03-2009 à 16:04:29  profilanswer
 

Je m'attèles à modifier tout sa et je poste le résultat.
Merci de cette réponse rapide.
 
EDIT : Comme je m'y attendais un peu, le fait de passer de GET à POST rend le code plus cohérent mais ne résoud pas le problème.
 
Je continue à chercher l'erreur ou la maladresse que j'aurais pu faire.


Message édité par HpX_tech le 16-03-2009 à 16:10:02
n°1862153
stealth35
Posté le 16-03-2009 à 16:25:02  profilanswer
 

au lieu de localhost met 127.0.0.1,
si les magic quotes sont sur off
 

Code :
  1. foreach($_POST as $key => $value){
  2. $_POST['$key'] = mysql_real_escape_string($value);
  3. }


 
 
apres '$mysqlquery=mysql_query($sql1,$link) or die ('Erreur : '.mysql_error()); '
 

Code :
  1. $last_id = mysql_insert_id();
  2. $sql3 = 'INSERT INTO liaison_domaine_prod(id_domaine,id_prod) VALUES';
  3. $insert_data = array();
  4. foreach($_POST['choix'] as $a)
  5.   {
  6.   array_push($insert_data, "('".$a."','". last_id ."')" );
  7.   } 
  8. $sql3 .= implode(",", $insert_data);
  9. $mysqlquery3=mysql_query($sql3,$link) or die ('Erreur : '.mysql_error());


 
 
 
sinon pour ta validation, de formulaire faut le faire en javascript

Message cité 1 fois
Message édité par stealth35 le 16-03-2009 à 16:37:12
n°1862173
HpX_tech
Posté le 16-03-2009 à 16:57:48  profilanswer
 

stealth35 a écrit :

au lieu de localhost met 127.0.0.1,
si les magic quotes sont sur off
 

Code :
  1. foreach($_POST as $key => $value){
  2. $_POST['$key'] = mysql_real_escape_string($value);
  3. }


 
 
apres '$mysqlquery=mysql_query($sql1,$link) or die ('Erreur : '.mysql_error()); '
 

Code :
  1. $last_id = mysql_insert_id();
  2. $sql3 = 'INSERT INTO liaison_domaine_prod(id_domaine,id_prod) VALUES';
  3. $insert_data = array();
  4. foreach($_POST['choix'] as $a)
  5.   {
  6.   array_push($insert_data, "('".$a."','". last_id ."')" );
  7.   } 
  8. $sql3 .= implode(",", $insert_data);
  9. $mysqlquery3=mysql_query($sql3,$link) or die ('Erreur : '.mysql_error());


 
 
 
sinon pour ta validation, de formulaire faut le faire en javascript


 
 
Je suis pas autant a l'aise que toi pour la manipulation de tableau et la concaténation de requètes mySQL.
Merci mille fois!  
Le problème "semble être résolu", je fais quelques tests jusqu'à ce soir et je mettrais [RESOLU] devant le post si c'est bon.
 
Je m'attaquerais au javascript demain, mais effectivement, je ne vois que cette solution.


Message édité par HpX_tech le 16-03-2009 à 16:58:25
n°1862177
stealth35
Posté le 16-03-2009 à 17:09:00  profilanswer
 

avec le framework dojo ca se fait super rapidement la validation de formulaire, tu pourras pas faire submit tant que les champs ne seront pas validé, de plus ca diras les erreurs et ou

n°1862212
stealth35
Posté le 16-03-2009 à 18:13:28  profilanswer
 

par exemple
 

Code :
  1. <?php
  2. if(!empty($_POST)){
  3.  print_r($_POST);
  4.  // Traitement PHP
  5.  exit;
  6. }
  7. ?>
  8. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  9. <html xmlns="http://www.w3.org/1999/xhtml">
  10. <head>
  11.  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  12.  <title>Email</title>
  13.  <script type="text/javascript">var djConfig = {isDebug:true, parseOnLoad:false, dojoBlankHtmlUrl:"blank.html"};</script>
  14.  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.2.3/dojo/dojo.xd.js"></script>
  15.  <script type="text/javascript">dojo.addOnLoad(function(){dojo.addClass(dojo.body(),"tundra" );});</script>
  16.  <style type="text/css" media="all">
  17.   @import "http://ajax.googleapis.com/ajax/libs/dojo/1.2.3/dijit/themes/tundra/tundra.css";
  18.   @import "http://ajax.googleapis.com/ajax/libs/dojo/1.2.3/dojo/resources/dojo.css";
  19.   #server-dialog .dijitDialogTitleBar {
  20.    display:none;
  21.   }
  22.   #spanreturn{
  23.    padding:5px;
  24.   }
  25.   form fieldset{
  26.    width:640px;
  27.    margin:25px auto 0 auto;
  28.    border:1px solid #d0d0d0;
  29.    padding:5px;
  30.   }
  31.   form legend{
  32.    font-size:16px;
  33.    font-weight:bold;
  34.   }
  35.   form table td{
  36.    vertical-align:top;
  37.    padding:2px;
  38.   }
  39.  </style>
  40. </head>
  41. <body>
  42.  <script type="text/javascript">
  43.   // <![CDATA[
  44.    dojo.require("dojo.parser" );
  45.    dojo.require("dijit.Dialog" );
  46.    dojo.require("dijit.Editor" );
  47.    dojo.require("dijit.form.Form" );
  48.    dojo.require("dijit.form.TextBox" );
  49.    dojo.require("dijit.form.ValidationTextBox" );
  50.    dojo.require("dijit.form.CheckBox" );
  51.    var domDijits = [
  52.     {"id":"server-dialog","params":{"dojoType":"dijit.Dialog"}},
  53.     {"id":"envoi","params":{"dojoType":"dijit.form.Form"}},
  54.     {"id":"nomaffaire","params":{"dojoType":"dijit.form.ValidationTextBox", "required":"true"}},
  55.     {"id":"nom","params":{"dojoType":"dijit.form.ValidationTextBox", "required":"true"}},
  56.     {"id":"prenom","params":{"dojoType":"dijit.form.ValidationTextBox", "required":"true"}},
  57.     {"id":"adresse","params":{"dojoType":"dijit.form.ValidationTextBox", "required":"true"}},
  58.     {"id":"siteweb","params":{"dojoType":"dijit.form.ValidationTextBox", "required":"true"}},
  59.     {"id":"lat","params":{"dojoType":"dijit.form.TextBox"}},
  60.     {"id":"lon","params":{"dojoType":"dijit.form.TextBox"}},
  61.     {"id":"choix1","params":{"dojoType":"dijit.form.CheckBox"}},
  62.     {"id":"choix2","params":{"dojoType":"dijit.form.CheckBox"}},
  63.     {"id":"choix3","params":{"dojoType":"dijit.form.CheckBox"}},
  64.     {"id":"choix4","params":{"dojoType":"dijit.form.CheckBox"}},
  65.     {"id":"choix5","params":{"dojoType":"dijit.form.CheckBox"}},
  66.     {"id":"choix6","params":{"dojoType":"dijit.form.CheckBox"}},
  67.     {"id":"description","params":{"dojoType":"dijit.Editor", "height":"150"}},
  68.     {"id":"form-submit","params":{"dojoType":"dijit.form.Button", "iconClass":"dijitEditorIcon dijitEditorIconSave"}}
  69.    ];
  70.    dojo.addOnLoad(function(){
  71.     dojo.forEach(domDijits, function(info) {
  72.      var n = dojo.byId(info.id);
  73.      if (null != n) {
  74.       dojo.attr(n, dojo.mixin({ id: info.id }, info.params));
  75.      }
  76.     });
  77.     dojo.parser.parse();
  78.    });
  79.    var submitForm = function(form){
  80.     var kw = {
  81.      url: form.action,
  82.      load: function(data){
  83.       dojo.byId('spanreturn').innerHTML = data;
  84.       dojo.anim(null, { }, 1500, null, function(){
  85.        dijit.byId('server-dialog').hide();
  86.       });
  87.      },
  88.      error: function(data){
  89.       alert("An error occurred: ", data);
  90.      },
  91.      content: form.getValues()
  92.     };
  93.     form.validate();
  94.     if(form.isValid()){
  95.      dijit.byId('server-dialog').show();
  96.      dojo.xhrPost(kw);
  97.     }
  98.    }
  99.   // ]]>
  100.  </script>
  101.  <div id="server-dialog" style="display:none; width:275px;" title="loading...">
  102.   <table>
  103.    <tr>
  104.     <td><img src="images/ajax-loader-big.gif" alt="Loading..." /></td>
  105.     <td><span id="spanreturn">Enregistrement en cours...</span></td>
  106.    </tr>
  107.   </table>
  108.  </div>
  109.  <form id="envoi" action="req.php" method="post" onsubmit="submitForm(this); return false;">
  110.   <fieldset>
  111.    <legend>Formulaire</legend>
  112.    <table>
  113.     <tr><td>Nom d'affaire :</td><td><input type="text" id="nomaffaire" name="nomaffaire" /></td></tr>
  114.     <tr><td>Nom :</td><td><input type="text" id="nom" name="nom" /></td></tr>
  115.     <tr><td>Prenom :</td><td><input type="text" id="prenom" name="prenom" /></td></tr>
  116.     <tr><td>Adresse :</td><td><input type="text" id="adresse" name="adresse" /></td></tr>
  117.     <tr><td>Site-Web :</td><td><input type="text" id="siteweb" name="siteweb" /></td></tr>
  118.     <tr><td>Latitude :</td><td><input type="text" id="lat" name="lat" value="" /></td></tr>
  119.     <tr><td>Longitude :</td><td><input type="text" id="lon" name="lon" value="" /></td></tr>
  120.     <tr><td>Domaine d"activité :</td><td><input type="checkbox" id="choix1" name="choix[]" value="1" /><label for="choix1">Fruits et légumes</label>
  121.      <br  /><input type="checkbox" id="choix2" name="choix[]" value="2" /><label for="choix2">Produits laitiers/fromages</label>
  122.      <br  /><input type="checkbox" id="choix3" name="choix[]" value="3" /><label for="choix3">Viande</label>
  123.      <br  /><input type="checkbox" id="choix4" name="choix[]" value="4" /><label for="choix4">Produits transformés/divers</label>
  124.      <br  /><input type="checkbox" id="choix5" name="choix[]" value="5" /><label for="choix5">Artisanat/divers</label>
  125.      <br  /><input type="checkbox" id="choix6" name="choix[]" value="6" /><label for="choix6">Economie solidaire</label></td></tr>
  126.     <tr><td>Description :</td><td><textarea rows="3" cols="40" id="description" name="description"></textarea></td></tr>
  127.     <tr><td></td><td></td></tr>
  128.     <tr><td colspan="2" style="text-align:center;"><button type="submit" id="form-submit">Enregistrer</button></td></tr>
  129.    </table>
  130.  </fieldset>
  131.  </form>
  132. </body>
  133. </html>


Message édité par stealth35 le 16-03-2009 à 18:14:04
n°1862220
grosbin
OR die;
Posté le 16-03-2009 à 18:40:16  profilanswer
 

il est beau ce framework tiens :)


---------------
Photos Panoramiques Montagnes Haute Savoie
n°1862260
FlorentG
Unité de Masse
Posté le 16-03-2009 à 20:28:53  profilanswer
 

Ca n'empêche pas quand-même une validation côté serveur :)

n°1862324
stealth35
Posté le 16-03-2009 à 23:41:37  profilanswer
 

oui a commencer deja par une validation par session sinon tout le monde peu poster des trucs,
 
puis tout ce qui est formatage de donnée (date format timestamp, bool, base64...)

mood
Publicité
Posté le 16-03-2009 à 23:41:37  profilanswer
 

n°1863101
HpX_tech
Posté le 18-03-2009 à 14:35:12  profilanswer
 

Merci beaucoup pour toutes vos réponses, le problème était peut-être également lié au fait que je n'avais pas fermé la connexion MySQL, et comme les premières requètes renvoyaient une erreur, lorsque j'essayais d'envoyer les données par le formulaire, la base de données était déja bloquée.
 
J'ai beaucoup avancé sur ce projet(grâce à d'autre posts de ce forum d'ailleurs), mais j'ai de nouveau un problème au niveau d'un affichage d'icones sur une API Googlemap.
 
Je vais poster mon problème chez google groups, si jamais ils ne trouvent pas la solution, je créerai un nouveau topic ici même.
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU]isset d'un GET d'une checkbox

 

Sujets relatifs
Probléme CSS[Résolu] Créer un fichier tableur en PHP (pas EXCEL)
erreur 404 et probléme "methode GET"[Résolu][shell] suppresion de dossier/fichier datant plus de 30 jours
[RESOLU] Adresse SanS "WWW"redimensionner un graphique [Resolu]
[C#, Résolu] UserControl, classes en propriété et code du concepteur.[résolu] Aide pour compilation
[php] [RESOLU] aide case switch automatisé php[Résolu] Fonction retournant un tableau allouer dynamiquement
Plus de sujets relatifs à : [RESOLU]isset d'un GET d'une checkbox


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR