Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/07/2007, à 17:24

thx_84

projet de base de données documents

Bonjour,

Dans le cadre d'un stage, on me demande de faire des propositions pour le projet suivant:

(je précise, je suis dans un bureau de traduction)
le but est d'évaluer le rapport texte original - texte traduit afin de pouvoir faire des devis pour les clients qu'ils ne nous confient des travaux...

pour cela, j'ai pensé à une base de données qui rassemblerait les données suivantes:

- n° de référence
- langue source
- nombre de mots (langue source)
- langue cible
- nombre de mots (langue cible)
- ratio nb mots (source) / nb mots (cible)

après cela, il faudrait pouvoir récupérer le ratio et faire moyenne par paire de langues...

vous croyez que c'est possible à mysql? l'idéal ce serait d'avoir une interface web pour tout ça...


ben, comme on fait pour signer sur l'ordi??? mince, je viens de ficher en l'air l'écran avec mon stylo...

Hors ligne

#2 Le 04/07/2007, à 12:35

thx_84

Re : projet de base de données documents

alors un pas en avant: avec wvSummary (inclus dans le paquet wv), il est possible de récupérer les métadonnés d'un document Word, donc le nombre de mots...


ben, comme on fait pour signer sur l'ordi??? mince, je viens de ficher en l'air l'écran avec mon stylo...

Hors ligne

#3 Le 04/07/2007, à 14:36

marc31

Re : projet de base de données documents

- tu n'as pas besoin de base de données pour cela, si ? enfin si cela te fait plaisir, pourquoi pas pour stoker l'information de maniere temporaire
- ton schema de données n'est pas formidable, (pour la base), il faudrait plutot sinder document source (original) avec le nombre de mots, et les traductions (avec aussi le nombre de mots),
- je vois pas trop a quoi cela peut te servir, peut-etre pour les statistiques et des problemes de facturation, c''st bien cela ?


ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org

Hors ligne

#4 Le 04/07/2007, à 15:12

thx_84

Re : projet de base de données documents

j'ai essayé d'esquisser quelque chose sous excel, comme ça j'espère qu'on me comprendra mieux

3fae4185a80bb9a84e5ad18d0a9ct2.jpg
légende lang S (langue source), mots S(nombre de mots dans le texte source), pareil pour C(langue cible), % C/S c'est le ratio mots c/mots v

le but, c'est effectivement d'avoir des statistiques pour pouvoir faire un devis pour les traductions, genre un client nous donne un texte allemand, et grâce à ça, on va pouvoir lui dire environ combien de mots il y aura dans le texte traduit et du coup, combien il devra payer cool

c'est plus clair comme ça?

edit en plus, il faut faire ça pour chaque paire de langue hmm

Dernière modification par thx_84 (Le 04/07/2007, à 15:45)


ben, comme on fait pour signer sur l'ordi??? mince, je viens de ficher en l'air l'écran avec mon stylo...

Hors ligne

#5 Le 04/07/2007, à 16:52

stopher

Re : projet de base de données documents

Comment peux tu connaitre le nombre de mots du document traduit , sans le traduire ?? hmm ...
bon , sinon , je pense que tu peux faire ca avec php et mysql , ce qui peut meme permettre aux clients de voir eux meme une idée du prix que ca peut leur couter .. le client upload le document à traduire , une fois le document uploadé , celui ci est traité analysé , pour connaitre le nombre de mots , et voilà il n'y a plus qu'à faire une petite operation ... et renvoyer le resultat instantanément au client ... à peine le document uploadé que le prix s'affiche deja :-)

Hors ligne

#6 Le 04/07/2007, à 17:24

marc31

Re : projet de base de données documents

y'a pas besoin de base de données pour cela :
- juste un langage de scripting,
- un moyen de compter des mots dans des fichiers s'ils ne sont pas ASCII, sinon c'est encore plus facile (wc par exemple le fait bien),
- et des tableaux et quelques formules.


ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org

Hors ligne

#7 Le 09/07/2007, à 09:33

thx_84

Re : projet de base de données documents

bon je fais le point de ce que j'ai déjà fait:

la page pour l'alimentation de la base:

<?php
// On commence par récupérer les champs
if(isset($_POST['id']))      $id=$_POST['id'];
else      $id="";

if(isset($_POST['lang_src']))      $lang_src=$_POST['lang_src'];
else      $lang_src="";

