Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
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 29/07/2007, 13h40   #1
Invité régulier
 
Inscription : août 2003
Messages : 26
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 26
Points : 8
Points : 8
Par défaut Problème pour remplir automatiquement une table

Bonjour à toutes et à tous,

Je dois remplir une table nommée "mathscompetences" avec chaque ligne d'un fichier texte (qui regroupe en fait le nom de chaque compétence). Voici le contenu de ce fichier :

Z1
Reconnaître une situation de proportionnalité
Traîter une situation de proportionnalité en utilisant un rapport de linéarité (entier ou décimal)
Compléter un tableau de proportionnalité en utilisant un coefficient de proportionnalité (entier ou décimal)
*Compléter un tableau de proportionnalité par passage par l'image de l'unité
*Compléter un tableau de proportionnalité en utilisant un coefficient de proportionnalité (sous forme d'un quotient)
Appliquer un taux de pourcentage
Z2
Lire, utiliser et interpréter des données à partir d'un tableau
Lire, interpréter et compléter un tableau à double entrée
*Organiser des données en choisissant un mode de représentation adapté : tableaux en deux ou plusieurs colonnes; tableaux à double entrée
Lire et compléter une graduation sur une demi-droite graduée à l'aide d'entiers naturels ou de décimaux
Lire et compléter une graduation sur une demi-droite graduée à l'aide de fractions simples
*Lire et compléter une graduation sur une demi-droite graduée à l'aide de quotients (placement exact ou approché)
Lire, utiliser et intégrer des informations à partir d'une représentation graphique simple (diagrammes en bâtons, graphiques cartésiens)
*Lire, utiliser et interpréter des informations à partir d'une représentation graphique simple (diagrammes circulaires ou semi-circulaires)
N1
Connaître et utiliser la valeur des chiffres en fonction de leur rang dans l'écriture d'un entier
Connaître et utiliser la valeur des chiffres en fonction de leur rang dans l'écriture d'un décimal
Associer diverses désignations d'un nombre décimal : écritures à virgule, fractions décimales
M1
Calculer une aire


Chaque ligne du fichier doit être stockée dans la table avec les règles suivantes :

1 : les lignes Z1 Z2 N1 et M1 ne sont que des indicateurs sur le type de compétence (donc on ne les stocke pas dans la table).

2 : Si la ligne commence par *, cela signifie que la compétence n'est pas exigible

Donc, j'ai créé un fichier php qui lit le fichier texte ligne par ligne avec "fgets()". Je teste avec "ereg() " si la ligne ne commence pas par Z, N, M et G
(qui sont les indicateurs que je ne veux pas insérer dans la table).

Voici le contenu de ce fichier :

<?php
$Serveur=mysql_connect("localhost","root","") or die (mysql_error());
mysql_select_db("eval",$Serveur) or die(mysql_error());
$Fp = fopen("MathsCompetences.txt","r");
$NB=0;
while (!feof($Fp))
{
$Ligne = fgets($Fp);
$Lire='N';
if (ereg('^Z',$Ligne))
{
$type=1;
} elseif(ereg('^N',$Ligne))
{
$type=2;
} elseif(ereg('^G',$Ligne))
{
$type=3;
} elseif(ereg('^M',$Ligne))
{
$type=4;
} else
{
$Lire='O';
$socle=1-ereg('^\*',$Ligne);
}
if ($Lire=='O')
{
$NB++;
echo $NB." ".$Ligne."--";
$Query = "INSERT INTO `mathscompetences`(`Type`,`Socle`,`Texte`)
VALUES($type,$socle,'".$Ligne."')";
mysql_query($Query);
}
fclose($Fp);
mysql_close();
?>


Comme vous pouvez le remarquer, la variable $Lire permet de savoir si la ligne lue doit être insérée dans la table ou non (après les différents tests sur le premier caractère). Si la ligne est à lire, je l'affiche via la fonction echo() et je l'insère à l'aide d'une requête en SQL.

Le problème est le suivant : toutes les compétences à lire sont bien affichée par le "echo()" et elles y sont toutes. De plus, les tests permettent bien d'écarter les lignes "Z1" etc ... MAIS lorsque je regarde le contenu de la table "maths competences" via PHPMyadmin, la table ne contient que les compétences suivantes :



C'est à dire les compétences N° 1,2,3,6,8,9,18 de la liste !!!

ET JE NE COMPRENDS PAS POURQUOI. Pourquoi les compétences affichées par la fonction "echo" ne sont pas insérer dans la table ?

J'ajoute que j'utilise EasyPHP.

Merci pour vos réponses.
Images attachées
Type de fichier : jpg Table.jpg (63,4 Ko, 4 affichages)
Atemi76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2007, 22h57   #2
Membre du Club
 
Inscription : octobre 2005
Messages : 112
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 112
Points : 65
Points : 65
Envoyer un message via Skype™ à lebreton22
Bonjour
as-tu un exemplaire du fichier txt ?
__________________
lebreton22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2007, 23h09   #3
Membre du Club
 
Inscription : octobre 2005
Messages : 112
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 112
Points : 65
Points : 65
Envoyer un message via Skype™ à lebreton22
Citation:
echo $NB." ".$Ligne."--";
$Query = "INSERT INTO `mathscompetences`(`Type`,`Socle`,`Texte`)
VALUES($type,$socle,'".$Ligne."')";
mysql_query($Query);
Qu'est ce que ça donne lorsque tu fais
echo $NB." ".$type." ".$socle." ".$Ligne;
__________________
lebreton22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 16h31   #4
Membre actif
 
Avatar de Momodedf
 
Inscription : juillet 2007
Messages : 246
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : juillet 2007
Messages : 246
Points : 176
Points : 176
Le probleme c'est qu'à chaque caractere ' dans ton text toute la ligne est foirée étant donné que le caractere ' est utilisé dans ta requete sql.

J'ai déjà eu affaire à ce probleme et le je contourne en remplaçant chaque occurence du caractere ' par la chaine :appostrophe: lors de l'insertion dans la base (pour cela tu peux utiliser la fonction str_replace).
Bien sur à l'affichage des données de ta table tu devras réutiliser str_replace pour changer tout tes :appostrophe: en '.
Momodedf 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 20h41.


 
 
 
 
Partenaires

Hébergement Web