logo

NPDS : Gestion de contenu et de communauté


Content & Community Management System (CCMS) robuste, sécurisé, complet, performant, parlant vraiment français, libre (Open-Source) et gratuit.
24 visiteur(s) et 0 membre(s) en ligne.
Activité du Site

Pages vues depuis 25/05/2001 : 108 509 344

  • Nb. de membres 8 693
  • Nb. d'articles 1 695
  • Nb. de forums 26
  • Nb. de sujets 8
  • Nb. de critiques 92

Top 10  Statistiques

Index du forum »»  SFORM »» Sform et fichiers joints

Nouveau sujet
 Sform et fichiers joints#17046Répondre

6Contributeur(s)
BlackEagleXargosdeveloppeurhexagoneAnonymeAchel_Jay
3 Modérateur(s)
developpeurjpbJireck
BlackEagle BlackEagleicon_post
Est il possible d'attacher un fichier joint par l'intermediaire du formulaire Sform.
Si oui pouvez vous m'indiquer comment je dois m'y prendre pour le réaliser.

Merci
Xargos Xargosicon_post
Oui... édite le fichier mod_extend-user.php (répertoire /modules/sform/extend-user/ )

Tu cherches l'endroit où le membre peut uploader don propre avatar.
=> $m -> add_upload(.......);

Ensuite, tu exploites... attention, ce n'est pas facile à maîtriser si tu ne connaîs pas bien les formulaires.
BlackEagle BlackEagleicon_post
Je ne m'y connais pas trop mais je vais essayer de me débrouiller.
Merci pour l'info.
BlackEagle BlackEagleicon_post
J'aurais besoin d'un coup de main parceque je patauge completement depuis 2 jours.



Voici mon fichier formulaire.php




<?PHP

/************************************************************************/

/* SFORM Extender for NPDS V Contact Example                            */

/* ===========================                                          */

/*                                                                      */

/* - 2004                                               */

/*                                                                      */

/* This program is free software. You can redistribute it and/or modify */

/* it under the terms of the GNU General Public License as published by */

/* the Free Software Foundation; either version 2 of the License.       */

/************************************************************************/





// Récuperation du nom d'utilisateur sur le site par rapport au cookie

cookiedecode($user); 

$username $cookie[1]; 

