Compteur de caractères pour devis en ligne

Eléphanteau du PHP | 16 Messages

28 août 2009, 09:21

Note : Comme je suppose que tu vas contrôler ce nombre ensuite en php, fait attention à l'encodage de ta page. Si c'est ISO ... machin, la fonction strlen suffira, par contre si tu travailles en utf-8 pour un site portable avec des langues étrangères regarde du côté de mb_strlen($machaine,'utf-8') .
Bah dis donc, si tu parles comme ça aux enfants de 9 ans que tu connais, soit ils s'emmerdent, soit ce sont des petits génies! :lol: :lol: :lol: :lol:

Plus sérieusement, merci à tous pour vos conseils, j'ai bien débloqué la situation et ça commence à rentrer un peu mieux dans ma p'tite tête!

:pouce: :pouce: :agenouille: :agenouille: :agenouille: :agenouille:

Eléphanteau du PHP | 16 Messages

06 sept. 2009, 12:57

:D Salut à tous,

bon, j'ai pas eu le temps de m'occuper de tout ça cette semaine alors me revoilà avec un autre problème...je pense que ça n'est plus dans la bonne catégorie mais comme ça va avec le reste du sujet, je continue ici!

Bref, c'est donc pour un devis: le client copie son texte dans une fenêtre et il obtient le nombre de caractères de son texte et surtout combien ça lui coute.

Le truc, c'est que les tarifs sont dégressifs en fonction du nombre de caractères mais je n'arrive pas à rentrer plusieurs "paliers" de degressivité.

Pour rappel, je m'étais "inspiré" du code de cette page:
http://www.lereviseur.com/21devis1.html

et je bloque là:

if ((nb.length > 10000)&& (nb.length <=20000)) (cmb = eval((nb.length*0.0019)*100))
else {cmb = eval((nb.length*0.002+3)*100)}

en gros, j'arrive à moduler le prix de base si le nombre de caractères est compris entre 10000 et 20000 mais j'aimerais moduler sur d'autres paliers...entre 20001 et 50000, entre 50001 et 100000, etc...

ça doit être tout con mais j'ai bien cherché et je trouve pas...
j'ai bien sûr eu envie de faire ça:

if ((nb.length > 10000)&& (nb.length <=20000)) (cmb = eval((nb.length*0.0019)*100))
if ((nb.length > 20000)&& (nb.length <=50000)) (cmb = eval((nb.length*0.0019)*100))
if (nb.length > 100000)) (cmb = eval((nb.length*0.0019)*100))
else {cmb = eval((nb.length*0.002+3)*100)}

mais ça ne marche pas...alors soit il manque juste un opérateur entre les lignes (lequel?), soit il faut changer toute la formulation, mais comment?

Bref, je suis toujours une quiche, mais je progresse un peu (lentement ;))

Si les modos jugent nécessaire de déplacer le sujet, pourquoi pas...mais j'avais commencé ici, alors...

merciiiii :D :D

Mammouth du PHP | 985 Messages

06 sept. 2009, 13:02

Déja si tu utilises des {} au lieu de () après le if puis des ; après la déclaration des variables...
if ((nb.length > 10000) && (nb.length <=20000)) {
cmb = eval((nb.length*0.0019)*100);
}
else {
cmb = eval((nb.length*0.002+3)*100);
}
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 16 Messages

06 sept. 2009, 13:31

ok, merci pour la modif...mais pour ajouter des conditions supplémentaires, ce serait un truc comme ça?

if ((nb.length > 10000) && (nb.length <=20000)) {cmb = eval((nb.length*0.0019)*100);}
if ((nb.length > 20000) && (nb.length <=50000)) {cmb = eval((nb.length*0.0018)*100);}
else {cmb = eval((nb.length*0.002+3)*100);}

je dis "serait" parce que ça, ça marche pas...c'est comme si il ne voyait pas la première ligne! #-o

Mammouth du PHP | 985 Messages

06 sept. 2009, 13:36

ok, merci pour la modif...mais pour ajouter des conditions supplémentaires, ce serait un truc comme ça?
if ((nb.length > 10000) && (nb.length <=20000)) {cmb = eval((nb.length*0.0019)*100);}
if ((nb.length > 20000) && (nb.length <=50000)) {cmb = eval((nb.length*0.0018)*100);}
else {cmb = eval((nb.length*0.002+3)*100);}
Non, mais tu vas voir c'est logique :wink:
if = si et else = sinon:
if ((nb.length > 10000) && (nb.length <=20000)) {
cmb = eval((nb.length*0.0018)*100)
;}
if ((nb.length > 20000) && (nb.length <=50000)) {
cmb = eval((nb.length*0.0019)*100);
}
// Alors que: elseif = sinon si , donc:
if ((nb.length > 10000) && (nb.length <=20000)) {
cmb = eval((nb.length*0.0019)*100);
}
elseif ((nb.length > 20000) && (nb.length <=50000)) {
cmb = eval((nb.length*0.0018)*100);
}
else {
cmb = eval((nb.length*0.002+3)*100);
}
[EDIT]
Correction et edit

