Précédent   Forum des professionnels en informatique > PHP > Scripts
Scripts Forum d'entraide sur les scripts PHP téléchargés. Les meilleurs scripts PHP, la FAQ scripts PHP, toutes les FAQ PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/08/2011, 13h53   #1
Nouveau Membre du Club
 
Inscription : août 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 30
Points : 30
Points : 30
Par défaut Script PHP -> Lecture fichier + insertion BDD

Bonjour,

Suite à mon dernier poste (cf : http://www.developpez.net/forums/d11...er-sous-shell/) j'arrive à récupérer dans un fichier le nom de la machine et une valeur.

Exemple :

Machine1 = valeur
Machine2 = valeur
Machine3 = valeur
.....

J'aimerai exploiter ce fichier en "PHP" dans le but d'insérer les valeurs du fichier dans une base de données MySQL.

Voici pour le moment mon script :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$db = mysql_connect('localhost','root');
 
$fp = fopen("monfichier","r"); //j'ouvre en lecture mon fichier  
 
$machine = fgets($fp,11);   
$valeur = fgets($fp,12);
fclose($fp); 
 
mysql_select_db('mabdd',$db);
$sql = "INSERT INTO matable VALUES('$machine','$valeur')";
mysql_query($sql);
mysql_close();
?>
Ce script m'insère seulement le premier nom de machine et sa valeur mais il n'insère pas le reste des machines + valeurs.

Comment dois-je faire ?

Par avance merci
spartiates59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 14h08   #2
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 461
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 461
Points : 645
Points : 645
Code :
1
2
3
4
5
 
        $fp = fopen ("monfichier", "r");
	$msg = fread($fp, filesize('monfichier'));
	$ar = nl2br($msg);
	$ar = explode('<br />', $ar);
comme ça tu aura un array de array("machine1 132154", "machine2 132777" )

Code :
1
2
3
4
5
6
7
8
 
        for ($i = count($ar); $i >= 0; $i--)
	{
		$ar_data = explode(' ', $ar[$i]);
 
                 $sql = "INSERT INTO matable VALUES('" . $ar_data[0] . "','" . $ar_data[1] . "')";
                 mysql_query($sql);
	}
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 14h36   #3
Nouveau Membre du Club
 
Inscription : août 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 30
Points : 30
Points : 30
Bonjour et merci pour ta réponse,

J'ai modifié mon script comme cela :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$db = mysql_connect('localhost','root');
 
$fp = fopen ("monfichier", "r");
        $msg = fread($fp, filesize('monfichier'));
        $ar = nl2br($msg);
        $ar = explode('<br />', $ar);
 
for ($i = count($ar); $i >= 0; $i--)
        {
       $ar_data = explode(' ', $ar[$i]);
       $sql = "INSERT INTO matable VALUES('" . $ar_data[0] . "','" . $ar_data[1] . "')";
                 mysql_query($sql);
        }
?>
Après exécution je rencontre le message d'erreur suivant :


PHP Notice: Undefined offset: 11 in /home/index2.php on line 11
PHP Notice: Undefined offset: 1 in /home/index2.php on line 12
PHP Notice: Undefined offset: 1 in /home/index2.php on line 12
spartiates59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 14h45   #4
Membre éclairé
 
Avatar de Kaamo
 
Homme Cyril
Ingénieur développement logiciels
Inscription : avril 2007
Messages : 205
Détails du profil
Informations personnelles :
Nom : Homme Cyril
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 205
Points : 367
Points : 367
Si il y a, comme dans cet exemple, 11 éléments dans un tableau, les index vont de 0 à 10 inclus.
Il faut donc commencer à count($ar)-1 et finir à 0.

D'où le code suivant qui devrait mieux fonctionner :

Code :
1
2
3
4
5
6
for ($i = (count($ar)-1); $i >= 0; $i--)
        {
       $ar_data = explode(' ', $ar[$i]);
       $sql = "INSERT INTO volumetrie VALUES('" . $ar_data[0] . "','" . $ar_data[1] . "')";
                 mysql_query($sql);
        }
Kaamo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 14h53   #5
Nouveau Membre du Club
 
Inscription : août 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 30
Points : 30
Points : 30
Merci pour ta réponse,

j'ai modifié le script comme ceci :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$db = mysql_connect('localhost','root');
 
$fp = fopen ("monfichier", "r");
        $msg = fread($fp, filesize('monfichier'));
        $ar = nl2br($msg);
        $ar = explode('<br />', $ar);
 
for ($i = (count($ar)-1); $i >= 0; $i--)
        {
$ar_data = explode(' ', $ar[$i]);
$sql = "INSERT INTO mabase VALUES('" . $ar_data[0] . "','" . $ar_data[1] . "')";
                 mysql_query($sql);
        }
?>
Sur les 3 erreurs il en reste 1 :

PHP Notice: Undefined offset: 1 in /home/index2.php on line 12

Par contre le fichier "monfichier" peut contenir des centaines de lignes.
spartiates59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 15h08   #6
Membre éclairé
 
Avatar de Kaamo
 
Homme Cyril
Ingénieur développement logiciels
Inscription : avril 2007
Messages : 205
Détails du profil
Informations personnelles :
Nom : Homme Cyril
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 205
Points : 367
Points : 367
Citation:
PHP Notice: Undefined offset: 1
ça veut dire que pour un des éléments de ton tableau, il n'y a pas de "deuxième" donnée. La "valeur" de la machine dans ton cas.

peut être y a t-il une ligne sans espace entre Machine et sa valeur ? Ou un retour à la ligne de trop à la fin de ton fichier ? Il ne faut pas qu'il y ait de ligne "vide", je pense.

Si la règle un couple "Machine valeur" par ligne est respectée, alors il n'y aura pas de problème je pense.
Kaamo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 15h38   #7
Nouveau Membre du Club
 
Inscription : août 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 30
Points : 30
Points : 30
Est-ce que le signe "=" entre machine et valeur peut poser problème ?

Je viens de vérifier mon fichier et j'ai bien pour chaque ligne :

Machine = valeur
Machine = valeur
...

j'ai essayé d'insérer manuellement une machine avec la commande suivante :

mysql> insert into matable VALUES ('Machine','valeur');

Et tout fonctionne correctement...
spartiates59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 15h53   #8
Membre éclairé
 
Avatar de Kaamo
 
Homme Cyril
Ingénieur développement logiciels
Inscription : avril 2007
Messages : 205
Détails du profil
Informations personnelles :
Nom : Homme Cyril
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 205
Points : 367
Points : 367
En effet, ça pose problème, car le code ci-dessous découpe la chaine de caractères à chaque espace rencontré.
Code :
$ar_data = explode(' ', $ar[$i]);
Utiliser la ligne ci-dessous en veillant bien à que chaque ligne soit struturée de la même façon dans le fichier.
Code :
$ar_data = explode(' = ', $ar[$i]);
Kaamo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 16h12   #9
Nouveau Membre du Club
 
Inscription : août 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 30
Points : 30
Points : 30
j'ai modifié le code comme cela :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$db = mysql_connect('localhost','root');
 
$fp = fopen ("monfichier", "r");
        $msg = fread($fp, filesize('monfichier'));
        $ar = nl2br($msg);
        $ar = explode('<br />', $ar);
 
for ($i = (count($ar)-1); $i >= 0; $i--)
        {
     $ar_data = explode(' = ', $ar[$i]);
       $sql = "INSERT INTO matable VALUES('" . $ar_data[0] . "','" . $ar_data[1] . "')";
                 mysql_query($sql);
        }
?>
mais j'ai toujours le message ci-dessous :

PHP Notice: Undefined offset: 1 in /home/index2.php on line 12

La ligne 12 correspond à :

Code :
$sql = "INSERT INTO matable VALUES('" . $ar_data[0] . "','" . $ar_data[1] . "')";
N'est ce pas dans cette ligne que l'erreur se trouve ?
spartiates59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 16h26   #10
Membre éclairé
 
Avatar de Kaamo
 
Homme Cyril
Ingénieur développement logiciels
Inscription : avril 2007
Messages : 205
Détails du profil
Informations personnelles :
Nom : Homme Cyril
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 205
Points : 367
Points : 367
comme je l'ai dit plus haut, oui.
Il faut bien vérifier que chaque ligne du fichier respecte la règle : Machine[espace]=[espace]valeurEt qu'il n'y ait pas de ligne "vide".

Pour débugger, un ptit affichage de ce que le tableau contient s'impose Ca permettra de voir quelle ligne du fichier pose problème

Code :
1
2
3
4
5
6
7
8
9
10
11
<?php 
$db = mysql_connect('localhost','root');
$fp = fopen ("monfichier", "r");
$msg = fread($fp, filesize('monfichier'));
$ar = nl2br($msg);
$ar = explode('<br />', $ar);
// Affichage du tableau
echo "<pre>";
print_r($ar);
echo "</pre>";
?>
Kaamo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 16h27   #11
Nouveau Membre du Club
 
Inscription : août 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 30
Points : 30
Points : 30
Je pense avoir trouvé !

J'ai oublié d'insérer dans mon script la ligne ci-dessous

Code :
mysql_select_db('mabase',$db);
Lorsque j'exécute mon script j'ai toujours le message d'erreur mais mes données sont bien intégrées dans ma base de données.

Par contre dans ma base de données il y a des insertions de ligne vide entre chaque serveur. Comment faire pour ne plus en avoir ? dans mon fichier j'ai aucun espace entre chaque ligne
spartiates59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 16h34   #12
Nouveau Membre du Club
 
Inscription : août 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 30
Points : 30
Points : 30
Citation:
Envoyé par Kaamo Voir le message
comme je l'ai dit plus haut, oui.
Il faut bien vérifier que chaque ligne du fichier respecte la règle : Machine[espace]=[espace]valeurEt qu'il n'y ait pas de ligne "vide".

Pour débugger, un ptit affichage de ce que le tableau contient s'impose Ca permettra de voir quelle ligne du fichier pose problème

Code :
1
2
3
4
5
6
7
8
9
10
11
<?php 
$db = mysql_connect('localhost','root');
$fp = fopen ("monfichier", "r");
$msg = fread($fp, filesize('monfichier'));
$ar = nl2br($msg);
$ar = explode('<br />', $ar);
// Affichage du tableau
echo "<pre>";
print_r($ar);
echo "</pre>";
?>

Voici le résultat du script ci-dessus :


Citation:
Array
(
[0] => machine1 = 84
[1] =>
machine2 = 75
[2] =>
machine3 = 41
[3] =>
machine4 = 189
[4] =>
machine5 = 2318
[5] =>
machine6 = 14
[6] =>
machine7 = 1
[7] =>
machine8 = 19806
[8] =>
machine9 = 3
[9] =>
machine10 = 41
[10] =>

)

Je ne sais pas si cela est important mais machine1/2/3/... correspond au nom des différentes machines et peut être en MAJUSCULE, minuscule, et peut contenir un nombre de caractère différent.
spartiates59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 16h46   #13
Membre éclairé
 
Avatar de Kaamo
 
Homme Cyril
Ingénieur développement logiciels
Inscription : avril 2007
Messages : 205
Détails du profil
Informations personnelles :
Nom : Homme Cyril
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 205
Points : 367
Points : 367
Tant que le nom de la machine ne contient pas " = ", tout va bien.

Il y a bien une ligne "vide" dans le fichier. l'index [10] ne contient rien. Il faut enlever la ligne vide. Puis un ptit test (code ci-dessous) sur la chaine pour régler les prochaines lignes vides inopinées

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$db = mysql_connect('localhost','root');
 
$fp = fopen ("monfichier", "r");
$msg = fread($fp, filesize('monfichier'));
$ar = nl2br($msg);
$ar = explode('<br />', $ar);
 
for ($i = (count($ar)-1); $i >= 0; $i--) {
   if (!empty($ar[$i])) {
       $ar_data = explode(' = ', $ar[$i]);
       $sql = "INSERT INTO matable VALUES('" . $ar_data[0] . "','" . $ar_data[1] . "')";
       mysql_query($sql);
   }
}
?>
EDIT : ha jsuis bête, il ne doit pas y avoir de ligne vide dans le fichier. C'est à cause de $ar = nl2br($msg); qui ajoute une ligne à la fin de chaque ligne. De ce fait, il y a une ligne vide qui est générée. Pour contrer cela, le test que j'ai posté ci-dessus devrait suffire.
Si on veut "chipoter", on peut boucler comme cela : for ($i = (count($ar)-2); $i >= 0; $i--)
Kaamo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 16h59   #14
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bonjour,
il subsiste un problème de passage intempestif à la ligne (voir à partir de [1])
C'est dû au nl2br() : malgré le <br /> ajouté, un "truc" invisible reste (une tabulation verticale "\x0B" ?? ...)
Pour résoudre ca : trim($ar[$i])

Code :
1
2
3
4
5
6
7
8
for ($i = (count($ar)-1); $i >= 0; $i--) {
	$ar_data = explode(' = ', trim($ar[$i]));
	if($ar_data[0]!='' && $ar_data[1]!='') {
		$sql = "INSERT INTO matable VALUES('" . $ar_data[0] . "','" . $ar_data[1] . "')";
	}
	mysql_query($sql);
   }
}
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 17h55   #15
Nouveau Membre du Club
 
Inscription : août 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 30
Points : 30
Points : 30
Merci pour vos réponses !

ça fonctionne bien avec "trim" mais j'ai toujours ce message d'erreur :

PHP Notice: Undefined variable: sql in /home/index2.php on line 15

La ligne 15 correspond à :

Je ne sais pas si ce message d'erreur est impactant ou non.

Voici mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$db = mysql_connect('localhost','root');
 
$fp = fopen ("monfichier", "r");
        $msg = fread($fp, filesize('monfichier'));
        $ar = nl2br($msg);
        $ar = explode('<br />', $ar);
 
for ($i = (count($ar)-1); $i >= 0; $i--) {
        $ar_data = explode(' = ', $ar[$i]);
        if(trim($ar_data[0])!='' && trim($ar_data[1])!='') {
        mysql_select_db('mabase',$db);
        $sql = "INSERT INTO matable VALUES('" . trim($ar_data[0]) . "','" . trim($ar_data[1]) . "')";
        }
        mysql_query($sql);
   }
?>
spartiates59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 17h59   #16
Membre éclairé
 
Avatar de Kaamo
 
Homme Cyril
Ingénieur développement logiciels
Inscription : avril 2007
Messages : 205
Détails du profil
Informations personnelles :
Nom : Homme Cyril
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 205
Points : 367
Points : 367
soit tu le mets dans le "if" des "trim" ... soit tu tests si la ligne en cours de lecture est vide :

