PHP vers sql ou excel

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : PHP vers sql ou excel

Re: PHP vers sql ou excel

par sadeq » 15 avr. 2011, 00:22

Voici le programme finalisé et testé sur ta source de données fichier :
. il détecte automatiquement le nombre d'annonces inscrites dans le fichier et les traite une par une.
. il énumère les champs (intitulés) dans tout le fichier et crée une liste de champs sans doublons, les formate pour MySQL et crée la table si elle n'existe pas
. il converti automatiquement les noms des champs et les valeurs en UTF8 pour prendre en charge les caractères accentués
. il importe toutes les annonces en respectant leur ordre d'origine et les champs concernés
. il évite de créer un même champ plusieurs fois mais cumule les valeurs des champs en doubles dans le même champ de la table pour la même annonce, ainsi on peut importer plusieurs numéros de téléphones pour la même annonce dans le même champ "telephone" par exemple.
. il exécute toutes les requêtes SQL et affiche un compte rendu de leurs états d'exécution.

Le voici :
<?php
// Source de données à importer avec les délimiteurs suivants :
// | \n | => caractère | plus saut de ligne suivi d'un | => séparateur d'enregistrements
// | nom du champ # => délimiteur du nom d'un champ
// # texte valeur => valeur du champ qui précéde #
//
// fichier source de données texte
$source_data = file_get_contents("fichier_appels_doffre.txt");

// diviser la source en lignes d'enregistrements (délimiteur ^p)
$tab_source_data = preg_split("/\|\s*\n*\s*\|/", $source_data);
//echo count($tab_source_data);
//echo "<pre>"; print_r($tab_source_data); echo "</pre>"; exit;

// Extraction des données dans le tableau final
$tab_final = array();
$colonnes = array();
foreach($tab_source_data as $j=>$enregistrement){
        // Extraction des couples champ/valeur
        $couples_champs_valeurs = explode('|', $enregistrement);
        //echo "<pre>"; print_r($couples_champs_valeurs); echo "</pre>"; exit;
       
        // Extraction de chaque champ et sa valeur, puis stockage de $tab_final
        foreach($couples_champs_valeurs as $intitulé_valeur){
                $temp = explode('#', $intitulé_valeur);
                if (count($temp)>=2) { // 2 champs attendus
                        list($intitulé, $valeur) = $temp;
                        if (trim($intitulé)!='') {
                                //conversion de l'intitulé d'un champ éliminer des caractères indésirables
                                $intitulé = conversionCar(trim($intitulé));
                                //transformation: attention sous MySQL, la taille max nom du champ = 64 car
                                $intitulé = trim(substr($intitulé, 0,50));    
                                // stockage dans $tab_final et requête SQL // $j = n°ligne enregistrement
                                if (isset($tab_final[$j][trim($intitulé)])) {
                                        // champs en double => cumuler leurs valeurs (encodage UTF8 pour les accentués)
                                        $tab_final[$j][trim($intitulé)] .= ", " . trim(utf8_decode($valeur));
                                }
                                else {
                                        // champ sans doublon
                                        $tab_final[$j][trim($intitulé)] = trim(utf8_decode($valeur));
                                }
                                // liste générale des champs sans doublons
                                $colonnes[trim($intitulé)] = null;
                        }
                }
    }
        // annonce suivante ou fin
} // fin foreach

// à 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>"; exit;
//echo "<pre>"; print_r($colonnes); echo "</pre>"; exit;

// Insertion du résultat final dans la table "module_appel_doffre"

// file d'attente SQL qui va contenir le lot de requêtes à exécuter
$tâches_sql = array();

// préparation des requêtes Création table
$tâches_sql[0]['SQL'] = "DROP TABLE IF EXISTS `module_appel_doffre`;"; // si nécessaire
$tâches_sql[1]['SQL'] = "CREATE TABLE IF NOT EXISTS `module_appel_doffre` (`id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`)); ";
// ajouter les colonnes à la table
foreach (array_keys($colonnes) as $intitulé){
    $tâches_sql[]['SQL'] = "ALTER TABLE `module_appel_doffre` ADD `".trim($intitulé)."` text NOT NULL DEFAULT '';";
}
// SQL pour l'insertion des valeurs
foreach($tab_final as $enregistrement){
        // initialisation de la requête INSERT/SET pour cet enregistrement
        $tâches_sql_insert = "INSERT INTO `module_appel_doffre` SET ";
    foreach($enregistrement as $champ=>$valeur){
                $tâches_sql_insert .=  " `" . trim($champ) . "`='" . addslashes(trim($valeur)). "',";
        }
        // ajouter la requête à la file d'attente SQL
        $tâches_sql[]['SQL'] = preg_replace('#(,)\s*$#', ';', $tâches_sql_insert);  // remplacer la dernière virgule dans SQL par ;
}
// affichage de l'état d'exécution des requêtes
//echo "<pre>"; print_r($tâches_sql); echo "</pre>"; exit;

// Exécution des requêtes de la file d'attente SQL
mysql_select_db("bd_appels_doffre", mysql_connect("localhost", "root")) or die(mysql_error());
if (count($tâches_sql)>0){
        foreach($tâches_sql as $i=>$tâche){
                if (trim($tâche['SQL'])!='' && @mysql_query($tâche['SQL'])) $tâches_sql[$i]['Etat']='Ok';
                else $tâches_sql[$i]['Etat']='kO => ('.mysql_errno().') : '.mysql_error();            
        }
}
mysql_close();
// affichage de l'état d'exécution des requêtes
//echo "<pre>"; print_r($tâches_sql); echo "</pre>";
// Fin.
echo "<p>Les donn&eacute;es sont enregistr&eacute;es dans la table</p>";
// affichage sous forme d'une table HTML
echo "<table border=\"1\"><tr>";
// entête de colonnes
foreach (array_keys($colonnes) as $intitulé){
        echo  "<th>" . $intitulé . "</th>";
}
echo "</tr>";
// lignes détail
foreach($tab_final as $enregistrement){
        echo "<tr>";
    foreach($enregistrement as $champ=>$valeur){
                echo  "<td>" . trim($valeur) . "</td>";
        }
        echo "</tr>";
}
// pied de la table
echo "</table>";

// FIN DU PROGRAMME PRINCIPAL

// fonction de conversion utilisée pour transformer des caractères indésirables
function conversionCar($intitulé){
        //echo "<p>Entree=".utf8_decode($intitulé)."</p>";
   // Tableau de conversion : la première chaine des array peut être enrichi dans le temps
   $conversion = array(
      array('[,?;.:/!\\&~\#\'}{)(\]\[+*=§%µ$£€¤¨`\<>]', '_'), // tous les caractères spéciaux sont effacés
      // Remplacement des caractères accentués
      array(utf8_decode('[éèêë]'), 'e'),
      array(utf8_decode('à'), 'a'),
      array(utf8_decode('ç'), 'c'),
      array(utf8_decode('ù'), 'u'),
      // Attention: les règles suivantes sont enchainées et doivent rester les dernières
      array('(-)', ' '), // un tiret => un seul espace
      array('(\s+)', ' '), // plusieurs espace => un seul espace
      array('\s', '_') //  un espace => un souligné _
    );
        $intitulé = utf8_decode($intitulé); // encodage des caractères en UTF8 pour gérer les accentués
        foreach($conversion as $regle){
                list($car_indesirable, $car_valide) = $regle;
                $intitulé = preg_replace('#'.$car_indesirable.'#', $car_valide, trim($intitulé));
        }
                //echo "<p>Sortie=".strtolower(trim($intitulé))."</p>";
        return strtolower(trim($intitulé)); // en minuscule
}
?>
<style>
table {
        font-size:10;
}
td {
        vertical-align:text-top;
}
</style>

Bonne lecture :wink:

Re: PHP vers sql ou excel

par orell1 » 14 avr. 2011, 17:18

Ah oui cool! C'est top cette balise!
tu as vraiment réponse à tout c'est dingue! J'arrive pas à te piéger! :lol:
Dernier petit service stp... :oops:
Pourrais-tu stp m'adapter ce code pour qu'il puisse prendre les informations depuis le fichier GLOBAL.txt et non depuis la table "annonces_appels_doffre" car je suis obligé de faire des copier/coller pour éviter que la base me dise que le texte est trop grand, le fichier fait moins de 5Mo. 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['annonces_marche']);
  //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é!="") {
                        //conversion de l'intitulé d'un champ éliminer des caractères indésirables
                        $intitulé = conversionCar($intitulé);
                        //transformation: attention sous MySQL, la taille max nom du champ = 64 car
                        $intitulé = trim(substr($intitulé, 0,50));    
                        $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_drop = "DROP TABLE IF EXISTS `module_appel_doffre`;"; // si nécessaire
$sql_create = "CREATE TABLE IF NOT EXISTS `module_appel_doffre` (`id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`)) ";
$sql_alter = array();
$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é = trim(substr($intitulé, 0,64));    // transformation: attention sous MySQL, la taille max nom du champ = 64 car
        $sql_alter[] =  "ALTER TABLE `module_appel_doffre` ADD `" . $intitulé . "` text;";
        $sql_insert .=  "`" . $intitulé . "`,";
}
//
$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("", mysql_connect("", "", "")) or die(mysql_error());
//@mysql_query($sql_drop); // si nécessaire
@mysql_query($sql_create);
if (count($sql_alter)>0) { foreach($sql_alter as $sql) @mysql_query($sql); }
mysql_query($sql_insert) or die(mysql_error());
mysql_close();
echo "<p>Les donn&eacute;es sont enregistr&eacute;es dans la table</p>";

// FIN DU PROGRAMME PRINCIPAL
// fonction de conversion utilisée pour transformer des caractères indésirables
function conversionCar($intitulé){
   // Tableau de conversion : la première chaine des array peut être enrichi dans le temps
   $conversion = array(
      array('[,?;.:/!&~\#\\\'}{)(\]\[+*=§%µ$£€¤¨`\<>]', ''), // tous les caractères spéciaux sont effacés
      // Remplacement des caractères accentués
      array('[éèêë]', 'e'),
      array('à', 'a'),
      array('ç', 'c'),
      array('ù', 'u'),
      // Attention: les règles suivantes sont enchainées et doivent rester les dernières
      array('(-)', ' '), // un tiret => un seul espace
      array('(\s+)', ' '), // plusieurs espace => un seul espace
      array('\s', '_') //  un espace => un souligné _
    );
       
        foreach($conversion as $regle){
                list($car_indesirable, $car_valide) = $regle;
                $intitulé = preg_replace('#'.$car_indesirable.'#', $car_valide, trim($intitulé));
        }
        return strtolower(trim($intitulé)); // en minuscule
}
//
echo conversionCar('éèêë');
?>

Re: PHP vers sql ou excel

par sadeq » 14 avr. 2011, 17:08

Si tu ajoute la balise html <pre> et </pre> autour des données que tu affiches, elles seront alors affichées dans leur format d'origine dans le fichier texte (c'est à dire avec les tabulations et saut de lignes d'origine).

Voici comment imbriquer l'affichage dans la balise <pre></pre> (nommée balise pour le "preformated text")
<?php
//------------------------------------------------------------------------------------------    
        $conn = db_connect();
        $sql = "SELECT * FROM `module_appel_doffre` WHERE id = $_GET[id] ";
        $result = mysql_query($sql, $conn);
        $dossier = mysql_fetch_array($result);  
//------------------------------------------------------------------------------------------
?>
<pre>
<fieldset class="fieldset"><legend class="legend">AVIS DE MARCHE <?php echo $dossier['annonce_n']; ?></legend>
  <?php echo "<p>objet :".$dossier['annonce_publiee_le']."</p>"; ?>
  <?php echo "<p>D&eacute;partement :".$dossier['adresse_internet']."</p>"; ?>
  <?php echo "<p>D&eacute;partement :".$dossier['objet_du_marche']."</p>"; ?>
</fieldset>
</pre>

Re: PHP vers sql ou excel

par orell1 » 14 avr. 2011, 12:43

En fait je viens de faire des tests et ce n'est pas terrible de faire des groupe car l'affichage est très mauvais... tout est compacté. Je vais donc rester sur la première idée...
Sinon le résultat donne ceci:

Nom et adresse officiels de l'organisme acheteur : conseil général de la Charente. Correspondant : M. le président du conseil général, hôtel du Département - 31 boulevard Emile Roux, 16917 Angouleme Cedex 9, tél. : 05-45-90-75-62, télécopieur : 05-45-90-72-32, adresse internet : http://www.cg16.fr. Adresse internet du profil d'acheteur : http://marchespublics.cg16.fr. Le pouvoir adjudicateur n'agit pas pour le compte d'autres pouvoirs adjudicateurs. Principale(s) activité(s) du pouvoir adjudicateur : Services généraux des administrations publiques.

Objet du marché : mission de contrôle technique relative au remplacement des menuiseries extérieures en bois par des menuiseries en aluminium dans divers collèges du département de la Charente. Catégorie de services : 12. C.P.V. -Objet principal : 71356100. Lieu d'exécution : ensemble du département. Code NUTS : FR531. L'avis implique un marché public.

Bon je vais continuer alors... ;-)

Re: PHP vers sql ou excel

par orell1 » 14 avr. 2011, 12:01

oui oui ces champs sont bien uniques lorsque je fais la modif manuellement car à l'origine il y a deux champs objet du marché orthographié de cette façon: objet_du_marché donc en remplaçant manuellement le premier objet_du_marché en objet_du_marche il devient unique...
Sinon je vais essayé de regrouper les infos en faisant plusieurs groupes
du style:
1er groupe :
Nom et adresse officiels de l'organisme acheteur : conseil général de la Charente.
Correspondant : M. le président du conseil général, hôtel du Département - 31 boulevard Emile Roux, 16917
Angouleme Cedex 9, tél. : 05-45-90-75-62, télécopieur : 05-45-90-72-32, adresse internet : http://www.cg16.fr.

2ème groupe :
Adresse internet du profil d'acheteur :
http://marchespublics.cg16.fr.
Le pouvoir adjudicateur n'agit pas pour le compte d'autres pouvoirs adjudicateurs.
Principale(s) activité(s) du pouvoir adjudicateur : Services généraux des administrations publiques

3ème groupe :
Objet du marché : mission de contrôle technique relative au remplacement des menuiseries extérieures en bois
par des menuiseries en aluminium dans divers collèges du département de la Charente.
Catégorie de services : 12.
C.P.V. - Objet principal : 71356100.
Lieu d'exécution : ensemble du département.
Code NUTS : FR531.
L'avis implique un marché public.

4ème groupe :
Caractéristiques principales :
mission de contrôle technique relative au remplacement des menuiseries extérieures en bois par des menuiseries en
aluminium dans divers collèges du département de la Charente
Quantités (fournitures et services), nature et étendue (travaux) : conformément à l'article 77 du Code des marchés
publics, la consultation donnera lieu à un marché à bons de commande dont les prestations seront susceptibles de varier
de la manière suivante :
Montant Minimum: 5 000 EUR.ht
montant Maximum: 50 000 EUR.ht.
Refus des variantes.
La procédure d'achat du présent avis est couverte par l'accord sur les marchés publics de l'OMC : oui.
Prestations divisées en lots : non.
Durée du marché ou délai d'exécution : 48 mois à compter de la notification du marché.
Modalités essentielles de financement et de paiement et/ou références aux textes qui les réglementent : virement
bancaire (Mandat administratif).délai de paiement : 30 jours.aucune avance n'est prévue.
Forme juridique que devra revêtir le groupement d'opérateurs économiques attributaire du marché : pas de forme
imposée.
L'exécution du marché est soumise à d'autres conditions particulières : non.
Langues pouvant être utilisées dans l'offre ou la candidature : français.
Unité monétaire utilisée, l'euro.

