> Tous les forums > Forum des Webmasters
 erreurs dans mon script
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
ogd
  Posté le 25/10/2010 @ 12:36 
Aller en bas de la page 
Astucien

hello!

J'adapte un script d'envoie de mail pour qu'il envoie 2 pieces jointes mais je rencontre un souci sur une condition if ou il me jette en me disant que j'ai un { en trop...

le code et la ligne concernee en rouge :

<?php
$email= $_POST['Email'];

$destinataire = "***"; # email de destination

#----------------------------------# options de pièce jointe------------------------------------#

$rep = "upload/"; # répertoire temporaire d'upload

$taillemax = 10240000; # taille max de la pièce jointe (multiple de 1024)


$erreur = false; // pas encore d'érreur

$message = false; //pas encore de message

$focus = 0; //pour la surbrillance

#----------------------------------------------------------------------------------------------------#

if (!empty($_POST)) #si le formulaire n'est pas vide


$piecejointe = "";# pièce jointe

if(!$erreur && strlen($_FILES['Fichier']['name']))
{
$fichier = $_FILES['Fichier'];

#---------------------------------upload du fichier sur le serveur------------------------------------#

$temp = $fichier['tmp_name'];
$name = $fichier['name'];
$size = $fichier['size'];
$destination = $rep.$name;

if($size > $taillemax)
$erreur = "Taille du fichier $name > ".(int)($taillemax/1024)." Ko";

elseif(!@is_uploaded_file($temp))
$erreur = "Téléchargement de $name impossible";

elseif(!@move_uploaded_file($temp, $destination))
$erreur = "Problème de transfert de $name";

if($erreur) $focus = 7;

else
{
#---------------------------------lecture et conversion du fichier------------------------------------#

if($openf = @fopen($destination,"rb")
{
$fichier = fread($openf, filesize($destination));

@fclose($openf);

#--------------------------------- encodage norme RFC 2045------------------------------------#

$piecejointe = chunk_split(base64_encode($fichier));
}
else
{
$erreur = "Problème de lecture du fichier $name";
$focus = 7;
}
}

}

$piecejointe2 = "";# pièce jointe

if(!$erreur && strlen($_FILES['Fichier2']['name']))
{
$fichier2 = $_FILES['Fichier2'];

#---------------------------------upload du fichier sur le serveur------------------------------------#

$temp2 = $fichier2['tmp_name'];
$name2 = $fichier2['name'];
$size2 = $fichier2['size'];
$destination2 = $rep.$name2;

if($size2 > $taillemax)
$erreur = "Taille du fichier $name2 > ".(int)($taillemax/1024)." Ko";

elseif(!@is_uploaded_file($temp2))
$erreur = "Téléchargement de $name2 impossible";

elseif(!@move_uploaded_file($temp2, $destination2))
$erreur = "Problème de transfert de $name2";

if($erreur) $focus = 7;

else
{
#---------------------------------lecture et conversion du fichier------------------------------------#

if($openf = @fopen($destination2,"rb")
{
$fichier2 = fread($openf, filesize($destination2));
@fclose($openf);

#--------------------------------- encodage norme RFC 2045------------------------------------#

$piecejointe2 = chunk_split(base64_encode($fichier2));
}
else
{
$erreur = "Problème de lecture du fichier $name2";
$focus = 7;
}
}

}

if(!$erreur) # pas d'erreur donc on continue
{
#--------------------------------- traitement du tableau $_POST qui contient les paires name => value-----------------------------------#

$message_final = "";

foreach($_POST as $key => $value)
{
# la deuxième partie du test passe les champs non désirés dans le mail // pour passer d'autres champs les séparer par |

if (strlen($value) && !eregi("(MAX_FILE_SIZE)", $key))
$message_final .= "$key : ".strip_tags($value)."\n";

}

# formatage du message de confirmation affiché

$message = ereg_replace("(\n|\r|\r\n)", "<br>", htmlentities($message_final)); # conversion des sauts de ligne et des caractères spéciaux


$objet = "$entete ".$_POST['Objet'];

# si l'email n'est pas renseigné on le remplace par celui du destinataire, en ajoutant une alerte au message
$final_mail = $_POST['Email'];

if(empty($_POST['Email']))
{
$final_mail = $destinataire;
$message_final .= "\nNe pas répondre par mail : email absent.\n";
}
# en-têtes
$headers = "From: ".$final_mail;
if(strlen($email_cc))
$headers .= "\nCC: ".$email_cc;
if(strlen($email_bcc))
$headers .= "\nBCC: ".$email_bcc;

# si pièce jointe on ajoute l'en-tête spécifique avec séparateurs

if(strlen($piecejointe)&&strlen($piecejointe2)) {
$boundary = "/-------".md5(uniqid(rand()))."-------/"; // séparateur
$headers .= "\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"$boundary\"\n";
$message_final =
"This is a multi-part message in MIME format.\n--$boundary\n".
"Content-Type: text/plain; charset=ISO-8859-1\n".
"Content-Transfer-Encoding: 7bit\n\n".
"$message_final\n\n--$boundary\n".
"Content-Type: $mimetype; name=\"$name\"\n".
"Content-Transfer-Encoding: base64\n".
"Content-Disposition: attachment; filename=\"$name\"\n\n".
"$piecejointe\n\n--".
"$message_final\n\n--$boundary\n".
"Content-Type: $mimetype2; name=\"$name2\"\n".
"Content-Transfer-Encoding: base64\n".
"Content-Disposition: attachment; filename=\"$name2\"\n\n".
"$piecejointe2\n\n--".
$boundary."--\n";
}

if(strlen($piecejointe)&&!strlen($piecejointe2)) {
$boundary = "/-------".md5(uniqid(rand()))."-------/"; // séparateur
$headers .= "\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"$boundary\"\n";
$message_final =
"This is a multi-part message in MIME format.\n--$boundary\n".
"Content-Type: text/plain; charset=ISO-8859-1\n".
"Content-Transfer-Encoding: 7bit\n\n".
"$message_final\n\n--$boundary\n".
"Content-Type: $mimetype; name=\"$name\"\n".
"Content-Transfer-Encoding: base64\n".
"Content-Disposition: attachment; filename=\"$name\"\n\n".
"$piecejointe\n\n--".
$boundary."--\n";
}

if(!strlen($piecejointe)&&strlen($piecejointe2)) {
$boundary = "/-------".md5(uniqid(rand()))."-------/"; // séparateur
$headers .= "\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"$boundary\"\n";
$message_final =
"This is a multi-part message in MIME format.\n--$boundary\n".
"Content-Type: text/plain; charset=ISO-8859-1\n".
"Content-Transfer-Encoding: 7bit\n\n".
"$message_final\n\n--$boundary\n".
"Content-Type: $mimetype2; name=\"$name2\"\n".
"Content-Transfer-Encoding: base64\n".
"Content-Disposition: attachment; filename=\"$name2\"\n\n".
"$piecejointe2\n\n--".
$boundary."--\n";
}

# envoi du mail
if (@mail($destinataire, stripslashes($objet), stripslashes($message_final), $headers))
{
@unlink($destination); // suppression de la pièce jointe
@unlink($destination2); // suppression de la pièce jointe

$pageName = "Le mail a été envoyé !";
}
else
{
$pageName = "Echec !";
$erreur = "Echec de l'envoi ! Merci d'essayer encore SVP";
}

}
else {

$pageName = "Erreur de saisie !";

} // if(!$erreur)

}
else {

$_POST = false;

} // if ($_POST)
?>
<html>
<head>
<title>Fréquence Plus : Postuler</title>
</head>
<body>
<form name="formulaire" action="<? echo $_SERVER['PHP_SELF']?>" method="post" enctype="multipart/form-data">
<?if (file_exists($rep)) { ?>
<p>
<label for="fichier">CV</label><input type="hidden" name="MAX_FILE_SIZE" value="<? echo $taillemax?>"/><input type="file" maxlength="60" id="fichier" <? if($focus == 7) echo "class=\"focus\"";?> name="Fichier"/>
<p>
<label for="fichier2">Lettre de motivation</label><input type="hidden" name="MAX_FILE_SIZE" value="<? echo $taillemax?>"/><input type="file" maxlength="60" id="fichier2" <? if($focus == 7) echo "class=\"focus\"";?> name="Fichier2"/>


<? } ?>

<input id="submit" type="submit" value="Envoyer"/><br/>

</p>
</form>
</body>
</html>

merci pour votre aide car je ne comprends pas pourquoi il me jette, j'ai vérifié le nombre d'ouverture et fermeture de mes conditions et ca me semble bon?

Publicité
txuku
 Posté le 25/10/2010 à 14:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour ogd

Avec Notepad2 le seul qui n apparaisse pas en rouge ( en couple { } ) lors d une recherche se situe a la ligne 225 :


} // if(!$erreur)

}
else {

$_POST = false;

} // if ($_POST)

