Page 1 sur 1

Supprimer le dernier mot d'une chaine

Posté : 05 août 2008, 16:34
par ed_013
Bonjour,

Mon problème est le suivant :

J'ai une chaine de caractère crée grâce à la concaténation de plusieurs variables. Cette chaine se fini forcement par un AND de par sa création. Hors, pour utiliser cette chaine, il faut que j'arrive a supprimer ce AND final, quelles sont les solutions pour y'arriver ?

Code : Tout sélectionner

if (isset($requete_sexe)) {$where_sexe = "sexe='$requete_sexe' AND";} else {$where_sexe='';} if (isset($requete_nom)) {$where_nom = "nom='$requete_nom' AND";} else {$where_nom='';} if (isset($requete_prenom)) {$where_prenom = "prenom='$requete_prenom' AND";} else {$where_prenom='';} if (isset($requete_structure)) {$where_structure = "structure='$requete_structure' AND";} else {$where_structure='';} if (isset($requete_service)) {$where_service = "service='$requete_service' AND";} else {$where_service='';} if (isset($requete_fonction)) {$where_fonction = "fonction='$requete_fonction' AND";} else {$where_fonction='';} if (isset($requete_tel_pro)) {$where_tel_pro = "tel_pro='$requete_tel_pro' AND";} else {$where_tel_pro='';} if (isset($requete_tel_por)) {$where_tel_por = "tel_por='$requete_tel_por' AND";} else {$where_tel_por='';} if (isset($requete_tel_perso)) {$where_tel_perso = "tel_perso='$requete_tel_perso' AND";} else {$where_tel_perso='';} if (isset($requete_mail_pro)) {$where_mail_pro = "mail_pro='$requete_mail_pro' AND";} else {$where_mail_pro='';} if (isset($requete_mail_perso)) {$where_mail_perso = "mail_perso='$requete_mail_perso' AND";} else {$where_mail_perso='';} if (isset($requete_adresse)) {$where_adresse = "adresse='$requete_adresse' AND";} else {$where_adresse='';} if (isset($requete_code_postal)) {$where_code_postal = "code_postal='$requete_code_postal' AND";} else {$where_code_postal='';} if (isset($requete_ville)) {$where_ville = "ville='$requete_ville' AND";} else {$where_ville='';} if (isset($requete_tab_theme)) {$where_tab_theme = "theme='$requete_tab_theme' AND";} else {$where_tab_theme='';} if (isset($requete_tab_activite)) {$where_tab_activite = "activite='$requete_tab_activite' AND";} else {$where_tab_activite='';} if (isset($requete_geo)) {$where_geo = "geo='$requete_geo' AND";} else {$where_geo='';} if (isset($requete_tab_pop)) {$where_tab_pop = "pop='$requete_tab_pop' AND";} else {$where_tab_pop='';} if (isset($requete_tab_public)) {$where_tab_public = "public='$requete_tab_public' AND";} else {$where_tab_public='';} if (isset($requete_tab_pro)) {$where_tab_pro = "pro='$requete_tab_pro' AND";} else {$where_tab_pro='';} if (isset($requete_bureau)) {$where_bureau = "bureau='$requete_bureau' AND";} else {$where_bureau='';} if (isset($requete_admin)) {$where_admin = "admin='$requete_admin' AND";} else {$where_admin='';} if (isset($requete_diffusion)) {$where_diffusion = "diffusion='$requete_diffusion' AND";} else {$where_diffusion='';} if (isset($requete_groupe_travail)) {$where_groupe_travail = "groupe_travail='$requete_groupe_travail' AND";} else {$where_groupe_travail='';} if (isset($requete_groupe)) {$where_groupe = "groupe='$requete_groupe' AND";} else {$where_groupe='';} if (isset($requete_assemble)) {$where_assemble = "assemble='$requete_assemble' AND";} else {$where_assemble='';} if (isset($requete_commentaire)) {$where_commentaire = "commentaire='$requete_commentaire'AND";} else {$where_commentaire='';} $mega_where = "$where_sexe $where_nom $where_prenom $where_structure $where_service $where_fonction $where_tel_pro $where_tel_por $where_tel_perso $where_mail_pro $where_mail_perso $where_adresse $where_code_postal $where_ville $where_tab_theme $where_tab_activite $where_geo $where_tab_pop $where_tab_public $where_tab_pro $where_bureau $where_admin $where_diffusion $where_groupe_travail $where_groupe $where_assemble $where_commentaire"; echo "<br>"; echo $mega_where; $tab_mega_where = split(" ", $mega_where); echo "<br>"; echo $tab_mega_where;

Posté : 05 août 2008, 17:21
par Berzemus
C'est ta façon de faire qu'il faut changer.

Perso, j'utiliserais un tableau avec un joli push() , et quand vient le moment de la "grande concaténation finale", un simple implode mettra un joli AND entre chaque condition, mais pas à côté :wink:

Posté : 05 août 2008, 17:28
par ed_013
Tu me conseille donc de creer mes varialbes where sans AND et de faire un implode ?

Je test ca tout de suite :wink:

Posté : 05 août 2008, 17:50
par katagoto
Si ton dernier mot est de longueur fixe, tu à cette possibilité également :
<?php

$requete = substr_replace($requete, "", -3, 3);

Explication :
Le premier paramètre indique la chaine à modifier.
Le second paramètre indique le remplacement à effectué, ce par quoi la chaine sélectionné sera remplacé (ici, par rien).
Le troiième paramètre indique la position de départ du pointeur (ici le troisième caractère en partant de la fin [en effet "AND" est composé de trois caractère :lol:])
Le quatrième indique le nombre de caractère à capturer à partir du pointeur (ici 3)

Et voilà

Kata, tout fier, part crâner ailleur :p

Posté : 05 août 2008, 17:51
par ed_013
sexe='Dr' structure='COGES' tel_por='kvjhlv' tel_perso='jvgfkhjgc' ville='chfclk' geo='-' groupe_travail='------------------' groupe='Carambole'
C'est ta façon de faire qu'il faut changer.

Perso, j'utiliserais un tableau avec un joli push() , et quand vient le moment de la "grande concaténation finale", un simple implode mettra un joli AND entre chaque condition, mais pas à côté :wink:
Excuse moi, j'ai du mal à saisir la démarche que tu me propose :oops:
- Faut t'il que je crée ma variable $mega_where ?
- Le tableau que je dois creé doit t'il etre rempli par un split ?

j'ai enlever les AND de la creation de mes variables, ca me donne ca :
sexe='Dr' structure='COGES' tel_por='kvjhlv' tel_perso='jvgfkhjgc' ville='chfclk' geo='-' groupe_travail='------------------' groupe='Carambole'

C'est un bon debut, je veux juste rajouter des AND entre chaque conditions sauf a la fin pour l'utiliser dans une requete.

mais quand je transforme cette chaine en tableau et que je fais un implode en rajoutant AND, ca me donne ca :

sexe='Dr'AND AND AND structure='COGES'AND AND AND AND tel_por='kvjhlv'AND tel_perso='jvgfkhjgc'AND AND AND AND AND ville='chfclk'AND AND AND geo='-'AND AND AND AND AND AND AND groupe_travail='------------------'AND groupe='Carambole'AND AND

C'est pas top

:cry:

Edit : Katagoto, t'es trop fort !! Ca marche nickel
Merci quand meme Berzemus

A pli taw, un gros bonjour de la Gwada !!!

Posté : 06 août 2008, 12:29
par steph29
ce que voulais dire berzemus (et qui est plus propre a mon avis aussi)
ce serait plutot un truc du genre:
$filtre=array();
if (isset($requete_sexe)) $filtre[] = " sexe='$requete_sexe' ";
if (isset($requete_nom)) $filtre[] = " nom='$requete_nom' ";
/*[...]*/

$fin_de_requete=implode(" AND ",$filtre);

echo $fin_de_requete;
Pourquoi faire compliquer, quand on peut se simplifier la vie ;)

Posté : 06 août 2008, 14:06
par Berzemus
ce que voulais dire berzemus (et qui est plus propre a mon avis aussi)
ce serait plutot un truc du genre:
$filtre=array();
if (isset($requete_sexe)) $filtre[] = " sexe='$requete_sexe' ";
if (isset($requete_nom)) $filtre[] = " nom='$requete_nom' ";
/*[...]*/

$fin_de_requete=implode(" AND ",$filtre);

echo $fin_de_requete;
Pourquoi faire compliquer, quand on peut se simplifier la vie ;)
:love4: :pouce:

Posté : 06 août 2008, 20:11
par ed_013
Merci beaucoup, effectivement, ca fais moins bricolage