Pourcentage

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Pourcentage

par inuendo » 26 janv. 2006, 18:34

en fait,

je suis revenu à mon ancien code parce que dans celui que tu as proposé Cyrano, il me renvoyait des valeurs supérieurs à 100... Si j'utilise l'ancien code, il me retourne 100% pour ces valeurs... En meme temps, c'est étrange...

inuendo

par inuendo » 26 janv. 2006, 14:05

Je vais créer un nouveau poste concernant l'intégration des variables dans une images dynamique. On peut considérer celui-là comme Résolu je pense.

par inuendo » 26 janv. 2006, 11:03

Alors j'ai essayé d'intégrer le nouveau code dans ma page image.php qui doit me créer l'image dynamique mais le code ne prend pas en compte les différentes valeurs de $pourcent.
<?php  
header ("Content-type: image/png");
include( "mysql.inc.php" );
$requete = "SELECT *, MATCH (fr) AGAINST ('pluie') AS score FROM japfr WHERE MATCH (fr) AGAINST('pluie' IN BOOLEAN MODE) ORDER BY score DESC";
$execution  = mysql_query( $requete, $connection );

    
while( $un_mot = mysql_fetch_array( $execution ) ) 
      { 
	  $i = 0; 
$valeur= round ($un_mot["score"],3);
$coeff = ($i == 0) ? round(100/$valeur) : $coeff; 
$pourcent = ($i == 0) ? 100 : $valeur * $coeff; 
 
$largeurImage = 50; 
$hauteurImage = 10;  
$image = imagecreate ($largeurImage, $hauteurImage)  or die ("Erreur lors de la création de l'image"); 
       

    $fond = imagecolorallocate($image, 143, 190, 241); // Fond bleu clair
	 $fond2 = imagecolorallocate($image, 25, 25, 25); // colonne blanc
    $couleur_texte = imagecolorallocate($image, 255, 255, 255); // Texte en blanc
	
        $largeurImageRectangle =  $pourcent;  // c'est ici que la valeur change
        ImageFilledRectangle ($image, 0, 0, $largeurImageRectangle,40, $fond2);  // elle devient la longueur du rectangle
$i++; 
    }
imagestring($image, 0, 0, 0, $pourcent, $couleur_texte); // On affiche la valeur de $pourcent dans la barre 

imagepng($image);

?>  

Mais j'ai toujours 100 ! et si je change $pourcent par ($i == 0) ? 100 : $valeur * $coeff; il me retourne la deuxième valeur ! J'ai l'impression que c'est un problème dans la boucle mais je ne comprends pas pourquoi ce qui marche pour result.php ne marche pas pour image.php..

par inuendo » 26 janv. 2006, 01:07

Je me suis inscrit^^ Je pourrai éditer mes messages au moins !

En fait, il y a une chose que j'avais faite qui n'est plus dans le code, c'est ça :
if ($v == 0)
        {
            $v = 1;
        } 
parce que si je mets une requête booléenne avec 'plui*', il me retournera la valeur 0 pour les mots 'pluie, pluies' etc... alors je lui attribuais la valeur 1, pourqu'il me retourne 0 mais pas l'erreur : division par 0 attention !

par inuendo » 26 janv. 2006, 00:55

Je me doutais que je me compliquais la vie !

Faudra que je regarde plus près ton code (merci pour les détails \:D/ )

En tout cas, ça arrive à quelque chose près au même résultat au niveau des stats sur la page :

100% Jour de pluie, temps de pluie (nm); pluvieux(se) (adj) motjap (adj-no, n)
71.094% Eau de pluie (nm) motjap (n)
70.295% Pluie, précipitation (nf) motjap(n)
70.295% Goutte de pluie (nf)motjap (n)
70.295% Goutte de pluie (nf) motjap(n)
68.748% Infiltration d'eau de pluie par le toit (nf) motjap (ns)
etc

Merci en tout cas pour l'amélioration du script !
Cependant, cela ne résout pas le problème qui est le fait d'avoir le %age dans image.php pour faire éévoluer la barre...
En fait, c'est peut-être tout bête, mais je n'arrive pas à avoir la $pourcent qui évolue dans image.php, il reste à la valeur de ligne 1...
<?php  
header ("Content-type: image/png");
include( "mysql.inc.php" );
$requete = "SELECT *, MATCH (fr) AGAINST ('pluie') AS score FROM japfr WHERE MATCH (fr) AGAINST('pluie' IN BOOLEAN MODE) ORDER BY score DESC";
$execution  = mysql_query( $requete, $connection );
$execution2  = mysql_query( $requete, $connection );
$u = mysql_fetch_array( $execution2 ) ;
$v= round ($u["score"],3);

