PHP vers sql ou excel

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

05 avr. 2011, 13:46

Ben tu diminue encore : met 50 au lieu de 64.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 687 Messages

05 avr. 2011, 21:03

Ok, la valeur et changé et l'erreur a disparu mais une autre est arrivée... :(

ERREUR:

Notice: Undefined offset: 0 in /homez.333/attels/www/SITE/fichier_trasfert.php on line 153

Notice: Undefined index: in /homez.333/attels/www/SITE/fichier_trasfert.php
Cela correspond à ces deux lignes:
on line 154
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
// 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

Mammouth du PHP | 687 Messages

05 avr. 2011, 23:15

j'ai l'impression que la aussi il faut faire un isset d'après mes recherches mais à chaque fois que je le mets en place le programme plante... donc suis définitivement avec ça! :oops:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

05 avr. 2011, 23:44

Oui bien sûr c'est ça, il faut faire des isset() avant d'utiliser un tableau indexé : c'est une règle fondamentale car on ne sait pas dans la boucle $i si l'index existe ou pas.

Voici en tout cas le programme en entier repris à la dernière version et corrigé :
 <?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))) . "_";
}
?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 687 Messages

05 avr. 2011, 23:54

Merci...!
Je viens de tester mais il y a toujours cette même erreur... :(
J'ai l'impression que la version que tu m'as donné ne contient pas l'ISSET
$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

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

06 avr. 2011, 00:27

Voici le code retouché. J'ai ajouté une condition if qui empêche le programme de continuer s'il n' y a pas de colonnes dans le tableau (c'est un cas vraiment particulier) mais en tout cas j'ai activé l'affichage des variable pour le débogage pour voir ce qui se passe derrière.
 <?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))) . "_";
}
?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 687 Messages

06 avr. 2011, 01:14

Merci beaucoup!
Tu es un champion! Je tiens à m'excuser pour tout ce dérangement mais grâce à toi, non seulement j'ai appris beaucoup de choses et j'ai pu avancer!

Merci!
Je peux désormais mettre ce sujet en classé! 8-)

Mammouth du PHP | 687 Messages

06 avr. 2011, 09:56

Euh... non finalement...
Le programme en lui même fonctionne bien même s'il me fait une table un peu bizarre parfois du genre:
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...

Je ne comprends pas du tout... est-ce qu'il y a un moyen d'augmenter ce traitement ou faire autrement pour qu'il puisse scanner tout la table et toutes les cellules?

Merci et vraiment désolé de te redéranger... :?

Mammouth du PHP | 687 Messages

06 avr. 2011, 10:41

ok j'ai compris, il fallait que toutes les annonces commencent de la même façon... ;-)
Je commence à m'améliorer!

Mammouth du PHP | 687 Messages

06 avr. 2011, 11:17

Par contre sais-tu comment je lancer une recherche sur cette table à travers un php?

les intitulés de la table sont:
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?
J'ai essayé de faire cela mais à chaque fois ça me dit aucuns résultats (j'ai bien entendu connecté ce formulaire à la table) :
<?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&eacute;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">&nbsp;</td>
   		<td width="74%">&nbsp;</td>
    </tr>   
    <tr>    
        <td>&nbsp;</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&eacute;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&deg; du D&eacute;partement (*) : </td>
   		<td width="73%"><input type="text" size="3" name="code_postal2" maxlength="2" class="fullsample_bouton" /></td>
	</tr>
	<tr>
   		<td>&nbsp;</td>
	</tr>
	<tr >
    <td>&nbsp;</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&eacute;</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&eacute;(s) : </td>
	  <td width="77%"><input type="text" size="30" name="mots_cles" maxlength="50" class="fullsample_bouton" /></td>
	  </tr>
	<tr>
		<td>N&deg; du D&eacute;partement : </td>
		<td><input type="text" size="3" name="code_postal" maxlength="2" class="fullsample_bouton" /></td>	
	</tr>
	<tr>
   		<td>&nbsp;</td>
	</tr>
	<tr>
    <td>&nbsp;</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);
?>

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

06 avr. 2011, 19:25

Si on me demandait de rechercher un mot-clé à l'aveuglette dans une table et dans toutes ses colonnes sans connaitre à l'avance les noms et le nombre de colonnes de la table, je lancerais d'abord une requête "SHOW COLUMNS FROM `module_appel_doffre`" pour récupérer la liste des colonnes puis écrire une requête qui recherche le mot-clé dans toutes les colonnes de cette liste. Une telle requête je l'écrirais comme ça:
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é%'.

Voici donc le programme php qui fait ça :
1. récupère la liste des colonnes de la table
2. construit la requête de recherche en concaténant les champs et faisant le like puis exécute la requête et affiche le résultat dans une table HTML
(au cas ou aucun résultat n'est trouvé un message équivalent est affiché)
///////////////////////////
// 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"])
?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 687 Messages

06 avr. 2011, 19:44

C'est complétement top! MERCIIIIIII!
Donc si j'ai bien compris il me suffit de construire le formulaire de recherche, c'est bien ça?
Il faut un champs de recherche et le bouton submit, c'est bien ça?

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

06 avr. 2011, 21:07

wi wi :lol:
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 687 Messages

06 avr. 2011, 23:01

Ok.
Je vais essayer de construire ça. :D

Mammouth du PHP | 687 Messages

06 avr. 2011, 23:29

Hello,

Voici ce que j'ai fait :
<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>&nbsp;</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&eacute;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! :lol: