[RESOLU] Factoriser des scripts

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 : [RESOLU] Factoriser des scripts

Re: Factoriser des scripts

par Fre3z69 » 24 nov. 2013, 13:06

Ca fonctionne à merveille, je te remercie beaucoup.

Je vais bien analyser ça afin de pouvoir le refaire en cas de besoins.

Merci beaucoup à toi et tous ceux qui m'ont aidés.

Cordialement

Re: Factoriser des scripts

par Fre3z69 » 23 nov. 2013, 23:28

Super, je vais tester.

Oui je me suis rendu compte qu'il faut un return ^^

Merci à toi, je vais tester cela, je te tiens au jus ;-)

Cordialement

Re: Factoriser des scripts

par franckm » 23 nov. 2013, 23:05

A lire dans les commentaires, c'est assez explicite...
function leMois($lMois){
	//Je construis mon tableau de mois clé (français) / Valeurs (Anglais)
	$lTabMois = array('Janvier' => 'January', 'Février' => 'February', 'Mars' => 'March', 'Avril' => 'April', 'Mai' => 'May','Juin' => 'June', 'Juillet' => 'July', 'Août' => 'August', 'Septembre' => 'September', 'Octobre' => 'October',
	'Novembre' => 'November', 'Décembre' => 'December');
	
	//Fonction array_search : Retourne la clé si la valeur est trouvée dans le tableau, FALSE sinon. 
	$lMonMois = array_search($lMois, $lTabMois);
	
	if(!$lMonMois){
		//Retour false, mois n'existe pas dans le tableau
		return 'Pas de mois associé';
	}else{
		//Ok je retourne le mois
		return $lMonMois;
	}
}

//Retourne 'Janvier'
echo leMois('January').'<br />';

//Retourne 'Pas de mois associé';
echo leMois('TreiziemeMois');
NOTE: une fonction doit TOUJOURS renvoyer un return.

Re: Factoriser des scripts

par Fre3z69 » 23 nov. 2013, 20:30

Eu lol, j'ai refait ma fonction, en y repensant mieux.

J'ai réussi à la faire, voici ce que ça donne
function lemois($mois){
    $leMois = strftime('%B', strtotime($mois));
    switch ($leMois)
    {
        case "January" :
            $leMois = "Janvier";
        break;
        case "February" :
            $leMois = "Février";
        break;
        case "March" :
            $leMois = "Mars";
        break;
        case "April" :
            $leMois = "Avril";
        break;
        case "May" :
            $leMois = "Mai";
        break;
        case "June" :
            $leMois = "Juin";
        break;
        case "July" :
            $leMois = "Juillet";
        break;
        case "August" :
            $leMois = "Août";
        break;
        case "September" :
            $leMois = "Septembre";
        break;
        case "October" :
            $leMois = "Octobre";
        break;
        case "November" :
            $leMois = "Novembre";
        break;
        case "December" :
            $leMois = "Décembre";
        break;
    }
    echo $leMois;
}
Peut on l'optimiser?

Merci

Re: Factoriser des scripts

par Fre3z69 » 23 nov. 2013, 19:22

Je peux pas faire ça je crois

En fait il me faudrait plus une fonction qui permet d'avoir la syntaxe montré plus haut, et en paramètre juste si il s'agit du mois suivant, précédant ou actuel

Je peux pas faire tes fonction car je touche trop au code et j'ai pas envie de tout refaire ^^
Genre une fonction qui fait cela:

    $precedentMois = strftime('%B', strtotime($prevMonth));
    switch ($precedentMois)
    {
        case "January" :
            $precedentMois = "Janvier";
        break;
        case "February" :
            $precedentMois = "Février";
        break;
        case "March" :
            $precedentMois = "Mars";
        break;
        case "April" :
            $precedentMois = "Avril";
        break;
        case "May" :
            $precedentMois = "Mai";
        break;
        case "June" :
            $precedentMois = "Juin";
        break;
        case "July" :
            $precedentMois = "Juillet";
        break;
        case "August" :
            $precedentMois = "Août";
        break;
        case "September" :
            $precedentMois = "Septembre";
        break;
        case "October" :
            $precedentMois = "Octobre";
        break;
        case "November" :
            $precedentMois = "Novembre";
        break;
        case "December" :
            $precedentMois = "Décembre";
        break;
    }
Et qui prend en paramètre $prevMonth (dans cet exemple), sachant que c'est pour tous les mois pareil.
J'ai essayer de la faire, mais j'ai foiré, d'où la demande d'aide (ça fait +de 6mois que j'ai pas toucher à php, j'ai oublier pas mal de truc Oo), et de plus, comme un boulet, j'ai plus le script que j'avais fait Oo.

En tout cas merci beaucoup

Cordialement

Re: Factoriser des scripts

par sirakawa » 23 nov. 2013, 11:18

Ce serait plutôt l'occasion de trouver un mot car factorisation n'a pas grand chose à voir; en effet:
2 abbés et 4 enfants de choeur
se factorise en:
2(abbés + 2 enfants de choeur)
Pour le sujet qui nous occupe:

Dans l'état actuel, je pensais faire deux fonctions, l'une pour obtenir le nom du mois suivant, l'autre celui du mois précédent. C'est pourquoi je déclare à l'extérieur de la fonction un tableau des noms de mois, tableau dont les clés sont des nombres et les valeurs les noms des mois. Or en php, toutes les variables qui sont déclarées à l'extérieur d'une fonction sont inconnues de celle-ci.
essaie ceci:
<?PHP
$a= 1;
function double_fausse()
{
print "<p>a dans la fonction $a</p>"; 
 return $a*2;
}
$b = double_fausse();
print "<p>a vaut $a et b vaut $b</p>";
?>
Comme on écrit en général une fonction pour qu'elle puisse servir pour des valeurs différentes, on lui passe des paramètres:
<?PHP
$a= 1;
function double_parametree($valeur)
{
print "<p>valeur dans la fonction $valeur</p>"; 
 return $valeur*2;
}
$b = double_parametree($a);
print "<p>a vaut $a et b vaut $b</p>";
?>
maintenant une fonction qui ne fonctionne pas:
<?PHP
$t_mois = array(
1=>"janvier",
2=> "février",
3 =>"mars",
);
function afficher ($numero_de_mois)
{

return $t_mois[$numero_de_mois];
}
$nom_mois = afficher (2);
?>
Première solution qui ne s'applique qu'à $t_mois
:
<?PHP
$t_mois = array(
1=>"janvier",
2=> "février",
3 =>"mars",
);
function afficher ($numero_de_mois)
{
global $t_mois;
return $t_mois[$numero_de_mois];	
}
$nom_mois = afficher (2);
print "$nom_mois";
?>
Deuxième solution qui marche avec tout tableau:
<?PHP
$t_mois = array(
1=>"janvier",
2=> "février",
3 =>"mars",
);
function afficher ($numero_de_mois, $tableau)
{

return $tableau[$numero_de_mois];	
}
$nom_mois = afficher (2, $t_mois);
print "$nom_mois";
?>

Re: Fonctionnariser des scripts

par Fre3z69 » 22 nov. 2013, 20:39

Oui c'est pas faux, factoriser correspond mieux, je vais voir pour changer le terme dans le titre

J'ai pas fait de math poussées, donc c'est des thermes qui m'échappes ^^

Je vais voir pour les mois en tableaux, mais à dire vrai, j'ai pas compris le truc, enfin c'est pas clair pour moi.
Pourriez vous réitérer l'explication SVP

Merci en tout cas

Cordialement

Re: Fonctionnariser des scripts

par franckm » 22 nov. 2013, 20:35

Plutôt que de mettre le tableau en GLOBAL pourquoi ne pas le mettre en deuxième paramètre ? Les variables globales tant que je peux les éviter...

Personnellement je préfère le terme factoriser à fonctionnariser.

Re: Fonctionnariser des scripts

par sirakawa » 22 nov. 2013, 20:16

Bonsoir,

Je commencerais par mettre les noms de mois dans un tableau dont je n'indique que le début
<?PHP
/**
tableau indicé par les numéros de mois
*/
$t_mois = array (
1 =>"janvier",
2 => "février",
3 => "mars",
);

/**
parametre $num_mois entier numéro du mois
retourne le nom du mois suivant
*/
function mois_suivant($num_mois)
{
/** comme le tableau $t_mois est déclaré en-dehors de la fonction, il faut le déclarer global*/
global $t_mois;
/** num_suivant prend la valeur:
si num_mois vaut 12 => 1
sinon num_mois +1
*/
$num_suivant = ($num_mois == 12) ? 1: $num_mois+1;
/* on retourne le nom extrait du tableau*/
return $t_mois[$num_suivant];
}
$m = mois_suivant (2);
print "$m";
?>

Factoriser des scripts

par Fre3z69 » 22 nov. 2013, 19:52

Salutation à vous

Voila, je viens de suivre un tutoriel expliquant comment créer un calendrier.

J'ai des parties qui se ressembles et j'aimerais les factoriser.

A la suite, voici les scripts, comment créer une fonction pour les mois, et une pour les jours?

Merci à vous

Scripts :

Mois précédent
<?php
    $precedentMois = strftime('%B', strtotime($prevMonth));
    switch ($precedentMois)
    {
        case "January" :
            $precedentMois = "Janvier";
        break;
        case "February" :
            $precedentMois = "Février";
        break;
        case "March" :
            $precedentMois = "Mars";
        break;
        case "April" :
            $precedentMois = "Avril";
        break;
        case "May" :
            $precedentMois = "Mai";
        break;
        case "June" :
            $precedentMois = "Juin";
        break;
        case "July" :
            $precedentMois = "Juillet";
        break;
        case "August" :
            $precedentMois = "Août";
        break;
        case "September" :
            $precedentMois = "Septembre";
        break;
        case "October" :
            $precedentMois = "Octobre";
        break;
        case "November" :
            $precedentMois = "Novembre";
        break;
        case "December" :
            $precedentMois = "Décembre";
        break;
    }        
?>
Mois suivant
<?php
    $prochainMois = strftime('%B', strtotime($nextMonth));
    switch ($prochainMois)
    {
        case "January" :
            $prochainMois = "Janvier";
        break;
        case "February" :
            $prochainMois = "Février";
        break;
        case "March" :
            $prochainMois = "Mars";
        break;
        case "April" :
            $prochainMois = "Avril";
        break;
        case "May" :
            $prochainMois = "Mai";
        break;
        case "June" :
            $prochainMois = "Juin";
        break;
        case "July" :
            $prochainMois = "Juillet";
        break;
        case "August" :
            $prochainMois = "Août";
        break;
        case "September" :
            $prochainMois = "Septembre";
        break;
        case "October" :
            $prochainMois = "Octobre";
        break;
        case "November" :
            $prochainMois = "Novembre";
        break;
        case "December" :
            $prochainMois = "Décembre";
        break;
    }        
?>
Mois actuel
<?php
    $actuelMois = strftime('%B', strtotime($firstDay));
    switch ($actuelMois)
    {
        case "January" :
            $actuelMois = "Janvier";
        break;
        case "February" :
            $actuelMois = "Février";
        break;
        case "March" :
            $actuelMois = "Mars";
        break;
        case "April" :
            $actuelMois = "Avril";
        break;
        case "May" :
            $actuelMois = "Mai";
        break;
        case "June" :
            $actuelMois = "Juin";
        break;
        case "July" :
            $actuelMois = "Juillet";
        break;
        case "August" :
            $actuelMois = "Août";
        break;
        case "September" :
            $actuelMois = "Septembre";
        break;
        case "October" :
            $actuelMois = "Octobre";
        break;
        case "November" :
            $actuelMois = "Novembre";
        break;
        case "December" :
            $actuelMois = "Décembre";
        break;
    }        
?>
Jours
<?php
    $jours = strftime('%a', strtotime($d));
    switch ($jours)
    {
        case "Sun" :
            $jours = "Dim";
        break;
        case "Mon" :
            $jours = "Lun";
        break;
        case "Tue" :
            $jours = "Mar";
        break;
        case "Wed" :
            $jours = "Mer";
        break;
        case "Thu" :
            $jours = "Jeu";
        break;
        case "Fri" :
            $jours = "Ven";
        break;
        case "Sat" :
            $jours = "Sam";
        break;
    }        
?>
Edit : j'ai changer le terme " fonctionnariser " par " factoriser ", suite au conseil de franckm