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 :

PHP dans une base MySQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut PHP dans une base MySQL
    Bonjour,

    je viens de me mettre au MySQL !
    C'est génial, j'ai pu faire un mini-site web qui fonctionne,
    avec le contenu des pages web stocké dans une table de la base de donnée.

    Mais... j'ai un formulaire avec du PHP pour l'envoi d'e-mail.
    Quand j'écris le PHP dans la table, ça ne fonctionne pas...
    Le PHP est affiché sur la page web, il n'est pas interpreté.

    J'ai entendu qu'il ne faut pas écrire de PHP dans la base de donnée.

    Comment faire donc, pour faire ce formulaire ?
    Je n'arrive pas séparer le contenu et la partie PHP, comme ici par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <input type="text" name="email" id="email" value="
    <?php
        if (!empty($_POST["email"])) {
            echo htmlspecialchars($_POST["email"],ENT_QUOTES);
        }
    ?>
    "/>
    Merci de m'aider

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Ouh là !
    Citation Envoyé par Pample Voir le message
    avec le contenu des pages web stocké dans une table de la base de donnée.
    Tu peux nous expliquer plus concrètement ce que tu as fait parce que j'ai du mal à comprendre !
    Une base de données stocke des données ! Pas des pages web ! A la rigueur des url vers des pages web.

    Mais... j'ai un formulaire avec du PHP pour l'envoi d'e-mail.
    Quand j'écris le PHP dans la table, ça ne fonctionne pas...
    Le PHP est affiché sur la page web, il n'est pas interpreté.
    C'est normal, le php doit être écrit dans un fichier au suffixe .php (généralement) qui va être interprété par le serveur web afin de générer du code HTML lisible par le navigateur web du client.


    J'ai entendu qu'il ne faut pas écrire de PHP dans la base de donnée.
    Alors pourquoi l'as-tu fait ?

    Comment faire donc, pour faire ce formulaire ?
    Jette un coup d'oeil du côté des tutoriels PHP/MySQL. Il y en a sur developpez.com et une multitude d'autres sur le web. Il y a des bouquions aussi à profusion. Tu trouveras des critiques de certains livres sur developpez.com.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut explications
    Merci CinePhine pour ta réponse !

    Voilà quelques précisions du problème


    J'ai fait un petit site en PHP.

    Il n'y a qu'une seule page (index.php) avec un include().

    Par exemple, index.php?id=3 affiche la page réalisation.
    Il y a une petite fonction dans la page index.php qui selon l'id, inclus le fichier.inc correspondant.
    Les fichiers.inc contiennent simplement le contenu des pages en question, par exemple le fichier réalisations.inc contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <h2>// <a href="index.php?id=2">réalisations</a> > 3d</h2>
     
    <a href="legos.png" title="" rel="Legos">
    <img style="border:none; margin-right:10px; margin-bottom:3px;" src="legos_small.png" alt="Legos 2007" /></a>
    Je me suis dis que cela serait bien, au lieu d'avoir un fichier.inc pour chaque page, de faire une table dans la base mysql avec un champ ID et un champ CONTENU.

    Tout fonctionne a merveille, vive MySQL !
    Il devient donc même possible de faire une zone admin pour modifier les pages !

    Mais... dès que le contenu d'une page contient du PHP, comme la page contact pour envoyer un e-mail, ça ne fonctionne plus.

    Et si j'ai quand même mis du PHP dans la base mysql, c'est que je ne voit pas comment faire autrement. Et que j'aime bien essayer par moi-même

    J'ai lu pleins de tutos, surtout sur developpez.net, mais je ne trouve pas la réponse à ce problème.
    Merci !

  4. #4
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonjour,

    Mettre du code PHP dans une base de données est une hérésie, ce n'est pas correctement maintenable, et très dangereux.

    Que se passera-t-il lorsque quelqu'un saisira <?php mysql_query('ALTER TABLE ...'); ?> dans le texte de la page ?

    Il est malgré tout possible d'interprêter un code HTML qui contient du PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php eval('?>'.$html); ?>

    L'idéal serait de créer des templates pour chaque type de page. Si chaque page possède le même modèle je ne vois pas où est le problème.
    Tu devrais stocker les informations des pages en base de données (titre, description, contenu (WYSIWYG)). Ainsi, il te suffirait de créer une seule page template.php (par exemple) à laquelle tu passes en paramètre l'id de la page voulue.

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut
    Okay, je vois le problème ! Je n'y avais pas pensé...

    Mais alors comment fait-on dans mon cas ?!
    Je ne demande que pouvoir enlever ce PHP de la base.

    Dois-je abandonner le PHP dans le formulaire (comme le code dans mon 1er message) et faire un <form action=traitement.php ... > ?

    Ca serait dommage, il doit exister une solution !

  6. #6
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Re,

    Serait-il possible que tu nous montres ton code actuel ?

    C'est à dire ta page chargée d'inclure les fichiers (index.php ?), un des fichiers inclu ainsi qu'un exemple de code qui est stocké dans la base de données.

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut
    Oh oui, très volontiers !
    Voilà mon code :

    index.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!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" >
    <head>
    <?php include('inc/head.inc'); ?>
    </head>
    <body>
    <?php
    include('inc/menu.inc');
    echo $page;
    ?>
    </body>
    </html>
    head.inc :
    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
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <link rel="stylesheet" type="text/css" media="screen" title="theme A" href="css/pamplemousse.css" />
    <?php
    if (isset($_GET["id"])) {
    	$id=$_GET["id"];
    }
    else {
    	$id=1;
    }
    // connection à la base
    include('inc/mysql.inc');
    $result=mysql_query("SELECT id,titre,contenu FROM pages WHERE id = ".$id);
    $ligne = mysql_fetch_array($result);
    $page = $ligne['contenu'];
    $titre = $ligne['titre'];
    echo '<title>'.$titre.'</title>';
    ?>
    Le fichier menu.inc, c'est le menu, une liste <ul> html.
    Et le fichier mysql.inc c'est les infos pour se connecter à la db.

    La db contient une seule table nomée "pages" avec 3 champs :
    ID, titre et CONTENU

    exemple:
    ID: "1"
    TITRE: "Accueil"
    CONTENU: "<h2>Bienvenue sur mon site bla bla</h2> <div>bla bla bla</div>"

  8. #8
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Ok,

    Le code que tu montres est correct, pourrais-tu juste nous montrer un exemple de code PHP stocké en base de données car dans l'exemple ci-dessus il n'y a que du HTML.

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut
    exemple 2 :

    ID: "2"
    TITRE: "Contact"
    CONTENU:
    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
    <?php
    // ==================== traitement des données du formulaire 
    if (isset($_POST["envoyer"])) {
    // le formulaire a été soumis
            $etat = "erreur";
     
    // mise en forme des champs 
            if (isset($_POST["email"])) {
                     $_POST["email"]=trim(stripslashes($_POST["email"]));
            }
            if (isset($_POST["titre"])) {
                     $_POST["titre"]=trim(stripslashes($_POST["titre"]));
            }
            if (isset($_POST["message"])) {
                     $_POST["message"]=trim(stripslashes($_POST["message"]));
            }
            // test de la validité des champs saisis
            if (empty($_POST["email"])) {
                     $erreur="Entrez votre adresse e-mail svp.";
            }
            elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST["email"])){
                     $erreur="L'adresse e-mail n'existe pas...?";
            }
            elseif (empty($_POST["message"])) {
                     $erreur="Ah non, je veux au moins un merde !";
            }
            else {
    // les champs sont correctement remplis
                     $etat="ok";
            }
    }
    else {
    // le formulaire n'a pas été soumis
               $etat="attente";
    }
     
    // ==================== fin de traitement des données du formulaire 
    if ($etat!="ok") { // le formulaire n'a pas été soumis, ou soumis avec une erreur
             if ($etat=="erreur") {
    //le formulaire a été soumis avec une erreur
                             echo "<p><strong>".$erreur."</strong></p>\n";
    // afficher le message d'erreur
             }
    ?>
    		<h2> // contact</h2>
            <form method="post" action="index.php?id=2">
            <p><label for="email">e-mail :</label>
            <input type="text" name="email" id="email" value="<?php
            if (!empty($_POST["email"])) {
    // l'adresse email de l'expéditeur a été saisie: la réafficher
                    echo htmlspecialchars($_POST["email"],ENT_QUOTES);
            }
            ?>" />
            </p>
            <p><label for="titre">titre :</label>
            <input type="text" name="titre" id="titre" value="<?php
            if (!empty($_POST["titre"])) {
    // le nom du message a été saisi: le réafficher
                    echo htmlspecialchars($_POST["titre"],ENT_QUOTES);
            }
            ?>" />
            </p>
            <p><label for="message">message :</label>
            <textarea name="message" id="message" cols="" rows=""><?php
            if (isset($_POST["message"])) {
    // le message a été saisi: le réafficher
                    echo htmlspecialchars($_POST["message"],ENT_QUOTES);
            }
            ?></textarea>
            </p>
            <p><input type="submit" id="submit" name="envoyer" value="envoyer" />
            </p>
            </form>
    <?php
    }
    else {
    // pas d'erreur, envoi du mail
            $entete = "From: ".$_POST["email"]." <".$_POST["email"].">\n";
            $entete .= "MIME-Version: 1.0";
            if (@mail(exemple@email.com',$_POST["titre"],$_POST["message"],$entete)){
                    echo "Merci ! Votre message a été envoyé.<br />\n";
                    echo "<a href=\"index.php?id=2\">retour</a>\n";
            }
            else {
                    echo "Un problème s'est produit lors de l'envoi du message.<br />\n";
                    echo "<a href=\"index.php?id=2\">Réessayez...</a>\n";
            }
    }
    ?>
    C'est lui le problème...

    Merci de m'aider svp !!!

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut solution
    Pour conclure,

    En utilisant la fonction PHP eval(), cela fonctionne bien ; mais comme il a été dit plus tôt, il n'est pas recommandé de stocker du code PHP dans la base de donnée.

    Dans mon cas, la meilleure solution est de ne plus faire les vérifications des données du formulaires avec PHP mais avec JavaScript.

    Ensuite, il suffit de définir l'action du formulaire vers un fichier PHP (p.ex. envoyer_mail.php) qui n'est pas dans la bdd.

    On n'a donc plus du tout de PHP dans la bdd.

    Voilà !

    J'espère que cela pourra être utile à d'autres.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 106
    Par défaut
    Javascript n'est pas une bonne idée pour sécuriser tes données, sachant que le javascript peut être désactivé par l'utilisateur.
    Il faut dans tous les cas les faire vérifier en php avant injection dans la base.
    Javascript n'est utile que pour l'utilisateur, qui n'a pas besoin de recharger la page pour se rendre compte que les données qu'il a entré sont erronées.

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

Discussions similaires

  1. [MySQL] Code PHP stocké dans une base MySQL
    Par yvon_huynh dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/10/2008, 02h28
  2. [MySQL] Récupération infos dans une base MySQL/PHP
    Par Meewix dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/02/2008, 20h13
  3. [MySQL] Comment insérer 6 lignes en une fois dans une base mysql avec du PHP ?
    Par Alexandrebox dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/02/2008, 14h39
  4. [MySQL] copier une page html après nettoyage dans une base mysql en php
    Par araoudiou dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/05/2007, 21h49
  5. Stocker du Php dans une base Mysql
    Par tibrus dans le forum Requêtes
    Réponses: 5
    Dernier message: 01/09/2005, 22h03

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