Aide pour un code php je debute et j n'y comprends rien

cs_rober Messages postés 86 Date d'inscription vendredi 29 novembre 2002 Statut Membre Dernière intervention 21 septembre 2010 - 4 oct. 2004 à 20:25
cs_rober Messages postés 86 Date d'inscription vendredi 29 novembre 2002 Statut Membre Dernière intervention 21 septembre 2010 - 5 oct. 2004 à 20:12
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>

<form id="rech" method="post" action="rech_article.php4">
<fieldset>
<legend>Critère</legend>

" maxlength="50" size="51" />

</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 (" Connexion à la base de données impossible:
\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 "La base n'existe pas !
\n";

@mysql_query ("CREATE DATABASE ".$base) or die (mysql_error());
echo "Base créée
";

mysql_select_db($base, $mysql_con) or die ("Sélection impossible.
");
echo "Sélection OK
";

$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 !
";
echo "Vous pouvez maintenant spécifier un fichier pour la remplir.

";
}

// --- 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 " Ancienne base effacée.
";

// 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 . "
" . mysql_error());

// suppression du fichier temporaire
unlink ($fichier_dest);
echo " Nouvelle base insérée !

";
}
else echo "Tu me prends pour une truffe ?

";
}

// --- 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
" . $req . "
" . mysql_error());

if (mysql_num_rows ($res)>0) {
echo "\n\";
echo \"<caption>\".mysql_num_rows ($res).\" résultat(s)</caption>\n\";
echo \"----
Article |Désignation |Fournisseur |Code fournisseur |\n\";

$nb_lignes = 0;
$le_critere = $_POST['critere'];
$a_surligner = '('. quotemeta($le_critere) .')';
$remplacer_par = '\\1';

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 \"----
\";
echo \"".$enreg['article'].", \";
echo \"".$enreg['designation'].", \";
echo \"".$enreg['fournisseur'].", \";
echo \"".$enreg['code_fournisseur'].", \";
echo \"\n\";
}
echo "
\n";
}
else {
echo " Aucun résultat ";
}
}
?>

[javascript:afficherUpload(); Changer la base de données]

<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>
Fichier, ,
----
Séparateur, ,
----
Lignes à ignorer , ,
----
,

</fieldset>
</form>

</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"

4 réponses

dorian53 Messages postés 102 Date d'inscription lundi 14 avril 2003 Statut Membre Dernière intervention 22 août 2005
5 oct. 2004 à 03:39
Salut,

le pavé de code n'est pas tres attirant ^^ Peux tu juste resortir la requete en question :)

DoR][aN
0
LaurentKOogar Messages postés 369 Date d'inscription samedi 4 septembre 2004 Statut Membre Dernière intervention 20 octobre 2013
5 oct. 2004 à 11:28
Yo,
voila sa requete Dude

// 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";


si il veut eviter les doublons, alors c'est mieux de le faire a l'INSERT donc si par exemple pas de boublon au niveau du code_fourniseur alors il faut inserer UNIQUE(code_fournisseur )
dans la table.

Laurent
http://phpsources.net
0
dorian53 Messages postés 102 Date d'inscription lundi 14 avril 2003 Statut Membre Dernière intervention 22 août 2005
5 oct. 2004 à 12:55
Re,

Effectivement il faut créer une table avec des fournisseurs possedant une clef primaire (sous entendu unique) pour eviter les futurs problemes car sur cette requete en question, il est impossible de recuperer des doublons.

DoR][aN
0
cs_rober Messages postés 86 Date d'inscription vendredi 29 novembre 2002 Statut Membre Dernière intervention 21 septembre 2010
5 oct. 2004 à 20:12
Rober
je vous remercie mais je doits aporter une precision

je veux recurperer les doublons

exemple:

"10990;HUILE ALCATEL 120 BIDON 1L;BEAUFRERE ET CIE;190767"
"10990;HUILE ALCATEL 120 BIDON 1L;ALCATEL HVT;200140"

sur ces 2 lignes le code "article" est le meme la "designation" est la meme mais le "fournisseur" et le "code fournisseur" ne sont pas les memes.
Quans je lance une recherche a: "10990" ou a :"Alcatel" par exemple il ne me donne pas les 2 lignes de reponses.

Merci de votre aide
0
Rejoignez-nous