Bonjour,
J'ai suivi le tuto sur php "formulaire de contact".
Je souhaite le modifier pour permettre l'upload d'une image mais sans passer par une base de donnée. L'image arrive soit dans un fichier, soit en piece jointe avec le mail ?
J'ai un peu bidouiller et j'ai réaliser un script qui bien sûr ne fonctionne pas. Mais pouvez-vous m'aider ?

<?php
if(!empty($_POST))
    {
        extract($_POST);
        $valid = true;
        if($adresse != ""){

        }
        else{
        if(empty($nom))
            {
                $valid=false;
                $erreurnom="remplir le nom";
            }
        if(!preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$email))
            {
                    $valid=false;
                    $erreuremail="Votre email n'est pas valide";
            }
        if(empty($email))
            {
                $valid=false;
                $erreuremail="remplir votre email";
            }
        if(empty($message))
            {
                $valid=false;
                $erreurmessage="remplir un message";
            }
        if(empty($contact_upload))
            {
                $valid=false;
                $erreurphoto="Uploader une photo";
            }
        if($valid)
            {
                //if(!in_array($service,array("sav","finance","contact"))){ $service="contact"; }
                $to = "contact@monsite.net";
                //$to = "$service@monsite.net";
                $sujet = $nom." a contacté le site";
                // $header = "From: $nom <$email> \n";
                $header = "From: contact@monsite.net \n";
                $header .="Reply-To: $email";
                $message = stripslashes($message);
                $nom = stripslashes($nom);
                if(mail($to,$sujet,$message,$header))
                    {
                        $erreur = "Votre message nous ai bien parvenu";
                        unset($nom);
                        unset($email);
                        unset($message);
                    }
                else
                    {
                        $erreur = "Une erreur s'est produite, votre email n'ai pas parti";
                    }
            }
        }
    }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>
        Surf Photos
    </title>

    <!-- La feuille de styles "base.css" doit être appelée en premier. 
    <link rel="stylesheet" type="text/css" href="styles/base.css" media="all" />-->
    <link rel="stylesheet" type="text/css" href="styles/modele08.css" media="screen" />
    <link rel="shortcut icon" type="image/x-icon" href="images/accueil/favicon.bmp" />
    <meta name="description" content="surf méditerranée, météo surf, surfing mediterranean sea" />

</head>
<body>

<div id="global">
    <div id="entete">

            <img alt="" src="images/accueil/bans7.png" />

    </div><!-- #entete -->
    <?php include("menu.php"); ?>
    <!-- #navigation -->
    <div id="centre">

    <div id="principal">

        <h2>Photos</h2>
        <ul id="miniphotos">
            <?php include("listephotos.php"); ?>            
        </ul>
        <div id="contenu">
        <h1>Envoyer votre photo</h1>
        <h2>N'hésitez pas</h2>
        <hr/>
        <?php
        if(isset($erreur))
            {
                echo "<p>$erreur</p>";
            }
        ?>
        <form method="post" action="photos.php">
        <label for="nom">Nom :</label><br />
        <input type="text" name="nom" id="nom" value="<?php if(isset($nom)) echo $nom; ?>"/>
        <span class="error-message"><?php if(isset($erreurnom)) echo $erreurnom; ?></span>
        <br />

        <label for="email">Email :</label><br />
        <input type="text" name="email" id="email" value="<?php if(isset($email)) echo $email; ?>"/>
        <span class="error-message"><?php if(isset($erreuremail)) echo $erreuremail; ?></span>

        <input type="text" name="adresse" id="adresse" />
        <br />

        <br />

        <label for="message">Votre message :</label><br />
        <textarea name="message" id="message"><?php if(isset($message)) echo $message; ?></textarea>
        <span class="error-message"><?php if(isset($erreurmessage)) echo $erreurmessage; ?></span>
        <br />

        <label for="contact_upload">Upload ta photo (redimensionner l'image | max. 1 Mo) :</label><br />
        <input type="file" name="contact_upload" id="contact_upload" /><?php if(isset($contact_upload)) echo $contact_upload; ?></textarea>
        <span class="error-message"><?php if(isset($erreurphoto)) echo $erreurphoto; ?></span>
        <?php   if ($_FILES'contact_upload']'size'] <= 1000000)
        {

                $infosfichier = pathinfo($_FILES'contact_upload']'name']);
                $extension_upload = $infosfichier'extension'];
                $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png', 'JPG', 'JPEG');
                if (in_array($extension_upload, $extensions_autorisees))
                {

                        move_uploaded_file($_FILES'contact_upload']'tmp_name'], 'uploads/' . basename($_FILES'contact_upload']'name']));

                        $contact_upload=basename($_FILES'contact_upload']'name']);
                }
        } ?>
    <br />
    <br />

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

        </form>
        </div>

            <?php include("pieddepage.php"); ?>
        </div><!-- #principal -->
        <div id="secondaire">
    <?php include("secondaire.php"); ?>

        </div><!-- #secondaire -->
    </div><!-- #centre -->
</div><!-- #global -->
</body>
</html>

10 réponses


wilose
Réponse acceptée