while( $un_mot = mysql_fetch_array( $execution ) ) 
      { 
if ($v==0) {$v=1;}
$valeur= round ($un_mot["score"],3);

$pourcent = round(($valeur*100)/($v),2);   
$largeurImage = 50; 
$hauteurImage = 10;  
$image = imagecreate ($largeurImage, $hauteurImage)  or die ("Erreur lors de la création de l'image"); 
$heure = '' . date('H i'); // On stocke l'heure et les minutes dans une variable         

    $fond = imagecolorallocate($image, 143, 190, 241); // Fond bleu clair
	 $fond2 = imagecolorallocate($image, 25, 25, 25); // colonne blanc
    $couleur_texte = imagecolorallocate($image, 255, 255, 255); // Texte en blanc
	
        $largeurImageRectangle =  (80/2);  
        ImageFilledRectangle ($image, 0, 0, $largeurImageRectangle,40, $fond2);  

imagestring($image, 0, 0, 0, $valeur, $couleur_texte); // On affiche l'heure dans la bonne couleur

imagepng($image);
}

?>  
[php]
C'est l'ancien code de image.php... Je vais essayer de l'actualiser avec ton code mais je ne vois pas comment je peux avoir ça : 
/*php $largeurImageRectangle =  $pourcent;  
        ImageFilledRectangle ($image, 0, 0, $largeurImageRectangle,40, $fond2);  
 /php*/
dans image.php puisque la variable n'y est pas...

par Cyrano » 26 janv. 2006, 00:46

c'est ce que j'ai fait je crois ?
$pourcent = round(($valeur*100)/($v),2);
Il me semble bien que non: ce que je suggère serait plus proche de:
$pourcent = round(100/$valeur);
C'est tout : par la suite, tu multiplies les résultats par $pourcent pour obtenir la proportion correspondante. Disons que ta formulae, c'est plus proche de l'art de se compliquer la tâche en coupant les cheveux en 4 :langue:

Proposition :
<?php
include( "mysql.inc.php" );
$requete  = "SELECT *, MATCH (fr) AGAINST ('pluie') AS score ".
            "FROM japfr ".
            "WHERE MATCH (fr) AGAINST('pluie' IN BOOLEAN MODE) ".
            "ORDER BY score DESC";
$execution  = mysql_query( $requete,  $connection );
$total = mysql_num_rows( $execution ) ;
if ($total != 0)
{
    $i = 0;
    while( $un_mot = mysql_fetch_array( $execution ) )
    {
        $valeur = round ($un_mot["score"],3);
        if ($v == 0)
        {
            $v = 1;
        }
        /* Si on est au premier tour, on calcule le coefficient, sinon on reconduit celui déterminé au premier tour. */
        $coeff = ($i == 0) ? round(100/$valeur) : $coeff;
        /* On calcule le pourcentage correpondant à la valeur sauf au premier tour où la plus grande valeur est obligatoirement 100 */
        $pourcent = ($i == 0) ? 100 : $valeur * $coeff;

        echo "<img src="modules/dico/image.php">". $pourcent ."% ". $un_mot["fr"] ."  ". $un_mot["jap"];
        $i++;
    }
}
else 
{
    echo "pas de traduction";
}
?>

par inuendo » 26 janv. 2006, 00:37

(non, non, je ne flood pas^^)

j'ai enlevé la deuxième requête et ça marche toujours dans result.php, c'est donc bien ma première méthode qui était foireuse^^
<?php
include( "mysql.inc.php" );
$requete = "SELECT *, MATCH (fr) AGAINST ('pluie') AS score FROM japfr WHERE MATCH (fr) AGAINST('pluie' IN BOOLEAN MODE) ORDER BY score DESC";
$execution  = mysql_query( $requete, $connection );
$execution2  = mysql_query( $requete, $connection );
$total = @mysql_num_rows( $execution ) ;
$u = @mysql_fetch_array( $execution2 ) ;
$v= round ($u["score"],3);
if ($total!=0)
 {
while( $un_mot = mysql_fetch_array( $execution ) ) 
      {
$valeur= round ($un_mot["score"],3);
if ($v==0) {$v=1;}
$pourcent = round(($valeur*100)/($v),2);
       
echo "<img src=\"modules\dico\image.php\">".$pourcent."% ".$un_mot["fr"] ."  ". $un_mot["jap"]; 
}
}
else {
echo "pas de traduction";

}
?>  
Mais, je n'arrive pas à récupérer la valeur de $pourcent dans image.php...

par inuendo » 26 janv. 2006, 00:34

