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 :

Formulaire PHP et accès au fichier


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut Formulaire PHP et accès au fichier
    Bonjour,

    en m'aidant de diverses documentations, j'ai essayé de créer un formulaire de contact pour mon site. Cependant il y a une erreur qui se produit lors de l'envois du message. Cette erreur est la suivante :


    Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0

    Fatal error: Unknown: Failed opening required 'C:/wamp/www/SiteWeb/Météo-line2/CrystalX/envoi.php' (include_path='.;C:\php5\pear') in Unknown on line 0

    Voici mes codes :

    Code html contenus dans la page de mon site :


    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
     
    <p align="center"><strong>Contact</strong></p>
    <table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
    <form action="envoi.php" method="post" enctype="application/x-www-form-urlencoded" name="formulaire">
    <tr>
    <td colspan="3"><strong>Envoyer un message</strong></td>
    </tr>
    <tr>
    <td><div align="left">Votre nom :</div></td>
    <td colspan="2"><input type="text" name="nom" size="45" maxlength="100"></td>
    </tr>
    <tr>
    <td width="17%"><div align="left">Votre mail :</div></td>
    <td colspan="2"><input type="text" name="mail" size="45" maxlength="100"></td>
    </tr>
    <tr>
    <td><div align="left">Sujet : </div></td>
    <td colspan="2"><input type="text" name="objet" size="45" maxlength="120"></td>
    </tr>
    <tr>
    <td><div align="left">Message : </div></td>
    <td colspan="2"><textarea name="message" cols="50" rows="10"></textarea></td>
    </tr>
    <tr>
    <td></td>
    <td width="42%"><center>
    <input type="reset" name="Submit" value="Réinitialiser le formulaire">
    </center></td>
    <td width="41%"><center>
    <input type="submit" name="Submit" value="Envoyer">
    </center></td>
    </tr>
    </form>
    </table>
    Code contenus dans la page "envoi.php"

    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
     
    <?php 
    $nom=$HTTP_POST_VARS['nom']; 
    $mail=$HTTP_POST_VARS['mail']; 
    $objet=$HTTP_POST_VARS['objet']; 
    $message=$HTTP_POST_VARS['message']; 
     
    $headers = "MIME-Version: 1.0\r\n"; 
    $headers .= "Content-type: text/plain; charset=iso-8859-1\r\n"; 
    $headers .= "From: $nom <$mail>\r\nReply-to : $nom <$mail>\nX-Mailer:PHP"; 
     
    $subject="$objet"; 
    $destinataire="aaaa@aaaaaaa.com"; 
    $body="$message"; 
    if (mail($destinataire,$subject,$body,$headers)) { 
    echo "Votre mail a été envoyé<br>"; 
    } else { 
    echo "Une erreur s'est produite"; 
    } 
    ?></p>
    <p align="center">Vous allez bientôt être redirigé vers la page d'accueil<br>
    Si vous n'êtes pas redirigé au bout de 5 secondes cliquez <a href="http://www.meteo-line.com">ici 
    </a></p>
    Mon domaine existe bien, mon adresse mail également mais mon site n'est pas encore hébergez et je travaille encore sur wamp. Je dirais sans trop ne savoir que çà pourrait être lié mais si quelqu'un peut m'éclairer çà serait sympa ?

  2. #2
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Pour envoyer des mails, je te conseille d'utiliser PHPMAILER.

    Exemple de mail avec pièces jointes :
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    <?php
    Require_once('phpmailer/class.phpmailer.php');
    $maxfiles = 3;
    $maxsize = 2000000;
    $from_adr = 'expediteur@free.fr';
    $to_adr = 'destinataire@hotmail.com';
    $subject = 'Envoi de pièces jointes locales';
     
     
    //============================================================
    if(isset($_POST['valider'])){
     
      // Test du nombre de fichier //
      $nbr=0;
      for($x=0;$x<$maxfiles;$x++) 
        if(!empty($_FILES['userfile']['name'][$x])) $nbr++;
      if($nbr<=0) die("Aucun fichier spécifié !<br/>"); 
     
      // Création du mail //
      $mail = New PHPmailer();
      $mail->IsHTML(true);
      $mail->FromName='';
      $mail->From=$from_adr;
      $mail->AddAddress($to_adr);
      $mail->AddReplyTo($from_adr);	
      $mail->Subject=$subject;
      $mail->Body='<html><body>Les fichiers sont attachés ci-dessus... <br></body></html>';
      $sendok=false;
     
      // Téléchargement des fichiers //
      for($x=1;$x<=$maxfiles;$x++) {
        $errorhttp=$_FILES['userfile']['error'][$x-1];
        $filenamehttp=$_FILES['userfile']['name'][$x-1]; 
        $typehttp=$_FILES['userfile']['type'][$x-1]; 
        $sizehttp=$_FILES['userfile']['size'][$x-1]; 
        $tmpfilehttp=$_FILES['userfile']['tmp_name'][$x-1];
        if (($errorhttp)and(!empty($filenamehttp))) { 
          switch ($errorhttp){ 
            case 1: echo "Erreur : Le fichier n°$x est trop grand !<br/>";break; 
            case 2: echo "Erreur : Le fichier n°$x est trop grand !<br/>";break; 
            case 3: echo "Erreur : Transfert du fichier n°$x interrompu !<br/>";break; 
            case 4: echo "Erreur : Le fichier n°$x est vide !<br/>";break; 
          } 
        } else { 
          if((!empty($filenamehttp))and($sizehttp>0)) {
            if($sizehttp<=$maxsize){
              if(@is_uploaded_file($tmpfilehttp)) { 
                 if(@eregi('.php',$filenamehttp)) $filenamehttp.='.txt'; 
                 if(filesize($tmpfilehttp)==$sizehttp) {
                   echo "Fichier n°$x uploadé : ".$filenamehttp.
                        " (".round(max($sizehttp,1024)/1024)." ko)<br/>";
                   $mail->AddAttachment($tmpfilehttp,$filenamehttp,'Base64');
                   $sendok=true;
                 } else echo "Erreur de téléchargement du fichier n°$x !<br/>";
              } else echo "Erreur de téléchargement du fichier n°$x !<br/>"; 
            } else echo "Erreur : Le fichier n°$x est trop grand !<br/>"; 
          } // else echo "Le fichier n°$x est introuvable ou vide !<br/>";
        }
      }
     
      // Envoi du mail //
      if($sendok){ 
        if(!$mail->Send()) echo $mail->ErrorInfo."<br/>"; 
        else echo "Mail envoyé à «".$to_adr."»<br/>";
      } else echo "Aucun fichier à attacher !<br/>";
     
      // Libération de l'objet //
    	$mail->SmtpClose();
    	unset($mail);
      die ("Opération terminée.<br/>");
    }
     
    //============================================================
    echo '<form method="post" enctype="multipart/form-data"'.
         ' onSubmit="document.getElementById(\'valider\').style.visibility=\'hidden\';">'. 
         '<input type="hidden" name="MAX_FILE_SIZE" value="'.$maxsize.'"/>';
    for($x=1;$x<=max($maxfiles,1);$x++)
      echo ' Fichier n°'.$x.' : <input type="file" name="userfile[]" size="20"/><br/>';
    echo '<br/><input type="submit" name="valider" id="valider" value="Envoyer..."/></form>';
     
     
    //============================================================
    ?>

  3. #3
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Je te remercie pour ta réponse Sub mais à vrai dire ce formulaire n'a pas pour but de mettre des pièces jointes. Je voudrais juste que la personne connectée sur mon site puisse tout simplement envoyer un message qui retomberait sur ma boite mail..

    Sinon j'ai hébergé mon site et voilà ce que me dit l'erreur :

    Method Not Allowed
    The requested method POST is not allowed for the URL /envoi.php.

    Ca veut dire quoi ? Que ma méthode Post n'est pas permises pour cet url ? Je ne comprend pas tout

  4. #4
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    on utilise $_POST et pas $HTTP_POST_VARS...
    A+


    [EDIT] Méfie-toi que des petits malins s'amusent à t'envoyer d'innombrables mails avec ce genre de formulaire en ligne...

  5. #5
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    J'ai essayer de remplacer $_HTTP_POST_VARS par $_POST mais j'ai toujours la même erreur...

    Personne ne voit autre chose ?

  6. #6
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    La solution ne pourrait pas être en relation avec le fichier php.ini ?

    J'ai vu cela dans quelques conversations mais je ne sais ni comment m'y prendre, ni ce qu'est ce fichier...

  7. #7
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Je crois que tu fais fausse route.
    En fait, un formulaire se présente en général sous cette forme :
    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
    <?php
     
    //==============================================================
    // Traitement du formulaire -> Récupère les données postées
    //==============================================================
    if(isset($_POST['valider'])){
      $adr_to   = @$_POST['adr_to'];
      $adr_from = @$_POST['adr_from'];
      $sujet    = @$_POST['sujet'];
      $message  = @$_POST['message'];
     
      // le reste de ton traitement ici...
    }
     
    //==============================================================
    // Code HTML du formulaire
    //==============================================================
    echo '
      <form method="post">
        <input type="text" name="adr_to" value="Adresse destinataire"/><br/>
        <input type="text" name="adr_from" value="Adresse expéditeur"/><br/>
        <input type="text" name="sujet" value="Sujet du mail"/><br/>
        <textarea name="message" cols="25" rows="5">Votre message ici</textarea><br/>
        <input type="submit" name="valider" value=" ENVOYER "/>
      </form>
    ';
     
    ?>

  8. #8
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Je viens d'essayer la façon que vous me proposiez et ça ne marche toujours pas... J'ai essayé de reprendre tout à zéro une nouvelle fois en suivant un tutoriel et j'ai toujours cette même erreur :

    Warning
    : Unknown: failed to open stream: No such file or directory in Unknown on line 0

    Fatal error
    : Unknown: Failed opening required 'C:/wamp/www/SiteWeb/Météo-line2/CrystalX/envoi.php' (include_path='.;C:\php5\pear') in Unknown on line 0

    Comme je vous disais dans mon précédent post, j'ai trouvé quelques sujet de discutions en rapport avec cet même erreur. J'ai crut comprendre que cela aurait un possible rapport avec un fichier php.ini mais je n'en sais malheureusement pas plus...Si ça parle à quelqu'un ?

    Néanmoins merci pour votre aide et votre patience !

  9. #9
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Zut, j'avais pas fait attention tellement c'est basique, le chemin est invalide :
    C:/wamp/www/SiteWeb/Météo-line2/CrystalX/envoi.php

    Les caractères spéciaux, comme les caractères accentués sont interdits pour les chemins et noms de fichiers pour le web !

    http://www.developpez.net/forums/d55...res-autorises/

  10. #10
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Ok et merci c'est corrigé et cela fonctionne bien lorsque je test à partir de wamp. Mais en allant essayant d'envoyer ce mail à partir du site qui est en ligne voici l'erreur qui m'est renvoyé :

    Method Not Allowed
    The requested method POST is not allowed for the URL /envoi.php.

    Vous pouvez consulter cette page pour vous en rendre compte : http://www.meteo-line.com/contact.html

  11. #11
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Dans ta balise FORM, la propriété enctype="application/x-www-form-urlencoded" est inappropriée.

    Regarde le code que je t'ai donné précédemment.

  12. #12
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Voilà ce que ça donne...

    Method Not Allowed
    The requested method POST is not allowed for the URL /contact.html

    Edit : Si ca peut aider, je suis hébergez chez OVH

    Edit 2 : Effectivement ça aide même beaucoup ! OVh ne permet pas de mettre de formulaire de contact pour les comptes mutualisés 20Gp, dommage j'aurais dût y préter plus attention au moment de l'achat.

    Désole pour la perte de temps. A bientôt !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Upload] formulaire php avec upload de fichier
    Par achos dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2007, 14h14
  2. généré un fichier excel depuis un formulaire php
    Par wadoux dans le forum Dreamweaver
    Réponses: 2
    Dernier message: 08/03/2007, 17h12
  3. sécuriser l'accès à un fichier flash (par php)
    Par melonmaudic dans le forum Flash
    Réponses: 1
    Dernier message: 29/11/2006, 13h51
  4. generer un fichier txt a partir d'un formulaire php
    Par ouabi dans le forum Langage
    Réponses: 2
    Dernier message: 13/02/2006, 19h15
  5. Formulaire PHP+ envoi de fichier joint
    Par GraphicProvider dans le forum Langage
    Réponses: 2
    Dernier message: 29/10/2005, 18h12

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