Une recherche pour deux résultats possibles avec et sans espace en PHP Mysql

Calypdoso Messages postés 18 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 3 juillet 2009 - 1 avril 2009 à 21:58
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 4 mai 2009 à 17:35
Bonjour tout le monde.
Je vais essayer de faire court et être claire.

Je gère le site d'une personne dont les normes de son métier ont changer en mars.
Des immatriculations sous la forme de "1234XY00" et les normes actuelles sont "1234 XY 00"!.
Il y a donc des espaces en plus à gérer.

On va utiliser la fonction       value= '.htmlentities($immat).'    pas de problème.
Mais il y a un historique dans la base MYSQL en "1234XY00" et en plus depuis mars les nouvelles saisies en "1234 XY 00".
Les internautes saisieront une immat soit avec ou sans espace et le système devra afficher comme résulat l'historique sans espace et l'actuelle avec espace sans manipulation humaine supplémentaire.

Voilà mon problème.

Voici le code de mon moteur de recherche dans ma base mysql.
Ce dernier fonctionne parfaitement avec une immat sans espace et logiquement (non testé) avec espace.
Mais l'une ou l'autre en fonction de ma saisie dans ma zone de recherche.
Mais il ne m'affiche pas les deux en même temps.
Je saisie ça "1234XY00" il doit me sortie "1234XY00" et "1234 XY 00"
Et l'idéale même chose si je saisie l'immat avec espace il doit me sortir les deux résulats possible.

Code :
------------------------------------------
//on se connecte à la base de donnée
$db = mysql_connect($host,$login,$pass) or die ("erreur de connexion");


//selection de vôtre base de donnée
mysql_select_db($base,$db) or die ("erreur de connexion base");


//requète de recherche
// afin de suivre la recherche sur le nom durant toute la navigation.
$nom = $_POST['info2'];
$req = mysql_query("SELECT * FROM $table WHERE FA_Prenom LIKE '%".$_POST['info']."%' AND FA_Nom LIKE '%".$_POST['info2']."%' AND Immat LIKE '%".$_POST['info3']."%' AND DtValid LIKE '%".$_POST['info4']."%' Order by DtValid Desc ");


//on compte les resultats
$resultat= mysql_numrows($req);