ogd
 Posté le 25/10/2010 à 15:58 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Hello!

Je l'avais pas vu celui ci

Par contre j'ai toujours :

Parse error: syntax error, unexpected '{' in patatipatata/includes/jobplus/postuler.php on line 53

donc là :

[etc...]

if($erreur) $focus = 7;

else
{
#---------------------------------lecture et conversion du fichier------------------------------------#

if($openf = @fopen($destination,"rb")
{
$fichier = fread($openf, filesize($destination));
@fclose($openf);

#--------------------------------- encodage norme RFC 2045------------------------------------#

$piecejointe = chunk_split(base64_encode($fichier));
}
else
{
$erreur = "Problème de lecture du fichier $name";
$focus = 7;
}
}

}

[etc...]

Merci pour ton aide

txuku
 Posté le 25/10/2010 à 18:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Je ne m y connais pas specialement en php mais j aime bien mettre des { } apres les if() et les elseif().... ligne 21 37 40 43 54 ............ ?

Malcolm
 Posté le 25/10/2010 à 20:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

il manque une fermeture de parenthèse juste avant ton accolade ouvrante que t'as surlignée. Regarde bien.

Draleg
 Posté le 26/10/2010 à 08:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour, je suis peut-être à coté de la plaque (ce qui ne m'étonnerai pas vu l'heure {#}), mais bon si je me souviens bien un if avec 1 ligne de code n'a pas besoin de {} (meme si c'est plus joli mais bon...)

Petit problème lorsque je reprends l'intégralité du code dans le premier post sur pspad:

#----------------------------------------------------------------------------------------------------#

if (!empty($_POST)) #si le formulaire n'est pas vide (ligne21)


$piecejointe = "";# pièce jointe

if(!$erreur && strlen($_FILES['Fichier']['name']))
{
$fichier = $_FILES['Fichier'];

A la ligne 21 donc, tu test la variable ok, la dessus pas de problèmes mais pas d'accolade après, donc tout le code s'execute meme si elle est vide ? Si c'est le cas a quoi sert le test ?

Car juste apres un autre if ... (Fin ce n'est pas parceque je comprends pas, que c'est mauvais attention lol loiin de la... mais alors petite explication pour moi svpp ? {#})

Parceque si juste en dessous de ton if en l21 je rajoute une {:

#----------------------------------------------------------------------------------------------------#

if (!empty($_POST)) #si le formulaire n'est pas vide
{

$piecejointe = "";# pièce jointe

if(!$erreur && strlen($_FILES['Fichier']['name']))
{
$fichier = $_FILES['Fichier'];

du coup celui qui était en trop en ligne 225 précédement cité (qui est ligne 226 pour moi {#}) devient bonne:

} // if(!$erreur)

} #ligne 225/alias 226 pour moi
else {

$_POST = false;

... Et du coup je comprends mieux la logique de dire si la variable n'est pas vide alors blablabla...blablabla...



Modifié par Draleg le 26/10/2010 08:52
ogd
 Posté le 26/10/2010 à 08:45 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Hello à vous 2.

Le problème venait bien de la parenthèse manquante...

J'ai encore pas mal de bugs, que je vais tâcher de résoudre et sinon je reviendrai sur ce post.

Merci à vous 2

Draleg
 Posté le 26/10/2010 à 08:49 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Ok ok mais pour la ligne 21, j'étais dans le faux alors, j'aimerai bien une explication sur l'utilité du test, merci {#}

#----------------------------------------------------------------------------------------------------#

if (!empty($_POST)) #si le formulaire n'est pas vide (ligne21)



Modifié par Draleg le 26/10/2010 08:53
ogd
 Posté le 26/10/2010 à 12:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Hello!

Tu as raison pour l'accolade manquante...

Mais bon, je crois que je vais laisser tomber ce script.

D'une part les mails ne m'arrivent pas correctement et d'autre part le code, entre ce qui était à l'origine quand je l'ai trouvé et ce que j'ai modifié, me semble un peu lourd...

donc je vais sûrement revenir pour débugger ce que je vais réécrire... ce coup ci tout par moi meme...

MErci

Draleg
 Posté le 26/10/2010 à 12:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour,

Ha oky oky bonne chance alors {#} et bonne journée.

ogd
 Posté le 27/10/2010 à 09:14 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bon allez j'avoue, hier je me suis un peu emporté, car j'en avais assez...

En fait toujours sur la base de ce code, il y a une partie que je ne comprends pas bien:

foreach($_POST as $key => $value)
{
# la deuxième partie du test passe les champs non désirés dans le mail // pour passer d'autres champs les séparer par |

if (strlen($value) && !eregi("(MAX_FILE_SIZE)", $key))
$message_final .= "$key : ".strip_tags($value)."\n";

}

pour chaque post il parse les données entrées par l'utilisateur, mais après????

La fin de ce code signifie t il qu'il rajoute le contenu de spieces jointes à la suite du message final?

Parce que en ce moment, c'est ce qui se passe et c'est assez lourdingue.

Merci

ogd
 Posté le 27/10/2010 à 16:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

J'ai également 2 autres soucis :

***quand je veux ajouter un mail en bcc

$$email_bcc = "adressermail" ;

Et bien le formulaire ne s'envoie pas et les pieces jointes restent dans le dossier temporaire

***dans le mail que je reçois:

-Je voudrais personaliser les champs nom prénom etc par rapport au formulaire

-le message $message_final apparait 2 fois : une fois avant les civilités de mon formulaire et une fois à la fin

-comme dit ci dessus, j'ai mes 2 pieces jointes qui sont dans le message en signes cabalistiques en plus d'etre en pieces jointes

Si vous pouviez m'aiguiller

ogd
 Posté le 29/10/2010 à 08:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

petit up

Malcolm
 Posté le 29/10/2010 à 10:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

pour rajouter des pièces jointes, il t'en manque un bout ...

typiquement, tu dois encoder en base64 ton fichier joint et l'écrire dans le mail. (pour l'historique, ça vient du protocole SMTP qui n'a pas été conçu à la base pour transporter autre chose que du texte.)

Si tu ne veux pas trop te prendre la tête avec tout ça, je peux te conseiller d'utiliser une classe PHP tute faite du type PHPMailer qui te permettra en grande simplicité de faire ce que tu veux ...

Or tu te doutes bien que si tu mets une image encodée en base64 dans ton mail, il faudra savoir quand le "code" de l'image commence et où s'arrête ton texte ...

pour ça, il te faut un type MIME à ton mail, il faut une délimitation (boundary en anglais) qui servira à délimiter chaque partie du mail (entête, corps, chaque pièce jointe).

ogd
 Posté le 29/10/2010 à 10:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Hello Malcolm!

non en fait, ces pieces jointes qui apparaissent dans le corps du mail, je n'en veux pas...

En fait le formulaire fonctionne bien, (quand je n'utilise pas de bcc).

Je recois bien mes 2 pieces jointes en pieces jointes mais elles apparaissent également dans le corps du message ce qui est (à mon sens et dans mon cas) absurde ou en tout cas inutile.

pour moi une piece jointe, c'est fait pour être en piece jointe et pas dans le corps du mail.

Publicité
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
Ecran PC 27 pouces KTC H27V13 (VA, Full HD, 100 Hz) à 99,99 €
99,99 € 149 € -33%
@Geekbuying
PC portable Lenovo Yoga Slim 7 Pro X (14.5 pouces 3K IPS, Ryzen 5 6600HS, 16 Go RAM DDR5, SSD 1 To, Radeon 660M, WiFi 6E, Windows 11) à 720 €
720,00 € 899 € -20%
@Amazon
Ventilateur Rowenta Turbo Silence Extrême à 89,99 €
89,99 € 110 € -18%
@Amazon
SSD externe portable USB 3.1 Crucial X9 1 To (1050 Mo/s) à 82,99 €
82,99 € 102,99 € -19%
@Amazon
10 bobines de filament Creality Ender PLA (1,75 mm, 5x1 kg gris + 5x1 kg noir) à 99 €
99 € 150 € -34%
@Amazon
Clavier mécanique sans fil Logitech Pop Keys à 59,99 €
59,99 € 99 € -39%
@Amazon

Sujets relatifs
Script Commentaires dans site.
ouverture page dans même page script css
Faire un calcul dans un script en php
ou mettre la photo dans ce script?
bug dans script
Récupérer un script dans une page html
Aide pour correction de date dans un script
script mathématique dans calque ?
script eml dans page html sur mon site pour outloo
comment faire un arobas dans un script php
Plus de sujets relatifs à erreurs dans mon script
 > Tous les forums > Forum Forum des Webmasters