ouarzazat Posté 2 Mai 2006 Posté 2 Mai 2006 (modifié) Bonjour, j'ai comme qui dirait un petit problème. Explication: sur un formulaire de saisie, quand je coche la case à cocher 'truc', $truc ='truc'; (sinon $truc='' puis j'écris $truc dans le champ voulu dans ma table à la soumission du formulaire. Mais voilà, au lieu d'écrire 'truc' il va écrire 'truc '. Et ça ça me plait pas J'ai beau chercher je ne vois pas d'où cela vient, d'autant que j'ai une bonne vingtaine d'autre cases à cocher qui fonctionnent avec le même principe et pas de problème. Et le petit plus qui agace, dans phpmyadmin, je vais pour modifier l'enregistrement en question (avec 'truc '), je ne touche à rien je lui dis juste de me le réenregister tel quel, et boum il me supprime cet espace de malheur... C'est à n'y rien comprendre ! Vous y comprenez quelque chose vous?? Modifié 2 Mai 2006 par ouarzazat
Sarc Posté 2 Mai 2006 Posté 2 Mai 2006 Bonjour, Je pense que si on avait le code du formulaire, ainsi que celui de l'exécution (juste ce qui concerne ce champ), on pourrait davantage t'aider. Il doit y avoir un problème dans le code, je doute que l'ordinateur se rebelle contre toi.
ouarzazat Posté 2 Mai 2006 Auteur Posté 2 Mai 2006 Lol c'est qu'on peut devenir parano avec ces machines ! Voilà les bouts de code: Dans le formulaire de saisie: <input name="partenaire_oi" type="checkbox" id="partenaire_oi" /> Dans la page d'enregistrement: if (ISSET ($_POST['partenaire_oi'])) {$partenaire_oi = 'partenaire_oi';else {$partenaire_oi = '';} Puis: mysql_query("INSERT INTO tab_service_site VALUES ('', '$cible', '$crea_entreprise', '$crea_site', '$generaliste', '$institutionnel', '$internet_ntic', '$m_interim', '$m_travail', '$newsletter', '$presse', '$reseau_entreprise', '$stats', '$radio', '$tv', '$specificite', '$autre_domaine', '$online', '$offline', '$concurrent', '$p_annonces', '$site_emploi', '$autre_concurrence', '$avec_interim', '$sans_interim', '$dedie_interim', /*c'est là*/'$partenaire_oi',/**/ '$annuaire', '$forum', '$liste_liens', '$moteur', '$portail', '$meta', '$echange', '$gratuite', '$payante', '$commentaire_indexation', '$departement_id', '$region_id', '$national', '$local', '$commentaire_localisation', '$promotion', '$referencement', '$nom_service_site', '$url', '$nom_societe', '$raison_sociale', '$description_service', '$dernier_adresse_id', '$timestamp')");
Sarc Posté 2 Mai 2006 Posté 2 Mai 2006 Tu utilises d'une drôle de manière les input checkbox on dirait. Pourquoi ne pas mettre directement : <input name="partenaire_oi" type="checkbox" id="partenaire_oi" value="partenaire_oi" /> Le code ensuite est directement $partenaire_oi = $_POST['partenaire_oi']; Qui prendra la valeur vide si la case n'a pas été cochée, et qui prendra la valeur partenaire_oi si la case a été cochée... Mis à part ça, je sais pas d'où peut venir ton espace moi non plus
ouarzazat Posté 2 Mai 2006 Auteur Posté 2 Mai 2006 (modifié) Bon sang y'a rien à faire !! J'ai testé avec la simplification que tu m'as donné... a marche pas. Encore plus fort: ensuite j'utilise mon formulaire de recherche avec comme argument: partenaire_oi='partenaire_oi' ... ça trouve rien. puis j'utilise partenaire_oi='partenaire_oi ' ... ça trouve rien non plus !! C'est complètement dingue... Modifié 2 Mai 2006 par ouarzazat
NorSeb Posté 2 Mai 2006 Posté 2 Mai 2006 Bonjour, Tu peux utiliser la fonction trim() pour supprimer les caractères superflus en début et fin de chaîne.
ouarzazat Posté 2 Mai 2006 Auteur Posté 2 Mai 2006 C'est juste! Pour supprimer un espace: rtrim($var," "); Ceci fait l'affaire?
ouarzazat Posté 2 Mai 2006 Auteur Posté 2 Mai 2006 Bon je crois avoir trouvé d'où venait le pblm... J'ai mis cette superbe requête sur une seule ligne: mysql_query("INSERT INTO tab_service_site VALUES ('', '$cible', '$crea_entreprise', '$crea_site', '$generaliste', '$institutionnel', '$internet_ntic', '$m_interim', '$m_travail', '$newsletter', '$presse', '$reseau_entreprise', '$stats', '$radio', '$tv', '$specificite', '$autre_domaine', '$online', '$offline', '$concurrent', '$p_annonces', '$site_emploi', '$autre_concurrence', '$avec_interim', '$sans_interim', '$dedie_interim', /*c'est là*/'$partenaire_oi',/**/ '$annuaire', '$forum', '$liste_liens', '$moteur', '$portail', '$meta', '$echange', '$gratuite', '$payante', '$commentaire_indexation', '$departement_id', '$region_id', '$national', '$local', '$commentaire_localisation', '$promotion', '$referencement', '$nom_service_site', '$url', '$nom_societe', '$raison_sociale', '$description_service', '$dernier_adresse_id', '$timestamp')"); et ça lui plait, ma foi tant mieux, dse fois je crois qu'il ne vaut mieux pas aller chercher trop loin... Toujours est il que je vous remercie bien tous pour votre aide !!! a++
ouarzazat Posté 2 Mai 2006 Auteur Posté 2 Mai 2006 D'ailleurs j'en profite pour vous poser une question de plus: ce genre de requête à rallonge, vous les écrivez sur une même ligne ou vous faites des retour à la ligne (sans espace avt le retour biensur )?
Kalt Posté 4 Mai 2006 Posté 4 Mai 2006 Tu as plusieurs solutions : $requete = "SELECT trucFROM machin WHERE bidule = 'chouette'"; Ou celle que je préfère : $requete = "SELECT truc ";$requete .= "FROM machin ";$requete .= "WHERE bidule = 'chouette'";
ouarzazat Posté 4 Mai 2006 Auteur Posté 4 Mai 2006 Oui il me semble qu'il soit très répandu de mettre la requête dans une/des variables. Je crois que la plupart des dévelopeurs utilisent cette méthode, et que je vais m'y coller également Merci pour ta participation
NorSeb Posté 4 Mai 2006 Posté 4 Mai 2006 L'avantage (entre autres) de cette solution est que tu peux ré-afficher la requète en cas d'erreur lorsque tu teste ton script.
captain_torche Posté 4 Mai 2006 Posté 4 Mai 2006 Personnellement, je m'organise de la manière suivante : $sql_var = "SELECT *FROM TABLE...";$req_var = mysql_query($sql_var) or die(mysql_error().'Dans la requête :<br>'.$sql_var);etc ...
Kalt Posté 5 Mai 2006 Posté 5 Mai 2006 En réponse à Captain Torche, pensez à n'utiliser cette méthode que lors du développement et ne pas la laisser en ligne : en effet, l'affichage d'une erreur donne des indices à un pirate sur la structure de ta base, le nom des tables et des champs. Ces indices peuvent ensuite être utilisés pour une attaque par injection SQL.
ouarzazat Posté 6 Mai 2006 Auteur Posté 6 Mai 2006 (modifié) Et pour éviter ces injections sql, est-il judicieux de spécifier une plage d'argument? A la manière d'une plage ip vous voyez? Par exemple, pour une page liste_resultat?num_page=... Est-il judicieux de spécifier que $_POST['num_page'] est un nombre compris entre x et y? Ou bien pour une autre page dire qu'il ne doit pas y avoir tel ou tel caractère dans le $_POST? Faudrait-il faire cela pour chacune de nos pages? Bon on dévie un peu du sujet initial, mais puisqu-on est lancé.. (Peut-être devrais-je ouvrir un nouveau sujet, avis aux modos!) Modifié 6 Mai 2006 par ouarzazat
captain_torche Posté 6 Mai 2006 Posté 6 Mai 2006 Kalt : ne t'inquiètes pas, je ne laisse pas ça en prod Sinon, ouarzazat, je pense qu'une simple vérification du caractère numérique de l'argument (page), est suffisant.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant