requete multiple sous sql

Petit nouveau ! | 3 Messages

02 oct. 2009, 19:07

Bonjour,

j'ai un problème de récupération a ma base de donné, je m explique, je travaille dans un grand groupe et je souhaiterai faire un annuaire de tous le personnel et de toutes les société et personne présente dans le groupe, je souhaiterai donc faire une page un peu comme les pages jaunes avec un champs qui/quoi et un champs ou.

Je vous laisse mon programme en php, si vous pourriez me donnez la solution je vous en serrez tres reconnaissant, en vous remerciant par avance.
voici mon programme :
 

 
<form action="traitement.php" method="post">
 <br />  Recherche rapide :</h1>
<form method="post" action="traitement.php">
<p>
       <label for="qui" style="FONT-SIZE: 25pt;" >Qui?Quoi?ex:Artisan,Restaurant,Commerce...</label> 
       <input type="text" style="FONT-SIZE: 25pt;" name="qui" id="qui" value="" size="60" maxlength="20" />
	  
	  <label for="ou" style="FONT-SIZE: 25pt;" >Ou?ex:ville,code postal,adresse.</label> 
       <input type="text" style="FONT-SIZE: 25pt;" name="ou" id="ou" value="" size="60" maxlength="20" />
</p>
<input name="submit" type="image" img src="pic/deco/resultat.png"  id="submit">
</form>

 
 
 
<?php
 
// Maintenant on doit récupérer les 10 dernières entrées de la table
// On se connecte d'abord à MySQL :
mysql_connect("*****", "*****","******"); // Connexion à MySQL
mysql_select_db("********"); // Sélection de la base varpro
 
$qui = htmlspecialchars ($_POST['qui']);
$ou = htmlspecialchars ($_POST['ou']);

$reponse = mysql_query("SELECT CONCAT(Société,Activité) FROM varpro WHERE Activité Like '%$qui%'");
UNION
$reponse2 = mysql_query("SELECT CONCAT(Adresse,Code.Postal) FROM varpro WHERE Code.Postal  Like '%$ou%'");



