Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/06/2007, 14h24   #1
Invité régulier
 
Étudiant
Inscription : 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 : 5
Points : 5
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.
ACDesign3r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2007, 14h41   #2
Inscrit
 
Avatar de is_null
 
Inscription : octobre 2006
Messages : 637
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 637
Points : 690
Points : 690
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.
__________________
Q: Dois-je haïr et cogner sur Microsoft ?
R: Non, vous n'êtes pas obligé. Non pas que Microsoft n'est pas écoeurant, mais il y avait une culture hacker bien avant Microsoft et il y en aura une bien après que Microsoft aura été de l'histoire ancienne. Toute énergie dépensée à haïr Microsoft serait mieux employée par vos compétences et votre passion. Écrivez du bon code, cela brisera suffisamment Microsoft sans polluer votre karma.
Comment devenir un hacker ? par Eric Steven Raymond
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2007, 15h27   #3
Invité régulier
 
Étudiant
Inscription : 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 : 5
Points : 5
merci, j'avais pas penser à eval(), mais bon puisqu'il y'a des risques...
Par contre qu'entends tu par :
Citation:
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.
ACDesign3r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2007, 16h07   #4
Inscrit
 
Avatar de is_null
 
Inscription : octobre 2006
Messages : 637
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 637
Points : 690
Points : 690
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 :
require ROOT.'/modules/'.str_replace('_', '/', $module_name);
C'est un example simplement ... A adapter selon l'architecture de l'application n'est-ce-pas ..
__________________
Q: Dois-je haïr et cogner sur Microsoft ?
R: Non, vous n'êtes pas obligé. Non pas que Microsoft n'est pas écoeurant, mais il y avait une culture hacker bien avant Microsoft et il y en aura une bien après que Microsoft aura été de l'histoire ancienne. Toute énergie dépensée à haïr Microsoft serait mieux employée par vos compétences et votre passion. Écrivez du bon code, cela brisera suffisamment Microsoft sans polluer votre karma.
Comment devenir un hacker ? par Eric Steven Raymond
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2007, 16h12   #5
Invité régulier
 
Étudiant
Inscription : 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 : 5
Points : 5
Ok, merci beaucoup je vais voir ce que je peux faire. Mais pas aujourd'hui, la journée est fini ^^
ACDesign3r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 11h17   #6
Invité régulier
 
Étudiant
Inscription : 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 : 5
Points : 5
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 :
Citation:
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 :
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
ACDesign3r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 11h29   #7
Inscrit
 
Avatar de is_null
 
Inscription : octobre 2006
Messages : 637
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 637
Points : 690
Points : 690
Code :
$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)
__________________
Q: Dois-je haïr et cogner sur Microsoft ?
R: Non, vous n'êtes pas obligé. Non pas que Microsoft n'est pas écoeurant, mais il y avait une culture hacker bien avant Microsoft et il y en aura une bien après que Microsoft aura été de l'histoire ancienne. Toute énergie dépensée à haïr Microsoft serait mieux employée par vos compétences et votre passion. Écrivez du bon code, cela brisera suffisamment Microsoft sans polluer votre karma.
Comment devenir un hacker ? par Eric Steven Raymond
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2007, 13h16   #8
Invité régulier
 
Étudiant
Inscription : 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 : 5
Points : 5
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 :
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 ^^
ACDesign3r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2007, 12h51   #9
Invité régulier
 
Étudiant
Inscription : 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 : 5
Points : 5
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
ACDesign3r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h15.


 
 
 
 
Partenaires

Hébergement Web