// les valeurs :
$colonne1 = $colonnes[0]; // une colonne pour déterminer le nombre de lignes à afficher
for ($i=0; $i<count($tab_final[$colonne1]); $i++){ // parcourir les lignes
$sql_insert .= "(";
Merci
<?php
$rs = mysql_query("SELECT * FROM annonces_appels_doffre"); // exécution de la requête
// tableau final à construire
$tab_final = array();
// parcours des résultats
while ($row=mysql_fetch_assoc($rs)) {
// extraire les couples (titulé # valeur) séparés par |
$t1 = explode('|', $row);
//echo "<pre>"; print_r($t1); echo "</pre>";
foreach ($t1 as $intitulé_valeur){
// extraire chaque intitulé et sa valeur séparés par #
$intitulé = ""; $valeur = "";
if (trim($intitulé_valeur)!="") { // si bien sur la chaine traitée n'est pas vide
$t2 = explode("#", trim($intitulé_valeur));
// stocker l'intitulé et sa valeur dans le tableau final
if (count($t2)>1) {$intitulé = trim($t2[0]); $valeur = trim($t2[1]);}
if ($intitulé!="") $tab_final[$intitulé][] = trim($valeur); // toutes les valeurs ayant le même intitulé seront stockées ici sous le même index $intitulé
}
}
}
// à la fin du traitement du résultat de la requête, on a un tableau d'activités rempli
// affichage du tableau juste pour le test
//echo "<pre>"; print_r($tab_final); echo "</pre>";
// entêtes de colonnes => les index du tableau
$colonnes = array_keys($tab_final);
// Insertion du résultat final dans la table "module_appel_doffre"
// préparation des requêtes Create et Insert
// les champs:
$sql_create = "CREATE TABLE IF NOT EXISTS `module_appel_doffre` ( ";
$sql_insert = "INSERT INTO `module_appel_doffre` (";
foreach ($colonnes as $index=>$intitulé){
$intitulé = "C".$index."_".$intitulé; // numéroter pour rendre unique le nom d'un champ
$intitulé = preg_replace_callback("#(\w*)\s*#","formatMot",trim($intitulé)); // transformation: mots en maj abrégés à 10 car
$intitulé = trim(substr($intitulé, 0,50)); // transformation: attention sous MySQL, la taille max nom du champ = 64 car
$sql_create .= "`" . $intitulé . "` text,";
$sql_insert .= "`" . $intitulé . "`,";
}
//
$sql_create = preg_replace('#(,)$#', ');', $sql_create); // remplacer la dernière virgule qui traine par );
$sql_insert = preg_replace('#(,)$#', '', $sql_insert); // enlever la dernière virgule qui traine
$sql_insert .= ") VALUES ";
// les valeurs :
$colonne1 = $colonnes[0]; // une colonne pour déterminer le nombre de lignes à afficher
for ($i=0; $i<count($tab_final[$colonne1]); $i++){ // parcourir les lignes
$sql_insert .= "(";
foreach ($colonnes as $colonne){ // afficher les lignes par colonne
if (isset($tab_final[$colonne]) && isset($tab_final[$colonne][$i])) {
$sql_insert .= "'" . addslashes($tab_final[$colonne][$i]) . "',"; // échapper les ' et les " par le slash \
}
else { $sql_insert .= "'',"; } // valeur vide ''
}
$sql_insert = preg_replace('#(,)$#', '', $sql_insert); // enlever la dernière virgule qui traine
$sql_insert .= "),";
}
$sql_insert = preg_replace('#(,)$#', ';', $sql_insert); // remplacer la dernière virgule qui traine par ;
// affichage juste pour le test
//echo "<pre>"; print($sql_create); echo "</pre>";
//echo "<pre>"; print($sql_insert); echo "</pre>";
// Exécution des requêtes
mysql_select_db("test", mysql_connect("localhost", "root")) or die(mysql_error());
mysql_query($sql_create) or die(mysql_error());
mysql_query($sql_insert) or die(mysql_error());
mysql_close();
echo "<p>Les données sont enregistrées dans la table</p>";
// FIN DU PROGRAMME PRINCIPAL
// fonction callback utilisée pour transformer les mots en maj limités à 10 car max
function formatMot($matches){
if (trim(substr($matches[0],0,10))=="") return "";
else return strtoupper(trim(substr($matches[0],0,12))) . "_";
}
?>
$colonne1 = $colonnes[0]; // une colonne pour déterminer le nombre de lignes à afficher
for ($i=0; $i<count($tab_final[$colonne1]); $i++){ // parcourir les lignes
<?php
$rs = mysql_query("SELECT * FROM annonces_appels_doffre"); // exécution de la requête
// tableau final à construire
$tab_final = array();
// parcours des résultats
while ($row=mysql_fetch_assoc($rs)) {
// extraire les couples (titulé # valeur) séparés par |
$t1 = explode('|', $row);
//echo "<pre>"; print_r($t1); echo "</pre>";
foreach ($t1 as $intitulé_valeur){
// extraire chaque intitulé et sa valeur séparés par #
$intitulé = ""; $valeur = "";
if (trim($intitulé_valeur)!="") { // si bien sur la chaine traitée n'est pas vide
$t2 = explode("#", trim($intitulé_valeur));
// stocker l'intitulé et sa valeur dans le tableau final
if (count($t2)>1) {$intitulé = trim($t2[0]); $valeur = trim($t2[1]);}
if ($intitulé!="") $tab_final[$intitulé][] = trim($valeur); // toutes les valeurs ayant le même intitulé seront stockées ici sous le même index $intitulé
}
}
}
// à la fin du traitement du résultat de la requête, on a un tableau d'activités rempli
// affichage du tableau juste pour le test
//echo "<pre>"; print_r($tab_final); echo "</pre>";
// entêtes de colonnes => les index du tableau
$colonnes = array_keys($tab_final);
if (count($colonnes) <=0) { die ("Désolé aucun intitulé n'est trouvé!"); } // sortir du programme car aucune colonne
// Insertion du résultat final dans la table "module_appel_doffre"
// préparation des requêtes Create et Insert
// les champs:
$sql_create = "CREATE TABLE IF NOT EXISTS `module_appel_doffre` ( ";
$sql_insert = "INSERT INTO `module_appel_doffre` (";
foreach ($colonnes as $index=>$intitulé){
$intitulé = "C".$index."_".$intitulé; // numéroter pour rendre unique le nom d'un champ
$intitulé = preg_replace_callback("#(\w*)\s*#","formatMot",trim($intitulé)); // transformation: mots en maj abrégés à 10 car
$intitulé = trim(substr($intitulé, 0,50)); // transformation: attention sous MySQL, la taille max nom du champ = 64 car
$sql_create .= "`" . $intitulé . "` text,";
$sql_insert .= "`" . $intitulé . "`,";
}
//
$sql_create = preg_replace('#(,)$#', ');', $sql_create); // remplacer la dernière virgule qui traine par );
$sql_insert = preg_replace('#(,)$#', '', $sql_insert); // enlever la dernière virgule qui traine
$sql_insert .= ") VALUES ";
// les valeurs :
$colonne1 = $colonnes[0]; // une colonne pour déterminer le nombre de lignes à afficher
for ($i=0; $i<count($tab_final[$colonne1]); $i++){ // parcourir les lignes
$sql_insert .= "(";
foreach ($colonnes as $colonne){ // afficher les lignes par colonne
if (isset($tab_final[$colonne]) && isset($tab_final[$colonne][$i])) {
$sql_insert .= "'" . addslashes($tab_final[$colonne][$i]) . "',";
}
else { $sql_insert .= "'',"; } // valeur vide ''
}
$sql_insert = preg_replace('#(,)$#', '', $sql_insert); // enlever la dernière virgule qui traine
$sql_insert .= "),";
}
$sql_insert = preg_replace('#(,)$#', ';', $sql_insert); // remplacer la dernière virgule qui traine par ;
// affichage juste pour le test
echo "<pre>"; print($sql_create); echo "</pre>";
echo "<pre>"; print($sql_insert); echo "</pre>";
// Exécution des requêtes
mysql_select_db("test", mysql_connect("localhost", "root")) or die(mysql_error());
mysql_query($sql_create) or die(mysql_error());
mysql_query($sql_insert) or die(mysql_error());
mysql_close();
echo "<p>Les données sont enregistrées dans la table</p>";
// FIN DU PROGRAMME PRINCIPAL
// fonction callback utilisée pour transformer les mots en maj limités à 10 car max
function formatMot($matches){
if (trim(substr($matches[0],0,10))=="") return "";
else return strtoupper(trim(substr($matches[0],0,12))) . "_";
}
?>
C6_ADRESSE_INTERNET_
C7_OBJET_DU_MARCH_é
C8_T_éL_.
C9_T_éL_éCOPIEUR_
En fait il se passe deux chose, lorsque que j'essaie de charger mon texte entier dans phpmyadmin il me dit qu'il y a trop de texte donc il ne peut pas être chargé, j'ai donc découpé le texte en plusieurs morceaux de plusieurs annonces... Là tout à fonctionné MAIS le programme ne traite que la première annonce du texte chargé... pourtant il y a plusieurs annonces...C0_R_éF_éRENCE_DU_BOAMP_ C1_ANNONCE_PUBLI_éE_LE_ C2_D_éPARTEMENT_DE_PUBLICATION C3_ANNONCE_NO_ C4_NOM_ET_ADRESSE_OFFICIELS_DE_L_'ORGANISME_ACHETE C5_ADRESSE_INTERNET_ C6_OBJET_DU_MARCH_é C7_CONDITION_ET_MODE_DE_PAIEMENT_POUR_OBTENIR_LES_ C8_CONDITION_DE_REMISE_DES_OFFRES_OU_DES_CANDIDATU C9_DATE_D_'ENVOI_DU_PR_éSENT_AVIS_àLA_PUBLICATION_ C10_T_éL_. C11_T_éL_éCOPIEUR_ C12_INSTANCE_CHARG_éE_DES_PROC_éDURES_DE_RECOURS_ C13_ORGANE_CHARG_éDES_PROC_éDURES_DE_M_éDIATION_ C14_SERVICE_AUPR_èS_DUQUEL_DES_RENSEIGNEMEN_PEUVEN C15_ADRESSE_INTERNET_ C16_OBJET_DU_MARCH_é C17_BOAMP_N_° C18_ANNONCE_N_° C19_NOM_ET_ADRESSE_OFFICIELS_DE_L_'ORGANISME_ACHET C20_CORRESPO_ C21_ADRESSE_INTERNET_DU_PROFIL_D_'ACHETEUR_ C22_LIEU_D_'EX_éCUTION_ C23_CARACT_éRISTIQUES_PRINCIPALES_ C24_DES_VARIANTES_SERONT_-ELLES_PRISES_EN_COMPTE_ C25_PRESTATI_DIVIS_éES_EN_LOTS_ C26_DUR_éE_DU_MARCH_éOU_D_éLAI_D_'EX_éCUTION_ C27_DATE_PR_éVISIONNELLE_DE_COMMENCEMENT_DES_TRAVA C28_CRIT_èRES_D_'ATTRIBUTION_ C29_TYPE_DE_PROC_éDURE_ C30_DATE_LIMITE_DE_R_éCEPTION_DES_OFFRES_ C31_DATE_D_'ENVOI_DU_PR_éSENT_AVIS_àLA_PUBLICATION C32_PRINCIPA_(S_)ACTIVIT_é(S_)DU_POUVOIR_ADJUDICAT C33_LA_PROC_éDURE_D_'ACHAT_DU_PR_éSENT_AVIS_EST_CO C34_MODALIT_éS_ESSENTIELLES_DE_FINANCEMENT_ET_DE_P C35_L_'EX_éCUTION_DU_MARCH_éEST_SOUMISE_àD_'AUTRES C36_CONDITIO_DE_PARTICIPATIO_ C37_CRIT_èRES_DE_S_éLECTION_DES_CANDIDATURES_ C38_MARCH_éR_éSERV_é C39_JUSTIFIC_àPRODUIRE_QUANT_AUX_QUALIT_éS_ET_CAPA C40_D_éLAI_MINIMUM_DE_VALIDIT_éDES_OFFRES_ C41_AUTRES_RENSEIGNEMEN_ C42_ADRESSE_AUPR_èS_DE_LAQUELLE_DES_RENSEIGNEMEN_D C43_COURRIEL_ C44_C_.P_.V_.-OBJET_PRINCIPAL_ C45_CAUTIONN_ET_GARANTIES_EXIG_éS_ C46_FORME_JURIDIQUE_QUE_DEVRA_REV_êTIR_LE_GROUPEME C47_SITUATIO_JURIDIQUE_-R_éF_éRENCES_REQUISES_ C48_RENSEIGN_COMPL_éMENTAIRES_ C49_RENSEIGN_RELATIFS_AUX_LOTS_ C50_NUM_éRO_DE_R_éF_éRENCE_ATTRIBU_éAU_MARCH_éPAR_ C51_CAPACIT_ééCONOMIQUE_ET_FINANCI_èRE_-R_éF_éRENC C52_CAT_éGORIE_DE_SERVICES_ C53_CODE_NUTS_ C54_DATE_LIMITE_D_'OBTENTION_ C55_ADRESSE_AUPR_èS_DE_LAQUELLE_DES_RENSEIGNEMEN_D C56_DATE_LIMITE_DE_R_éCEPTION_DES_CANDIDATURES_ C57_R_éF_éRENCE_PROFESSIONNE_ET_CAPACIT_éTECHNIQUE C58_LIEU_D_'EX_éCUTION_
On peut envisager une recherche générale par mots clés par exemple car faire une recherche sur une colonne en particulier risque d'être assez galère à mettre en place, non?<?php
//si la case responsable est cochee alors on affiche son formulaire
if ($_SESSION['nature'] == "nom") {
?>
<b><u>Dates</u></b>
<font style="font-size:9px; margin-left:10px;"><b><?php echo CHAMPS_OBLIGATOIRES; ?> (*)</b></font><br /><br />
<form action="" method="get">
<table align="center" border="0" cellspacing="1" cellpadding="1" width="100%">
<tr>
<td width="26%" height="33">Date de publication (*) : </td>
<td width="74%"><input type="text" size="30" name="nom" maxlength="14" class="fullsample_bouton" />
et le
<input type="text" size="30" name="nom2" maxlength="14" class="fullsample_bouton" /></td>
</tr>
<tr>
<td width="26%" height="33">Date limite de réponse (*) : </td>
<td width="74%"><input type="text" size="30" name="nom3" maxlength="14" class="fullsample_bouton" />
et le
<input type="text" size="30" name="nom3" maxlength="14" class="fullsample_bouton" /></td>
</tr>
<tr>
<td width="26%" height="33"> </td>
<td width="74%"> </td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="<?php echo RECHERCHER; ?>"></td>
</tr>
</table>
</form>
<?php
}
//si la case raison sociale est cochee alors on affiche son formulaire
elseif ($_SESSION['nature'] == "nom_entreprise") {
?>
<b><u>Département</u></b>
<font style="font-size:9px; margin-left:10px;"><b><?php echo CHAMPS_OBLIGATOIRES; ?> (*)</b></font><br /><br />
<form action="" method="get">
<table align="center" border="0" cellspacing="1" cellpadding="1" width="100%">
<tr>
<td width="27%">N° du Département (*) : </td>
<td width="73%"><input type="text" size="3" name="code_postal2" maxlength="2" class="fullsample_bouton" /></td>
</tr>
<tr>
<td> </td>
</tr>
<tr >
<td> </td>
<td>
<input type="submit" value="<?php echo RECHERCHER; ?>" / > </td>
</tr>
</table>
</form>
<?php
}
//sinon c'est la case Activite qui est cochee alors on affiche son formulaire
else {
?>
<b><u>Activité</u></b>
<font style="font-size:9px; margin-left:10px;"><b><?php echo CHAMPS_OBLIGATOIRES; ?> (*)</b></font><br /><br />
<form action="" method="get">
<table align="center" border="0" cellspacing="1" cellpadding="1" width="100%">
<tr>
<td width="23%">Mot clé(s) : </td>
<td width="77%"><input type="text" size="30" name="mots_cles" maxlength="50" class="fullsample_bouton" /></td>
</tr>
<tr>
<td>N° du Département : </td>
<td><input type="text" size="3" name="code_postal" maxlength="2" class="fullsample_bouton" /></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
<td colspan="2" align="left"><input type="submit" value="<?php echo RECHERCHER; ?>"></td>
</tr>
</table>
</form>
<?php
}
?>
<?php
$conn = db_connect();
$sql = "SELECT *
FROM rechercher_appel_doffre
WHERE C6_OBJET_DU_MARCH_é like '%".$C6_OBJET_DU_MARCH_é ."%' AND C2_D_éPARTEMENT_DE_PUBLICATION_: like '%".$C2_D_éPARTEMENT_DE_PUBLICATION."%'";
$resultat = mysql_query($sql, $conn);
$result = mysql_query($sql, $conn);
?>
SELECT * FROM `module_appel_doffre` WHERE CONCAT(champ1, champ2, ...) LIKE '%valeur du mot-clé%'
Où champ1, champ2, ... sont les noms des colonnes que j'ai récupéré auparavant. Je concatène toutes les valeurs des champs pour obtenir une seule chaine comparable avec LIKE au mot-clé '%valeur du mot-clé%'.///////////////////////////
// recherche par mot-clé
///////////////////////////
if (isset($_GET["mots_cles"])){
// objectif 1: lister les colonnes de la table `module_appel_doffre`
$colonnes_table = array();
$sql = "SHOW COLUMNS FROM `module_appel_doffre`";
// Exécution requête
mysql_select_db("test", mysql_connect("localhost", "root")) or die(mysql_error());
$result = mysql_query($sql) or die(mysql_error());
while ($result && $row = mysql_fetch_array($result)){
$colonnes_table[] = $row["Field"]; // champ "field" contient le nom d'une colonne de la table
}
// objectif 2: réaliser une recherche du mot-clé envoyé par le formulaire dans toutes les colonnes de la table
if (count($colonnes_table)>0){
$sql = "SELECT * FROM `module_appel_doffre` WHERE "; // début de la requête SELECT
$sql .= "CONCAT(`" . implode("`,`", $colonnes_table) . "`) "; // pour avoir le format: CONCAT(champ1, champ2, ...)
$sql .= " LIKE '%" . $_GET["mots_cles"] . "%' "; // pour avoir le format LIKE '%valeur du mot-clé%'
// on obtient : SELECT * FROM `module_appel_doffre` WHERE CONCAT(champ1, champ2, ...) LIKE '%valeur du mot-clé%'
// Exécution requête
mysql_select_db("test", mysql_connect("localhost", "root")) or die(mysql_error());
$result = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($result)>0){
// affichage sous forme de table html
echo "<table border=\"1\"><tr>";
// entête de colonnes
foreach ($colonnes_table as $colonne){
echo "<th>", $colonne, "</th>";
}
echo "</tr>";
// lignes détail => valeurs des cases du tableau
while ($result && $row = mysql_fetch_row($result)){
echo "<tr>";
foreach ($row as $valeur_colonne){
echo "<td>", $valeur_colonne, "</td>";
}
echo "</tr>";
}
echo "</table>";
}
else {
echo "<p>Mot-clé '", $_GET["mots_cles"], "' non trouvé!</p>";
}
}
} // fin if isset($_GET["mots_cles"])
?>
<fieldset class="fieldset">
<legend class="legend">Consultation des annonces de marchés publics
</legend>
<b><u>Recherche par Mots Clés</u></b>
<font style="font-size:9px; margin-left:10px;"><b><?php echo CHAMPS_OBLIGATOIRES; ?> (*)</b></font><br /><br />
<form action="" method="get">
<table align="center" border="0" cellspacing="1" cellpadding="1" width="100%">
<tr>
<td width="26%" height="33">Votre recherche(*) : </td>
<td width="74%"><input type="text" size="30" name="nom" maxlength="14" class="fullsample_bouton" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="<?php echo RECHERCHER; ?>"></td>
</tr>
</table>
</form>
</fieldset>
<?php
///////////////////////////
// recherche par mot-clé
///////////////////////////
if (isset($_GET["mots_cles"])){
// objectif 1: lister les colonnes de la table `rechercher_appel_doffre`
$colonnes_table = array();
$sql = "SHOW COLUMNS FROM `rechercher_appel_doffre`";
// Exécution requête
mysql_select_db("base", mysql_connect("serveur", "table", "pass")) or die(mysql_error());
$result = mysql_query($sql) or die(mysql_error());
while ($result && $row = mysql_fetch_array($result)){
$colonnes_table[] = $row["Field"]; // champ "field" contient le nom d'une colonne de la table
}
// objectif 2: réaliser une recherche du mot-clé envoyé par le formulaire dans toutes les colonnes de la table
if (count($colonnes_table)>0){
$sql = "SELECT * FROM `rechercher_appel_doffre` WHERE "; // début de la requête SELECT
$sql .= "CONCAT(`" . implode("`,`", $colonnes_table) . "`) "; // pour avoir le format: CONCAT(champ1, champ2, ...)
$sql .= " LIKE '%" . $_GET["mots_cles"] . "%' "; // pour avoir le format LIKE '%valeur du mot-clé%'
// on obtient : SELECT * FROM `pefac_rechercher_appel_doffre` WHERE CONCAT(champ1, champ2, ...) LIKE '%valeur du mot-clé%'
// Exécution requête
mysql_select_db("base", mysql_connect("serveur", "table", "pass")) or die(mysql_error());
$result = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($result)>0){
// affichage sous forme de table html
echo "<table border=\"1\"><tr>";
// entête de colonnes
foreach ($colonnes_table as $colonne){
echo "<th>", $colonne, "</th>";
}
echo "</tr>";
// lignes détail => valeurs des cases du tableau
while ($result && $row = mysql_fetch_array($result)){
echo "<tr>";
foreach ($row as $valeur_colonne){
echo "<td>", $valeur_colonne, "</td>";
}
echo "</tr>";
}
echo "</table>";
}
else {
echo "<p>Mot-clé '", $_GET["mots_cles"], "' non trouvé!</p>";
}
}
} // fin if isset($_GET["mots_cles"])
?>
<fieldset class="fieldset"><legend class="legend">Résultat de votre recherche</legend>
<?php
$conn = db_connect();
$rech_sql = "SELECT * FROM rechercher_appel_doffre";
$resultat_rech = mysql_query($rech_sql, $conn);
echo "<div style='overflow: scroll; border: #000000 0px solid; height: 950px; margin-left: 5px; margin-right: 5px;'><ul>";
while ($nom_resp = mysql_fetch_array($resultat_rech)) {
echo '<font size="2"><b>Recherche : </b>'.mb_strtoupper($nom_resp['mots_cles']).'</font>'.'<br>';
}
echo "</ul></div>";
?>
</fieldset>
Mais ça ne fonctionne pas! en fait je n'arrive pas à comprendre comment relier le formulaire de recherche avec ton code... Je pense que je suis sur la bonne voie mais presque seulement!