Probleme php sous MySql

Fermé
KaTaNaSTYLE26 Messages postés 23 Date d'inscription mercredi 6 janvier 2010 Statut Membre Dernière intervention 11 février 2010 - 10 févr. 2010 à 15:20
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 11 févr. 2010 à 15:24
Bonjour,
J'explique un peu mon probleme
j'essaye de faire un filtrage sur une table mysql en php
mais apparament ma requete que j'utilise pose un probleme, INTERSECT ne fonctionne pas sur mysql /(>_<)\


voici mon code pour vous montré ce que je cherche a faire
                        $type='';
			$domaine='';
			$ville='';
			$sql='';
			if ($_POST['type_offre']<>"")
				{
				$type= "select * from offre where type_offre='".$_POST['type_offre']."'";
				}	
			if ($_POST['domaine_rech']<>"")
				{
				$domaine= "select * from offre where domaine='".$_POST['domaine_rech']."'";
				}
			if ($_POST['ville_rech']<>"")
				{
				$ville= "select * from offre where departement='".$_POST['ville_rech']."'";
				}			

			
			if ($type<>'')
				{
				$sql=$type;
				}	
			if ($domaine<>'')
				{
				if ($sql<>'')
					{
					$sql=$sql. " intersect ".$domaine;
					}
				else
					{
					$sql=$domaine;
					}
				}
			if ($ville<>'')
				{
				if ($sql<>'')
					{
					$sql=$sql. " intersect ".$ville;
					}
				else
					{
					$sql=$ville;
					}
				}	
			if ($sql=='')
			{
			$sql="select * from offre";
			}


comment puis-je faire pour reussir a filtré sans intersect?

merci
A voir également:

7 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
10 févr. 2010 à 18:47
avec AND

essayes comme ça:
$type='';
			$domaine='';
			$ville='';
			$sql='';
			if ($_POST['type_offre']!="")	{ //test sur une chaine c'est plutôt !=  que <>
				$type= "SELECT * FROM offre WHERE type_offre='".$_POST['type_offre']."'";
			}	
			if ($_POST['domaine_rech']!=""){
				$domaine= "SELECT * FROM offre WHERE domaine='".$_POST['domaine_rech']."'";
			}
			if ($_POST['ville_rech']!=""){
				$ville= "SELECT * FROM offre WHERE departement='".$_POST['ville_rech']."'";
			}			

			/*
			ensuite $type $domaine $ville ne te renvoie pas ta valeur mais une ressource permettant d'atteindre la zone mémoire ou est stocké le resultat de la requette
			mysql_num_rows permet d'avoir le nombre
			mysql_fetch_array par exemple permet d'aller lire les valeurs cette zone mémoire
			*/
			if (mysql_num_rows($type)>0){
				$sql=$type;
			}			
			if (mysql_num_rows($domaine)>0){
				if ($sql!=''){
					$sql=$sql." AND domaine=".$domaine;
				}else	{
					$sql=$domaine;
				}
			}
			if (mysql_num_rows($ville)>0){
				if ($sql!=''){
					$sql=$sql. " AND ville= ".$ville;
				}else{
					$sql=$ville;
				}
			}	
			if ($sql==''){
				$sql="SELECT * FROM offre";
			}
0
KaTaNaSTYLE26 Messages postés 23 Date d'inscription mercredi 6 janvier 2010 Statut Membre Dernière intervention 11 février 2010 1
11 févr. 2010 à 08:52
le 'AND' ne passe pas malheureusmement...


Erreur SQL !
select * from offre where type_offre='sta' AND select * from offre where departement='26'
Erreur de syntaxe pr�s de 'select * from offre where departement='26'' � la ligne 1
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
11 févr. 2010 à 09:01
ha oui ok, essayes en remplaçant

if (mysql_num_rows($domaine)>0){
if ($sql!=''){
$sql=$sql." AND domaine=".$domaine;



par
if (mysql_num_rows($domaine)>0){
				if ($sql!=''){
					$sql=$sql." AND domaine=".$_POST['domaine_rech'];
0
KaTaNaSTYLE26 Messages postés 23 Date d'inscription mercredi 6 janvier 2010 Statut Membre Dernière intervention 11 février 2010 1
11 févr. 2010 à 09:13
j'ai deja pensé a cette solution mais mon systeme de filtrage ne sortira rien comme resultat car il n'y a pas deux requete max, mais 3, a cause de 3 criteres de recherches, et faire cela fera la recherche sur une valeur vide de domaine (ou departement) si ceux si n'ont pas été initialisé dans le formulaire
0

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

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
11 févr. 2010 à 13:47
une solution totalement différente en passant par un array, plus souple, on peut avoir de 1 à 3 critères, indifféremment:

//init array
$array_criteres=array(); //c'est un array dans lequel on va empiler les critères dont le champ est rempli
			
			//recuperation des champs non vides et empilage dans l'array
			//ATTENTION: ci dessous modifies les index de l'array pour qu'ils correspondent aux noms des champs de ta table BDD
			//ex: $array_criteres['type']  si le champ n'est pas type modifies
			
if (isset($_POST['type_offre']) && $_POST['type_offre']!=""){
	$array_criteres['type']=$_POST['type_offre'];
}

if (isset($_POST['domaine_rech']) && $_POST['domaine_rech']!=""){
	$array_criteres['domaine']=$_POST['domaine_rech'];
}

if (isset($_POST['ville_rech']) && $_POST['ville_rech']!=""){
	$array_criteres['ville']=$_POST['ville_rech'];
}
// construction de la requette
//debut
$requette="SELECT * FROM offre ";
//criteres
$critere=0;
if(sizeof($array_criteres) > 0 ){
	//au moins 1 critere rempli
	foreach($array_criteres as $nom_champ_BDD=>$val_cherchee){
		if($critere == 0){
			//premier critere on met WHERE ...  en compilant par .=
			$requette.="WHERE ".$nom_champ_BDD."='".$val_cherchee."'";
		}else{
			//criteres suivants on rajoute le AND..... en compilant par .=
			$requette.=" AND ".$nom_champ_BDD."='".$val_cherchee."'";
		}
		$critere++;
	}	
}else{
	//cas ou aucun des champs criteres n'a été rempli dans le formulaire
	/// - soit tu sort toute la table: on laisse la requette sans rien rajouter de plus
	// - soit tu mets un message
	///echo 'Vous devez remplir au moins un des criteres !';

}

//la requette est construite on va la soumettre à la BDD
$resultat=mysql_query($requette) or die ('Pb avec la requette '.mysql_error());

//et la suite pour l'affichage avec une boucle while(.....)
0
KaTaNaSTYLE26 Messages postés 23 Date d'inscription mercredi 6 janvier 2010 Statut Membre Dernière intervention 11 février 2010 1
11 févr. 2010 à 15:09
ça marche nickel =D

merci

je connaisais pas cette astuce d'utiliser des array ;)
je note ça quelque part ;)


merci encore

bonne journée
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
11 févr. 2010 à 15:24
en php les array c'est très puissant, tu peux même en avoir a plusieurs dimensions.

Mets en résolu
0