PHP vers sql ou excel

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

07 avr. 2011, 00:10

L'erreur est dans le formulaire : le nom du champ input de recherche doit être nommé : "mots_cles" car le programme utilise $_GET["mots_cles"]
Correction:
  <td width="26%" height="33">Votre recherche(*) : </td>
  <td width="74%"><input type="text" size="30" name="mots_cles" maxlength="14" class="fullsample_bouton" /></td>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 687 Messages

07 avr. 2011, 00:29

ah oui en effet c'est beaucoup mieux! :D
Par contre il m'affiche le tableau en entier avec les titre de la table sql...
Du genre : 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

etc.
Il n'y a pas un moyen de renommer les colonnes autres ou alors afficher juste les infos de la colonne en cohérence avec la recherche et moi dans un php j'écris:
N° de l'annonce:
Département de publication:
Date d'échéance:
Lien [bouton] vers la page php (que je suis en train de faire) qui affichera l'annonce complète...

Mammouth du PHP | 687 Messages

07 avr. 2011, 10:54

bon j'ai réussi à retiré les titre des colonnes et à présenter comme je voulais.
Par contre je n'ai qu'un résultat qui s'affiche....
ce qui donne :
Numéro annonce : 11-79038
Département :
Date de publication :
<?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("", mysql_connect("", "", "")) 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 `rechercher_appel_doffre` WHERE CONCAT(champ1, champ2, ...) LIKE '%valeur du mot-clé%'
                // Exécution  requête
                mysql_select_db("", mysql_connect("", "", "")) or die(mysql_error());
                $result = mysql_query($sql) or die(mysql_error());
				                if (mysql_num_rows($result)>0){
                        // affichage sous forme de table html


                        // lignes détail => valeurs des cases du tableau
                        while ($result && $row = mysql_fetch_array($result)){
                                echo "Numéro annonce : ".$row['C0_R_éF_éRENCE_DU_BOAMP_']."<br>"; 
								echo "Département : ".$row['C2_D_éPARTEMENT_DE_PUBLICATION']."<br>";
								echo "Date de publication : ".$row['C1_ANNONCE_PUBLI_éE_LE_ ']."<br>";
								echo " ICI MON LIEN VERS LA FICHE CORRESPONDANTE AU CLIC";
								
                        }
                        echo "</table>";
                }
                else {
                        echo "<p>Mot-clé '", $_GET["mots_cles"], "' non trouvé!</p>";
                }
        }
} // fin if isset($_GET["mots_cles"])
?>


Merci! :wink:

Mammouth du PHP | 687 Messages

07 avr. 2011, 14:48

j'ai trouvé mon erreur!
J'ai mis le temps mais je sais maintenant! 8-)

En fait il faut mettre ça : $row['C0_R_éF_éRENCE_DU_BOAMP_']
au lieu de $row["C0_R_éF_éRENCE_DU_BOAMP_"]
c'est la double quote que la requête n'a pas supporté!

OUF! :wink:

Mammouth du PHP | 687 Messages

07 avr. 2011, 16:48

Bon alors je suis en train de travailler sur la page (afficher_appels_doffre.php) d'affichage d'une annonce complète:
En effet, lorsqu'on lance une recherche, un résultat apparaît avec la mention "Lire la suite"
<?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("", mysql_connect("", "", "")) 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 `rechercher_appel_doffre` WHERE CONCAT(champ1, champ2, ...) LIKE '%valeur du mot-clé%'
                // Exécution  requête
                mysql_select_db("", mysql_connect("", "", "")) or die(mysql_error());
                $result = mysql_query($sql) or die(mysql_error());
				                if (mysql_num_rows($result)>0){
                        // affichage sous forme de table html


                        // lignes détail => valeurs des cases du tableau
                        
							echo "<br><div style='overflow: scroll; border: #000000 0px solid; height: 800px; margin-left: 5px; margin-right: 5px;'>";
                                echo "<table cellpadding=\"5\" border=\"1\" bgcolor=\"#e5e3e3\">";
								echo "<tr>";
								

								echo "<th style=\"text-align:left\"><b>Date de publication</b></th>";
								echo "<th style=\"text-align:left\"><b>Objet du marché</b></th>";
								echo "<th style=\"text-align:left\"><b>Dépt.</b></th>";
								
								echo "</tr>";
								
								while ($result && $row = mysql_fetch_array($result)){
								

								echo " <tr><td width=\"30%\"> ".stripslashes($row['C1_ANNONCE_PUBLI_éE_LE_'])."</td>";
								echo " <td width=\"60%\"> ".substr(stripslashes($row['C16_OBJET_DU_MARCH_é']),0,100)."...<br><a href=\"afficher_appels_doffre.php?objet_marche=".addslashes(mb_strtoupper($row['C16_OBJET_DU_MARCH_é']))."\">Lire la suite<a/></td>";
								echo " <td width=\"10%\"  style=\"text-align:center\"> ".stripslashes($row['C2_D_éPARTEMENT'])."</td>";
								}
								echo "</tr></table>";
													
						echo "</div>";
                }
                else {
                        echo "<p>Mot-clé '", $_GET["mots_cles"], "' non trouvé!</p>";
                }
        }
} // fin if isset($_GET["mots_cles"])
?>
ce que je souhaite faire c'est mettre en place un php (afficher_appels_doffre.php) qui permettra d'afficher toutes les données ou presque de l'annonce qui aura été sélectionnée par clic sur "Lire la suite"
Problème... Comment faire pour que la page de recherche et de résultats s'accorde avec la page d'affichage intégrale d'annonces?

Donc peux-tu s'il te plait m'aider à construire cette page (afficher_appels_doffre.php) ou du moins me donner un exemple d'affichage d'une ou deux données après avoir cliqué sur "Lire la suite" et après promis j'arrête de t'embêter... :oops:

Merci par avance.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

07 avr. 2011, 21:08

Bonjour,

Ben tu as bien mis un lien hypertexte pour lire la suite :
<a href=\"afficher_appels_doffre.php?objet_marche=".addslashes(mb_strtoupper($row['C16_OBJET_DU_MARCH_é']))."\">Lire la suite<a/>
donc ta page afficher_appels_doffre.php sera exécutée sur clic sur ce lien et recevra le paramètre $_GET["objet_marche"]. On peut donc utiliser ce paramètre GET dans le script PHP de la page afficher_appels_doffre.php pour exécuter une requête SQL qui sélectionne les données utiles de la table des offres tel que le champ "C16_OBJET_DU_MARCH_é" = $_GET["objet_marche"]. Soit une requête comme ça :
$sql = "SELECT * FROM  `rechercher_appel_doffre` WHERE `C16_OBJET_DU_MARCH_é` = '" . $_GET["objet_marche"] . "'";
Voilà tu connais la suite. :wink:
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 687 Messages

07 avr. 2011, 21:18

Merci.
voici ce que j'ai fait mais rien ne s'affiche...
<?php
//------------------------------------------------------------------------------------------
			
	$conn = db_connect();
  	$sql = "SELECT * FROM  `rechercher_appel_doffre` WHERE `C16_OBJET_DU_MARCH_é` = '" . $_GET["objet_marche"] . "'";
  	$result = mysql_query($sql, $conn);
  	
//------------------------------------------------------------------------------------------
?>

<fieldset class="fieldset"><legend class="legend">AVIS DE MARCHE</legend>
  
 <?php
 
 while ($dossier = mysql_fetch_array($result)) {
 echo "objet :".$dossier['objet_marche'];
 }
 ?>


Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

08 avr. 2011, 09:43

Tu as une erreur ici :
 while ($dossier = mysql_fetch_array($result)) {
 echo "objet :".$dossier['objet_marche']; // <--- erreur: nom du champ "objet_marche" : n'existe pas dans la table
 }
Le nom du champ "objet_marche" : n'existe pas dans la table
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 687 Messages

08 avr. 2011, 10:20

