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

isset d'un GET d'une checkbox [RESOLU] - PHP - Programmation

Marsh Posté le 16-03-2009 à 15:43:38    

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
Reply

Marsh Posté le 16-03-2009 à 15:43:38   

Reply

Marsh Posté le 16-03-2009 à 16:02:49    

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
Reply

Marsh Posté le 16-03-2009 à 16:04:29    

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
Reply

Marsh Posté le 16-03-2009 à 16:25:02    

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
Reply

Marsh Posté le 16-03-2009 à 16:57:48    

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
Reply

Marsh Posté le 16-03-2009 à 17:09:00    

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

Reply

Marsh Posté le 16-03-2009 à 18:13:28    

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
Reply

Marsh Posté le 16-03-2009 à 18:40:16    

il est beau ce framework tiens :)


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 16-03-2009 à 20:28:53    

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

Reply

Marsh Posté le 16-03-2009 à 23:41:37    

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...)

Reply

Marsh Posté le 16-03-2009 à 23:41:37   

Reply

Marsh Posté le 18-03-2009 à 14:35:12    

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.
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed