Probleme avec formulaire php

Fermé
neya - 6 févr. 2009 à 14:57
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 - 11 févr. 2009 à 19:46
Bonjour,

je me demandais si il fallais pas actionner qlq chose chez mon hebergeur (hosteur.com)pour pouvoir faire fonctionner un formulaire avec pieces jointe je vous envois mes code
pages html:

<center>

<form name="FormName" action="formmail.php" method="post" enctype="multipart/form-data" name="form">

Expéditeur <input type="text" name="email" size="35"> <br>
Sujet <input type="text" name="subject" size="35"> <br>
Message <textarea rows="12" name="msg" cols="60"></textarea> <br>
Fichier joint <input type="hidden" name="MAX_FILE_SIZE" value="100000"><input name="NomFichier" type="file" size="16">
Priorité <select name="priority" size="1">
<option value="1">Urgent
<option value="2">Haute
<option value="3">Moyenne
<option value="4">Basse
<option value="5">Très basse
</select> <br>
<input type="submit" value="Envoyer">
</form>



</center>










et voici ma page formmail.php:

$dest="meuniercreation@hotmail.com";
$reponse=StripSlashes("Formulaire envoyé avec succès");
class Mail
{
var $sendto= array();
var $from, $msubject;
var $acc= array();
var $abcc= array();
var $aattach= array();
var $priorities= array( '1 (Highest)', '2 (High)', '3 (Normal)', '4 (Low)', '5 (Lowest)' );
function Mail()
{
$this->autoCheck( true );
}
function autoCheck( $bool )
{
if( $bool )
$this->checkAddress = true;
else
$this->checkAddress = false;
}
function Subject( $subject )
{
$this->msubject = strtr( $subject, "\r\n" , " " );
}
function From( $from )
{
if( ! is_string($from) ) {
echo "Class Mail: error, From is not a string";
exit;
}
$this->from= $from;
}
function To( $to )
{
if( is_array( $to ) )
$this->sendto= $to;
else
$this->sendto[] = $to;
if( $this->checkAddress == true )
$this->CheckAdresses( $this->sendto );
}
function Cc( $cc )
{
if( is_array($cc) )
$this->acc= $cc;
else
$this->acc[]= $cc;
if( $this->checkAddress == true )
$this->CheckAdresses( $this->acc );
}
function Bcc( $bcc )
{
if( is_array($bcc) ) {
$this->abcc = $bcc;
} else {
$this->abcc[]= $bcc;
}
if( $this->checkAddress == true )
$this->CheckAdresses( $this->abcc );
}
function Body( $body )
{
$this->body= $body;
}
function Send()
{
$this->_build_headers();
if( sizeof( $this->aattach > 0 ) ) {
$this->_build_attachement();
$body = $this->fullBody . $this->attachment;
}
for( $i=0; $i< sizeof($this->sendto); $i++ ) {
$res = mail($this->sendto[$i], $this->msubject,$body, $this->headers);
}
}
function Organization( $org )
{
if( trim( $org != "" ) )
$this->organization= $org;
}
function Priority( $priority )
{
if( ! intval( $priority ) )
return false;
if( ! isset( $this->priorities[$priority-1]) )
return false;
$this->priority= $this->priorities[$priority-1];
return true;
}
function Attach( $filename, $filetype='application/x-unknown-content-type', $disposition = "inline" )
{
$this->aattach[] = $filename;
$this->actype[] = $filetype;
$this->adispo[] = $disposition;
}
function Get()
{
$this->_build_headers();
if( sizeof( $this->aattach > 0 ) ) {
$this->_build_attachement();
$this->body= $this->body . $this->attachment;
}
$mail = $this->headers;
$mail .= "\n$this->body";
return $mail;
}
function ValidEmail($address)
{
if( ereg( ".*<(.+)>", $address, $regs ) ) {
$address = $regs[1];
}
if(ereg( "^[^@ ]+@([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9\-]|net|com|gov|mil|org|edu|int)$",$address) )
return true;
else
return false;
}
function CheckAdresses( $aad )
{
for($i=0;$i< sizeof( $aad); $i++ ) {
if( ! $this->ValidEmail( $aad[$i]) ) {
echo "Class Mail, method Mail : invalid address $aad[$i]";
exit;
}
}
}
function _build_headers()
{
$this->headers= "From: $this->from\n";
$this->to= implode( ", ", $this->sendto );
if( count($this->acc) > 0 ) {
$this->cc= implode( ", ", $this->acc );
$this->headers .= "CC: $this->cc\n";
}
if( count($this->abcc) > 0 ) {
$this->bcc= implode( ", ", $this->abcc );
$this->headers .= "BCC: $this->bcc\n";
}
if( $this->organization != "" )
$this->headers .= "Organization: $this->organization\n";
if( $this->priority != "" )
$this->headers .= "X-Priority: $this->priority\n";
}
function _build_attachement()
{
$this->boundary= "------------" . md5( uniqid("myboundary") );
$this->headers .= "MIME-Version: 1.0\nContent-Type: multipart/mixed;\n boundary=\"$this->boundary\"\n\n";
$this->fullBody = "This is a multi-part message in MIME format.\n--$this->boundary\nContent-Type: text/plain; charset=us-ascii\nContent-Transfer-Encoding: 7bit\n\n" . $this->body ."\n";
$sep= chr(13) . chr(10);
$ata= array();
$k=0;
for( $i=0; $i < sizeof( $this->aattach); $i++ ) {
$filename = $this->aattach[$i];
$basename = basename($filename);
$ctype = $this->actype[$i];
$disposition = $this->adispo[$i];
if( ! file_exists( $filename) ) {
echo "Class Mail, method attach : file $filename can't be found"; exit;
}
$subhdr= "--$this->boundary\nContent-type: $ctype;\n name=\"$basename\"\nContent-Transfer-Encoding: base64\nContent-Disposition: $disposition;\n filename=\"$basename\"\n";
$ata[$k++] = $subhdr;
$linesz= filesize( $filename)+1;
$fp= fopen( $filename, 'r' );
$data= base64_encode(fread( $fp, $linesz));
fclose($fp);
$ata[$k++] = chunk_split( $data );
}
$this->attachment= implode($sep, $ata);
}
}
$subject=StripSlashes($subject);
$msg=StripSlashes($msg);
$msg="Message depuis votre site web:
$msg";
$m= new Mail;
$m->From( "$email" );
$m->To( "$dest");
$m->Subject( "$subject" );
$m->Body( $msg);
if ($email1!="") {
$m->Cc( "$email1");
}
$m->Priority($priority) ;
if ("$NomFichier_name"!="") {
copy("$NomFichier","../upload/$NomFichier_name");
$m->Attach( "../upload/$NomFichier_name", "application/octet-stream" );
}
$m->Send();
if ("$NomFichier_name"!="") {
Unlink("../upload/$NomFichier_name"); }
echo "$reponse";
?>

