Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & Oracle
PHP & Oracle Forum d'entraide sur Oracle avec PHP. Avant de poster -> FAQ Oracle et Cours Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/10/2011, 12h00   #1
Membre du Club
 
Inscription : décembre 2008
Messages : 315
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 315
Points : 53
Points : 53
Par défaut Formulaire Respect casse

Bonjour,

Voilà j ai un formulaire que les utilisateurs remplissent avec leur nom prenom ... quand il valide je vais via un select chercher certains champs dans ma base oracle et je leur affiche sous forme de tableau

jusqu ici tout va bien mon problème c est que si la personne me mets sébastien et que dans la base il est indiqué comme sebastien (sans accent) il ne ressortira pas ...

comment faire en sorte que lors de mon select la casse ne soit pas respecté

voici le traitement de mon formulaire

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
$tab=array_filter($_POST);
unset($tab['ok']);
			$cols = array();
			foreach($tab as $key=>$val) 
				{
					$cols[] = "$key= '$val'";
				}
			$conditions=implode(' AND ',$cols);	
			if ($conditions) $conditions="WHERE $conditions";
			$query= "SELECT * FROM matable $conditions";
			$statement = OCIParse($connexion,$query) or die ("Problème avec la requête");
			OCIExecute ($statement,OCI_DEFAULT);
			while (OCIFetchInto($statement, $row, OCI_ASSOC))
				{
					$nom=$row['nom'];
					echo $nom;
					....
					....
Merci de votre aide
stefanelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 12h23   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 031
Points : 5 031
Enlèves les accents au besoin:
Code :
1
2
3
$texte = strtr($texte,
  '@ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
  'aAAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
Citation:
comment faire en sorte que lors de mon select la casse ne soit pas respecté
La casse et l'accentuation sont deux choses différentes - la casse concerne la distinction entre majuscules et minuscules.
Si la casse aussi pose problème, utilise strtolower ou strtoupper au besoin.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 12h27   #3
Membre confirmé
 
Homme Lionel Chaumeau
Développeur Web
Inscription : octobre 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Lionel Chaumeau
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2011
Messages : 75
Points : 264
Points : 264
Bonjour,
Citation:
Envoyé par stefanelle Voir le message
comment faire en sorte que lors de mon select la casse ne soit pas respecté
je suis pas un expert en Oracle (!) mais un translate par Oracle devrait te permettre cela, nan ?
ex:
Code :
translate(lower('%sé%'),'éèêë','eeee')
__________________
My laptop, my bike and my double-sticks...
kalimukti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 12h53   #4
Membre du Club
 
Inscription : décembre 2008
Messages : 315
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 315
Points : 53
Points : 53
Merci pour vos réponses en fait c est les deux casse + accent

j ai essayé CA

Code :
1
2
3
4
5
foreach($tab as $key=>$val) 
				{
				$val= strtr($val,'@ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','aAAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
					$cols[] = "$key= '$val'";
				}
sans succès :-(
stefanelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 13h23   #5
Membre du Club
 
Inscription : décembre 2008
Messages : 315
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 315
Points : 53
Points : 53
En fait mon souci c 'st que dans ma base je peux avoir tous les accents des majuscules des minuscules.

Dans ma base Sébastien peut s'écrire sebastien Sebastien SEBASTIEN ...

La fonction translate apparemment permet de remplacer donc si une personne tape sebastien et que ca me le remplace par sébastien grace a ma fonction translate il me ressortira que les sébastien et non les autres ....

J espère être clair en gros faudrait qu il fasse un select dans la base en prenant en compte toutes les possibilités ... et qu'il me les renvoient dans mes rows ...
stefanelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 13h46   #6
Membre du Club
 
Inscription : décembre 2008
Messages : 315
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 315
Points : 53
Points : 53
Pour les majuscules c'est réglé en faisant ça

Code :
1
2
3
4
foreach($tab as $key=>$val) 
				{
					$cols[] = "UPPER($key) = UPPER('$val')";
				}
mais pour les accents ...
stefanelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 14h28   #7
Membre confirmé
 
Homme Lionel Chaumeau
Développeur Web
Inscription : octobre 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Lionel Chaumeau
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2011
Messages : 75
Points : 264
Points : 264
je vois pas de raison pour que la code donné plus haut pour strtr ne marche pas...
peut-être n'as-tu pas essayé les deux ensembles ?

Code :
1
2
3
4
5
6
 
foreach($tab as $key=>$val) 
{
      $val= strtr($val,'@ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','aAAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
      $cols[] = "UPPER($key) = UPPER('$val')";
}
__________________
My laptop, my bike and my double-sticks...
kalimukti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 14h51   #8
Membre du Club
 
Inscription : décembre 2008
Messages : 315
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 315
Points : 53
Points : 53
Je viens de tester à nouveau avec la fonction strtr

en fait si ça marche mais ça ne convient pas

dans ma table j'ai une ligne avec le prénom sébastien et une ligne avec le prénom sebastien

si je fais avec la fonction strtr il ne m'affiche que la ligne sebastien et pas celle avec l'accent alors que moi je souhaite les deux.
stefanelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 15h22   #9
Membre confirmé
 
Homme Lionel Chaumeau
Développeur Web
Inscription : octobre 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Lionel Chaumeau
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2011
Messages : 75
Points : 264
Points : 264
Citation:
Envoyé par stefanelle Voir le message
si je fais avec la fonction strtr il ne m'affiche que la ligne sebastien et pas celle avec l'accent alors que moi je souhaite les deux.
Ben là:
tu doubles tes enregistrements de $val dans $col[] :
Code :
1
2
3
4
5
6
foreach($tab as $key=>$val) 
{
      $cols[] = "UPPER($key) = UPPER('$val')";
      $val= strtr($val,'@ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','aAAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
      $cols[] = "UPPER($key) = UPPER('$val')";
}
par contre, il faut que tu mettes un OR qq part (dans ton code tu as que des AND)
du coup, avec un truc du style:
Code :
1
2
3
4
5
foreach($tab as $key=>$val) 
{
      $valor= strtr($val,'@ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','aAAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
      $cols[] = "(UPPER($key) = UPPER('$val') OR UPPER($key) = UPPER('$valor'))";
}
__________________
My laptop, my bike and my double-sticks...
kalimukti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 15h59   #10
Membre du Club
 
Inscription : décembre 2008
Messages : 315
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 315
Points : 53
Points : 53
C'est parfait c'est le résultat que je souhaite sauf .....

que maintenant pour obtenir le résultat de ma requête je mets 25 secondes au lieu de 1 seconde ... c'est le UPPER qui ralentit tout .... y a t-il un moyen d'éviter cela ?
stefanelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 16h11   #11
Membre confirmé
 
Homme Lionel Chaumeau
Développeur Web
Inscription : octobre 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Lionel Chaumeau
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2011
Messages : 75
Points : 264
Points : 264
un strtoupper en php t'évite de demander ce travail-là à ton sgbd
__________________
My laptop, my bike and my double-sticks...
kalimukti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 16h13   #12
Membre du Club
 
Inscription : décembre 2008
Messages : 315
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 315
Points : 53
Points : 53
ah vi j'avais pas pensé à ça :-)

merci pour tout kalimukti
stefanelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 17h01   #13
Membre du Club
 
Inscription : décembre 2008
Messages : 315
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 315
Points : 53
Points : 53
bon pour info

voilà ce que j'ai fait je me suis pris la tète mais ça marche et c'est rapide

Code :
1
2
3
4
5
6
7
8
9
foreach($tab as $key=>$valor) 
				{
					$valor1= strtr($valor,'@ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','aAAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
					$valor2=strtoupper($valor);
					$valor3=strtoupper($valor1);
					$valor4 = ucfirst($valor);
					$valor5 = ucfirst($valor1);
					$cols[] = "($key = '$valor' OR $key = '$valor1' OR $key = '$valor2' OR $key = '$valor3' OR $key = '$valor4' OR $key = '$valor5')";
				}
stefanelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h16.


 
 
 
 
Partenaires

Hébergement Web