Version complète: sur le forum Webmaster Hub : Ajout d'un caractère vide (espace)
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
ouarzazat
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 angry.gif

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??
sarc
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
Lol c'est qu'on peut devenir parano avec ces machines !

Voilà les bouts de code:

Dans le formulaire de saisie:
CODE
<input name="partenaire_oi" type="checkbox" id="partenaire_oi" />



Dans la page d'enregistrement:
CODE
if (ISSET ($_POST['partenaire_oi']))
    {$partenaire_oi = 'partenaire_oi';
else {$partenaire_oi = '';}

Puis:
CODE
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
Tu utilises d'une drôle de manière les input checkbox on dirait.
Pourquoi ne pas mettre directement :
CODE
<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 IMSTP6.gif
ouarzazat
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...
NorSeb
Bonjour,

Tu peux utiliser la fonction trim() pour supprimer les caractères superflus en début et fin de chaîne.
ouarzazat
C'est juste!

Pour supprimer un espace:

rtrim($var," ");

Ceci fait l'affaire?
NorSeb
oui ou tout simplement :

CODE
$var = trim($var);
ouarzazat
Bon je crois avoir trouvé d'où venait le pblm...

J'ai mis cette superbe requête sur une seule ligne:
CODE
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
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 wink.gif)?
Kalt
Tu as plusieurs solutions :

CODE
$requete = "
SELECT truc
FROM machin
WHERE bidule = 'chouette'
";


Ou celle que je préfère :

CODE
$requete  = "SELECT truc ";
$requete .= "FROM machin ";
$requete .= "WHERE bidule = 'chouette'";
ouarzazat
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 wink.gif

Merci pour ta participation
NorSeb
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.
ouarzazat
Ca c'est un gros point fort c'est clair!
captain_torche
Personnellement, je m'organise de la manière suivante :
CODE
$sql_var = "
SELECT *
FROM TABLE
...
";
$req_var = mysql_query($sql_var) or die(mysql_error().'Dans la requête :<br>'.$sql_var);
etc ...
Kalt
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
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é.. smile.gif
(Peut-être devrais-je ouvrir un nouveau sujet, avis aux modos!)
captain_torche
Kalt : ne t'inquiètes pas, je ne laisse pas ça en prod smile.gif
Sinon, ouarzazat, je pense qu'une simple vérification du caractère numérique de l'argument (page), est suffisant.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.