5ème groupe :
Conditions de participation :
Critères de sélection des candidatures : les candidatures qui ne sont pas recevables en application des articles 43, 44
et 44-1 du CMP ainsi que celles qui ne présentent pas de garanties professionnelles, techniques et financières
suffisantes au regard de la nature et de l'importance des prestations à exécuter ne seront pas admises.
La prestation n'est pas réservée à une profession particulière.
Les personnes morales ne sont pas tenues d'indiquer les noms et qualifications professionnelles des membres du
personnel chargé de la prestation.
Marché réservé : non.
Justifications à produire quant aux qualités et capacités du candidat :
- Copie du ou des jugements prononcés, si le candidat est en redressement judiciaire ;
- Déclaration sur l'honneur du candidat justifiant qu'il n'entre dans aucun des cas mentionnés à l'article 43 du code
des marchés publics concernant les interdictions de soumissionner ;
- Déclaration indiquant les effectifs moyens annuels du candidat et l'importance du personnel d'encadrement pour
chacune des trois dernières années ;
- Présentation d'une liste des principales fournitures ou des principaux services effectués au cours des trois dernières
années, indiquant le montant, la date et le destinataire public ou privé ;
- Déclaration indiquant l'outillage, le matériel et l'équipement technique dont le candidat dispose pour la réalisation
de marchés de même nature ;
- production pour chacun de ces opérateurs des mêmes documents qui sont exigés du candidat pour justifier de ses
capacités professionnelles, techniques et financières ;
- DC 4 (Lettre de candidature et d'habilitation du mandataire par ses co-traitants, disponible à l'adresse suivante :
http://www.minefe.gouv.fr, thème : marchés publics) ;
- DC 5 (Déclaration du candidat, disponible à l'adresse suivante : http://www.minefe.gouv.fr, thème : marchés
publics).
Documents à produire dans tous les cas au stade de l'attribution du marché :
- Pièces prévues aux articles D. 8222-5 ou D. 8222-7 et D. 8222-8 du code du travail ;
- Attestations et certificats délivrés par les administrations et organismes compétents prouvant que le candidat a
satisfait à ses obligations fiscales et sociales ou documents équivalents en cas de candidat étranger.
les imprimés DC 4 et DC 5 sont remplacés par les imprimés Dc1 et Dc2.
Critères d'attribution :
Offre économiquement la plus avantageuse appréciée en fonction des critères énoncés ci-dessous avec leur
pondération :
- valeur technique : 60 % ;
- prix des prestations : 40 %.
Une enchère électronique ne sera pas effectuée.
Type de procédure : procédure adaptée.
Date limite de réception des offres : 15 avril 2011, à 17 heures.
Délai minimum de validité des offres : 120 jours à compter de la date limite de réception des offres.
Numéro de référence attribué au marché par le pouvoir adjudicateur/l'entité adjudicatrice : 11S0033.

6ème groupe :
Renseignements complémentaires : la présente consultation est passée en application de l'article 56 du Code des
Marchés Publics relatif à la dématérialisation des procédures de passation des marchés publics.
Les candidats ont donc la possibilité, en se rendant sur le site Internet de la collectivité à l'adresse: http://www.cg16.fr
rubrique " marchés publics " ou http://marchespublics.cg16.fr , de consulter les avis de publicité et le règlement de
consultation, de télécharger le DCE dans son intégralité, poser des questions sur le DCE, répondre par voie
électronique et être tenu informés de l'évolution de la consultation (rectificatif, informations complémentaires,
rejet des candidatures ou des offres).
Les candidats sont informés que la remise des offres devra se faire obligatoirement soit sur format papier, soit
électroniquement via la plate-forme. Dans le cas d'une réponse par voie dématérialisée, les candidats ont la
possibilité de transmettre une copie de sauvegarde soit sur formatpapier soit sur support physique électronique.
Ce marché s'inscrit-il dans un projet/programme financé par les fonds communautaires : non.
Date d'envoi du présent avis à la publication : 1er avril 2011.

7ème groupe :
Adresse à laquelle les offres/candidatures/projets/demandes de participation doivent être envoyés : DEPARTEMENT
DE LA CHARENTE Service Patrimoine des Collèges.
hôtel du Département 31 bd Emile Roux, 16917 Angouleme Cedex, adresse internet : http://www.cg16.fr.
8ème groupe :
Adresse auprès de laquelle des renseignements d'ordre technique peuvent être obtenus : DEPARTEMENT DE LA
CHARENTE Service Patrimoine des Collèges.
Correspondant : Florent LETESSE hôtel du Département 31 bd Emile Roux, 16917 Angouleme Cedex 9, tél. : 05-45-
90-75-90, télécopieur : 05-45-90-72-32, courriel : [email protected], adresse internet : http://www.cg16.fr.
9ème groupe :
Adresse auprès de laquelle des renseignements d'ordre administratif peuvent être obtenus : DEPARTEMENT DE
LA CHARENTE DIRECTION COMMANDE PUBLIQUE.
Correspondant : Stéphane QUELARD hôtel du Département 31 bd Emile Roux, 16917 Angouleme Cedex 9, tél. : 05-
45-90-49-18, télécopieur : 05-45-90-48-00, courriel : [email protected], adresse internet : http://www.cg16.fr.
10ème groupe :
Instance chargée des procédures de recours : Tribunal Administratif de Poitiers 15 rue de Blossac, 86000 Poitiers,
tél. : 05-49-60-79-19, courriel : [email protected], télécopieur : 05-49-60-68-09, adresse internet : http://www.tapoitiers.
juradm.fr/ta/poitiers.
Précisions concernant le(s) délai(s) d'introduction des recours : les recours peuvent être introduits devant le
Tribunal Administratif de POITIERS sur le fondement :
soit de l'article L 551-1(référé précontractuel) du code de justice administrative jusqu'à la signature du contrat ;
soit de l'article R 421-1 du Code de justice administrative dans un délai de 2 mois à compter
de la notification de la décision de rejet de la candidature ou de l'offre ;
soit de l'article L551-13 (référé contractuel) du code de justice administrative dans un délai de 31 jours au plus tard
suivant la publication d'un avis d'attribution du contrat ou, pour les marchés fondés sur un accord-cadre ou un
système d'acquisition dynamique, suivant la notification de la conclusion du contrat. En l'absence de publication de
l'avis ou de la notification, la juridiction peut être saisie jusqu'à l'expiration d'un délai de six mois à compter du
lendemain du jour de la conclusion du contrat.
Ce recours contre la validité du contrat devant le juge du plein contentieux peut être assorti le cas échéant d'une
demande de suspension sur la base de l'article L 521 -1 du Code de justice administrative.

Voilà à peu près. de toute façon je n'ai pas besoin de tous les champs.
Seulement certains sont nécessaires donc en faisant des groupes peut-être que ce sera plus simple...?