if (
$username == ""{ 

$nom = 
"";

} else { 

$nom = $username;

} 

// Récupération de l'adresse email de l'utilisateur si membre sur le site par rapport au cookie

list($email,$femail) = mysql_fetch_row(mysql_query(
"SELECT email,femail FROM ".$NPDS_Prefix."users where uname='$username'"));



$m
->add_form_field_size(50);

$m
->add_title("Soumission de voitures");

$m
->add_field('nom', "Nom/Pseudo",$nom,'text',true,150,"","");

$m
->add_field('cars', "Nom du véhicule",$cars,'text',true,25,"","");

$m
->add_field('type', "Type de véhicule",$type,'text',false,25,"","");

  $m
->add_extra("<tr><td colspan=2> </td></tr>");

$m
->add_field('email', "Adresse de messagerie",$email,'text',true,255,"","email");

  $m
->add_extra("<tr><td colspan=2> </td></tr>");

 $m
->add_upload('B1', "Fichier à envoyer""30""");

  $m
->add_extra("<tr><td colspan=2> </td></tr>");



// ----------------------------------------------------------------

// CES CHAMPS sont indispensables --- Don't remove these fields

$m
->add_extra("<tr><td align=center colspan=2>");

// Reset bouton

$m
->add_field("","","R a z",'reset',false);

// Return bouton

$m
->add_extra(" -::- ");

$m
->add_extra("<a href=index.php>[ Retour ]</a>");

// Submit bouton

$m
->add_extra(" -::- ");

$m
->add_field("","","Soumettre",'submit',false);

$m
->add_extra("</td></tr>");

// ----------------------------------------------------------------

?>







Et mon fichier contact.php






<?PHP

/************************************************************************/

/* SFORM Extender for NPDS V Contact Example .                          */

/* ===========================                                          */

/*                                                                      */

/* 2002 - 2004                                               */

/*                                                                      */

/* This program is free software. You can redistribute it and/or modify */

/* it under the terms of the GNU General Public License as published by */

/* the Free Software Foundation; either version 2 of the License.       */

/************************************************************************/

/* Dont modify this file is you dont know what you make                 */

/************************************************************************/







global $ModPath$ModStart;

$sform_path="modules/sform/";

!include!_once($sform_path.
"sform.php");



global $m;

$m=new form_handler();

//********************

$m
->add_form_title("CONTACT");

$m
->add_form_method("post");

$m
->add_form_check("true");

$m
->add_mess(" * désigne un champ obligatoire ");

$m
->add_submit_value("ok");

$m
->add_!url(!"modules.php");

$m
->add_field("ModStart","",$ModStart,'hidden',false);

$m
->add_field("ModPath","",$ModPath,'hidden',false);



/************************************************/

!include!($sform_path.
"upload/formulaire.php");

/************************************************/

// Manage the <form>

switch($ok) 
{



   case 'Soumettre':

      if (!$sformret) 
{

         $m
->make_response();

        

        

$limite = md5(uniqid(rand()));

  

 $message = $m
->aff_response("class=\"LIGNA\"","not_echo","");





   //lefichier 

 if ($B1<>
""{

 $attachement = 
"------=$limite\n";

 $attachement .= 
"!content-type:! application/octet-stream; name=\"$B1\"\n";

 $attachement .= 
"!content-transfer-encoding:!base_64\n";

 $attachement .
"!content-disposition:! attachment; filename=\"$B1\"";

 $attachement .= chunk_split(base_64_encode(implode(
"", file($B1))));

 
}



         global $notify_email;

         $message=
"<html><body>".$message."</body></html>";

         send_email($notify_email, $m
->title,$message.$attachement,"","","html");

         opentable();

         echo $B1;  // verification du nom du fichier

         echo 
"<p align=\"center\">Votre demande est prise en compte. Nous y répondrons au plus vite</p>";

         closetable();

         break;

      
} else {

         $ok=
"";

      
}



   default:

      echo $m
->print_form("class=\"LIGNA\"");

      break;

}

?>







Lorsque je lance mon formulaire, il m'envoye bien le mail mais le fichier n'est pas attaché au mail. Il apparait comme ceci à l'interieur :




------=7e55e2799f8919c5a0c84f18c0c3ceb3 !content-type:! application/octet-stream; name="/tmp/phpQuoPwI" !content-transfer-encoding:!base_64 PD8NCi8qIE1vZGlmaWV6IGxlcyBwYXJhbeh0cmVzIGQnYXBwZWwgZGUgbGEgZm9uY3Rpb24gc2Vs b24gdm9zIGJlc29pbnMNCg0KTkUgUEFTIEFKT1VURVIgREUgTElHTkVTIFZJREVTIEFVIERFQlVU...





Pouvez vous m'aider :paf
developpeur developpeuricon_post
hexagone à fait un truc du genre. contact le
Xargos Xargosicon_post
Le problème vient de >> $message.$attachement << dans la lifne d'envoi du mail, à mon avis.
Le fichier attaché est "concaténé" en texte à la fin du message.

Je pense que le problème ne vient pas de NPDS mais de la syntaxe de ta fonction d'envoi d'email. Essaye de lire des tutos à ce sujet sur internet, ou des scripts d'envoi de mails avec pièce jointe. Tu regardes quelle syntaxe ils utilisent et tu copies...
hexagone hexagoneicon_post
Salut,

je ne me souviens pas avoir fait ca, mais bon, on ne sait jamais, j'vais y jeter un oeil...

de memoire par contre je peu te dire ca:

deja au niveau de SFORM, evite d'utiliser un Blob (B1) pour stocker un petit nom de fichier, utilise plutot une des variables de C1 a C8

Ensuite, d'apres le code que tu as mis, je pense que ce n'est pas l'envoie du mail, mais son contenu qui pose probleme.

je mettrais un exemple typique tout a l'heure si j'ai le temps, la j'ai trop la dalle :-D
hexagone hexagoneicon_post
Re,

alors finalement, je pense qu'il y avait un peu des 2..
la fonction send_mail de NPDS qui pose kkes soucis, et peut etre le contenu du mail qui ne facilitait pas l'interpretation..
Mais la partie SFROM en elle meme me semble correcte..

enfin bref, voici un exemple "type" d'envoi de mail avec fichier attaché...





$to ="ma@mail.box";
$sujet = "Sujet du Mail";
$message = "Le Texte du Mail";
$chemin = "chemindufichier";
$fichier = "nomdefichier.typ";
//$reply = ;
//$from = ;



// On choisi généralement de construire une frontière générée aleatoirement
$boundary = "----="."_parties_".md5(uniqid(rand()));


//entete du message
{
//date de creation
$mail_mime = "Date: ".date("l j F Y, G:i")."\r\n";
// Version du format MIME utilisé
$mail_mime .= "!mime-version:! 1.0\r\n";
// Type de contenu. Ici plusieurs parties de type different "multipart/mixed"
// Avec un frontière définie par $boundary
$mail_mime .= "!content-type:! multipart/mixed; boundary=\"$boundary\"\r\n";
//termine l'entete avec un retour a la ligne obligatoire pour separer l'entete du corps
$mail_mime .= "\r\n";
}


//--------------------------------------------------
// Construction du message proprement dit
//--------------------------------------------------


{
//Le message en texte simple pour les navigateurs qui n'acceptent pas le HTML
$texte = "This is a multi-part message in MIME format.\r\n";
$texte .= "Ceci est un message est au format MIME.\r\n";
}

//---------------------------------
// 1ère partie du message
// Le texte
//---------------------------------
{
// Chaque partie du message est séparé par une frontière (attention au --, ce n'est pas une erreur!)
$texte .= "--$boundary\r\n";
// Et pour chaque partie on en indique le type
$texte .= "!content-type:! text/plain; charset=\"iso-8859-1\"\r\n";
// Et comment il sera codé
$texte .= "!content-transfer-encoding:! 7bit\r\n";
//ligne vide indispensable entre type et texte
$texte .= "\r\n";
$texte .= $message."\r\n";
$texte .= "\r\n";
}

//---------------------------------
// 2nde partie du message
// Le fichier
//---------------------------------
{

// penser a convertir le contenu du fichier en une chaîne de caractère
// certe totalement illisible mais sans caractères exotiques
// et avec des retours à la ligne tout les 76 caractères
// pour être conforme au format RFC 2045
$contenu_fichier = chunk_split(base_64_encode(implode("", file($chemin.$fichier))));

// Ne pas oublier que chaque partie du message est séparé par une frontière
$attachement = "--$boundary\r\n";
// Et pour chaque partie on en indique le type
$attachement .= "!content-type:! application/octet-stream; name=\"$fichier\"\r\n";
// Et comment il sera codé
$attachement .= "!content-transfer-encoding:! base_64\r\n";
// Petit plus pour les fichiers joints
// Il est possible de demander à ce que le fichier
// soit si possible affiché dans le corps du mail
//$attachement .= "!content-disposition:! inline;";
//au cas ou on ne souhaite pas voir le fichier dans le corps
$attachement .= "!content-disposition:! attachment;";
$attachement .= " filename=\"$fichier\"\r\n";
// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
$attachement .= "\r\n";
// C'est ici que l'on insère le code du fichier lu
$attachement .= $contenu_fichier . "\r\n";
$attachement .= "\r\n\r\n";
// on indique la fin par une nouvelle frontière
$attachement .= "--$boundary--\r\n";
}

//---------------------------------
// y a plus qu'a!
// mais on evite quand meme la fonction integrée a NPDS, sinon on perd la partie MIME
//---------------------------------
{
global $mail_fonction, $adminmail;
if (($mail_fonction==1) or ($mail_fonction=="")) {
$From_email=$adminmail;
if ($from!="") { $From_email=$from; }
$result=mail($to, $sujet, $texte.$attachement, "Reply-to: $reply\r\n!from:! $From_email\r\nX-Mailer: NPDS\r\n".$mail_mime);
} else {
$pos = strpos($adminmail, "@");
$tomail=substr($adminmail,0,$pos);
$result=email($tomail, $to, $sujet, $texte.$attachement, $tomail, "Reply-to: $reply\r\n!from:! $From_email\r\nX-Mailer: NPDS\r\n".$mail_mime);
}
}





et comme NPDS rajoute des caracteres ds le code, le fichier est ici

et si ca te pose toujours des problemes, recontacte moi par MI, je ne passe pas souvent par ce forum..

(faudrait ptetre ameliorer un poil la fonction integrée send_mail de NPDS...?)

+


Message édité par : hexagone

hexagone hexagoneicon_post
Salut,

j'ai vu tes fichiers

je crois qu'il y a une petite incomprehension, alors j'aimerais que tu me dises ce que tu voudrais exactement que ca fasse...

A qui doit etre envoyé le mail?
et surtout
Ou se trouve le fichier a attacher (serveur ou client)?

enfin bref, le fonctionnement de ton formulaire...

a+
BlackEagle BlackEagleicon_post
Aalut,

Le mail et la piece jointe doivent arriver sur ma boite mail et le fichier à attacher se trouve sur le pc du membre ou du visiteur.
hexagone hexagoneicon_post
Salut,


bon, c'est bien ce que je pensais, la solution que je t'ai donné part du principe que le fichier est deja sur le serveur, ce qui n'est pas le cas...
mais maintenant je comprends pourquoi tu as mis "upload" en titre du sujet...


alors il faut reprendre un poil (un gros poil) le script.


avant de commencer, voici (il me semble) le fonctionnement classique d'un webmail, en 3 etapes a peu pres
1) selection destinataire, titre, corps du message, selection de fichier sur le client
2) upload et stockage du fichier sur le serveur (+ antivirus au passage pour certains webmail)
3) le serveur renvoie le mail au destinataire avec le contenu du fichier uploadé attaché


donc, il nous manque la partie upload...
je regarde ca, et je reposte ici si jai une solution..

au fait, quelle version de NPDS?


( au passage , tu ne prefererais pas que les utilisateurs utilisent un client mail classique? ce serait plus simple non? )



nb: scuze le temps de reponse, c'est les vacances 8-)


Message édité par : hexagone

BlackEagle BlackEagleicon_post
Salut,

Y'as pas de soucis pour le temps de réponse, c'est déjà bien gentil de m'aider, et puis il faut profiter de ses vacances.

Je suis sous version NPDS Sable depuis la sortie officielle.

Pour le client mail classique, tu penses à outlook ou ce genre de logiciel ? J'y avais pensé mais je crois que ce n'est pas compatible avec tout les pc, ni tout les FAI (Ex AOL), et je trouve plus sympa que ce soit intégré dans le site.

Pour l'upload sur le site, il y a peut être une solution avec le script d'upload de dodi, car celui çi envoie le fichier sur le site.
hexagone hexagoneicon_post
oui,

par client mail "classique" je parlais d'outlook ou thunderbird, eudora...
mais pratiquement tous les fournisseurs de boite mail proposent aussi des webmail...

enfin c'est vrai que integré au site ca peut etre plus pratique...

et pour l'upload, il y a deja des solutions integrées aux forums, minisite, sujets....
je regarde ce que je peux faire..
Anonyme Anonymeicon_post
Bonjour,
Ce système m'interesse aussi. Y as-t-il eu une solution avec Sform ?
Achel_Jay Achel_Jayicon_post
idem, ca m'interresse aussi, faudrait que ca upload sur le server dans la zone du membre puis que ca envois le mail à partir du server smtp du server (mais bon ca qu on ait un server perso ou pas si y a un server smtp ca doit tourner)
developpeur developpeuricon_post
lopez est en train de faire un trcu qui pourrais servir de base à cela (Webmail)
Achel_Jay Achel_Jayicon_post
yup je dois regarder ca et ça a l air d être parfait avec une petite modif pour rentrer ca ds un formulaire :-)