Pb sur formulaire PHP

Fermé
Dicab Messages postés 165 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 31 mars 2024 - 24 avril 2009 à 23:17
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 - 25 avril 2009 à 10:33
Bonjour,

Je bute depuis maintenant 3 jours sur mon formulaire, au niveau de l'envoi de la pièce jointe...

J'obtiens le message d'erreur suivant :

Warning: fread(): supplied argument is not a valid stream resource in /mnt/web8/23/20/51955120/htdocs/statique/traitement_log.php on line 78

Warning: fclose(): supplied argument is not a valid stream resource in /mnt/web8/23/20/51955120/htdocs/statique/traitement_log.php on line 80
Content-Type:... List:; syntax illegal for recipient addresses name=Content-Transfer-Encoding:... List:; syntax illegal for recipient addresses base64Content-Disposition:... List:; syntax illegal for recipient addresses Une erreur est survenue lors de l'envoi du formulaire par email


Ou se situe l'erreur dans mon code ?
PS : Je débute vraiment alors le top du top serait de me le corriger mais aussi de m'expliquer la correction :)

J'en demande beaucoup, hein ?!

Merci beaucoup d'avance, en tous cas

<?php
$msg_erreur = "Votre messagen'a pas pu être envoyé pour les raisons suivantes :<br/><br/>";
$msg_ok = "Votre message a bien été envoyé.";
$message = $msg_erreur;
define('MAIL_DESTINATAIRE',*****@biuzone.fr);
define('MAIL_SUJET','Formulaire de contact);

// vérification des champs
if (empty($_POST['PSEUDO']))
$message .= "Vous devez indiquer votre prénom ou même un pseudonyme : ce sera quand même plus sympa pour vous répondre, non ?<br/>";
if (empty($_POST['EMAIL']))
$message .= "Votre adresse email n'a pas été renseignée. Comment allons-nous faire pour vous répondre ?<br/>";
if (empty($_POST['EMAIL2']))
$message .= "Vous n'avez pas saisi deux fois le même email<br/>";
if (empty($_POST['CODE']))
$message .= "Vous ne nous avez pas donné un code à 4 chiffres de votre choix<br/>";


// si un champ est vide, on affiche le message d'erreur
if (strlen($message) > strlen($msg_erreur)) {

echo $message;

// sinon c'est ok
} else {

foreach($_POST as $index => $valeur) {
$$index = stripslashes(trim($valeur));
}

//=====Lecture et mise en forme de la pièce jointe
$fichier = fopen($scan, "r" );
$attachement = fread($fichier, filesize($scan));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);

//Préparation de l'entête du mail:
$mail_entete = "MIME-Version: 1.0\r\n";
$mail_entete .= "From: {$_POST['EXP']} "
."<{$_POST['EXP']}>\r\n";
$mail_entete .= 'Reply-To: '.$_POST['EMAIL']."\r\n";
$mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
$mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
$mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";

// préparation du corps du mail
$mail_corps = "Message de : $PSEUDO\n\n";
$mail_corps .= "Code : $CODE\n";
$mail_corps .= "Expéditeur : $EMAIL\n\n\n";
$mail_corps .= $MESSAGE;

//ajout de la pièce jointe
$mail_pj.= "Content-Type: application/pdf;\n name=\"$SCAN\"\n";
$mail_pj.= "Content-Transfer-Encoding: base64\n";
$mail_pj.= "Content-Disposition: attachment;\n filename=\"$SCAN\"\n";
$mail_pj.= "\n".$attachement."\n\n";

// envoi du mail
if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete,$mail_pj)) {

//Le mail est bien expédié
echo $msg_ok;
} else {

//Le mail n'a pas été expédié
echo 'Une erreur est survenue lors de l\'envoi du formulaire par email';
}

}
?>

4 réponses

Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
25 avril 2009 à 03:55
sors nous les 20 lignes qui précèdent la ligne 78, l'erreur doit se situer par là (technique de debug standard^^ très efficace)

Ensuite, te sers tu des commentaires? Ils sont aussi très efficaces en debug, il te permette de localiser par désactivation de lignes de code ce qui cloche.
0
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 330
25 avril 2009 à 09:54
I'a plein de trucs qui vont pas.
D'abord je te corrige le début (il manque des quotes) :
<?php
$msg_erreur = "Votre messagen'a pas pu être envoyé pour les raisons suivantes :<br/><br/>";
$msg_ok = "Votre message a bien été envoyé.";
$message = $msg_erreur;
define('MAIL_DESTINATAIRE','*****@biuzone.fr');
define('MAIL_SUJET','Formulaire de contact');


Ensuite,
la variable $scan n'est assignée nulle part. SI tu l'utilises malgré tout, elle contient NULL. Et tu peux essayer d'ouvrir NULL comme tu veux, .... ce sera une ressource invalide de toute manière.
Les variables $PSEUDO, $CODE, $MESSAGE, $EMAIL ne sont initialisées nulle part .sSlon la configuration de PHP, $PSEUDO ne vaut pas forcément $_POST['PSEUDO'], tu dois faire une affectation toi-même en faisant les vérifications nécessaires (surtout si tu envoies ça par mail après, il faut au moins : échapper les caractères spéciaux, vérifier que l'e-mail est un e-mail, éventuellement vérifier que la longueur n'est pas trop grande).

if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete,$mail_pj))
Là-dedans il y a une erreur de syntaxe, je te laisse trouver ou elle est.

Ensuite un problème de fond : tu ne vérifies pas que les deux e-mails sont les mêmes !
Tu vérififies uniquement que la seconde adresse n'est pas vide, ce n'est pas suffisant !
0
Dicab Messages postés 165 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 31 mars 2024 2
25 avril 2009 à 10:24
Merci Yoan pour ces éléments de réponse...

Déjà, pour la vérification de l'email, elle se fait auparavant, sur la page HTML, au moyen d'une comparaison de champ (cette ligne sur la page de traitement ne sers donc en fait à rien, je suis en train de comprendre lol)

Pour ce qui est de la variable $scan, c'est le champ "Parcourir" du formulaire HTML qui se nomme ainsi.. N'est-ce pas suffisant ?

Et pour l'erreur de syntaxe qui se cache dans if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete,$mail_pj))

Hé ben.... c'est une des lignes que je croyais vraiment juste :-( je trouve pas où est l'erreur...

Arf
0
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 330
25 avril 2009 à 10:33
Déjà, pour la vérification de l'email, elle se fait auparavant, sur la page HTML, au moyen d'une comparaison de champ
C'est pas suffisant ! On ne fait jamais confiance à ce qui se passe côté client, vérifie également les données côté serveur.

Pour ce qui est de la variable $scan, c'est le champ "Parcourir" du formulaire HTML qui se nomme ainsi.. N'est-ce pas suffisant ?
Je ne sais pas trop comment fonctionne l'envoi de fichiers. Toujours est-il que ta variable $scan n'existe pas. Ca doit être $_FILES['scan'].


Hé ben.... c'est une des lignes que je croyais vraiment juste :-( je trouve pas où est l'erreur...
Non en fait c'est bon, j'avais pas fais gaffe que ce n'étaient pas des variables, autant pour moi.
0