En tout cas merci pour le lien car maintenant ça fonctionne en passant par l'id! Tu avais encore une fois raison! Bravo!
Merci! :P :wink:

Re: PHP vers sql ou excel

par sadeq » 14 avr. 2011, 11:35

Une autre question: Est-ce que les valeurs du champ "objet_du_marche" dans la base sont uniques (sans doublons)?

Moi je te préconise de ne pas utiliser ce champ "objet_du_marche" comme paramètre du lien s'il contient des valeurs texte long. Au lieu de ça, tu peux transmettre l'id de l'enregistrement car ton ta table tu as bien un champ id numérique qui est la clé primaire.

Cela peut être écrit comme ça:
PAGE DE RECHERCHE:
<a href=\"afficher_appels_doffre.php?id=".$row['id']."\">Lire la suite<a/>
Et dans le programme PAGE D'AFFICHAGE:
$sql = "SELECT * FROM `module_appel_doffre` WHERE id = " . $_GET[id];

Re: PHP vers sql ou excel

par orell1 » 14 avr. 2011, 10:26

Bonjour,
en fait j'avais déjà fait cette modif... Tout est orthographié sans accent dans la base ou dans le codage car la requête ne s'affiche pas si les accents sont existants dans la base...
C'est pour cela que je ne comprends pas d'ou vient cette erreur car toute mes requête possède la même orthographe que ma base.
Pour ce qui est de la répétition du adresse_internet, c'était volontaire, c'était pour faire un test étant donné que ce champs était l'un des seuls ne possédant pas d'accent...

En tout cas merci beaucoup pour ton analyse... Je vais continuer de chercher pourquoi ma requête ne récupère pas cette valeur qui permet d'afficher une cohérence entre le résultat et le lien "en savoir plus"...

Re: PHP vers sql ou excel

par sadeq » 14 avr. 2011, 10:18

Bonjour orell1,

Tout d'abord j'ai remarqué que dans ton SQL il y a des champs qui se répètent 2 fois comme "adresse_internet" ... ce qui est incorrect au niveau de la requête SQL. Est-ce normal dans la logique de ton cas?

Pour la question du lien "Lire la suite", j'ai relevé une erreur critique et crois-moi ça ne risque pas de fonctionner car il s'agit d'une erreur logique tout simplement causée par un nom de champ mal orthographié.
Il s'agit du champ "objet_du_marché" que tu as dans ton SQL et qu'on retrouve aussi orthographié "objet_marche" ou "objet_du_marche" dans les programmes.
La solution est d'utiliser le même nom de champ partout dans SQL, dans les liens HTML et dans PHP.
Voici donc l'endroit critique où ce champ est utilisé avec la correction adéquate en utilisant le nom "objet_du_marche" sans l'accent (donc tu doit aussi modifier dans ta base le nom de ce champ):
PAGE DE RECHERCHE:
....
echo " <td width=\"60%\"> ".substr(stripslashes($row['objet_du_marche']),0,100)."...<br><a href=\"afficher_appels_doffre.php?objet_marche=".$row['objet_du_marche']."\">Lire la suite<a/></td>";
Correction :
<a href=\"afficher_appels_doffre.php?objet_du_marche=".$row['objet_du_marche']."\">Lire la suite<a/>
Par ailleurs, et pour clôturer ce problème d'accents, il faut prendre une résolution et décider une fois pour toute si tu souhaite utiliser des noms de champs accentués ou pas. Quelque soit la réponse à cette question tu dois toujours utiliser la bonne orthographe des noms des champs conformément à l'orthographe du champ originel qui est dans la base de données pour éviter toute problématique de codage.

Re: PHP vers sql ou excel

par orell1 » 14 avr. 2011, 01:09

Et la je viens de faire le test au niveau des liens et voici ce que j'ai fait, mais visiblement il y a une erreur car lorsque je mets le WHERE les infos ne s'affichent pas... Si je retire le WHERE les infos s'affichent mais ce sont les infos ne correspondants pas à la fiche sélectionnée...

PAGE DE RECHERCHE:
<?php
}
?>
<fieldset class="fieldset">
  <legend class="legend">Consultation des annonces de marchés publics
  </legend>
  
  
  <br /><b><u>Tapez le mot clé qui vous convient</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="objet_du_marche" maxlength="50" class="fullsample_bouton" /> 
  <b>Exemple :</b> travaux de restauration</td>
    </tr>    
    	<tr >
  <td width="26%" height="33">Date de Publication : </td>
  <td width="74%"><input type="text" size="30" name="date_publication" maxlength="50" class="fullsample_bouton" />    
     <b>Exemple :</b> 05 avril 2011</td>
    </tr>   
    	<tr >
  <td width="26%" height="33">Dépt. : </td>
  <td width="74%"><input type="text" size="2" name="departement" maxlength="2" class="fullsample_bouton" />    
     <b>Exemple :</b> 92</td>
    </tr>
    	<tr >
    	  <td height="33">&nbsp;</td>
    	  <td>&nbsp;</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["objet_du_marche"])){
	?>
<fieldset class="fieldset"><legend class="legend">R&eacute;sultat de votre recherche</legend>
<?php
        // 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("", 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  `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["objet_du_marche"] . "%'"; // pour avoir le format LIKE '%valeur du mot-clé%'
                $sql .= " AND annonce_publiee_le like '%".$date_publication."%'  LIMIT 0,20";
                // on obtient : SELECT * FROM `module_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=\"#F2F3FF\" width=\"100%\">";
								echo "<tr>";
								

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

								echo " <tr><td width=\"30%\"> ".stripslashes($row['annonce_publiee_le'])."</td>";
								echo " <td width=\"60%\"> ".substr(stripslashes($row['objet_du_marche']),0,100)."...<br><a href=\"afficher_appels_doffre.php?objet_marche=".$row['objet_du_marche']."\">Lire la suite<a/></td>";
								echo " <td width=\"10%\"  style=\"text-align:center\"> ".stripslashes($row['departement_de_publication'])."</td>";
								}
								echo "</tr></table>";
													
						echo "</div>";
                }
                else {
                        echo "<p>Mot-clé '", $_GET["objet_du_marche"], "' non trouvé!</p>";
                }
     
		}
} // fin if isset($_GET["mots_cles"])
?>
</fieldset>
ET LA PAGE D'AFFICHAGE:
<?php
//------------------------------------------------------------------------------------------    
        $conn = db_connect();
        $sql = "SELECT * FROM `module_appel_doffre` WHERE objet_du_marche = '$_GET[objet_du_marche]'  ";
        $result = mysql_query($sql, $conn);
        $dossier = mysql_fetch_array($result);   
