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 :

[SQL] Problème : enregistrer le contenu d'une page php dans une BDD, c'est possible?


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 8
    Points
    8
    Par défaut [SQL] Problème : enregistrer le contenu d'une page php dans une BDD, c'est possible?
    Bonjour,

    J'espère être dans le bon forum pour ma question. Si c'est pas le cas, Moderateurs, je vous écoute

    Voilà je suis entrain de développer un module d'administration en PHP/MySQL dans le cadre de mon stage, et j'ai un p'tit souci.

    J'ai une base de données décomposée en 3 tables pour gérer les pages du site :

    - PAGES (page_id, #page_cat, date_ajout, date_maj, page_title, page_content, ban_page, #module_id)
    - PAGES_CAT (cat_id, cat_lib)
    - PAGES_MODULE (module_id, module_title, module_content, #module_cat)

    Mon souci ce trouve dans la table PAGES_MODULE. Cette table contient des modules que l'administrateur choisira d'afficher sur sa page.
    Mon problème c'est que j'aimerai enregistrer ces pages dans la table, dans le champ module_content (je précise aussi que ces pages contiennent des requetes SQL). Ma question est : Est-il possible d'enregistrer des pages de code PHP dans la BDD.Et deuxièmement, comment faire pour que le code php soit interpreter lorsque j'affiche le contenu de la table?

    Avez vous des pistes pour moi, ou bien des solutions beaucoup mieux?

    En attendant vos réponses, merci.

  2. #2
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Stocker du code php pour l'executer ulterieurement avec eval() est la plus mauvaise idée
    Je conseille d'établir une petite arborescence pour les scripts de modules, lesquels devront être stockés sur le systême de fichiers.
    La base de données ne doit servir que pour leurs configurations et éventuellement leur indexation.

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    merci, j'avais pas penser à eval(), mais bon puisqu'il y'a des risques...
    Par contre qu'entends tu par :
    Je conseille d'établir une petite arborescence pour les scripts de modules, lesquels devront être stockés sur le systême de fichiers.
    La base de données ne doit servir que pour leurs configurations et éventuellement leur indexation.

  4. #4
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Par example :
    modules (dossier)
    -savons (dossier)
    --marseilles.php
    -brosses (dossier)
    --dents.php
    --chaussures.php

    Et utiliser module_name=brosses_chaussures ou brosses_dents ou encore savon_marseille, puis, pour executer le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require ROOT.'/modules/'.str_replace('_', '/', $module_name);
    C'est un example simplement ... A adapter selon l'architecture de l'application n'est-ce-pas ..

  5. #5
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Ok, merci beaucoup je vais voir ce que je peux faire. Mais pas aujourd'hui, la journée est fini ^^

  6. #6
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Bien le bonjour!

    Bon alors, tout d'abord merci pour tes conseils is_null.
    L'enregistrement ce fait parfaitement bien dans la base de données, par contre il me reste un problème : mon script s'entête à ne pas vouloir écrire dans un fichier distant du dossier contenant le script de création des modules. Si je lui dit d'enregistrer dans le même dossier que celui du script, tout marche niquel (à savoir le dossier /admin/modules/) mais dès que je veux l'enregistrer autre par, j'ai un joli message d'erreur :
    Warning: fputs(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\new\admin\modules\valider.php on line 26

    Warning: fclose(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\new\admin\modules\valider.php on line 27
    D'où pourrait bien provenir le problème?

    Si ça interresse voici mon code :

    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
     
    <?php
    //$dir = '/new/editable/';
     
    //c'est un ajout
    if(isset($_GET['action']) && $_GET['action'] =='ajouter')
    {
        if(isset($_POST['module_content']) && !empty($_POST['module_content']))
        {
            if(file_exists(realpath($_POST['filename']))){
     
                $ressource_fichier = fopen(realpath($_POST['filename']),'w+');
     
                if($ressource_fichier)
                {
                    fputs($ressource_fichier, $_POST['module_content']);
                    fclose($ressource_fichier);
                }
                else
                {
                    echo "ecriture impossible.";
                }
     
            }
     
            $ressource_fichier = fopen(realpath($_POST['filename']),'w+');
            fputs($ressource_fichier, $_POST['module_content']);
            fclose($ressource_fichier);    
            require_once('../../Connections/connexion_ipcube.php');
            mysql_select_db($database_connexion_ipcube, $connexion_ipcube);
            $requete = "INSERT INTO pages_module 
            VALUES ('','".$_POST['module_title']."','http://localhost/new/editable/".$_POST['filename']."','".$_POST['cat_module']."');";
            echo $requete;
            $resultat = mysql_query($requete, $connexion_ipcube) or die(mysql_error());
     
        }
    }
     
     
    //c'est une modification
    if(isset($_GET['action']) && $_GET['action'] =='modifier')
    {
        if(file_exists('http://localhost/new/editable/'.$_POST['filename'])){
                $file = file_get_contents('http://localhost/new/editable/'.$_POST['filename']);
                $ressource_fichier = fopen('http://localhost/new/editable/'.$_POST['filename'],'w+');
     
                if($ressource_fichier && is_writable('http://localhost/new/editable/'.$_POST['filename']))
                {
                    fputs($ressource_fichier, $_POST['module_content']);
                    fclose($ressource_fichier);
                }
                else
                {
                    echo "ecriture impossible.";
                }
     
            }
     
        $ressource_fichier = fopen('http://localhost/new/editable/'.$_POST['filename'],'w');
        fputs($ressource_fichier, $_POST['module_content']);
        fclose($ressource_fichier);    
        require_once('../../Connections/connexion_ipcube.php');
        mysql_select_db($database_connexion_ipcube, $connexion_ipcube);
        $requete = "UPDATE pages_module 
        SET module_title = '".$_POST['module_title']."',
        module_content = 'http://localhost/new/editable/".$_POST['filename']."',
        module_cat = '".$_POST['cat_module']."' 
        WHERE module_id = '".$_POST['module_id']."'";
        echo $requete;
        $resultat = mysql_query($requete, $connexion_ipcube) or die(mysql_error());
    }
    ?>
    Merci

  7. #7
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ressource_fichier = fopen(realpath($_POST['filename']),'w+');
    Il faudrait voir la valeur de l'argument. Mais on peut soupconner apache de ne pas avoir le droit d'ecrire sur le dossier de destinnation (chmod 777 our chown apache:apache)

  8. #8
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Bon eh bien, le problème est résolu (du moins en local, j'ai pas encore testé sur le web) c'était juste un problème de path.
    En mettant les chemin en windows ça marche niquel

    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
    //c'est un ajout
    if(isset($_GET['action']) && $_GET['action'] =='ajouter')
    {
        if(isset($_POST['module_content']) && !empty($_POST['module_content']))
        {
            if(file_exists('c:\\program files\\easyphp1-8\\www\\new\\editable\\'.$_POST['filename'])){
     
                $ressource_fichier = fopen('c:\\program files\\easyphp1-8\\www\\new\\editable\\'.$_POST['filename'],'w+');
     
                if($ressource_fichier)
                {
                    fputs($ressource_fichier, $_POST['module_content']);
                    fclose($ressource_fichier);
                }
                else
                {
                    echo "ecriture impossible.";
                }
     
            }
     
            $ressource_fichier = fopen('c:\\program files\\easyphp1-8\\www\\new\\editable\\'.$_POST['filename'],'w+');
            fputs($ressource_fichier, $_POST['module_content']);
            fclose($ressource_fichier);    
            require_once('../../Connections/connexion_ipcube.php');
            mysql_select_db($database_connexion_ipcube, $connexion_ipcube);
            $requete = "INSERT INTO pages_module 
            VALUES ('','".$_POST['module_title']."','http://localhost/new/editable/".$_POST['filename']."','".$_POST['cat_module']."');";
            $resultat = mysql_query($requete, $connexion_ipcube) or die(mysql_error());
     
        }
    }
    Merchi ^^

  9. #9
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Voili, voilà j'ai installé tout çà sur le serveur, et ça marche niquel avec realpath()!
    Encore merci pour tes conseil is_null, grâce à toi je fini mon stage en beauté lool!
    Bonne journée

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/03/2010, 09h16
  2. Afficher une page php dans une page php
    Par griese dans le forum Langage
    Réponses: 9
    Dernier message: 09/06/2006, 18h24
  3. insérer une page php dans une page php
    Par griese dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/06/2006, 18h03
  4. Réponses: 15
    Dernier message: 24/05/2006, 10h56
  5. afficher une page PHP dans une page PHP ?
    Par sirbaldur dans le forum Langage
    Réponses: 4
    Dernier message: 05/05/2006, 20h42

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