IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

erreur fopen - formulaire + envoi de fichier


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 23
    Points : 13
    Points
    13
    Par défaut erreur fopen - formulaire + envoi de fichier
    Bonjour à tous,

    je suis actuellement entrain de coder un formulaire de contact, qui a également la possibilité d'envoyer des fichiers joints.
    Mais je reçois les erreurs suivantes:

    Warning: fopen() [function.fopen]: Filename cannot be empty in /home/php/public_html/valid_mail.php on line 46

    Warning: fread(): supplied argument is not a valid stream resource in /home/php/public_html/valid_mail.php on line 46

    no ok

    voici le code permettant l'envoie et la verif du formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
     
    <?php 
     
     include("mail.php"); 
     
    // récupération du mail de l'admin
    if(isset($_GET["mail"]))     $mailadmin=$_GET['mail'];
     
     
    // récupération du mail de l'utilisateur
    if(isset($_POST["email"]))     $mail=$_POST['email'];
     
    // récupération du nom de l'expéditeur
    if(isset($_POST['nom']))      	$nom=$_POST['nom'];
     
    // récupération de l'objet
    if(isset($_POST['objet']))      $objet=$_POST['objet'];
     
    //récupération du message 
    if(isset($_POST['message']))    $message=$_POST['message'];
     
     
    // Test permettant de savoir si le fichier a bien été envoyé et s'il n'y a pas d'erreur
    if (isset($_FILES['file']) AND $_FILES['file']['error'] == 0)
    {
            // Test taille max du fichier uploadé
            if ($_FILES['file']['size'] <= 1000000)
            {
                    // Test des extensions autorisées. 
                    $infosfichier = pathinfo($_FILES['file']['name']);
                    $extension_upload = $infosfichier['extension'];
                    $extensions_autorisees = array('doc', 'rtf', '.pdf', 'jpg', 'docx', 'xls', 'xlsx', 'xml' );
                    if (in_array($extension_upload, $extensions_autorisees))
                    {
                            // On peut valider le fichier et le stocker définitivement
                            move_uploaded_file($_FILES['file']['file'], 'uploads/' . basename($_FILES['file']['file']));
                            echo "L'envoi a bien été effectué !";
                    }
            }
    } 
     
    // ouverture du fichier. 
    $fichier_attache = fread(fopen("/uploads/file", "r"), filesize($file));
     
    $mail = new mime_mail();
    $mail->to = $mailadmin; // Adresse email de reception
    $mail->subject = $objet; // Objet du mail
    $mail->body = $message; // Corps du message
    $mail->from = $email; // Adresse email de l'expediteur (optionnel)
    $mail->attach($fichier_attache, $file); // fichier attache (optionnel)
     
     
    // test l'envoi du message 
    if($mail->send()) {
    	echo "ok";
    } else	{
    	echo "no ok";
    }
     
    ?>
    Merci d'avance

  2. #2
    Membre confirmé Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Points : 576
    Points
    576
    Par défaut
    Salout,
    Met une extension a ton fichier ;-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    /uploads/file   // .php .txt .....

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Mais je ne connais pas l'extention du fichier...
    Ca peut soit etre du txt, ou du .doc, .pdf, .xml... etc...

    Je peux gérer ça comment?

  4. #4
    Membre confirmé Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Points : 576
    Points
    576
    Par défaut
    '/uploads/file'.$Extension

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    En faite le fichier n'est même pas uploadé dans : /uploads

    Warning: fopen(/uploads/file.$extension_upload) [function.fopen]: failed to open stream: No such file or directory in /home/php/public_html/valid_mail.php on line 50

    Warning: fread(): supplied argument is not a valid stream resource in /home/php/public_html/valid_mail.php on line 50
    no ok

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    En fait en regardant cela , j'ais l'impression que le nom n'est pas "file", mais le nom et l'extention c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $lefichier='uploads/' . basename($_FILES['file']['file']);
    //========= alors il devrais avoir plus bas
    $header=fopen($lefichier, "rb");
    $fichier_attache = fread($header, filesize($filename));
    $header = fclose($header);
    a contrôler

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Voici mon formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <form id="contact" enctype="multipart/form-data" method="post" action="valid_mail.php?mail=<?php echo $admin->getMail();?>">
    	<fieldset><legend>Vos coordonnées :</legend>
     
    		<p><label for="nom">Nom :</label><input type="text" id="nom" name="nom" <?php echo $nomuser;?>"/></p>
    		<p><label for="email">Email :</label><input type="text" id="email" name="email" <?php echo $mailuser;?> /></p>
    	</fieldset>
    	<br />
    	<fieldset><legend>Votre message :</legend>
    		<p><label for="objet">Objet :</label><input type="text" id="objet" name="objet" /></p> 
    		<p><label for="message">Message :<br /></label><textarea id="message" name="message" cols="30" rows="10"></textarea></p>
    		<p><input type="hidden" name="MAX_FILE_SIZE" value="1000000" /><p>
            <p><label for="upload">Fichier: </label><input type="file" name="file" id="file" /></p>
    	</fieldset>
     
    	<div style="text-align:center;"><input type="submit" name="envoi" value="Envoyer votre message !" /></div>
    </form>
    Et revoici mon action"valid_mail.php" avec les changements:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    <?php 
     
     include("mail.php"); 
     
    // récupération du mail de l'admin
    if(isset($_GET['mail']))     $mailadmin=$_GET['mail'];
     
     
    // récupération du mail de l'utilisateur
    if(isset($_POST['email']))     $mail=$_POST['email'];
     
    // récupération du nom de l'expéditeur
    if(isset($_POST['nom']))    	$nom=$_POST['nom'];
     
     
    // récupération de l'objet
    if(isset($_POST['objet']))      $objet=$_POST['objet'];
     
    //récupération du message 
    if(isset($_POST['message']))    $message=$_POST['message'];
     
     
     
     
     
    // Test pour savoir si le fichier a bien été envoyé et s'il n'y a pas d'erreur
    if (isset($_FILES['file']) AND $_FILES['file']['error'] == 0)
    {
            // Test taille max du fichier uploadé
            if ($_FILES['file']['size'] <= 1000000)
            {
                    // Test des extensions autorisées. 
                    $infosfichier = pathinfo($_FILES['file']['name']);
                    $extension_upload = $infosfichier['extension'];
                    $extensions_autorisees = array('doc', 'rtf', '.pdf', 'jpg', 'docx', 'xls', 'xlsx', 'xml' );
                    if (in_array($extension_upload, $extensions_autorisees))
                    {
                            // On peut valider le fichier et le stocker définitivement
                            move_uploaded_file($_FILES['file']['file'], '/uploads/file.$extension_upload' . basename($_FILES['file']['file']));
                            echo "L'envoi a bien été effectué !";
                    }
            }
     
    } 
     
     
     
    $lefichier='uploads/' . basename($_FILES['file']['file']);
    //========= alors il devrais avoir plus bas
    $header=fopen($lefichier, "rb");
    $fichier_attache = fread($header, filesize($file));
    $header = fclose($header);
     
    $mail = new mime_mail();
    $mail->to = $mailadmin; // Adresse email de reception
    $mail->subject = $objet; // Objet du mail
    $mail->body = $message; // Corps du message
    $mail->from = $email; // Adresse email de l'expediteur (optionnel)
    $mail->attach($fichier_attache, $file); // fichier attache (optionnel)
    // envoi du message 
     
    //$mail->send();
     
    if($mail->send()) {
    	echo "ok";
    } else	{
    	echo "no ok";
    }
     
    ?>

  8. #8
    Membre confirmé Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Points : 576
    Points
    576
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     // Et comme ca ?
                            move_uploaded_file($infosfichier, 'uploads/'.$infosfichier));

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Voilà, après moulte tentative, test, etc... J'en suis arrivé là:

    Le fichier s'upload bien sur le serveur, j'arrive récupérer le message, l'adresse, etc...

    Malgré tout, le mail ne s'envoi pas...
    Un problème sur cette ligne:
    $mail->attach($fichier_attache, $file); ??

    Je ne sais plus ... Si quelqu'un aurait une réponse...? Merci d'avance



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    <?php 
    include("mail.php");
    /* il faudrait controler que c'est un mail valide et qu'il n'y a pas de script caché*/
    if(isset($_GET["mail"])) $mailadmin=$_GET['mail'];
    else $mailadmin="";
    if(isset($_POST["email"]))     $mail=$_POST['email'];
    else $mail="";
    if(isset($_POST['nom']))      	$nom=$_POST['nom'];
    else $nom="";
    if(isset($_POST['objet']))      $objet=$_POST['objet'];
    else $objet="";
    if(isset($_POST['message']))    $message=$_POST['message'];
    else $message="";
     
    // Test permettant de savoir si le fichier a bien été envoyé et s'il n'y a pas d'erreur
    if (isset($_FILES['file']) AND $_FILES['file']['error'] == 0)
    {
    $chemin='uploads/';
    move_uploaded_file($_FILES['file']['tmp_name'], $chemin.$_FILES['file']['name']);
    echo "L'envoi a bien &eacutet&eacute effectu&eacute !";
    }
     
    $lapiece_jointe=($chemin.$_FILES['file']['name']);
     
    if ($fichier_attache = fread(fopen($lapiece_jointe, "r"), filesize($lapiece_jointe)))
    {
    	echo "message ok ok";
    }
     
     
    $mail = new mime_mail();
    $mail->to = $mailadmin;
    $mail->subject = $objet;
    $mail->body = $message;
    $mail->from = $email;
    $mail->attach($fichier_attache, $file); 
     
    if($mail->send()) {
    	echo "ok";
    }
    else {
     
    	echo "no ok";
    }	
    ?>

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    deux remarques
    $file est utilisé souvent, alors qu'il est déclaré a aucun moment.
    ça ne te crée pas un message d'erreur

    autre point il te manque le type, et la c'est génant car c'est 3 ou quatre caractéres. .jpg .html ...
    de toute façon tu utilises 4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $typX=substr($_FILES['file']['name'],-4);
    et ensuite tu compres tout sur 4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if ($typX=="html") xxxx;
    if ($typX==".bmp") xxxx;
    tu vois c'est simple

Discussions similaires

  1. [MySQL] formulaire envoi de fichier
    Par Bruno93 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/09/2013, 15h02
  2. Réponses: 1
    Dernier message: 25/04/2012, 10h54
  3. Formulaires envoi de fichiers et infos
    Par ptinavir dans le forum Langage
    Réponses: 1
    Dernier message: 17/10/2010, 10h18
  4. envoie de fichiers via les formulaires
    Par fabogranqi dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 10/10/2004, 21h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo