scipt converti en fonction ne marche plus

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 : scipt converti en fonction ne marche plus

Re: scipt converti en fonction ne marche plus

par sirakawa » 31 juil. 2013, 14:18

Je ne peux qu'appuyer moogli.
La portée des variables est un sujet commun à tous les langages et la solution choisie par PHP est des plus classiques, puisqu'on peut passer les variables en paramètres par valeur ou par adresse.
Il est bien évident que dans ton cas,
il existe deux solutions usuelles:
Si $message ne contient rien avant l'appel de la fonction, il suffit d'écrire dans ce genre:
function f($ce_qui est_utile)
{
$message = "";
$message .= $ce_qui_est_utile;
return $message
}
$message = f($ce_qui est_utile);
on pourrait aussi passer ainsi, en particulier si $message contient qqch avant l'appel:
function f(&$message, $ce_qui est_utile)
{
$message = "";
$message .= $ce_qui_est_utile;
return true;
}
$message = "dieu sait quoi";
f($message, $ce_qui est_utile);
J'ai été contraint de recourir à global dans un seul cas:
définition dans une fonction de variables utilisées par d'autres fonctions : j'aurais gagné à les définir en constantes.

FAUT passer $message en paramètre puisqu'il s'agit de la variable à modifier

Re: scipt converti en fonction ne marche plus

par moogli » 30 juil. 2013, 22:16

Tu ne peux marquer un sujet résolus Ue si tu est membre ;)
S'est une bonne raison pour t'inscrire pour la prochaine fois ;)

Sinon le globals est une erreur car au final tu va ajouter des variables en masse et ne plus savoir d'où elles viennent.
Il faut aussi penser a ceux qui vont passer après toi (ou toi dans plusieurs mois / années) et qui devront lutter pur comprendre le script.

Pour utiliser ce genre de script tous les jours je peux t'assurer c'est une plaît.

Quand a la pile, en cas de récursivité tu passe une référence et non la valeur (passage par référence par défaut depuis php 5) du coup c'est pas vraiment un problème.

C'est une vaste question, similaire aux register globals (supprimé depuis php 5.4) qui comme pas mal de fonctionnalité deviennent une plaît si l'on en abuse :mrgreen:

@+

Re: scipt converti en fonction ne marche plus

par radinor » 30 juil. 2013, 22:01

Merci à moogli et imikado

il manquait bien global $message dans la fonction "mailingmailo"
ça fonctionne impeccablement et je vais continuer de perfectionner en branchant un formulaire

et pour faire plaisir à moogli je supprimerai global $message quand ce sera bien intégré.
Mais je ne pense pas que global $variable soit une ineptie. En cas de récursivité c'est bien pratique de ne pas trop charger la pile.

salutations

ou mets_on résolu ? je n'ai pas trouvé

Re: scipt converti en fonction ne marche plus

par moogli » 30 juil. 2013, 13:08

Ou faire proprement et ne pas utiliser global (qui est une ineptie).
Passe $message en paramètre et retourne message a la fin de la fonction.

@+

Re: scipt converti en fonction ne marche plus

par imikado » 30 juil. 2013, 12:37

Essayer d'initialiser la variable $message au depart avant les fonctions et ajouter l'appel global message dans votre fonction malingmailo (comme dans la fonction piece jointe)

scipt converti en fonction ne marche plus

par radinor » 30 juil. 2013, 11:23

Bonjour,
j'ai le script ci-après qui fonctionne à merveille. Il envoie un mail avec 5 pièces jointes.
quand je le transforme en fonction mailingmailo le mail est bien envoyé mais il n'y a pas de pièces jointes.
je cherche depuis plusieurs jours.
merci

script envoi de mail avec 5 pièces jointes:
<?php
/*-----------------------------------------------------------------------*/
require("ENI_mail_fonctions.inc.php");							// fonctions mail
/*-----------------------------------------------------------
PARTIE COMMUNE DU MESSAGE                 ENTETES
-----------------------------------------------------------*/
$emet="[email protected]";										// emetteur
$destinataires = "[email protected]";						// destinataires
$objet = "Bonjour !"; 											// objet

//en-têtes supplémentaires (ça veut dire quoi ?)

$entêtes  = "";													
$entêtes .= "From: \"Radinor\" <$emet>\r\n"; 					// origine du message
/*
// 		- message au format Multipart MIME
          --------------------------------*/
		  
$entêtes .= "MIME-Version: 1.0\r\n";
$entêtes .= "Content-Type: multipart/mixed; ";
$entêtes .= "boundary=\"=O=L=I=V=I=E=R=\"\r\n";
/*
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ message $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/
$message  = "";
/*
//		- première partie du message (texte proprement dit)
          -------------------------------------------------
*/		  
/*
//				- en-tête de la partie
                --------------------
*/
$message .= "--=O=L=I=V=I=E=R=\r\n";
$message .= "Content-Type: text/plain; ";
//$message .= "Content-Type: text/html; ";
$message .= "charset=iso-8859-1\r\n ";
//$message .= "charset=utf-8\r\n ";
$message .= "Content-Transfer-Encoding: 8bit\r\n";
$message .= "\r\n";	// ligne vide
/*
//				- données de la partie
*/
//
$message .= "Voir la pièce jointe.\r\n";
$message .= "\r\n";	// ligne vide
/*
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ pièces jointes $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/
/* externalisé hors de la fonction */
$pieces_jointes[0]="pieces_jointes/ch10-03_jro_003_20130327_1_fichier_saisie_sur_retraites.html";
$pieces_jointes[1]="pieces_jointes/ch10-03_jro_004_20130327_TF_et_TH_2012_saisie_sur_retraites.pdf";		// pièce jointe
$pieces_jointes[2]="pieces_jointes/ch10-03_jro_001.doc";
$pieces_jointes[3]="pieces_jointes/ch10_envoyer_un_courrier_electronique.xls";
$pieces_jointes[4]="pieces_jointes/20121225_04_300x225.JPG";
/**/

foreach ($pieces_jointes as $value)
	{	
	$Ctype1="Content-Type: application/octet-stream; ";
	piece_jointe($value,$Ctype1);
	}
/*
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ délimiteur de fin du message $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/
// délimiteur de fin du message
$message .= "--=O=L=I=V=I=E=R=--\r\n";
/*
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ envoi du message $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/
// envoi du message
$ok = mail($destinataires,$objet,$message,$entêtes);
if ($ok) :
	echo "message bien envoyé à $destinataires<br>";
else:
	echo "erreur dans l'envoi";
endif;
?>
appel de la fonction mailingmailo
je ne passe pas de paramètres pour raison de tests
<?php
require("ENI_mail_fonctions.inc.php");							// fonctions mail
mailingmailo();
?>
fonction mailingmailo et piece_jointe dans fichier ENI_mail_fonctions.inc.php:
<?php
function mailingmailo(){
/*---------------------------------------------------------------

/*-----------------------------------------------------------------------*/
//require("ENI_mail_fonctions.inc.php");							// fonctions mail
/*-----------------------------------------------------------
PARTIE COMMUNE DU MESSAGE                 ENTETES
-----------------------------------------------------------*/
$emet="[email protected]";										// emetteur
$destinataires = "[email protected]";						// destinataires
$objet = "Bonjour !"; 											// objet

//en-têtes supplémentaires (ça veut dire quoi ?)

$entêtes  = "";													
$entêtes .= "From: \"Radinor\" <$emet>\r\n"; 					// origine du message
/*
// 		- message au format Multipart MIME
          --------------------------------*/
		  
$entêtes .= "MIME-Version: 1.0\r\n";
$entêtes .= "Content-Type: multipart/mixed; ";
$entêtes .= "boundary=\"=O=L=I=V=I=E=R=\"\r\n";
/*
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ message $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/
$message  = "";
/*
//		- première partie du message (texte proprement dit)
          -------------------------------------------------
*/		  
/*
//				- en-tête de la partie
                --------------------
*/
$message .= "--=O=L=I=V=I=E=R=\r\n";
$message .= "Content-Type: text/plain; ";
//$message .= "Content-Type: text/html; ";
$message .= "charset=iso-8859-1\r\n ";
//$message .= "charset=utf-8\r\n ";
$message .= "Content-Transfer-Encoding: 8bit\r\n";
$message .= "\r\n";	// ligne vide
/*
//				- données de la partie
*/
//
$message .= "Voir la pièce jointe.\r\n";
$message .= "\r\n";	// ligne vide
/*
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ pièces jointes $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/
/* externalisé hors de la fonction */
$pieces_jointes[0]="pieces_jointes/ch10-03_jro_003_20130327_1_fichier_saisie_sur_retraites.html";
$pieces_jointes[1]="pieces_jointes/ch10-03_jro_004_20130327_TF_et_TH_2012_saisie_sur_retraites.pdf";		// pièce jointe
$pieces_jointes[2]="pieces_jointes/ch10-03_jro_001.doc";
$pieces_jointes[3]="pieces_jointes/ch10_envoyer_un_courrier_electronique.xls";
$pieces_jointes[4]="pieces_jointes/20121225_04_300x225.JPG";
/**/

foreach ($pieces_jointes as $value)
	{	
	$Ctype1="Content-Type: application/octet-stream; ";
	piece_jointe($value,$Ctype1);
	}
/*
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ délimiteur de fin du message $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/
// délimiteur de fin du message
$message .= "--=O=L=I=V=I=E=R=--\r\n";
/*
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ envoi du message $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/
// envoi du message
$ok = mail($destinataires,$objet,$message,$entêtes);
if ($ok) :
	echo "message bien envoyé à $destinataires<br>";
else:
	echo "erreur dans l'envoi";
endif;
}
function piece_jointe($pj,$Ctype)
/*-------------------------------
joindre un fichier
-------------------------------*/ 
{
//		- nième partie du message (pièce-jointe)
//        -----------------------------------------
//
//				- en-tête de la partie
//                --------------------
//
global $message;
$message .= "--=O=L=I=V=I=E=R=\r\n";
//$message .= "Content-Type: application/octet-stream; ";
$message .= $Ctype;
$message .= "name=$pj\r\n";
$message .= "Content-Transfer-Encoding: base64\r\n";
$message .= "Content-Disposition: attachment; ";
$message .= "filename=$pj\r\n";
$message .= "\r\n";	// ligne vide
/*
//				- lecture du fichier correspond à la pièce jointe
//                -----------------------------------------------
*/
echo "$pj<br>";
$fichier = fopen($pj,"rb");
$données = fread($fichier,filesize($pj));
fclose($fichier);
/*
//				- encodage et découpage des données
//                ---------------------------------
*/
$données = chunk_split(base64_encode($données));
/*
//				- données de la partie (intégration dans le message)
//                --------------------------------------------------
*/
$message .= "$données\r\n";

$message .= "\r\n";	// ligne vide
}
?>