Ligne 111, une toute petite négligence:

echo "<p>$erreur</p>";

La prochaine fois essai de nous montrer l'essentielle de ton code, par exemple tu pouvais enlever les DIV, LINK etc...

wilose
Réponse acceptée

Content pour toi.

N'hésite pas.

"il ne marche pas" suivi de 200 lignes de code ça donne pas très envie :(
Faudrait que tu cherche un peu pour extraire la partie qui marche pas et simplifier ton problème

woubi
Auteur

C'est vrai...
J'ai suivi le tuto php sur "Formulaire de contact" avec la fonction mail de php sur ce site.
Je souhaitais juste rajouter la possibilité d'uploader une photo en plus.
Pour cela j'ai ajouté un script :

<label for="contact_upload">Upload ta photo (redimensionner l'image | max. 1 Mo) :</label><br />
        <input type="file" name="contact_upload" id="contact_upload" /><?php if(isset($contact_upload)) echo $contact_upload; ?></textarea>
        <span class="error-message"><?php if(isset($erreurphoto)) echo $erreurphoto; ?></span>
        <?php   
        if (isset($_FILES'contact_upload']) AND $_FILES'contact_upload']'error'] == 0)
{
        if ($_FILES'contact_upload']'size'] <= 1000000)
        {

                $infosfichier = pathinfo($_FILES'contact_upload']'name']);
                $extension_upload = $infosfichier'extension'];
                $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png', 'JPG', 'JPEG');
                if (in_array($extension_upload, $extensions_autorisees))
                {

                        move_uploaded_file($_FILES'contact_upload']'tmp_name'], 'uploads/' . basename($_FILES'contact_upload']'name']));

                        $contact_upload=basename($_FILES'contact_upload']'name']);
                }
        }
} ?>

Mais alors que je reçoit bien l'email je n'ai aucune image qui arrive dans mon dossier "uploads" ?

A tu ajouté "enctype="multipart/form-data"" à <from>, il faut aussi que ton dossier est les droits d'écriture...
Voici un lien.

woubi
Auteur

Oui c'est ca, j'avais pas mis "enctype="multipart/form-data"" à <from>. Merci bcp!!!
Tout est OK maintenant. Je reçois bien mon image dans mon dossier et le reste par email (nom etc...)

Par contre dans mon email les caractères comme les "é" s'affiche avec des "?". Que faut 'il que je fasse ?
Merci

Essai de rajouter sa;

$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

Et si sa na fonctionne toujours pas met le en uft8.

woubi
Auteur

Non ça ne fonctionne pas ni en UTF-8, ni en iso...
Mais ce n'est pas mon principal souci.

En effet je souhaite ajouter dans mon formulaire de contact une liste déroulante avec 3 choix possible (le choix d'une région où a été prise la photo).

J'ai donc ajouter un code pour le formulaire :

<label for="region">Selectionne une région :</label><br />
        <select name="region" id="region" value="<?php if(isset($region)) echo $region; ?>"> 
            <option value="provence" selected="selected">Provence</option>
            <option value="languedoc">Languedoc</option>
            <option value="autres">Autres</option>
        </select>

Et je ne change rien au code php :

if($valid)
            {
                $to = "contact@monsite.net";
                $sujet = $nom." a contacté le site";
                // $header = "From: $nom <$email> \n";
                $header = "From: contact@monsite.net \n";
                $header .="Reply-To: $email";
                $message = stripslashes($message);
                $region = stripslashes($region);
                $nom = stripslashes($nom);
                if(mail($to,$sujet,$message,$header,$region))
                    {
                        $erreur = "Votre message nous ai bien parvenu";
                        unset($nom);
                        unset($email);
                        unset($message);
                        unset($region);
                    }
                else
                    {
                        $erreur = "Une erreur s'est produite, votre mail n'ai pas parti";
                    }
            }

Le problème c'est que je ne reçois pas le choix de la région sélectionné dans mes email mais bien le reste (messages etc...) ?

<? mail($to,$sujet,$message,$header,$region) ?>

Sa je ne pence pas que ce soi possible,
il faut enlever $region, et l'ajouter à ton $message:

<?
$message = stripslashes($message);
$region = stripslashes($region);
$message = $message.'-'.$region;
//ou une autre méthode  
$message = stripslashes($message);
$region = stripslashes($region);
$message .= '-';
$message .= $region;
>?
woubi
Auteur

Merci pour l'aide précieuse.
J'ai finalement trouvé ça et ça fonctionne :

if($valid)
            {

                $to = "contact@monsite.net";
                $sujet = $nom." a contacté le site";
                 $header = "From: $nom <$email> \n";
                $header .="Reply-To: $email";
                $message = stripslashes("tag: $message\nRégion: $region");  
                $nom = stripslashes($nom);
                if(mail($to,$sujet,$message,$header))
                    {
                        $erreur = "Votre photo nous ai bien parvenue";
                        unset($nom);
                        unset($email);
                        unset($message);
                    }
                else
                    {
                        $erreur = "Une erreur s'est produite, votre mail n'ai pas parti";
                    }
            }