[EDIT]
bref en fait me suis mélangé un peu les pinceaux, mais en en gros faut mieux utiliser le elseif... :wink:
Modifié en dernier par Dr@ke le 06 sept. 2009, 13:55, modifié 1 fois.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 369 Messages

06 sept. 2009, 13:53

:D Salut à tous,
bon, j'ai pas eu le temps de m'occuper de tout ça cette semaine alors me revoilà avec un autre problème...je pense que ça n'est plus dans la bonne catégorie mais comme ça va avec le reste du sujet, je continue ici!
Bref, c'est donc pour un devis: le client copie son texte dans une fenêtre et il obtient le nombre de caractères de son texte et surtout combien ça lui coute.
Le truc, c'est que les tarifs sont dégressifs en fonction du nombre de caractères mais je n'arrive pas à rentrer plusieurs "paliers" de degressivité.
Pour rappel, je m'étais "inspiré" du code de cette page:
http://www.lereviseur.com/21devis1.html
et je bloque là:
if ((nb.length > 10000)&& (nb.length <=20000)) (cmb = eval((nb.length*0.0019)*100))
else {cmb = eval((nb.length*0.002+3)*100)}
en gros, j'arrive à moduler le prix de base si le nombre de caractères est compris entre 10000 et 20000 mais j'aimerais moduler sur d'autres paliers...entre 20001 et 50000, entre 50001 et 100000, etc...
ça doit être tout con mais j'ai bien cherché et je trouve pas...
j'ai bien sûr eu envie de faire ça:
if ((nb.length > 10000)&& (nb.length <=20000)) (cmb = eval((nb.length*0.0019)*100))
if ((nb.length > 20000)&& (nb.length <=50000)) (cmb = eval((nb.length*0.0019)*100))
if (nb.length > 100000)) (cmb = eval((nb.length*0.0019)*100))
else {cmb = eval((nb.length*0.002+3)*100)}
mais ça ne marche pas...alors soit il manque juste un opérateur entre les lignes (lequel?), soit il faut changer toute la formulation, mais comment?
Bref, je suis toujours une quiche, mais je progresse un peu (lentement ;))
Si les modos jugent nécessaire de déplacer le sujet, pourquoi pas...mais j'avais commencé ici, alors...
merciiiii :D :D
Tu te compliques la vie pour pas grand chose me semble t'il.
 
<?php
    $cde = "";

    $iTaux = 0;
    $iQte = 1000;
    $iPrix = 3+($iQte/5);

    if ($iQte > 100 && $iQte < 201) $iTaux = .1; 
    if ($iQte > 200 && $iQte < 301) $iTaux = .2;
    if ($iQte > 300 && $iQte < 401) $iTaux = .3;
    if ($iQte > 400 && $iQte < 501) $iTaux = .4;
    if ($iQte > 500) $iTaux = .6;

    $iEscompte = ($iPrix*$iTaux);

    $cde .= "Quantit&eacute; : ".$iQte."<br>\n";
    $cde .= "Prix global : ".$iPrix."<br>\n";
    $cde .= "Taux d'escompte : ".$iTaux."%<br>\n";
    $cde .= "Valeur de l'escompte : ".$iEscompte."%<br>\n";
    $cde .= "Total Net : ".($iPrix-$iEscompte)."<br>\n";

    $cde .= "<br>FIN --------------------------\n";
    echo $cde;
?>
J'étais parti sur un taux variable dont la valeur étalonée se fixait par raport à une
opération SIN'NOMBRE) mais ca m'aurait emmené (beaucoup) plus loin que ta demande initiale lol

@+ bon code ;)

Mammouth du PHP | 985 Messages

06 sept. 2009, 14:00

Ben il peut utiliser son propre code, c'est plus gratifiant, sinon c'est juste qu'avec des elseif c'est plus Safe...
Et surtout plus rapide au lieu de faire 10000 tests, il s'arrête au premier test réussis...
Tu peux ainsi optimiser encore plus ensuite, en mettant en premier les résultats les plus souvent trouvés...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 369 Messages

06 sept. 2009, 14:24

Salut,
[1]Ben il peut utiliser son propre code, c'est plus gratifiant, sinon c'est juste qu'avec des elseif c'est plus Safe...
[2]Et surtout plus rapide au lieu de faire 10000 tests, il s'arrête au premier test réussis...
[3]Tu peux ainsi optimiser encore plus ensuite, en mettant en premier les résultats les plus souvent trouvés...
1) Jamais dit le contraire lol je suis contre le cop/col je l'ai assez répété
2) Aurais-tu préféré un teste !=0 avant le teste primaire?
3) Plus sécurisé? Hum... je vois pas dsl.

no offense, hein. Un code/script doit rester ludique. Un code se doit dêtre simple.
Le compliquer c'est justement multiplier les risques ;)

@+ bon code ;)

Mammouth du PHP | 985 Messages

06 sept. 2009, 14:30

Il n'empêche que cela ne change rien au fait établit que:
Et surtout plus rapide au lieu de faire 10000 tests, il s'arrête au premier test réussis...
Tu peux ainsi optimiser encore plus ensuite, en mettant en premier les résultats les plus souvent trouvés...
Le elseif existe principalement pour cette raison...
Puis désolé, mais si tu appelles ça compliquer un script en utilisant des elseif au lieu de 50000 if...
Moi j'appelle ça au contraire le simplifier...

PS: sans offenses évidemment, je donne juste mon point de vue

[EDIT]
Puis un autre élément:
En laissant des if sans elseif et else:
Si jamais tu fais une erreur ensuite avec tes autres if, elseif et else..., le elseif ou else peut très bien se mélanger avec un précédent if...
Ce qui m'est déjà arrivé personnellement.
En fermant le plus possible tes if avec des elseif et else, tu sécurises (oui en effet) ton code, du moins au moins cette partie de code...
De plus mais ça c'est juste mon avis personnel, en fermant tes if, le programme ne cherches plus de elseif ou else correspondant, donc j'ai peut-être aussi cette fausse impression, qu'au niveau des performances: c'est meilleur...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 16 Messages

06 sept. 2009, 15:56

Non, mais tu vas voir c'est logique :wink:

}
// Alors que: elseif = sinon si , donc:
if ((nb.length > 10000) && (nb.length <=20000)) {
cmb = eval((nb.length*0.0019)*100);
}
elseif ((nb.length > 20000) && (nb.length <=50000)) {
cmb = eval((nb.length*0.0018)*100);
}
else {
cmb = eval((nb.length*0.002+3)*100);
}[/php]

[
oki, je comprends le principe du elseif...mais ça marche pas! :mrgreen: :mrgreen:

j'ai essayé de le placer dans mon code, j'ai essayé de recopier bêtement ce que tu m'as filé...et que dalle, ça marche même plus du tout! :non: :mrgreen:

Mammouth du PHP | 985 Messages

06 sept. 2009, 16:36

Bon, ben laisse tomber le elseif et fait comme disait Fuzzy
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 16 Messages

06 sept. 2009, 16:49

Bon, ben laisse tomber le elseif et fait comme disait Fuzzy
bah, ça avait l'air bien pourtant ce elseif...pourquoi ça marche pas, ça avait l'air fastoche?

le truc de Fuzzy, j'essaye de comprendre mais j'y capte que dalle...allez, j'y retourne :shock: :shock: !

Mammouth du PHP | 985 Messages

06 sept. 2009, 16:51

Post dont ton code avec les elseif alors :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 369 Messages

06 sept. 2009, 18:03

Re,
Bon, ben laisse tomber le elseif et fait comme disait Fuzzy
bah, ça avait l'air bien pourtant ce elseif...pourquoi ça marche pas, ça avait l'air fastoche?
le truc de Fuzzy, j'essaye de comprendre mais j'y capte que dalle...allez, j'y retourne :shock: :shock: !
La meilleur solution est souvent (toujours?) la plus simple... (parole de vieux ch'noc ;)

@+

PS: rah... le temps ou fallait pisser du code sur des disquettes 360 lol

EDIT:

Oublié le principal lol @Benjam, pourtant l'exemple est simple. Essaie le et tu verras, le résultat est parlant.
Modifié en dernier par FuZZyLine le 06 sept. 2009, 18:26, modifié 1 fois.

Mammouth du PHP | 985 Messages

06 sept. 2009, 18:17

On va terminer la discussion sur les avantages de l'utilisation du elseif et passer au principal:
le truc de Fuzzy, j'essaye de comprendre mais j'y capte que dalle...allez, j'y retourne :shock: :shock: !
Te laisse le loisir de l'aider sur cette voie.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.