Code :
1
2
3
4
5
6
7
8
9
if (!empty($ar[$i])) {
       $ar_data = explode(' = ', $ar[$i]);
 
          if(trim($ar_data[0])!='' && trim($ar_data[1])!='') {
            $sql = "INSERT INTO matable VALUES('" . $ar_data[0] . "','" . $ar_data[1] . "')";
            mysql_query($sql);
            mysql_query($sql);
          }
}
Ceci dit je me demande si les trim servent à quelque chose vu qu'il n'y aura jamais d'espace, si la règle de nommage est respectée, autour de "Machine" ou "valeur"
Kaamo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 18h35   #17
Nouveau Membre du Club
 
Inscription : août 2011
Messages : 30
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 30
Points : 30
Points : 30
Super ! ça fonctionne correctement !

Encore merci à vous pour votre patience.

Bonne soirée
spartiates59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 19h28   #18
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Exact :
Code :
1
2
3
4
5
6
7
if (!empty($ar[$i])) {
	$ar_data = explode(' = ', $ar[$i]);
	if(trim($ar_data[0])!='' && trim($ar_data[1])!='') {
		$sql = "INSERT INTO matable VALUES('" . $ar_data[0] . "','" . $ar_data[1] . "')";
		mysql_query($sql);
	}
}
Citation:
Envoyé par Kaamo Voir le message
Ceci dit je me demande si les trim servent à quelque chose vu qu'il n'y aura jamais d'espace, si la règle de nommage est respectée, autour de "Machine" ou "valeur"
Relis ce que j'ai écrit ici qui explique le résultat obtenu .
A cause de ca :
Code :
1
2
        $ar = nl2br($msg);
        $ar = explode('<br />', $ar);
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 10h18   #19
Membre éclairé
 