if(isset($_POST['word_src']))      $word_src=$_POST['word_src'];
else      $word_src="";

if(isset($_POST['lang_cib']))      $lang_cib=$_POST['lang_cib'];
else      $lang_cib="";

if(isset($_POST['word_cib']))      $word_cib=$_POST['word_cib'];
else      $word_cib="";

if($lang_src==$lang_cib)
echo "Les langues source et cible doivent être différentes!!!";
else {
       // connexion à la base
$db = mysql_connect('localhost', '***', '')  or die('Erreur de connexion '.mysql_error());
// sélection de la base  

    mysql_select_db('trad_devis',$db)  or die('Erreur de selection '.mysql_error());
    
    // on écrit la requête sql
    $sql = "INSERT INTO trad(id, lang_src, word_src,lang_cib,word_cib) VALUES('$id','$lang_src','$word_src','$lang_cib','$word_cib')";
    
    // on insère les informations du formulaire dans la table
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

    // on affiche le résultat pour le visiteur
    echo 'Vos infos ont été ajoutées.';

    mysql_close();  // on ferme la connexion
       }

?>

<html>
<head>
<link rel="stylesheet" type="text/css" href="feuille.css" />
</head>
<body>
<p><h1>Alimentation de la base</h1></p>

<p>Voici le formulaire à remplir:<br>&nbsp;<br>

<form method="post" action="<?php echo $PHP_SELF; ?>">
n° réf:&nbsp;&nbsp;<input type="text" size="10" name="id"><br>&nbsp;<br>
Langue source:&nbsp;&nbsp;<select name="lang_src">
<option>fr<option>en<option>de<option>it<option>es<option>pt<option>ru</select>&nbsp;&nbsp;
Mots texte source:&nbsp;&nbsp;<input type="text" size="5" name="word_src"><br>&nbsp;<br>

Langue cible:&nbsp;&nbsp;<select name="lang_cib">
<option>en<option>fr<option>de<option>it<option>es<option>pt<option>ru</select>&nbsp;&nbsp;
Mots texte cible:&nbsp;&nbsp;<input type="text" size="5" name="word_cib"><br>&nbsp;<br>
<input type="submit" value="Enregistrer">
</form>
</p>
<a href="index.php">Retour à l'index</a>
</body>
</html>

la page pour établir le devis:

<html>
<head>
<title>Devis nouvelle traduction</title>
<link rel="stylesheet" type="text/css" href="feuille.css" />
</head>
<body>
<p><h1>Devis</h1></p>

<p>Vous pouvez à tout moment consulter les données utilisées pour faire les devis: <a href="stats.php">Statistiques</a></p>
<form method="post" action="<?php echo $PHP_SELF; ?>">
Langue source:&nbsp;&nbsp;<select name='lang_src'>
<option>fr<option>en<option>de<option>it<option>es<option>pt<option>ru</select><br>&nbsp;<br>
Langue cible:&nbsp;&nbsp;<select name='lang_cib'>
<option>fr<option>en<option>de<option>it<option>es<option>pt<option>ru</select><br>&nbsp;<br>
Nombre de mots du texte source: &nbsp;&nbsp;<input type='text' size=5 name='word_src_d'><br>&nbsp;<br>
<input type='submit' name='Valider'><br>
<?php
//fonction récupérée sur la doc PHP
function mysql_evaluate($query, $default_value="undefined") {
    $result = mysql_query($query);
    if (mysql_num_rows($result)==0)
        return $default_value;
    else
        return mysql_result($result,0);
}

// On commence par récupérer les champs
if(isset($_POST['lang_src']))      $lang_src=$_POST['lang_src'];
else      $lang_src="";

if(isset($_POST['word_src_d']))      $word_src_d=$_POST['word_src_d'];
else      $word_src_d="";

if(isset($_POST['lang_cib']))      $lang_cib=$_POST['lang_cib'];
else      $lang_cib="";
       // connexion à la base
$db = mysql_connect('localhost', 'thierry', '')  or die('Erreur de connexion '.mysql_error());
// sélection de la base  

    mysql_select_db('trad_devis',$db)  or die('Erreur de selection '.mysql_error());
$sql="SELECT ROUND($word_src_d*AVG(word_cib/word_src)) FROM trad WHERE lang_cib='$lang_cib' AND lang_src='$lang_src'";

mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

echo "<br>Nombre de mots(évaluation):&nbsp;".mysql_evaluate($sql);

mysql_close();
?>
<br><a href="index.php">retour à l'index</a>
</body>
</html>

ben, comme on fait pour signer sur l'ordi??? mince, je viens de ficher en l'air l'écran avec mon stylo...

Hors ligne

#8 Le 09/07/2007, à 12:34

thx_84

Re : projet de base de données documents

par contre, j'ai un petit souci... j'ai créé en plus une page statistique, mais rien ne s'affiche lorsque je remplis le formulaire hmm

<html>
<head>
<title>STATS TRAD DEVIS 2007</title>
<link rel="stylesheet" type="text/css" href="feuille.css" />
</head>
<body>
<h1>Statistiques TRAD DEVIS 2007&nbsp;<br>&nbsp;</h1>
<p>Calcul du ratio:<br>
<form method="post" action="<?php echo $PHP_SELF; ?>">
Langue source:&nbsp;&nbsp;<select name='lang_src'>
<option>en<option>fr<option>de<option>it<option>es<option>pt<option>ru</select><br>&nbsp;<br>
Langue cible:&nbsp;&nbsp;<select name='lang_cib'>
<option>fr<option>en<option>de<option>it<option>es<option>pt<option>ru</select><br>&nbsp;<br></p>

<input type="submit" name="Valider"><br>

<?php
// Connexion et sélection de la base
$link = mysql_connect("localhost", "thierry", "")
    or die("Impossible de se connecter");

mysql_select_db("trad_devis") or die("Could not select database");

//fonction récupérée sur la doc PHP
function mysql_evaluate($query, $default_value="undefined") {
    $result = mysql_query($query);
    if (mysql_num_rows($result)==0)
        return $default_value;
    else
        return mysql_result($result,0);
}

$sql="SELECT AVG(word_cib/word_src) FROM trad WHERE lang_cib='$lang_cib' AND lang_src='$lang_src'";
echo "Ratio $lang_src -> $lang_cib:&nbsp;".mysql_evaluate($sql);

// Fermeture de la connexion
mysql_close($link);
?>

<br><a href="index.php">retour à l'index</a>
</body>
</html>

ben, comme on fait pour signer sur l'ordi??? mince, je viens de ficher en l'air l'écran avec mon stylo...

Hors ligne

#9 Le 09/07/2007, à 15:16

Bzh

Re : projet de base de données documents

ATTENTION malheureux ! yikes

Et la protection de ta base de donnée ?????????????

Tu ne véries en aucun cas le type de donnée avant ta requete à la bdd !!!

Attention aux injections de SQL !

Il faut, au minimum, passer par mysql_real_escape_string() afin de proteger ta base de données...

Hors ligne

#10 Le 09/07/2007, à 16:37

thx_84

Re : projet de base de données documents

euh... j'ai pas compris grand chose.

en plus, c'est pour un usage local, donc je risque pas gros


ben, comme on fait pour signer sur l'ordi??? mince, je viens de ficher en l'air l'écran avec mon stylo...

Hors ligne

#11 Le 09/07/2007, à 20:16

Bzh

Re : projet de base de données documents

Regarde je te montre :

Prenons le code suivant:

//On recupère les infos du formulaire
$info = $_POST['info'];
//On execute notre requete
$requete = 'SELECT tout  FROM table WHERE info="'.$info.'"';
mysql_query( $requete );
//On affiche notre requete
echo $requete;

Voila, maintenant, si notre formulaire retourne "Manu", notre echo affichera:

SELECT tout  FROM table WHERE info="Manu"

Donc aucun souci. Mais si jamais un tit malin retourne autre chose dans le formulaire. Par exemple : 1" OR "1"="1

Et bien notre requete devient:

SELECT tout  FROM table WHERE info="1" OR "1"="1"

Il a donc réussi à modifier completement notre requete simplement en injectant par l'intermédiaire de notre formulaire de l'SQL !

Il est donc très important de passer par la fonction mysql_real_escape_string() afin de se proteger de cela !

Dernière modification par Bzh (Le 09/07/2007, à 20:16)

Hors ligne

#12 Le 10/07/2007, à 07:34

stopher

Re : projet de base de données documents

En effet , tu ne fais aucune verifications sur les champs text
premierement , si ton champ doit/peut etre de type alpha numérique , verifie que ce qui a ete entré est bien en alpha numérique :