//------------------------------------------------------------------------------------------
?>
<fieldset class="fieldset"><legend class="legend">AVIS DE MARCHE <?php echo $dossier['annonce_n']; ?></legend>
 
  <?php echo "objet :".$dossier['annonce_publiee_le']."<br>"; ?>
  <?php echo "D&eacute;partement :".$dossier['adresse_internet']."<br>"; ?>
  <?php echo "D&eacute;partement :".$dossier['objet_du_marche']."<br>"; ?>
 
  <?php echo $sql; ?>

</fieldset>
Voila quand tu auras 2 minutes, si tu peux jeter un oeil, peut-être que toi tu trouveras où le programme bug...
Merci. :lol:

Re: PHP vers sql ou excel

par orell1 » 14 avr. 2011, 00:30

Bonsoir,
merci pour toutes ces précisions.
Je viens de faire le test avec le nouveau programme et voici ce qu'il en ressort:
Affichage des intitulés de la base :
--
-- Structure de la table `module_appel_doffre`
--

CREATE TABLE IF NOT EXISTS `module_appel_doffre` (
  `id` int(11) NOT NULL auto_increment,
  `référence_du_boamp` text,
  `annonce_publiée_le` text,
  `département_de_publication_ ` text,
  `annonce_no ` text,
  `nom_et_adresse_officiels_de_lorganisme_acheteur ` text,
  `adresse_internet ` text,
  `objet_du_marché ` text,
  `conditions_et_mode_de_paiement_pour_obtenir_les_do` text,
  `conditions_de_remise_des_offres_ou_des_candidature` text,
  `date_denvoi_du_présent_avis_à_la_publication ` text,
  `tél` text,
  `télécopieur` text,
  `instance_chargée_des_procédures_de_recours` text,
  `organe_chargé_des_procédures_de_médiation` text,
  `service_auprès_duquel_des_renseignements_peuvent_ê` text,
  `adresse_internet` text,
  `objet_du_marché` text,
  `boamp_n°` text,
  `annonce_n°` text,
  `nom_et_adresse_officiels_de_lorganisme_acheteur` text,
  `correspondant` text,
  `adresse_internet_du_profil_dacheteur` text,
  `lieu_dexécution` text,
  `caractéristiques_principales` text,
  `des_variantes_seront_elles_prises_en_compte` text,
  `prestations_divisées_en_lots` text,
  `durée_du_marché_ou_délai_dexécution` text,
  `date_prévisionnelle_de_commencement_des_travaux ` text,
  `critères_dattribution` text,
  `type_de_procédure` text,
  `date_limite_de_réception_des_offres` text,
  `date_denvoi_du_présent_avis_à_la_publication` text,
  `principales_activités_du_pouvoir_adjudicateur` text,
  `la_procédure_dachat_du_présent_avis_est_couverte_p` text,
  `modalités_essentielles_de_financement_et_de_paieme` text,
  `lexécution_du_marché_est_soumise_à_dautres_conditi` text,
  `conditions_de_participation` text,
  `critères_de_sélection_des_candidatures` text,
  `marché_réservé` text,
  `justifications_à_produire_quant_aux_qualités_et_ca` text,
  `délai_minimum_de_validité_des_offres` text,
  `autres_renseignements` text,
  `adresse_auprès_de_laquelle_des_renseignements_dord` text,
  `courriel` text,
  `cpv_objet_principal` text,
  `cautionnement_et_garanties_exigés` text,
  `forme_juridique_que_devra_revêtir_le_groupement_do` text,
  `situation_juridique_références_requises` text,
  `renseignements_complémentaires` text,
  `renseignements_relatifs_aux_lots` text,
  `numéro_de_référence_attribué_au_marché_par_le_pouv` text,
  `capacité_économique_et_financière_références_requi` text,
  `catégorie_de_services` text,
  `code_nuts` text,
  `date_limite_dobtention` text,
  `date_limite_de_réception_des_candidatures` text,
  `référence_professionnelle_et_capacité_technique_ré` text,
  `lieu_dexécution ` text,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=109 ;
Il y a parfois des "_" en fin d'intitulés et les accents qui restent... :cry:

ET VOICI LE RESULTAT lorsque j'exécute le programme:
Les données sont enregistrées dans la table
eeeeeee 
Pour ce qui est du lien je vais me pencher sur le sujet dès maintenant.

Re: PHP vers sql ou excel

par sadeq » 13 avr. 2011, 19:29

En fait, les 2 programmes qu'on a fait la V1 et la V2 sont complémentaires et pratiquement les mêmes au niveau de l'importation des valeurs. De toutes façons, la création des colonnes dans la base de données va se faire une fois contre plusieurs importations de données.

Pour la question du lien "lire la suite" de ta question 3
3) Page de recherche avec le lien en savoir plus (ce lien permet d'afficher les informations concernant la fiche qui vient d'être recherchée) ==> Actuellement la fiche qui s'affiche ne correspond en rien au résultat de la recherche
si le programme que t'as déjà fait ne fonctionne pas à ce niveau c'est qu'il y a un problème de conception de cette méthode de recherche. En voici donc l'analyse:
En principe, une page affiche la liste des offres avec un lien pour chaque offre pour en afficher le détail. Pour ce faire, le lien envoi vers une page PHP qui doit chercher l'offre sélectionnée par le critère associé au lien et passé dans $_GET. Pour que le programme php de recherche puisse réussir sa requête SELECT/WHERE et trouver le détail de l'enregistrement ciblé, il faut que le critère envoyé par le lien soit un champ de la table interrogée et soit un critère unique comme un identifiant qui identifie un enregistrement de la table. Bon moi je ne connais pas vraiment la structure de la table interrogée mais je donnerai un exemple simple :

Soit la table suivante déjà créé et remplie: client(id clé primaire, nom, prénom, adresse, tél, ...)
Supposons qu'on a affiché les clients par nom dans une liste avec un lien "Détail" pour afficher les autres données d'un client sélectionné. Cette liste peut être comme suit (au format html pour simplifier l'exemple):
<p>
9  	LEGRAND  	<a href="afficherDetailClient.php?id=9">Lire de détail</a><br />
10 	LEDUC 	<a href="afficherDetailClient.php?id=10">Lire de détail</a><br />
11 	REQUIN     <a href="afficherDetailClient.php?id=11">Lire de détail</a><br />
12 	LEROY      <a href="afficherDetailClient.php?id=12">Lire de détail</a><br />
</p>
Le programme PHP qui est appelé par les liens hypertexte est "afficherDetailClient.php" et il reçoit le paramètre $_GET['id'] qui représente le critère à rechercher dans la table client pour trouver les infos supplémentaires du client ciblé.
La requête SQL qui fait cette recherche dans le programme afficherDetailClient.php est la suivante :
$sql = "SELECT * FROM client WHERE id = " . $_GET['id'];
Si on suit le lien du client "LEGRAND" l'id transmis au programme sera 9, la requête SQL trouvera donc l'enregistrement correspondant à l'id=9 dans la table client.

Voilà pour ce point. Pour le problème des [éèêë] moi, je n'ai pas de problèmes. Essaye d'exécuter le programme de test suivant pour en être sûr :
<?php
// fonction de conversion utilisée pour transformer des caractères indésirables
function conversionCar($intitulé){
   // Tableau de conversion : la première chaine des array peut être enrichi dans le temps
   $conversion = array( 
      array('[,?;.:/!&~’"\#\\\'}{)(\]\[+*=§%µ$£€¤¨`\<>]', ''), // tous les caractères spéciaux sont effacés
      // Remplacement des caractères accentués
      array('[éèêë]', 'e'),
      array('à', 'a'),
      array("ç", 'c'),
      array('ù', 'u'),
      // Attention: les règles suivantes sont enchainées et doivent rester les dernières
      array('(-)', ' '), // un tiret => un seul espace
      array('(\s+)', ' '), // plusieurs espace => un seul espace
      array('\s', '_') //  un espace => un souligné _
    );
       
        foreach($conversion as $regle){
                list($car_indesirable, $car_valide) = $regle;
                $intitulé = preg_replace('#'.$car_indesirable.'#', $car_valide, trim($intitulé));
        }
        return strtolower(trim($intitulé)); // en minuscule
}

//
echo conversionCar("éèêë");
?>
Si le problème persiste, c'est que le codage de caractères dans ton fichier texte n'est pas standard.

A+

Re: PHP vers sql ou excel

par orell1 » 13 avr. 2011, 01:16

Merci !
Pour le programme aie...
Car en fait chaque numéro de tél est différent donc il faut que je puisse les récupérer... Mais je ne peux pas modifier le .TXT manuellement car il y a beaucoup trop de tél...
Donc je pense que le mieux c'est de repartir sur la base du premier programme en utilisant cette fonction:
function conversionCar($intitulé){
   // Tableau de conversion : la première chaine des array peut être enrichi dans le temps (format expressions régulières)
   $conversion = array(
      array('[,?;.:/!&~’"\#\\\'}{)(\]\[+*=§%µ$£€¤¨`\<>]', ''), // tous les caractères spéciaux sont effacés
      // Remplacement des caractères accentués
      array('[éèêë]', 'e'),
      array('à', 'a'),
      array("ç", 'c'),
      array('ù', 'u'),
      // Attention: les règles suivantes sont enchainées et doivent rester les dernières
      array('(-)', ' '), // un tiret => un seul espace
      array('(\s+)', ' '), // plusieurs espace => un seul espace
      array('\s', '_') //  un espace => un souligné _
    );
Le soucis que j'avais eu c'est qu'il ne remplaçait pas les "é", "è" etc. par le "e"...

Voici comment je vois la chose, et vraiment si tu peux me donner ton avis n'hésite pas, tu as toute la technique toi, donc tu pourras me dire ce qu'il est possible de faire ou pas... :wink:

1) j'importe mon .txt
2) je lance le programme V.1 qui s'occupe de récupérer les intitulés et les informations qui vont avec selon les conditions imposées par les |et les #
3) Page de recherche avec le lien en savoir plus (ce lien permet d'afficher les informations concernant la fiche qui vient d'être recherchée) ==> Actuellement la fiche qui s'affiche ne correspond en rien au résultat de la recherche
4) Un fois que le lien "en savoir plus"sera valide, nous pourrons lui demander d'afficher la suite des informations sous forme de fiche (fiche que je suis en train de créer)

Voila ce qu'il reste à faire c'est donc:
1) Voir comment nous pouvons gérer l'intégration des données et des intitulés dans la base
2) voir comment faire le lien entre la page des résultats de recherche et la page page d'affichage de la fiche complète

Je pense que c'est tout, tu me diras c'est déjà pas mal mais le plus dur est fait je pense...
Surtout n'hésite pas à me dire comment tu perçois les choses au vu de ton œil extérieur et professionnel.

Merci!

Re: PHP vers sql ou excel

par sadeq » 13 avr. 2011, 00:53

Ne t'en fais pas aller au travail. :lol:

Voici une modif du code qui évite 2 champs homonymes même s'ils se trouvent dans le fichier TXT l'un après l'autre dans le même enregistrement c'est le dernier qui sera pris. Et si tu veux avoir 2 tél par exemple il faut leur donner 2 noms différents dans le fichier TXT et dans la base.

Le code retouché (modif= séparer le bloc de génération SQL de celui qui extrait dans $tab_final)
<?php
// Source de données à importer avec le délimiteurs suivants :
// ^p : saut de ligne entre les enregistrements
// | nom du champ #
// # texte valeur du champ précédent (saut de ligne ou fin de fichier)
//
// données sous forme de fichier texte externe
$source_data = file_get_contents("data1.txt");

// diviser la source en lignes d'enregistrements (délimiteur ^p)
$tab_source_data = explode('^p', $source_data);
//echo "<pre>"; print_r($tab_source_data); echo "</pre>";

// Extraction des données dans le tableau final
$tab_final = array();
foreach($tab_source_data as $j=>$enregistrement){
	// Extraction des couples champ/valeur
	$couples_champs_valeurs = explode('|', $enregistrement);
	//echo "<pre>"; print_r($couples_champs_valeurs); echo "</pre>";
	// Exctraction de chaque champ et sa valeur, puis stockage de $tab_final
	foreach($couples_champs_valeurs as $intitulé_valeur){
		$temp = explode('#', $intitulé_valeur);
		if (count($temp)>=2) { // 2 champs attendus
			list($intitulé, $valeur) = $temp;
			if (trim($intitulé)!='') {
				//conversion de l'intitulé d'un champ éliminer des caractères indésirables
				$intitulé = conversionCar($intitulé);
				//transformation: attention sous MySQL, la taille max nom du champ = 64 car
				$intitulé = trim(substr($intitulé, 0,64));    
				// stockage dans $tab_final et requête SQL
				$tab_final[$j][trim($intitulé)] = trim($valeur); // $j = n°ligne enregistrement
			}
		}
    }
}

// affichage juste pour le test
//echo "<pre><b>Tableau Final</b> : "; print_r($tab_final); echo "</pre>";

// file d'attente SQL qui va contenir le lot de requêtes à exécuter
$file_attente_sql = array(); 
foreach($tab_final as $enregistrement){
	// initialisation de la requête INSERT/SET pour cet enregistrement
	$sql_insert = "INSERT INTO `module_appel_doffre` SET ";
    foreach($enregistrement as $champ=>$valeur){
		$sql_insert .=  " `" . trim($champ) . "` = '" . addslashes(trim($valeur)). "',";
	}
	// ajouter la requête à la file d'attente SQL
	$file_attente_sql[]['requête'] = preg_replace('#(,)\s*$#', ';', $sql_insert);  // remplacer la dernière virgule dans SQL par ;
}

// Exécution des requêtes de la file d'attente SQL
mysql_select_db("test", mysql_connect("localhost", "root")) or die(mysql_error());
if (count($file_attente_sql)>0){
	foreach($file_attente_sql as $i=>$sql){
		if (trim($sql['requête'])!='' && @mysql_query($sql['requête'])) $file_attente_sql[$i]['état']='Ok'; 
		else $file_attente_sql[$i]['état']='kO ('.mysql_errno().') : '.mysql_error();		
	}
}
mysql_close();
// affichage de l'état d'exécution des requêtes
echo "<pre>"; print_r($file_attente_sql); echo "</pre>"; 

// FIN DU PROGRAMME PRINCIPAL

// fonction de conversion utilisée pour transformer des caractères indésirables
function conversionCar($intitulé){
   // Tableau de conversion : la première chaine des array peut être enrichi dans le temps
   $conversion = array( 
      array('[,?;.:/!&~’"\#\\\'}{)(\]\[+*=§%µ$£€¤¨`\<>]', ''), // tous les caractères spéciaux sont effacés
      // Remplacement des caractères accentués
      array('[éèêë]', 'e'),
      array('à', 'a'),
      array("ç", 'c'),
      array('ù', 'u'),
      // Attention: les règles suivantes sont enchainées et doivent rester les dernières
      array('(-)', ' '), // un tiret => un seul espace
      array('(\s+)', ' '), // plusieurs espace => un seul espace
      array('\s', '_') //  un espace => un souligné _
    );
       
        foreach($conversion as $regle){
                list($car_indesirable, $car_valide) = $regle;
                $intitulé = preg_replace('#'.$car_indesirable.'#', $car_valide, trim($intitulé));
        }
        return strtolower(trim($intitulé)); // en minuscule
}

Re: PHP vers sql ou excel

par orell1 » 13 avr. 2011, 00:44

tu sais je ne veux pas trop te déranger. tu m'aides depuis le début donc si tu en as marre je comprendrais que tu veuilles arrêter...
Attention ce n'est pas ce que je souhaite car tu m'aides vraiment beaucoup et tu comprends exactement ce que je souhaite.
Mais je ne veux pas être trop envahissant... :oops:

Re: PHP vers sql ou excel

par orell1 » 13 avr. 2011, 00:39

C'est bien ce qu'il me semblait mais le problème c'est que parfois dans une fiche il y a 2x tél ou 2x courriel etc...