Avatar de Kaamo
 
Homme Cyril
Ingénieur développement logiciels
Inscription : avril 2007
Messages : 205
Détails du profil
Informations personnelles :
Nom : Homme Cyril
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 205
Points : 367
Points : 367
ça roule ! j'avais pas fait attention à ce "truc" ajouté par le nl2br
Kaamo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 08h41   #20
Invité de passage
 
Homme sébastien
en formation DL
Inscription : septembre 2010
Messages : 1
Détails du profil
Informations personnelles :
Nom : Homme sébastien
Âge : 32
Localisation : France

Informations professionnelles :
Activité : en formation DL
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2010
Messages : 1
Points : 1
Points : 1
Par défaut Problème d'insertion d'une partie des données dans une table

Bonjour à toutes et à tous,

voilà, j'ai fait un script PHP pour extraire des données d'un fichier et les insérer dans plusieurs tables, le problème est que j'ai des données manquante dans une table, et si j'essaie de modifier la partie concernant cette table il y en a trop, ça concerne ma table 'réaliser', voici le script:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
 
<a href="alimenter_base2.php?action=alimenter">Alimenter la base</a></br>
<?php
$nomserveur='localhost';
$nombase='bd';
$user='guest';
$mdp='';
 
$connexion = mysql_connect($nomserveur,$user,$mdp) or die("Erreur de connexion a* MySQL");
mysql_select_db($nombase, $connexion) or die("Erreur de connexion a* la base de donnees \"".$nombase."\"");
 