if (ctype_alnum($_POST['']))
{
     ......  //voir le code proposé en dessous
}

de meme pour numérique :

if (ctype_digit($_POST['']))
{
     ...... //voir le code proposé en dessous
}

ensuite avant d'enregistrer cache dans ta base de données , fais un petit traitement sur les chaines :

$chaine_traite = htmlentities(addslashes(trim($_POST[''])),ENT_QUOTES);

//Là c'est bon , tu peut l'inserer dans ta requete :-)
$sql = 'INSERT INTO .... .....';

références :
http://fr2.php.net/manual/fr/function.ctype-digit.php
http://fr2.php.net/manual/fr/function.htmlentities.php
http://fr2.php.net/manual/fr/function.addslashes.php
http://fr2.php.net/manual/fr/function.trim.php

Ensuite toujours pour des raisons de sécurité , tu devrais séparer le script de connexion à la base , ou juste les paramètres de connexion (user, mdp bd .. ) dans un autre dossier protégé par un .htaccess

Ensuite pour des raison de facilité de maintenance , il est conseillé de séparer les formulaires html des scripts de contrôles php .

Bon courage et bonne continuation ;-)

Dernière modification par stopher (Le 10/07/2007, à 07:49)

Hors ligne

#13 Le 10/07/2007, à 12:03

Bzh

Re : projet de base de données documents

Ah non ! SURTOUT PAS de htmlentites() à l'entrée de ta base !

Le texte doit etre BRUT dans ta base de données. On passe par htmlentities() lors de la sortie de la base. Lors de l'affichage des données.

Là aussi, erreur de protection de la base de donnée car addslashes() ne protege pas contre les caratères SQL comme #.

Tu as une pseudo protection dans la façon dont tu procèdes car htmlentities() te permet une certaine sécurité sans le savoir. ni même le vouloir

Mais normalement, mysql_real_escape_string() est LA fonction et la SEULE à employer pour proteger ses requetes MySql.
http://fr.php.net/mysql_real_escape_string

Hors ligne

#14 Le 11/07/2007, à 11:53

thx_84

Re : projet de base de données documents

eh oh, ne vous battez pas!

avant de penser à la sécurité de mon projet, j'ai un problème avec l'include: j'ai séparé les données de connexion des fichiers pour ne pas avoir de problèmes. pourtant, lorsque je fais appel au fichier par include(la même chose pour require) rien ne se passe, je n'ai pas de message d'erreur, mais la page reste blanche. si je consulte la source, je vois le code php que j'ai inséré! ce n'est pas normal, puisque le code php doit être exécuté par le serveur, non?

bref si vous pouviez jeter un coup d'oeil et voir ce qui ne va pas, ce serait sympa!
(si jamais le fichier config contient les paramètres de connexion)

<?
include("config.php");
$db = mysql_connect("$mysql_svr", "$mysql_login", "$mysql_pass") or die('Erreur de connexion '.mysql_error());
mysql_select_db("$mysql_db", $db) or die('Erreur de selection '.mysql_error());
echo $mysql_svr,$mysql_login,$mysql_pass,$mysql_db;
?>

ben, comme on fait pour signer sur l'ordi??? mince, je viens de ficher en l'air l'écran avec mon stylo...

Hors ligne

#15 Le 11/07/2007, à 13:08

Bzh

Re : projet de base de données documents

Le code qui se trouve dans ton include, est bien entouré des balises <?php et ?> ?????

Hors ligne

#16 Le 11/07/2007, à 23:35

thx_84

Re : projet de base de données documents

alors je comprends plus rien, à la maison ça marche très bien, le include!

ça doit être un problème au bureau, j'utilise wamp et il me refuse tous les includes... je chercherai une solution demain


ben, comme on fait pour signer sur l'ordi??? mince, je viens de ficher en l'air l'écran avec mon stylo...

Hors ligne

#17 Le 12/07/2007, à 16:36

thx_84

Re : projet de base de données documents

alors apparemment le serveur wamp est plus tatillon sur la syntaxe.

depuis ubuntu, un simple <? ... ?> suffisait alors wamp exige le <?php ... ?>

tout baigne dans l'huile en résumé big_smile


ben, comme on fait pour signer sur l'ordi??? mince, je viens de ficher en l'air l'écran avec mon stylo...

Hors ligne