if(empty($resultat)){


echo'
Désolé mais aucun resultat ne correspond à votre demande

';
}
 else{


  //on affiche le nombre de resultats
echo'<table/>';
//on ressort les infos par ordres alphabétiques
while( $result = mysql_fetch_array($req))
{
----------------------------

Merci pour votre aide.
Cordialement

25 réponses

Calypdoso Messages postés 18 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 3 juillet 2009
4 mai 2009 à 12:51
Bonjour Kohntark,

J'ai bien utilisé str_replace mais toujours le même soucis.
Il est possible de faire parvenir le fichier total si vous souhaitez et accèptez de vérifier ce dernier.
J'aimerai bien arriver rapidement à une solution, ca commence à devenir urgent.


//-----------------------------------------------
//Les deux fonctions ci-dessous permettent une recherche d'immat avec et sans espace
function avecespace($str) {
    return str_replace('/^([[:digit:]]{2,4})(\s?)([[:alpha:]]{2,4})(\s?)([[:digit:]]{2})$/', '\\1 [file://\\3\\5' \\3\\5'], $str);
}


function sansespace($str){
  return str_replace(' ','', $str);
}




//------------------------------------------------

Merci
Calypdoso
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
4 mai 2009 à 15:12
Dis moi, tu me prends pour un con, non ??
La réponse t'a été donné le 2 avril, et depuis plus d'un mois, malgré mes multiples messages, tu n'as pas été foutu de faire un simple copié / collé et de faire l'effort de lire mes commentaires.

Bon vent-

Kohntark -
0
Calypdoso Messages postés 18 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 3 juillet 2009
4 mai 2009 à 16:04
Je ne me moque pas des personnes, j'ai autre chose à faire.
Il faut savoir se mettre à la place de ceux qui ne connaissent pas bien le code PHP, ici moi.

Parfois il faut mettre str_....... ou preg_.........

Message 1 du 2 avril 2009 :


"Je remplacerai la fonction sansespace() par :
str_replace(' ','', $str); // inutile à mon sens de passer par une fonction et une regex pour supprimer des espaces"

Je fais quoi ?
Ici c'est un str_......
De plus je remplace literalement "sansespace()" par "str_replace" donc ma fonction dans dans ma recherche $sql sera str_replace ?
Cette phrase n'est pas claire, mais j'ai pensé que ca ne pouvait pas être ça.


Le 2 avril dans le même message :
"


Et puis ça :
return str_replace('/^([0-9]{4})(\s?)(..)(\s?)(..)$/', '\\1 \\3 \\5', $str);
= >
return preg_replace('/^([[:digit:]]{2,4})(\s?)([[:alpha:]]{2,4})(\s?)([[:digit:]]{2})$/', '\\1 \\3 \\5', $str);
Car str_replace n'accepte pas les regex"

La je comprends qu'il faut mettre str_.... et non plus preg_......
Mais que deviens la fonciton sansespace() ?

Second message le même jour :
"


commence par passer toutes tes valeurs sous la forme '1234 XY 00'
Et :

function avecespace($str) {
return preg_replace('/^([[:digit:]]{2,4})(\s?)([[:alpha:]]{2,4})(\s?)([[:digit:]]{2})$/', '\\1 \\3 \\5', $str);
}"
Avec la fonction avecespace il faut utiliser preg_.........




Le 3 avril


"




function sansespace($str){
str_replace(' ','', $str);
}

=>
function sansespace($str){
return str_replace(' ','', $str);
}"Je fais quoi avec ça ?
Sa ne fonctionne pas les deux en même temps. Logique car la fonction sansespace() a été initialisée déjà une fois.
Et ce jour là on m'écrit qu'il faut lire les message précédents qui sont eux-mêmes pas claire.

Le 10 Avril
je mets bien str_... partout et là encore je me fais rabaler car se n'est pas ça.
Mais qui à écrit le 3 avril que je dois aussi mettre str_...... pour la fonction sansespace() ?

 

Le 16 avril
Voici votre code de réponse :

"function avecespace($str){
return preg_replace('/^([0-9]{4})(\s?)(..)(\s?)(..)$/', '\\1 [http://www.phpcs.com/c.aspx?u=ZmlsZTovL1xcMw== \\3

}

"Et qu'est-ce que l'on voit ?!?
preg_.... qui reviens.

Le 28Avril
"Là par contre je ne l'ai pas pris. Il y a du mieux semble t il, mais ça :
function avecespace($str) {
return str_replace
('/^([[:digit:]]{2,4})(\s?)([[:alpha:]]{2,4})(\s?)([[:digit:]]{2})$/', '\\1 ]<italique>\\3\\5', $str);
}
=>
et différent du code que j'avais donné, non ?
function avecespace($str) {
return preg_replace('/^([[:digit:]]{2,4})(\s?)([[:alpha:]]{2,4})(\s?)([[:digit:]]{2})$/', '\\1 <gras>\\3 \\5', $str);
}"

Ok je vois bien qu'il y a une différence, mais j'utilise le quel ?
Soyez claire dans vos explications au lieu de demander tout le temps de relire tout.
Preuve que c'est fait avec ce dernier message.

Mais j'en suis toujours au même point.
Pour ceux qui ont une experience de la programation, ils ont surement compris en faisant appel à leurs connaissances.
Mais pour ceux qui en n'ont qu'une notion, se n'est pas simple à vous suivre.

Cordialement
Calypdoso
0
Calypdoso Messages postés 18 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 3 juillet 2009
4 mai 2009 à 16:05
Je suis perdu.
J'arrive a faire plein de choses et certaines avec explications données sur des forums. Mais là ....

Cordialement
Calypdoso
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
4 mai 2009 à 17:35
Puisque, semble t il, tu as des pbs de compréhension manifestes qui sont loin d'être justifiés dans l'ensemble :


"= >"

le truc ci dessus sans les guillements (=>) indique une remarque, un
commentaire ou un code que je donne concernant ce qui est cité juste
avant.


exemple :
if ($machin 1) { >

if ($machin = == 1) {


Cela signifie (les 3 lignes ci dessus) qu'il faut remplacer la première ligne (


if ($machin = 1) {) par la troisième
(c'est à dire if ($machin === 1) {)


autre exemple :
la terre est belle

=>

non, je ne suis pas d'accord ...


Il s'agit d'une remarque sur ce qui a été dit précédemment (en l'occurence "la terre est belle")


Est ce si complexe que ça ? D'autant plus que je cite systématiquement le propos/code et que je le mets en italique.

Pour la suite :
en gris et italique : les citations
> : ce qui suit ce ">" est ma réponse
en bleu : ma réponse


"Je remplacerai la fonction sansespace() par :

str_replace(' ','', $str); // inutile à mon sens de passer par une fonction et une regex pour supprimer des espaces"


Je fais quoi ?

Ici c'est un str_......

De
plus je remplace literalement "sansespace()" par "str_replace" donc ma
fonction dans dans ma recherche $sql sera str_replace ?

Cette phrase n'est pas claire, mais j'ai pensé que ca ne pouvait pas être ça.
=>
T'es bien gentil hein, mais je vois mal comment je pourrais être plus clair.
Tu sais lire non ? Et bien alors il n'y a pas de question a se poser, ou alors on les poste dans la foulée, pas un mois plus tard !!
Alors, oui, je conseillais de supprimer la fonction sansespace et de la remplacer par "str_replace...",  y compris dans la requête (ou via une variable temporaire)
Tu voulais pas que je ré écrive tout ton code tout de même ?

Et puis ça :
return str_replace('/^([0-9]{4})(\s?)(..)(\s?)(..)$/', '\\1 \\3 \\5', $str);
=>
return preg_replace('/^([[:digit:]]{2,4})(\s?)([[:alpha:]]{2,4})(\s?)([[:digit:]]{2})$/', '\\1 \\3 \\5', $str);
Car str_replace n'accepte pas les regex"

La je comprends qu'il faut mettre str_.... et non plus preg_......
=>

A aucun moment je n'ai parlé de preg_replace pour la fonction sansespace. Lis ce que les gens écrivent !!!

Mais que deviens la fonciton sansespace() ?
=>
Tu ne voulais pas que je ré écrive ce que j'avais écrit juste avant tout même, si ?

Je fais quoi avec ça ?
Sa ne fonctionne pas les deux en même temps. Logique car la fonction sansespace() a été initialisée déjà une fois.
Et ce jour là on m'écrit qu'il faut lire les message précédents qui sont eux-mêmes pas claire.
= >
si je peux me permettre c'est toi qui n'es pas très claire.

je mets bien str_... partout et là encore je me fais rabaler car se n'est pas ça.
Mais qui à écrit le 3 avril que je dois aussi mettre str_...... pour la fonction sansespace() ?
=>

Voilà ce que tu avais fait :
function sansespace($str){
  str_replace(' ','', $str); // inutile à mon sens de passer par une fonction et une regex pour supprimer des espaces
  return preg_replace('/^([[:digit:]]{2,4})(\s?)([[:alpha:]]{2,4})(\s?)([[:digit:]]{2})$/', '\\1 [../c.aspx?u=ZmlsZTovL1xcMw== \\3][../c.aspx?u=ZmlsZTovL1xcNQ== \\5'], $str);

}

A quel moment ai je écrit qu'il fallait mettre la ligne en rouge ?? => JAMAIS
Apprends à faire l'effort de lire ce que t'écrivent les autres et à te relire avant de dire des bétises !!!
Par ailleurs, si tu avais fait l'effort de te renseigner sur ces fonctions tu aurais tout de suite vu que ce que ce code n'avait aucun sens.

Et qu'est-ce que l'on voit ?!?
preg_.... qui reviens.
= >
t'es vraiment dur de la feuille, il ne revient pas, il est là depuis le 2 avril et je n'ai à aucun moment changé.
Tu t'es aperçu que tu avais 2 fonctions différentes :
avecespace
sansespace (qui pourrait d ailleurs être supprimée)
et que ces 2 fonctions sont différentes ?

et différent du code que j'avais donné, non ?
function avecespace($str) {
return preg_replace
('/^([[:digit:]]{2,4})(\s?)([[:alpha:]]{2,4})(\s?)([[:digit:]]{2})$/', '\\1 \\3 \\5
', $str);
}" Ok je vois bien qu'il y a une différence, mais j'utilise le quel ?

=>
<gras>et différent du code que j'avais donné, non ?

Tu n'es pas capable de faire la différence entre le code que tu as toi même donné juste avant et le code que j'avais donné le 2 avril ? Franchement tu m'inquiètes.
Tu donnes vraiment l'impression d'avoir la flemme de faire le moindre effort

Kohntark -
0
Rejoignez-nous