while ($donnees = mysql_fetch_array($reponse)
while ($donnees2 = mysql_fetch_array ($reponse2) )
{
?>
    <p>
	<strong>requete</strong> : <?php echo $donnees['Société']; ?><br />
    <strong>Société</strong> : <?php echo $donnees2['Code.Postal']; ?><br />
    Email :<?php echo $donnees['Email']; ?><br />
	Site Internet:<?php echo $donnees['Site Internet']; ?><br /> 
    Activite:<?php echo $donnees['Activité']; ?><br /> 
    Adresse :<?php echo $donnees['Adresse']; ?> <br /> 
	Code.Postal:<?php echo $donnees['Code.Postal']; ?><br />
	Ville :    <?php echo $donnees['Ville']; ?><br />
	Tel.n°1 <?php echo $donnees['Tel.n°1']; ?><br /> 
	Tel.n°2<?php echo    $donnees['Tel.n°2']; ?><br /> 
	Fax :<?php echo    $donnees['Fax']; ?><br /> 
	Mobile :<?php echo    $donnees['Mobile']; ?><br /> 
   </p>
<?php
}
mysql_close(); 

?>
 
<p><strong><?php echo $donnees['societe']; ?></strong> :
 
Je vous laisse la structure de ma base de donnée pour vous aidez
CREATE TABLE IF NOT EXISTS `*******` (
  `Société` text NOT NULL,
  `Email` text NOT NULL,
  `Site Internet` text NOT NULL,
  `Activité` text NOT NULL,
  `Adresse` text NOT NULL,
  `Code.Postal` text NOT NULL,
  `Ville` text NOT NULL,
  `Tel.n°1` text NOT NULL,
  `Tel.n°2` text NOT NULL,
  `Fax` text NOT NULL,
  `Mobile` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Vous l'aurez compris mon problème vient du fait que je doit faire une requête multiple puisque le programme doit avec une seul champs de requête effectué plusieurs contrôle dans différente catégorie de ma table
en fait j essaie de faire exactement ce que fait www.pagesjaunes.fr mais juste dans mon groupe.

En vous remerciant par avance
Jeff83fr

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

08 oct. 2009, 14:01

Non justement je n'ai pas compris le problème, ok t'as du code et j'ai vagument saisi le principe mais c'est quoi qui marche pas exactement ??

Kran
Invité n'ayant pas de compte PHPfrance

08 oct. 2009, 17:34

Hum... a mon avis c'est juste un bête problème de sql....
// ton code :
$reponse = mysql_query("SELECT CONCAT(Société,Activité) FROM varpro WHERE Activité Like '%$qui%'");
UNION
$reponse2 = mysql_query("SELECT CONCAT(Adresse,Code.Postal) FROM varpro WHERE Code.Postal  Like '%$ou%'");

// je te propose de remplacer par quelquechose du genre :
$reponse = mysql_query("SELECT Société, Activité, Adresse, Code.Postal FROM varpro WHERE Activité Like '%$qui%' AND Code.Postal  Like '%$ou%' ");

Mais je vois plusieurs problèmes accessoires :
  • Pourquoi y'a t'il 2 balises <form> ouvrantes ?
  • Cetaines balises ne sont pas ouvertes avant d'être fermées (ex: la balise </h1> en ligne 2)... pour le moins étrange
  • Les porpriétés "style" s'écriraient plutot : style="{font-size:25pt;}"
  • ET SURTOUT : Les noms de champs de base de données avec des points au milieu c'est pourrave ! (Code.Postal) puisque le point est utilisé par toutes les bases de données que je connais pour faire la séparation entre le nom de la table et le nom du champ... (éventuellement le nom du shéma pour les BDD qui le supportent...)

Invité
Invité n'ayant pas de compte PHPfrance

08 oct. 2009, 17:44

@ouckileou
A mon avis en l'état y'a rien qui marche :lol:
Bon ok j'aide pas monsieur a progresser car savoir exprimer sa question proprement c'est déja avoir la moitié d'la réponse mais allez... soyons charitable ^^

Kran
Invité n'ayant pas de compte PHPfrance

08 oct. 2009, 18:03

A au fait... excuses moi de poster et de reposter :?
mais il me vient une idée :

Si tu est dans un grand group, je suppose qu'il doit y avoir un ou plusieurs annuaires LDAP qui trainent dans l'coin...
Pourquoi tu n'essayes pas plutôt de t'interfacer avec ça pour rappatrier tes contacts au lieu de créer ta propre BDD ?
Peut-être que tu mettras un tout p'ti peu plus de temps à comprendre comment ça marche, mais au final ce sera surement plus rapide que de te retapper tous les noms des gens et leur coordonnées à la main si les annuaires sont bien tenus ^^... et les fonctions ldap de php sont assez bien foutues...

Mais ce n'est qu'une suggestion !

ViPHP
ViPHP | 2291 Messages

10 oct. 2009, 18:00

Salut,
A la grosse louche comme ceci cela donne quoi ?
<?php

$resul =(isSet($_GET['resultat']) ? $_GET['resultat'] : null);

switch ($resul)
 {
	  case 'resultat':


	          //--> Définition des paramètres de connexion à la base de données.//

           				$db_host  = 'localhost';        //-->Serveur sur lequel se trouve le serveur de base de données.//
           				$db_login = '';           //-->Login de connexion à la base de données.//
           				$db_pass  = '';     //-->Passeword de connexion à la base de données.//
           				$db_base  = '';       //-->Base de données.//

           			    //--> Fin des paramètres de connexion à la base de données.//


           			    //-->Connexion à la base de données.//

           			    $sql_db = mysql_connect($db_host, $db_login, $db_pass) or die("<font color='#0000A0'>Erreur MySQL :<br />" . $sql_db .
           			    "<br />" . "Impossible d'établir une connexion avec le serveur MySQL</font>");

           			    mysql_select_db($db_base) or die("<font color='#0000A0'>Erreur MySQL :<br />" . $db_base . "<br />" .
           			    "Impossible d'établir une connexion avec la base " . $db_base . "</font>");

           			    //-->Fin de la requête de connexion à la base de données.//

			$qui = (isSet($_POST['qui']) ? htmlspecialchars ($_POST['qui']) : null);
			$ou = (isSet($_POST['ou']) ? htmlspecialchars ($_POST['ou']) : null);

			$ActionQui = "WHERE Activité LIKE '%$qui%'";
			$ActionOu  = "WHERE Code_Postal LIKE '%$ou%'";

			$Clause = (isSet($_POST['qui']) && ($_POST['qui'] != '') ? $ActionQui : $ActionOu );

			echo $reponse ="SELECT *  FROM varpro " .$Clause ;
			$req = mysql_query($reponse) or die('Erreur SQL !'.$reponse.'<br>'.mysql_error());





			//while ($donnees = mysql_fetch_array($reponse)
			while ($donnees = mysql_fetch_array ($req) )
			{

			    echo'<p>
			        <strong>requete</strong> : '. $donnees['Société'].'<br />
			        <strong>Société</strong> : '. $donnees['Code.Postal'].'<br />
			        Email :'.$donnees['Email'].'<br />
			        Site Internet:'. $donnees['Site Internet'].'<br />
			        Activite:'. $donnees['Activité'].'<br />
			        Adresse :'.$donnees['Adresse'].' <br />
			        Code.Postal:'. $donnees['Code.Postal'].'<br />
			        Ville :    '. $donnees['Ville'].'<br />
			        Tel.n°1 '.$donnees['Tel.n°1'].'<br />
			        Tel.n°2'.$donnees['Tel.n°2'].'<br />
			        Fax :'.  $donnees['Fax'].'<br />
			        Mobile :'.$donnees['Mobile'].'<br />
			    </p>';
			    echo '<p><strong>'.$donnees['societe'].'</strong> :';

			}

	    break;

	  default;
	      echo'<form action="traitement.php?resultat=resultat" method="post">
				 <br />  Recherche rapide :</h1>
				<form method="post" action="traitement.php">
				<p>
				       <label for="qui" style="FONT-SIZE: 25pt;" >Qui?Quoi?ex:Artisan,Restaurant,Commerce...</label>
				       <input type="text" style="FONT-SIZE: 25pt;" name="qui" id="qui" value="" size="60" maxlength="20" />

				          <label for="ou" style="FONT-SIZE: 25pt;" >Ou?ex:ville,code postal,adresse.</label>
				       <input type="text" style="FONT-SIZE: 25pt;" name="ou" id="ou" value="" size="60" maxlength="20" />
				</p>
				<input name="submit" type="image" img src="pic/deco/resultat.png"  id="submit">
				</form>';
	    break;
 }
?>
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Petit nouveau ! | 3 Messages

12 oct. 2009, 11:16

Merci pour la réponse, mais cela ne marche pas, apres avoir renseigné les "adresses" de ma base de donne(host login pass ...), si je fais une recherche ,il m'écrit SELECT * FROM varpro WHERE Activité LIKE '%peintre%' simplement.

De plus je voudrai bien essaye de comprendre un peu votre code :
1 pourquoi mettre des % a : $ActionQui = "WHERE Activité LIKE '%$qui%'";
$ActionOu = "WHERE Code_Postal LIKE '%$ou%'";


2 je comprend pas le clause $Clause = (isSet($_POST['qui']) && ($_POST['qui'] != '') ? $ActionQui : $ActionOu );
echo $reponse ="SELECT * FROM varpro " .$Clause ;
je comprend son rôle mais pas la syntaxe utilisé? pourquoi != par exemple ou ?$Action Qui : $Action OU

3 je voudrai que lorsque je tape ou je voudrai que si je tape une adresse par exemple zi les paluds(au lieu de 75005), il retrouve l'entreprise, et idem pour le "qui", or si j ai bien compris ce code cela ne marchera pas

4 pourquoi le html est inclue dans le php je pensai que cela n'était pas possible, et que le html devait toujours être exclu du php

En tout cas je vous remercie pour votre aide, je débute en php je me débrouille seul pour les requête de base mais je doit reconnaitre que je "cale".

Pour répondre a Kran, je n 'ais pas de base de donnée puisque les société ciblé sont en fait des "client/partenaire" indépendant

et merci pour la proposition mais ca marche pas non plus :(

enfin encore merci de m aider
jeff83fr

ViPHP
ViPHP | 2291 Messages

12 oct. 2009, 14:00

$Clause = (isSet($_POST['qui']) && ($_POST['qui'] != '') ? $ActionQui : $ActionOu );
echo $reponse ="SELECT * FROM varpro " .$Clause ;
L'idée étais de faire en sorte que si le champ qui contenais une valeur ont effectue une requete
SELECT * FROM varpro FROM varpro WHERE Activité Like '%$qui%'
Qui ne fait que reprendre la votre du premier poste

Par contre si le champ qui est vide on prend on effectue l'autre requete avec le ou
Maintenant ceci
$Clause = (isSet($_POST['qui']) && ($_POST['qui'] != '') ? $ActionQui : $ActionOu );
Veux dire si le champ qui existe et qu'il est différent de vide( != '') on éffectue $ActionQui dans le cas contraire $ActionOu

Maintenant ceci étais une idée je suis peut-être a côter des mes pompes :)
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.