100% Jour de pluie, temps de pluie (nm); pluvieux(se) (adj) motjap (adj-no, n)
71.67% Eau de pluie (nm) motjap (n)70.87% Pluie, précipitation (nf) motjap (n)
70.87% Goutte de pluie (nf) motjap (n)
70.87% Goutte de pluie (nf) motjap (n)
69.31% Infiltration d'eau de pluie par le toit (nf) motjap (ns)
etc

C'est ce que me retourne mon code dans result.php

par inuendo » 26 janv. 2006, 00:31

c'est ce que j'ai fait je crois ?
$pourcent = round(($valeur*100)/($v),2);
ou $valeur = le score de la ligne dans la boucle while
et $v = le score de la première ligne (hors de la boucle)

c'est ça ?

Je vais essayer de revenir à une requête...

par Cyrano » 26 janv. 2006, 00:28

Bon ok, alors là, on va laisser le SQL de coté, tu ne vas faire qu'une seule requête et en utiliser correctement les résultats retournés.

Et on va laisser faire le PHP dans l'immédiat : c'est un problème mathématique :

Donc tu as une valeur qui va servir de référence pour déterminer le 100%... de la taille j'imagine pour ton image.

Prenons quelques chiffres arbitraires:
- 14.5
- 10.33
- 5.1
- 1.75
Nous devons commencer en extraire le plus grand, donc 14.5 pour déterminer le coefficient qui servira à multiplier les autres:
- x = 100/14.5 (ce me semble)
À partir de là, il ne reste qu'à multiplier les autres résultats par x pour obtenir la dimension correspondante dans l'échelle.
Donc si pour :
- 14.5 * x = 100;
- 10.33 * x = 71.2413...;
- 5.1 * x = 35.1724....;
- 1.75 * x = 12.0689...;
Ça te semble juste ?

Traduction en PHP : si tes résultats sont bien triés lors de la récupération, le premier sert à calculer le coefficient... dois-je vraiment continuer ? :-k

par inuendo » 26 janv. 2006, 00:13

La requête me retourne par pertinence les mots associés à la recherche donc à la base :

J'entre un mot : maison

La requete me renvoie :

Maison - la traduction 100%
La maison bleue - la traduction 99%

et me classe par score du plus pertinent au moins pertinent.

Le score est du type : 6,2132412542 pour le résultat le plus pertinent puis
5,8275223 pour le 2eme est ainsi de suite...

J'ai changé ce score pour obtenir un % où le premier résutlat = 100 (enfin c'est ce que je veux faire).

Donc je voulais utiliser ce pourcentage dans mon image dynamique pour avoir une barre qui évolue en fonction du %age.

Ce qu'on voit sur l'image, c'est le problème : dans image.php, il renvoie toujours 100 pour tous les mots au lieu de me renvoyer les %age comme dans result.php...

Pourquoi 2 requêtes ?
Parce que (je ne sais pas pourquio) si j'utilisais la même requête pour définir ma variable du premier score (celui de référence qui deviendra 100), les résultats affichés changés ! alors j'ai mis 2 requêtes mais j'avais peut-être mal formulés mes variables...

Désolé d'être aussi confus dans mes explications.

par Cyrano » 26 janv. 2006, 00:04

Bon, je ne comprends pas encore tout: ta requête te retourne quoi au juste ? Est-ce que théoriquement les résultats obtenus suffiraient pour créer tes graphiques et dans ce cas pourquoi la seconde requête identique ?

par inuendo » 25 janv. 2006, 23:57

Ah, en gros, si je pouvais récupérer la valeur $pourcent dans image.php ou l'incorporer de result.php vers image.php, j'aurais ma barre qui évoluerait en fonction :

la barre fait 100 de longueur
si $pourcent =100 alors la barre fera 100
si $pourcent =80 alors la barre fera 80 dans le rectangle de 100.

Il faudrait juste que je puisse récupérer la variable $pourcent mais je vois pas comment faire...

par inuendo » 25 janv. 2006, 23:50

C'est vrai que c'est pas très clair comme ça^^

la table c'est :

id, fr, jap, pro, com ou fr, jap, pro, com sont des varchar indexes en fulltext pour la recherche

sinon, le résultat, peut se voir en image ici :

http://www.raindropfr.com/result.jpg

la base de donnée est pas actualisée sur le serveur test...

Est ce que c'est un peu plus clair ? C'est vrai que je sais ce que je veux faire mais j'ai dû mal à être clair...

par Cyrano » 25 janv. 2006, 23:40

Si tu me donnais un exemple de données avec le résultat que ça devrait produire, et avec pour couronner tout ça la structure de la table, on pourrait trouver la manière de ne faire qu'une seule requête qui te donnerait les bonnes informations...