if(isset($_GET['action']) )
{
	$action = $_GET['action'];
}
else
{
	$action = "alimenter";
}
 
if($action == "alimenter")
{
	$tableau = file('bdp.dat');
	$numLigne = 0;
 
	foreach($tableau as $uneLigne)
	{
		if($numLigne > 0)
		{
			$tableau2 = explode('*', $uneLigne);
			$ref_bd = $tableau2[0];
			$auteur = htmlspecialchars(utf8_encode($tableau2[1]), ENT_QUOTES);
			$heros = htmlspecialchars(utf8_encode($tableau2[2]), ENT_QUOTES);
			$titre = htmlspecialchars(utf8_encode($tableau2[3]), ENT_QUOTES);
			$serie = htmlspecialchars(utf8_encode($tableau2[4]), ENT_QUOTES);
			$prixPublic = htmlspecialchars(utf8_encode($tableau2[5]), ENT_QUOTES);
			$prixEditeur = htmlspecialchars(utf8_encode($tableau2[6]), ENT_QUOTES);
			$genre = htmlspecialchars(utf8_encode($tableau2[7]), ENT_QUOTES);
			$refEdit = htmlspecialchars(utf8_encode($tableau2[8]), ENT_QUOTES);
			$editeur = htmlspecialchars(utf8_encode($tableau2[9]), ENT_QUOTES);
			$refFournisseur = htmlspecialchars(utf8_encode($tableau2[10]), ENT_QUOTES);
			$fournisseur = htmlspecialchars(utf8_encode($tableau2[11]), ENT_QUOTES);
			//$resume = $tableau2[12];
			if (count($tableau2) >= 13) 
			{
				$resume = htmlspecialchars(utf8_encode($tableau2[12]), ENT_QUOTES);
			}
			else
			{
				$resume = "";	
			}
 
		//*****************************************************************************************************************************************************************
			//
			if($editeur == '')
			{
				$editeur = 'Editeur Inconnu';
			}
			else
			{
				$query0 = "SELECT id_editeur FROM editeur WHERE nom_editeur = '".$editeur."'";
				$result0 = mysql_query($query0);
				$num_ligne0 = mysql_num_rows($result0);
 
				if($num_ligne0 == 1)
				{
					$tuple0 = mysql_fetch_array($result0);
					$idEditeur = $tuple0['id_editeur'];
				}
				else
				{
					// Insert nouvel Editeur et récupération du nouvel ID_EDITEUR créé.
					$query1 = "INSERT INTO editeur (nom_editeur) VALUES('".$editeur."')";
					$result1 = mysql_query($query1);
					$idEditeur = mysql_insert_id();
				}
			}
			//echo "id_editeur = ".$idEditeur."<br>";
		//*****************************************************************************************************************************************************************
			//
			if($fournisseur != '')
			{
				$query2 = "SELECT * FROM fournisseur WHERE nom_fournisseur = '".$fournisseur."'";
				$result2 = mysql_query($query2);
				$num_ligne2 = mysql_num_rows($result2);
 
				if($num_ligne2 == 1)
				{
					$tuple2 = mysql_fetch_array($result2);
					$idFournisseur = $tuple2['id_fournisseur'];
				}
				else
				{
					$query3 = "INSERT INTO fournisseur (nom_fournisseur) VALUES('".$fournisseur."')";
					$result3 = mysql_query($query3);
					$idFournisseur = mysql_insert_id();
				}
			}
			//echo "id_fournisseur = ".$idFournisseur."<br>";
		//*****************************************************************************************************************************************************************
			//
			if($auteur == '')
			{
				$auteur ='Auteur Inconnu';
			}
			else
			{
				if(strpos($auteur, "/" ) == false)
				{
					$query4 = "SELECT id_auteur FROM auteur WHERE nom_auteur = '".$auteur."'";
					$result4 = mysql_query($query4);
					$num_ligne4 = mysql_num_rows($result4);
 
					if($num_ligne4 == 1 )
					{
						$tuple4 = mysql_fetch_array($result4);
						$idAuteur = $tuple4['id_auteur'];
					}
					else
					{
						$query5 = "INSERT INTO auteur (nom_auteur) VALUES('".$auteur."')";
						$result5 = mysql_query($query5);
						$idAuteur = mysql_insert_id();
					}
				}
				else
				{
 
					$tabAuteur = explode("/", $auteur);
					foreach($tabAuteur as $nomAuteur)
					{
						$query4 = "SELECT id_auteur FROM auteur WHERE nom_auteur = '".$nomAuteur."'";
						$result4 = mysql_query($query4);
						$num_ligne4 = mysql_num_rows($result4);
 
						if($num_ligne4 == 1 )
						{
							$tuple4 = mysql_fetch_array($result4);
							$idAuteur = $tuple4['id_auteur'];
						}
						else
						{
							$query5 = "INSERT INTO auteur (nom_auteur) VALUES(UNIQUE('".$nomAuteur."'))";
							$result5 = mysql_query($query5);
							$idAuteur = mysql_insert_id();
						}
					}
 
				}
			}
			//echo "id_auteur = ".$idAuteur."<br>";
		//*****************************************************************************************************************************************************************
			//
			if($genre == '')
			{
				$genre = 'Autre';
			}
 
			$query6 = "SELECT id_genre FROM genre WHERE genre = '".$genre."'";
			$result6 = mysql_query($query6);
			$num_ligne6 = mysql_num_rows($result6);
 
			if($num_ligne6 == 1 )
			{
				$tuple6 = mysql_fetch_array($result6);
				$idGenre = $tuple6['id_genre'];
			}
			else
			{
				$query7 = "INSERT INTO genre (genre) VALUES('".$genre."')";
				$result7 = mysql_query($query7);
				$idGenre = mysql_insert_id();
			}
			//echo "id_genre = ".$idGenre."<br>";
		//*****************************************************************************************************************************************************************
			//
			$query8 = "SELECT id_bd FROM bande_dessinee WHERE ref_bd = '".$ref_bd."'";
			$result8 = mysql_query($query8);
			$num_ligne8 = mysql_num_rows($result8);
 
			if($num_ligne8 == 1)
			{
				$tuple8 = mysql_fetch_array($result8);
				$idBd = $tuple8['id_bd'];
			}
			else
			{
				$query9 = "INSERT INTO bande_dessinee
							(editeur_id, genre_id, fournisseur_id, ref_bd, ref_fournisseur, ref_editeur, hero_nom, titre_bd, serie_bd, prix_public, prix_editeur, resume_bd)
						   VALUES
							('".$idEditeur."', '".$idGenre."', '".$idFournisseur."', '".$ref_bd."', '".$refFournisseur."', '".$refEdit."', '".$heros."', '".$titre."', '".$serie."', '".$prixPublic."', '".$prixEditeur."', '".$resume."')";
				$result9 = mysql_query($query9);
				$idBd = mysql_insert_id();
			}
			//echo"id_bd = ".$idBd."<br>";
		//*****************************************************************************************************************************************************************
			//
			if(strpos($auteur, "/" ) == false)
			{ 
				$query11 = "INSERT INTO realiser (bd_id, auteur_id) VALUES('".$idBd."', '".$idAuteur."')";
				$result11 = mysql_query($query11);
			}
			else
			{
				foreach($tabAuteur as $nomAuteur)
				{
					$query11 = "INSERT INTO realiser (bd_id, auteur_id) VALUES('".$idBd."', '".$idAuteur."')";
					$result11 = mysql_query($query11);
				}
			}
			//echo "<hr>";
		}
		$numLigne++;
	}
}
?>
cette table est à la base une association de 2 entités qui est devenue une table, qui peut m'aider?

D'avance merci

PS: j'ai mi en pièce jointe le fichier appelé pour remplir la base.
ayolos est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h38.


 
 
 
 
Partenaires

Hébergement Web