Merci.
C'est bien ce qu'il me semblait.
Le problème c'est qu'il me met cette erreur :? :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /homez.333/dossier/www/SITE/afficher_appels_doffre.php on line 53

ce qui correspond à ça:
 while ($dossier = mysql_fetch_array($result)) {

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

08 avr. 2011, 18:28

$sql = "SELECT * FROM  `rechercher_appel_doffre` WHERE `C16_OBJET_DU_MARCH_é` = '"  . $_GET["objet_marche"] .  "'";
echo $sql;
fais un echo $sql; après cette instruction puis exécute, en suite copie la requête affichée et teste là directement dans PHPmyAdmin pour détecter l'erreur SQL.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 687 Messages

09 avr. 2011, 04:25

Alors voici les résultats :
1ere étape
Résultat :
SELECT * FROM `rechercher_appel_doffre` WHERE `C16_OBJET_DU_MARCH_é` = 'ETUDE DE RECONNAISSANCE DES SOLS.' 
2ème étape
Exécution de la requête généré par le html...
Résultat:
Affichage complet de la fiche appelé par la requête (dans phpmyadmin)...
Quand je clique dans phpmyadmin sur : "créer la source php", j'obtiens:
$sql = "SELECT * FROM `rechercher_appel_doffre` WHERE `C16_OBJET_DU_MARCH_é` = \'ETUDE DE RECONNAISSANCE DES SOLS.\' ";
Voila.
Merci.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

09 avr. 2011, 11:08

3ieme étape:
Tu mets la dernière bonne requête dans ton code php et tu le teste.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 687 Messages

09 avr. 2011, 12:47

Même en mettant la bonne requête je n'ai pas de retour... #-o
Voici ce que j'ai fait:
<?php
}
//------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------     
        $conn = db_connect();
        $sql = "SELECT * FROM `rechercher_appel_doffre` WHERE `C16_OBJET_DU_MARCH_é` = 'C16_OBJET_DU_MARCH_é' ";
        $result = mysql_query($sql, $conn);
	$dossier = mysql_fetch_array($result);
//------------------------------------------------------------------------------------------
?>
<fieldset class="fieldset"><legend class="legend">AVIS DE MARCHE</legend>
 
 <?php
 
 echo "objet :".$dossier['C16_OBJET_DU_MARCH_é']."<br>"; 
 echo "D&eacute;partement :".$dossier['C2_D_éPARTEMENT']."<br>"; 
 echo $sql;

 ?>
Merci.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

09 avr. 2011, 20:07

Tu commence à te fatiguer, regarde bien ta requête ! ELLE EST FAUSSE car elle ne correspond même pas à ce que tu as testé sous PHPmyAdmin. Voici la correction et la requête que tu dois tester dans ton programme :
<?php
}
//------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------     
        $conn = db_connect();
        $sql = "SELECT * FROM `rechercher_appel_doffre` WHERE `C16_OBJET_DU_MARCH_é` = \'ETUDE DE RECONNAISSANCE DES SOLS.\' ";
        $result = mysql_query($sql, $conn);
	$dossier = mysql_fetch_array($result);
//------------------------------------------------------------------------------------------
?>
<fieldset class="fieldset"><legend class="legend">AVIS DE MARCHE</legend>
 
 <?php
 
 echo "objet :".$dossier['C16_OBJET_DU_MARCH_é']."<br>"; 
 echo "D&eacute;partement :".$dossier['C2_D_éPARTEMENT']."<br>"; 
 echo $sql;

 ?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 687 Messages

09 avr. 2011, 22:13

Bah en fait j'avais déjà testé cela mais c'était la même chose...
Voici donc le résultat du test avec ton code:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /homez.333/miamo/www/site/afficher_appels_doffre.php on line 45
AVIS DE MARCHE objet :
Département :
SELECT * FROM `pefac_rechercher_appel_doffre` WHERE `C16_OBJET_DU_MARCH_é` = \'ETUDE DE RECONNAISSANCE DES SOLS.\' 
L'ERREUR PROVIENT DE CETTE LIGNE:
$dossier = mysql_fetch_array($result);
Merci