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

PHP & Base de données Discussion :

Cherche exemple de code pour gestion de pages HTML [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 339
    Points : 216
    Points
    216
    Par défaut Cherche exemple de code pour gestion de pages HTML
    Bonjour à tous,

    Je cherche des exemples de code pour créer de façon dynamique une page HTML.

    En deux mots, j'ai un formulaire sur un serveur WEB qui permet de saisir les données d'un visiteur, ensuite je les enregistre dans une base MySQL, et ensuite je construis une page HTML avec les données en question et je la publie sur le serveur, une page par utilisateur (avec son nom, sa photo, etc etc)

    La fonction recherche renvoie des centaines de réponses, la plupart fournissant uniquement des info sur telle ou telle fonction (comme fopen). Ne connaissant pas du tout php, j'ai suivi le tuto de l'amie Sylvie Vauthier, mais cet aspect n'y figure pas.

    Merci de me donner quelques pointeurs vers des exemples de code svp

    Le pseudocode est le suivant :

    entrez votre prénom, nom, adresse
    téléchargez une photo de vous
    cliquez là
    (mise à jour de la base)
    (génération de la page HTML)
    (page HTML) :
    Bonjour Monsieur/Madame prénom nom
    Vous habitez à adresse
    et voici une photo de vous
    +----+
    | o o |
    | / |
    | \_/ |
    +----+


    Merci merci !

    Didier
    à la retraite, occupé à apprendre Blender pour pondre des bagnôles pour FS22 (voir Papocle.fr)

  2. #2
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 373
    Points
    19 373
    Par défaut
    Bonjour,

    J'ai du mal à saisir où se situe ton problème.
    Tu n'arrives pas ( je reprends ton pseudocode ) à afficher la page html correspondant à l'utilisateur qui vient de saisir ses données c'est bien ça ?
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  3. #3
    Membre actif
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 339
    Points : 216
    Points
    216
    Par défaut
    En fait, je ne connais pas le code, donc je cherche des exemples pour compléter les TP réalisés avec le premier cours que j'ai suivi.

    Je suis en train de bosser le cours sur les formulaires de Guillaume, je pense que je vais trouver là.

    Merci.

    D.
    à la retraite, occupé à apprendre Blender pour pondre des bagnôles pour FS22 (voir Papocle.fr)

  4. #4
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 373
    Points
    19 373
    Par défaut
    Tu ne connais pas le code ?

    Mais tu en es où alors ? Moi j'avais compris que tu avais déjà le formulaire d'inscription, les insert en base.
    Ce n'est pas le cas ?
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    En deux mots, j'ai un formulaire sur un serveur WEB qui permet de saisir les données d'un visiteur, ensuite je les enregistre dans une base MySQL, et ensuite je construis une page HTML avec les données en question et je la publie sur le serveur, une page par utilisateur (avec son nom, sa photo, etc etc)
    Ce que tu décris ici c'est le principe d'un site "statique", c'est à dire qu'il va avoir autant de pages (statiques) que d'utilisateurs.

    Pourquoi créer ces pages HTML (statiques) pour chaque utilisateur ?
    Un site dynamique c'est théoriquement fait pour éviter de créer ces pages HTML, mais de créer 1 seule page en Php qui elle prévoit de récupérer les informations de l'utilisateur selon un paramètre (identifiant de l'utilisateur) pour afficher (générer) le code HTML contenant les infos de cet utilisateur.
    Donc 1 seule page Php quelque soit le nombre d'utilisateurs.

    Je ne comprends pas trop le but de tout cela ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  6. #6
    Membre actif
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 339
    Points : 216
    Points
    216
    Par défaut
    Re FirePrawn :

    Je ne veux pas trop te faire perdre ton temps...
    je ne connais que Fortran, Basic, VBscript, le HTML et le DCL de VMS
    En ce moment, j'écris des petits bouts de programme en php à partir des tutos trouvés ici et je les teste avec Wamp sur mon pécé. Un bout pour saisir les données (c'est fait), un autre pour écrire dans ma base MySQL (c'est fait) et un 3e pour lire mes données de la base (c'est fait).
    Maintenant, j'ai besoin d'un bout de code pour créer ma page toto.html avec les données dedans.

    en pseudocode ce sera

    créer fichier
    ouvrir fichier en écriture (je suppose que c'est la même chose s'il n'existe pas)
    écrire mon code HTML
    fermer mon fichier
    revenir sur la page d'accueil
    afficher le lien vers la page HTML générée, pour que le gugus voit ce qu'il a pondu

    Mieux ?

    Re RunCodePhp :

    l'idée est de faire indexer ces pages par Google pour que l'on trouve la page de chaque gugus à partir de certains critères. Le projet étant un poil confidentiel, ce m'est difficile d'être plus précis sur ces critères, j'espère que l'on me pardonnera. Pour détailler un tout petit peu, toutes proportions gardées, est-ce que Facebouque génère ses pages de façon dynamique ou est-ce qu'il y en a une par personne ?
    à la retraite, occupé à apprendre Blender pour pondre des bagnôles pour FS22 (voir Papocle.fr)

  7. #7
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 373
    Points
    19 373
    Par défaut
    Je comprends toujours pas ton histoire de fichier

    Pour moi ce que tu veux faire est le plus basique des cas nominaux de CRUD

    Comme l'a dit Run, pour restituer tes données, tu n'as besoin que d'une seule page, imaginons infos.php.
    Et dans cette page, tu récupères les informations de ta table utilisateur, puis tu appliques des conditions pour afficher uniquement celles qui t'intéressent.

    Si en plus, tu veux pouvoir afficher les informations de l'utilisateur actuellement connecté sur ton site, et bien tu récupères l'id de cet utilisateur après l'insert en base, tu le stockes dans une variable de session, et tu poses ta condition sur cet id.
    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Je ne réponds pas aux questions techniques en MP.

  8. #8
    Membre actif
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 339
    Points : 216
    Points
    216
    Par défaut
    Google ne sait pas indexer une page dynamique, vu que celle-ci ne s'affiche dans le butineur que quand elle est demandée (c'est pourquoi les pages de FB ne sont pas indexables, elles n'ont pas d'existence propre)

    Or, dans le projet en question, il faut que l'on puisse trouver la page du gugus à partir d'une recherche sur Google, donc il me semble qu'il en faut une par personne. Mais je peux me tromper.

    CRUD, non. Je lis les données du formulaire, je les écris dans ma BD et je publie une page achtemele les contenant. Pas de mise à jour de la base prévue.

    EDIT
    Je pense que j'ai trouvé :

    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
     
    <?php
    $outputFile = $firstName . '_' . $lastname . '.htm';
    $outputFile = 'ftp://ftp.example.com/incoming/' . $outputFile;
    $file = fopen ($outputFile, "w");
    if (!$file) {
        echo "<p>Unable to open remote file for writing.\n";
        exit;
    }
    fwrite ($file, 'Votre prénom : ' . $firstName . "\n");
    fwrite ($file, 'Votre nom    : ' . $lastName . "\n");
    fwrite ($file, 'Votre photo' . "\n");
    fwrite ($file, '<img src="mypath/myfile.jpg">' . "\n");
    ../..
    fclose ($file);
    ?>
    à la retraite, occupé à apprendre Blender pour pondre des bagnôles pour FS22 (voir Papocle.fr)

  9. #9
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Google ne sait pas indexer une page dynamique, vu que celle-ci ne s'affiche dans le butineur que quand elle est demandée (c'est pourquoi les pages de FB ne sont pas indexables, elles n'ont pas d'existence propre)
    Non, ce n'est une question qu'une page soit demandée ou pas, ce qui empêche un moteur de recherche d'indexer un contenu, c'est le fait que le contenu demande une identification.
    C'est le cas pour FB.

    Tout contenu publique peut être indexé.
    Ou alors c'est que le site a été mal fait, mal conçu.

    Or, dans le projet en question, il faut que l'on puisse trouver la page du gugus à partir d'une recherche sur Google, donc il me semble qu'il en faut une par personne. Mais je peux me tromper.
    Tu te trompes malheureusement.
    Si on prend ce forum (cette plate forme de nombreux forums, faqs, tutos, etc ...), à mon humble avis il n'existe pas l'ombre d'une page HTML, tout est justement "dynamique", elle sont construites "à la volée".

    Tous les forums, blogs, et compagnies sont des site dynamiques sinon c'est mission impossible de les créer.
    Ce que n'apprécie pas beaucoup les moteurs, ce sont les URLs du type : ...article.php?id_article=20

    Pour ce faire, pour améliorer le référencement, on met en place de la réécriture, c'est à dire qu'au départ et pour ce même exemple on créra une URL du genre :
    -http://www.domaine.com/article/20
    On peu aussi faire comme cela :
    -http://www.domaine.com/article/20.html

    Une fois que le serveur reçoit cette URL, un mécanisme (en autre dans le .htaccess) transformera cette URL de cette manière :
    -http://www.domaine.com/article.php?id_article=20
    Et le tour est joué.
    Et surtout, cette page "20.html" n'existe pas, de même qu'il n'existe pas non plus de répertoire "articles", du moins pas forcément.

    En somme, avec de la réécriture on donne l'illusion que le site serait construit de tel ou tel manière, que des pages HTML existent, alors qu'il en est rien.


    Consultes le forum Apache (si c'est bien Apache de ton coté), car c'est un mécanisme qui vient à l'origine du serveur Web, il est souvent question de réécriture.
    Il y a pleins de différentes manières de mettre ça en place.


    Bref, il n'y a pas lieu de créer autant de page qu'il y a d'utilisateurs.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  10. #10
    Membre actif
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 339
    Points : 216
    Points
    216
    Par défaut
    Je vois.
    Merci.

    Cela dit, je souhaite poursuivre mon apprentissage, donc j'ai écrit ça :

    saisie.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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    <html>
    <head>
    <title>Ma page d'accueil</title>
    </head>
    <body>
    <h1>Bienvenue sur mon site</h1>
    <h2>Commencez-donc par vous inscrire :</h2>
    <form name="inscription" method="post" action="saisie.php">
       Entrez votre prénom : <input type="text" name="fName"/> <br/>
       Entrez votre nom : <input type="text" name="lName"/><br/>
       Téléchargez une photo de vous : <input type="file" name="photo" /><br />
       <input type="submit" name="valider" value="OK"/>
    </form>
    <?php
       if(isset($_POST['valider']))
          {
          $fName=$_POST['fName'];
          $lName=$_POST['lName'];
          $photo=$_POST['photo'];
          echo 'Bonjour ' . $fName . ' ' . $lName.'<br/>';
          }
    ?>
    <?php
    $outputFile = $fName . '_' . $lName . '.htm';
    $outputFile = 'localhost://incoming/' . $outputFile;
    $file = fopen ($outputFile, "w");
    if (!$file)
       {
       echo "<p>Unable to open remote file for writing.\n";
       exit;
       }
    fwrite ($file, 'Votre prénom : ' . $fName . "\n");
    fwrite ($file, 'Votre nom    : ' . $lName . "\n");
    fwrite ($file, 'Votre photo' . "\n");
    fwrite ($file, '<img src="' . $photo . '">' . "\n");
    fclose ($file);
    ?>
    </body>
    </html>
    et en local (avec localhost ou 127.0.0.1 j'ai la même chose), j'obtiens :

    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
     
    Bonjour Jean Dupont
     
    ( ! ) Warning: fopen() [function.fopen]: Unable to find the wrapper "localhost" - 
    did you forget to enable it when you configured PHP? 
    in C:\wamp\www\PHP\saisie.php on line 23
    Call Stack
    #	Time	Memory	Function	Location
    1	0.0004	373592	{main}( )	..\saisie.php:0
    2	0.0004	373976	fopen ( )	..\saisie.php:23
     
    ( ! ) Warning: fopen(localhost://incoming/Jean_Dupont.htm) [function.fopen]: 
    failed to open stream: 
    Invalid argument in C:\wamp\www\PHP\saisie.php on line 23
    Call Stack
    #	Time	Memory	Function	Location
    1	0.0004	373592	{main}( )	..\saisie.php:0
    2	0.0004	373976	fopen ( )	..\saisie.php:23
     
    Unable to open remote file for writing.
    Un ptit coup de pouce svp ?
    Merci.

    Jean Dupont
    à la retraite, occupé à apprendre Blender pour pondre des bagnôles pour FS22 (voir Papocle.fr)

  11. #11
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $outputFile = 'localhost://incoming/' . $outputFile;
    Tu utilises une URL pour atteindre/créer le fichier.

    Utilise un chemin "physique", c'est à dire un chemin physique absolu :
    C:/wamp/www/le/repertoire/du/fichier.html
    Ou /home/domaine/www/le/repertoire/du/fichier.html
    (tout dépend du système, tec...)

    Ou alors un chemin relatif :
    le/repertoire/du/fichier.html
    Ou le/repertoire/du/fichier.html
    (ça dépend du sytème, mais aussi où dans l'arborescence du site est exécuté le script.


    Si tu ne sais pas trop comment utiliser un chemin relatif, le plus simple c'est d'utiliser un chemin absolu (théoriquement tu dois le connaitre).



    Au passage, tu commets une erreur dans le déroulement des opérations, du code Php par rapport au code HTML.
    Pratiquement tout ceux qui débute font cette erreur.

    Il est à mon sens essentiel de comprendre que le déroulement du code Php est radicalement différent de celui du HTML, pour la simple raison que le Php est interprété par le serveur (donc en 1er), alors que le code HTML lui sera interprété par le navigateur après que le serveur aura renvoyé le contenu HTML.

    Ton code serait mieux comme ceci :
    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
    <?php
    // Partie traitement
     
    $bonjour = '';
     
    if (isset($_POST['valider']))
    {
        $fName=$_POST['fName'];
        $lName=$_POST['lName'];
        $photo=$_POST['photo'];
        $bonjour = 'Bonjour ' . $fName . ' ' . $lName.'<br/>';
     
     
        $outputFile = $fName . '_' . $lName . '.htm';
        // Un chemin physique devrait être utilisé au lieu d'une URL
        // C:/wamp/www/...etc...
        $outputFile = 'localhost://incoming/' . $outputFile;
        $file = fopen ($outputFile, "w");
        if (!$file)
        {
           echo "<p>Unable to open remote file for writing.\n";
           exit;
        }
        fwrite ($file, 'Votre prénom : ' . $fName . "\n");
        fwrite ($file, 'Votre nom    : ' . $lName . "\n");
        fwrite ($file, 'Votre photo' . "\n");
        fwrite ($file, '<img src="' . $photo . '">' . "\n");
        fclose ($file);
    }
     
    // Partie Interface / Html
    ?>
    <html>
    <head>
    <title>Ma page d'accueil</title>
    </head>
    <body>
    <h1>Bienvenue sur mon site</h1>
    <h2>Commencez-donc par vous inscrire :</h2>
    <form name="inscription" method="post" action="saisie.php">
       Entrez votre prénom : <input type="text" name="fName"/> <br/>
       Entrez votre nom : <input type="text" name="lName"/><br/>
       Téléchargez une photo de vous : <input type="file" name="photo" /><br />
       <input type="submit" name="valider" value="OK"/>
    </form>
     
    <?php
    echo $bonjour;
    ?>
     
    </body>
    </html>
    En somme de procéder de manière inverse :
    - De faire en 1er les traitements Php si c'est le cas (lorsque le formulaire est validé)
    - De générer en dernier le code HTML, la partie interface.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  12. #12
    Membre actif
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 339
    Points : 216
    Points
    216
    Par défaut
    Bon, nous progressons :

    Source :
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    <?php
    // Création d'une page HTML avec inclusion d'une photo téléchargée depuis un PC
    // v1.0-0 15-mar-2012 Jean Dupont
    // remerciements à RunCodePhp et FirePrawn... :-)
     
    // Partie traitement
     
    $bonjour = '';
    $fName='';
    $lName='';
    $photo='';
     
    if (isset($_POST['valider']))
    {
        $fName=$_POST['fName'];
        $lName=$_POST['lName'];
        $photo=$_FILES['photo']['name'];
        $bonjour = 'Bonjour ' . $fName . ' ' . $lName.'<br/>';
     
     
        $outputFile = $fName . '_' . $lName . '.htm';
    //    $outputFile = '/incoming/' . $outputFile;
        $file = fopen ($outputFile, "w");
        if (!$file)
        {
           echo "<p>Unable to open remote file for writing.\n";
           exit;
        }
        fwrite ($file, 'Votre prénom : ' . $fName . "\n");
        fwrite ($file, 'Votre nom    : ' . $lName . "\n");
        fwrite ($file, 'Votre photo' . "\n");
        fwrite ($file, '<img src="' . $photo . '">' . "\n");
        fclose ($file);
    	$msg = 'Création de la page ' . $outputFile . ' réussie';
        echo $msg;
    }
     
    // Partie Interface / Html
    ?>
    <html>
    <head>
    <title>Ma page d'accueil</title>
    </head>
    <body>
    <h1>Bienvenue sur mon site</h1>
    <h2>Commencez-donc par vous inscrire :</h2>
    <form name="inscription" method="post" action="saisie.php" enctype="multipart/form-data">
       Entrez votre prénom : <input type="text" name="fName"/> <br/>
       Entrez votre nom : <input type="text" name="lName"/><br/>
       Téléchargez une photo de vous : <br />
        <input type="hidden" name="MAX_FILE_SIZE" value="2097152">    
        <input type="file" name="photo">
        <p>	
        <input type="submit" name="valider" value="OK">   
    </form>
     
    // debug
    <pre>
    <?php
      print_r($_FILES);
    ?>
    </pre>
     
    <?php          
    if ($_FILES['photo']['error']) {    
              switch ($_FILES['photo']['error']){    
                       case 1: // UPLOAD_ERR_INI_SIZE    
                       echo "Le fichier dépasse la limite autorisée par le serveur (fichier php.ini) !";    
                       break;    
                       case 2: // UPLOAD_ERR_FORM_SIZE    
                       echo "Le fichier dépasse la limite autorisée dans le formulaire HTML !";
                       break;    
                       case 3: // UPLOAD_ERR_PARTIAL    
                       echo "L'envoi du fichier a été interrompu pendant le transfert !";    
                       break;    
                       case 4: // UPLOAD_ERR_NO_FILE    
                       echo "Le fichier que vous avez envoyé a une taille nulle !";
                       break;    
              }    
    }    
    else {    
     // $_FILES['photo']['error'] vaut 0 soit UPLOAD_ERR_OK    
     // ce qui signifie qu'il n'y a eu aucune erreur
    	$msg = 'Transfert de ' . $photo . ' réussi <br>';
        echo $msg;
    }    
    ?>
     
    <?php    
    if ((isset($_FILES['photo']['fichier'])&&($_FILES['photo']['error'] == UPLOAD_ERR_OK))) {    
    $chemin_destination = '/incoming/';    
    move_uploaded_file($_FILES['photo']['tmp_name'], $chemin_destination.$_FILES['photo']['name']);    
    }    
    ?>
     
    <?php
    echo $bonjour;
    echo 'Cliquez ici pour voir votre page';
    // code à ajouter, on verra plus tard, sérions les problèmes...
    ?>
     
    </body>
    </html>
    Résultat après validation 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
     
    Création de la page Jean_Dupont.htm réussie
    Bienvenue sur mon site
    Commencez-donc par vous inscrire :
    Entrez votre prénom :
    Entrez votre nom :
    Téléchargez une photo de vous :
     
    Array
    (
        [photo] => Array
            (
                [name] => didier_bien.jpg
                [type] => image/jpeg
                [tmp_name] => C:\wamp\tmp\php42.tmp
                [error] => 0
                [size] => 12031
            )
     
    )
     
    Transfert de didier_bien.jpg réussi
    Bonjour Jean Dupont
    Cliquez ici pour voir votre page
    Trois questions si je puis me permettre :

    a) au premier lancement du programme, php se plaint de ne pas connaître l'index "photo"

    b) la photo n'est pas téléchargée (ni dans tmp, ni dans le rép par défaut)

    c) la spécification du répertoire d'upload, "incoming", quand décommenté, ne fonctionne pas pour la création de la page web.

    Merci bcp.

    EDIT
    Je pense à un truc, y'a une erreur d'architecture, là. Y faut pas que la proc soit réentrante, il faut que j'appelle une autre proc quand le gugus valide, non ?
    à la retraite, occupé à apprendre Blender pour pondre des bagnôles pour FS22 (voir Papocle.fr)

  13. #13
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    a) au premier lancement du programme, php se plaint de ne pas connaître l'index "photo"
    Tu as mis une alternative : SI "validé"
    Et aussi : SI "photo" "error".
    Ca explique pourquoi.


    b) la photo n'est pas téléchargée (ni dans tmp, ni dans le rép par défaut)
    Dans tmp si, c'est ça : [tmp_name] => C:\wamp\tmp\php42.tmp
    Par contre, si la photo n'est pas déposée dans le répertoire que tu indique, c'est que le chemin n'est pas correcte.
    Ce chemin là que tu indiques : /incoming/ n'est pas un chemin relatif, c'est un chemin absolu (raccourci).
    Il n'est surement pas correcte.
    Le fait de mettre un slash au début indique au serveur de rechercher le répertoire "incoming" depuis la racine du disque, c'est à dire à partir de C:/.
    Il y a de forte chance que ce ne soit pas comme : C:/incoming

    Indique un chemin physique en 1er pour au moins avoir quelque chose de fonctionnel, genre :
    C:/wamp/www/projet/incoming/ (tu dois le connaitre)

    Ou alors essai un chemin relatif comme : incoming/ (sans la slash de début).



    Au passage (toujours), tu continus à faire des traitements en plein milieu d'une partie HTML/Interface, comme l'upload.
    L'upload doit être effectué lorsque l'utilisateur à validé le formulaire, dont tout ça doit se dérouler à l'intérieur de cette alternative : SI "validé".
    C'est à dire :
    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
    <?php
    $bonjour = '';
    $fName='';
    $lName='';
    $photo='';
     
    if (isset($_POST['valider']))
    {
        if (isset($_FILES['photo']) && $_FILES['photo']['error'] == UPLOAD_ERR_OK) {
            // Un chemin relatif :
            $chemin_destination = 'incoming/';
            move_uploaded_file($_FILES['photo']['tmp_name'], $chemin_destination.$_FILES['photo']['name']);
        }
    }
     
    // Partie Interface / Html
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  14. #14
    Membre actif
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 339
    Points : 216
    Points
    216
    Par défaut
    je vois mieux, merci.

    Donc ma logique devient :

    formulaire.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    saisie des données
    sélection du fichier à uploader
    valider le formulaire ==> post = envoi_photo.php
    envoi_photo.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    upload du fichier
    contrôles
    déplacement du fichier dans incoming/
    construction de la page html
    affichage du texte résultat, avec le lien vers la page du gugus
    Mieux ?

    EDIT
    Oui, ça à l'air mieux :

    envoi_photo.htm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <html>
    <head>
    </head>
    <body>
    <form action="envoi_photo.php" method="post" enctype="multipart/form-data">
        Entrez votre prénom : <input type="text" name="fName"/> <br/>
        Entrez votre nom : <input type="text" name="lName"/><br/>
        Sélectionnez une photo de vous :<br />
        <input type="file" name="monfichier" /><br />
        <input type="submit" value="Validez" />
    </form>
    </body>
    </html>
    envoi_photo.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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    <?php
    // Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
    if (isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0)
    {
            // Testons si le fichier n'est pas trop gros
            if ($_FILES['monfichier']['size'] <= 1000000)
            {
                    // Testons si l'extension est autorisée
                    $infosfichier = pathinfo($_FILES['monfichier']['name']);
                    $extension_upload = $infosfichier['extension'];
                    $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
                    if (in_array($extension_upload, $extensions_autorisees))
                    {
                            // On peut valider le fichier et le stocker définitivement
                            move_uploaded_file($_FILES['monfichier']['tmp_name'], 'incoming/' . basename($_FILES['monfichier']['name']));
                            echo "L'envoi a bien été effectué !";
                    }
            }
    }
        $fName=$_POST['fName'];
        $lName=$_POST['lName'];
        $photo=$_FILES['monfichier']['name'];
        $outputFile = $fName . '_' . $lName . '.htm';
        $outputFile = 'incoming/' . $outputFile;
        $file = fopen ($outputFile, "w");
        if (!$file)
        {
           echo "<p>Unable to open remote file for writing.\n";
           exit;
        }
        fwrite ($file, 'Votre prénom : ' . $fName . '<br>');
        fwrite ($file, 'Votre nom    : ' . $lName . '<br>');
        fwrite ($file, 'Votre photo' . "\n");
        fwrite ($file, '<img src="' . $photo . '">' . "\n");
        fclose ($file);
    	$msg = '<p>Création de la page <a href="' . $outputFile . '">' . $outputFile . '</a> réussie';
        echo $msg;
    ?>
    et "ça a marché"
    je laisse comme ça ou tu as d'autres suggestions ?

    Merci bcp !
    à la retraite, occupé à apprendre Blender pour pondre des bagnôles pour FS22 (voir Papocle.fr)

  15. #15
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (pourquoi y me met du rouge dans mon code achtemele ???) 8O
    La coloration syntaxique du forum bug quelque peu
    C'est l’apostrophe qui lui fait perdre les pédales (Formulaire d'envoi de fichier).

    Que les choses soient clairs, mets remarques sur la manière de structurer le code (traitements/interfaces) sont juste des suggestions, histoire d'avoir un minimum de structure justement.
    C'est en rien une obligation, ni même "l'art et la manière" de faire.

    Ce qui me semble certain, c'est que le code Php à sont propre déroulement et le HTML le sien.
    Le fait de les séparer au mieux te permettras d'avoir plus de souplesses, cela à plein de niveau.
    Peut être n'est-ce pas flagrant de ton coté actuellement, mais au fil du temps tu devrais mieux l'apercevoir.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  16. #16
    Membre actif
    Homme Profil pro
    Programmeur fou
    Inscrit en
    Octobre 2010
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Programmeur fou

    Informations forums :
    Inscription : Octobre 2010
    Messages : 339
    Points : 216
    Points
    216
    Par défaut
    Ouais, bien compris.
    Bon, maintenant que j'ai joué dans la cour du primaire, je vais dans celle des grands (sur le serveur), et c'est visiblement une autre paire de manches :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Warning: move_uploaded_file(incoming/didier_kaki.jpg) [function.move-uploaded-file]: 
    failed to open stream: 
    Permission denied in /home/www/4adcb8f13ac51c9cd14d0235285d4606/web/php/envoi_photo.php on line 15
     
    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpJ0zsnn' to 
    'incoming/didier_kaki.jpg' in /home/www/4adcb8f13ac51c9cd14d0235285d4606/web/php/envoi_photo.php on line 15
    L'envoi a bien été effectué !
    Warning: fopen(incoming/Didier_Morandi.htm) [function.fopen]: failed to open stream: 
    Permission denied in /home/www/4adcb8f13ac51c9cd14d0235285d4606/web/php/envoi_photo.php on line 25
     
    Unable to open remote file for writing.
    MAIS là je vais chercher tout seul. Merci encore.

    A+

    D.

    EDIT
    en mettant incoming/ en 777 ca marche, mais ça m'ennuie. Donc maintenant, chapitre suivant, la sécurisation de sites Apache !
    à la retraite, occupé à apprendre Blender pour pondre des bagnôles pour FS22 (voir Papocle.fr)

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

Discussions similaires

  1. [AC-2003] exemple de code pour gestion d'articles
    Par akhiba dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/06/2011, 19h59
  2. Exemple de code pour appeler un Web Service
    Par ericw78 dans le forum Wildfly/JBoss
    Réponses: 6
    Dernier message: 21/05/2008, 19h58
  3. Code pour préchargement de page
    Par xs-boy dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/08/2007, 00h26
  4. Réponses: 1
    Dernier message: 30/08/2006, 18h26
  5. code pour gestion d'une bibliotheque
    Par le_gueux90 dans le forum C
    Réponses: 9
    Dernier message: 30/11/2005, 16h32

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