Rober
un ami m'a fait un code en php pour:
-1-creer une base de donnees a partir d'un fichier txt
-2-effectuer une recherche dans cette base de donnees
-3-recuperer dans un tableau toutes les lignes ou se trouvent le critere de recherche.
resultat:
-la base se cree correctement
-la recherche est possible.....mais......
si il y a un doublons dans la base il stoppe la recherche et me donne que les resultats avant le doublon.
POUVEZ VOUS M'AIDER SVP..........MERCI
ci joint le code et une copie partielle du fichier txt avec des doublons
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>Articles</title>
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
<style type="text/css">
<!--
body{
background-color:#fff;
color:#000;
font-family:"Trebuchet MS",Verdana,Geneva,Arial,Helvetica,sans-serif;
font-size:small;
}
th {
text-align: left;
padding: 0 0.4em 0 0.4em;
background: #ddc;
}
table.resultats {
border: #aaa 1px solid;
margin: 0 0 1em 0;
}
.trem {
background-color: #f6f6ee;
}
fieldset {
border: #aaa 1px solid;
}
.val {
font-weight: bold;
color: #d00;
}
a {
color: #444;
}
-->
</style>
<script type="text/javascript">
<!--
function afficherUpload () {
var formupload = document.forms['formupload'];
formupload.style.display = '';
document.getElementById('affform').style.display = 'none';
}
// -->
</script>
</head>
<body>
<form id="rech" method="post" action="rech_article.php4">
<fieldset>
<legend>Critère</legend>
<input type="text" name="critere" value="<?=(isset($_POST['critere'])? $_POST['critere'] : '')?>" maxlength="50" size="51" />
<input type="submit" name="valid_rech" value="Zou" />
</fieldset>
</form>
<?php
// --- connexion à la base --- //
$server = 'localhost';
$user = 'root';
$password = '';
$base = "bdd";
// connexion à la base
$mysql_con = @mysql_connect($server, $user, $password)
or die ("<b>Connexion à la base de données impossible:</b><br />\n" . mysql_error());
// sélection de la base
// si la base n'existe pas encore elle est créée avec la table articles
if ( !mysql_select_db($base, $mysql_con) ) {
echo "<b>La base n'existe pas !</b><br />\n";
@mysql_query ("CREATE DATABASE ".$base) or die (mysql_error());
echo "Base créée<br />";
mysql_select_db($base, $mysql_con) or die ("Sélection impossible.<br />");
echo "Sélection OK<br />";
$req_creation_table = "
CREATE TABLE `articles` (
`article` varchar(20) NOT NULL default '',
`designation` varchar(50) NOT NULL default '',
`fournisseur` varchar(30) NOT NULL default '',
`code_fournisseur` varchar(20) NOT NULL default '',
PRIMARY KEY (`article`),
KEY `designation` (`designation`)
) TYPE=MyISAM;
";
@mysql_query ($req_creation_table) or die (mysql_error());
echo "Table articles créée !<br />";
echo "Vous pouvez maintenant spécifier un fichier pour la remplir.<br /><br />";
}
// --- si upload de la base --- //
if ( isset ($_POST['upload']) ) {
if ($_FILES['fichier']['name']!='') {
// vidage de la table actuelle
@mysql_query ("TRUNCATE TABLE articles") or die (mysql_error());
echo "<b>Ancienne base effacée.</b><br />";
// copie du fichier contenant la nouvelle base
$fichier_dest = "c:/articles.tmp";
if (!move_uploaded_file ( $_FILES['fichier']['tmp_name'], $fichier_dest)) {
die ("Problème de copie");
}
// insertion de la nouvelle
$req = "LOAD DATA INFILE '". $fichier_dest ."'
INTO TABLE articles
FIELDS TERMINATED BY '".$_POST['sep']."'
LINES TERMINATED BY '\r\n'
IGNORE ".$_POST['ign']." LINES";
@mysql_query ($req) or die ($req . "<br />" . mysql_error());
// suppression du fichier temporaire
unlink ($fichier_dest);
echo "<b>Nouvelle base insérée !</b><br /><br />";
}
else echo "<b>Tu me prends pour une truffe ?</b><br /><br />";
}
// --- si recherche selon critere --- //
if ( isset ($_POST['valid_rech']) ) {
// les résultats sont rangés par fournisseur puis par désignation
// voir ORDER BY
$req = "SELECT article, designation, fournisseur, code_fournisseur ";
$req .= "FROM articles WHERE ";
$req .= "article LIKE '%".$_POST['critere']."%' OR ";
$req .= "designation LIKE '%".$_POST['critere']."%' OR ";
$req .= "fournisseur LIKE '%".$_POST['critere']."%' OR ";
$req .= "code_fournisseur LIKE '%".$_POST['critere']."%' ";
$req .= "ORDER BY fournisseur ASC, designation ASC";
$res = @mysql_query ($req) or die ("Echec requete recherche<br />" . $req . "<br />" . mysql_error());
if (mysql_num_rows ($res)>0) {
echo "<table class=\"resultats\">\n";
echo "<caption>".mysql_num_rows ($res)." résultat(s)</caption>\n";
echo "<tr><th>Article</th><th>Désignation</th><th>Fournisseur</th><th>Code fournisseur</th></tr>\n";
$nb_lignes = 0;
$le_critere = $_POST['critere'];
$a_surligner = '('. quotemeta($le_critere) .')';
$remplacer_par = '<span class="val">\\1</span>';
while ($enreg = mysql_fetch_array ($res, MYSQL_ASSOC)) {
// coloration de la correspondance avec le critere
// à commenter si trop long
if ($le_critere!="") {
$enreg['article'] = eregi_replace($a_surligner, $remplacer_par, $enreg['article']);
$enreg['designation'] = eregi_replace($a_surligner, $remplacer_par, $enreg['designation']);
$enreg['fournisseur'] = eregi_replace($a_surligner, $remplacer_par, $enreg['fournisseur']);
$enreg['code_fournisseur'] = eregi_replace($a_surligner, $remplacer_par, $enreg['code_fournisseur']);
}
// nouvelle ligne, couleur alternée
echo "<tr" . (++$nb_lignes%2==0? " class=\"trem\"" : '') .">";
echo "<td>".$enreg['article']."</td>";
echo "<td>".$enreg['designation']."</td>";
echo "<td>".$enreg['fournisseur']."</td>";
echo "<td>".$enreg['code_fournisseur']."</td>";
echo "</tr>\n";
}
echo "</table>\n";
}
else {
echo "<b>Aucun résultat</b>";
}
}
?>
<div id="affform"><a href="javascript:afficherUpload();" title="">Changer la base de données</a><br /></div>
<form id="formupload" enctype="multipart/form-data" style="display:none;" method="post" action="rech_article.php4">
<fieldset>
<legend>Téléchargement d'une nouvelle base</legend>
<table>
<tr><td><b>Fichier</b></td><td><input type="file" name="fichier" /></td></tr>
<tr><td><b>Séparateur</b></td><td><input type="text" name="sep" maxlength="3" size="3" value=";" /></td></tr>
<tr><td><b>Lignes à ignorer </b></td><td><input type="text" name="ign" maxlength="3" size="3" value="0" /></td></tr>
<tr><td></td><td><input type="submit" name="upload" value="Zou" /></td></tr>
</table>
</fieldset>
</form>
</body>
</html>
et le fichier txt
"Article;Designation article;Nom du fournisseur;Fournisseur"
"0100-4701-0;THERMOCOUPLE TUBE TVT 6000;ALCATEL COMPTECH;106081"
"10794;BOITE AMERIC.CART.20KG 360X340H265;ERDEM;193292"
"10987;A438678 HUILE ALCATEL 102 FUT 60L;BEAUFRERE ET CIE;190767"
"10990;HUILE ALCATEL 120 BIDON 1L;BEAUFRERE ET CIE;190767"
"10990;HUILE ALCATEL 120 BIDON 1L;ALCATEL HVT;200140"
"10991;HUILE ALCATEL 120 - FUT 56L;BEAUFRERE ET CIE;190767"
"10996;A438678 HUILE ALCATEL 102 BIDON 2L;BEAUFRERE ET CIE;190767"
"10996;A438678 HUILE ALCATEL 102 BIDON 2L;ALCATEL HVT;200140"
"11068;A452370 SOCLE MICROMANIP.;SEREMO;198773"
"13030;A439825 FOURREAU;MAGNIN;196192"
"13030;A439825 FOURREAU;SAVOIE INDUSTRIE VEYRAT BRUNO;198616"
"13030;A439825 FOURREAU;TEISSIER TECHNIQUE;199267"
"13031;A439821 RACCORD;TEISSIER TECHNIQUE;199267"
"13032;A439824 EMBOUT;SERRET MECANIQUE;198783"
"13032;A439824 EMBOUT;TEISSIER TECHNIQUE;199267"
"13036;A441692 MOLETTE;MAGNIN;196192"
"13037;A441693 BRIDE;SERRET MECANIQUE;198783"
"13037;A441693 BRIDE;TEISSIER TECHNIQUE;199267"
"13099;A444821 PROTECTEUR VERRE;PRECIVER;197799"
"13100;A444820 CLIPS;FMB SARL;193566"
"13136;A457661 VIS CHC M4-12 PERC D.1 INOX;MAURIN EMILE;196485"
"13151;VIS CHC M4-25 PERCEE INOX A447319;FORT MAURICE;193636"
"13152;G401084 VIS CS M3X12 PERCEE ALUMINIUM;MAURIN EMILE;196485"
"13160;G401331 TRESSE DE MASSE;GERAL;194012"
"13190;G300768 PALIER;MAGNIN;196192"
"13207;A439535 AXE;TEISSIER TECHNIQUE;199267"
"13217;A439617 RONDELLE;FMB SARL;193566"
"13217;A439617 RONDELLE;PRECITOLE;197796"
"13218;A441052 ROND. D22X32 EP.5 UZ39;MAGNIN;196192"