qud je lance la page devis sur mon site (www.meuniercreation.be)
qud je clic sur envoyer ilm affiche ceci


Warning: copy(../upload/08.jpg) [function.copy]: failed to open stream: Permission denied in /home/meunierc/public_html/formmail.php on line 186
Class Mail, method attach : file ../upload/08.jpg can't be found

j ai pourtant bien un dossier upload ... sinon sans fichier joint le formulaire marche .
merci de m aider :)

11 réponses

Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 13
6 févr. 2009 à 15:12
Est-ce que t'as bien la permission d'écrire dans ton dossier d'upload ?
L'autre jour je me suis pris la tête pendant des heures sur un formulaire d'upload avant de voir qu'en fait j'avais pas mis toutes les permissions (777) pour le dossier de destination XD
0
effectivement ca je ne savais pas ...
peut tu m expliquer comment faire pour faire ca ?
merci beaucoup
0
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 13
7 févr. 2009 à 23:36
Ça dépend de ton logiciel ftp mais je pense qu'il suffit que tu tu fasses un click droit sur le dossier où tu veux uploader tes fichiers et que dans les propriétés du dossier tu coches toutes les permissions (si il y a une zone avec des 3 chiffres il faut que tu mettes 777) et normalement le problème est réglé.

Tiens moi au courant.
0
re
j ai ftp classic et y pas de proprieter qud tu clic droit ...
qud je clic droit sur mon fichier il me donne les proprieter oui mais pas de chmod ou 777 ou d autre droit ....
merci
0
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 13
9 févr. 2009 à 09:05
Il faut essayer de faire ton click droit sur le dossier où tu veux uploader tes fichers, pas sur les fichiers eux même ^^
0
mais lol ...

qud je suis ds mon ftp la fenetre de geuche c est mon pc la fenetre de droite c est mon hebergeur
et qud je clic sur le dossier de mon hebegeur la ou je vais envoyer tout mes fichier et dossier de mon site
je clic droit et la t a rename delete open download et rien d autre ....
snif ou mon ftp craint ou alors i dont now ...lol
merci pour l aide
0
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 13
9 févr. 2009 à 09:54
À la limite essaye avec un autre client ftp (j'utilise winscp) mais sinon je sais pas d'où ça peut venir, désolé :(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ok j ai installer ton ftp c est mieux en effect la je clic droit sur mon dossier et proprieter puis je marque 666 la ou y a 4 chiffre? merci
0
bj
j ai resolu le probleme lol c etais bien ca mais en 777
uniquement sur le fichier upload et c est suffisant
merci encore
maintenant qlq un pourrais me dire comment faire ds mon formail .php pour que une fois le formulaire envoyer il te redirige vers une page html ?
merci beaucoup
0
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 13
10 févr. 2009 à 14:10
Et ben voilà, un problème de résolu ^^

Pour te rediriger tu peux utiliser un header :
header ('Location :tapage.html')
Le seul inconvénient de cette méthode c'est qu'il ne faut pas qu'il y ai de html avant cette ligne mais vu ton code ça devrait être bon.
0
ok merci pour tout je vais tester ca ;)
0
voilaj ai tester et ca marche pas car a mon avis je le place pas au bonne endroit ...
car il me redirige vers une page blanche avec ecrit Formulaire envoyé avec succès comme dans le script au debut
alors dois je effacer cette ligne de code et la remplacer par le header ?

$reponse=StripSlashes("Formulaire envoyé avec succès");

??? merci
0
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 13
11 févr. 2009 à 10:20
Le problème c'est qu'avant le header il ne faut pas de code html or le echo te génère.. du code html !
Je pense que tu devrais enlever le echo qui dit que ça a bien été uploadé et tu fais ta redirection à la place.

Après si tu veux vraiment dire à l'utilisateur que ça a marché (et c'est mieux de lui dire) tu peux passer un paramètre en GET et afficher, en fonction du paramètre, un message sur ta page html.
0
ok donc e dois bien remplacer cette ligne la

$reponse=StripSlashes("Formulaire envoyé avec succès");

??

mais y a un echo aussi au dessu a l envoi "ou l on inscrit le mail pour la reception "

pourrais tu me faire la ligne de code a inserer et ou exactement merci beaucoup
0
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 13
11 févr. 2009 à 15:16
Je te fais ça ce soir ;)
0
ok j attend avec impatience lol
merci pour tout tout tou ;)
0
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 13
11 févr. 2009 à 19:46
Bon alors en fait li'dée c'est que partout où t'as un echo tu mettes un header
header ('Location: tapage.php')

Pour gérer tous les différents cas d'erreur (ou de réussite) il faudrait que tu passe un paramètre dans l'url genre
('Location: tapage.php?erreur=2')

Après dans tapage.php tu récupères le paramètre ($_GET['erreur']) et en fonction de ça tu affiches un message. Par exemple si l'upload est réussi tu rediriges sur
('Location: tapage.php?erreur=0')
Et dans tapage.php tu mets
if ($_GET['erreur'] == 0) echo 'Upload réussi';


Tu comprends le truc ?

(Désolé mais j'ai vraiment la flemme d'étudier ton source et te donner un code tout prêt. De toute façon c'est en se creusant le crâne qu'on apprend le mieux ^^)
0