Contenu d'une table MySQL et execution de code PHP

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Contenu d'une table MySQL et execution de code PHP

par Spetznaz » 21 mars 2005, 21:00

Merci beaucoup Xenon_54. Ta réponse est la solution à mon problème et à ce que j'ai lu cette fonction était faite pour moi ! :D

J'ai essayé, ça marche impécable mais j'aurais aimé une explication.
Qu'est-ce que tu veut dire par :
"Il faut prendre les plus grandes précautions afin de vérifier si ce que l'on exécute est sécuritaire et sans erreur."
Je comprends pas trop ces derniers mots que j'ai ici formaté en gras.

Je m'en vais éditer mon interface d'admin :D

Apparament pas si vite.
Au dela de 1 ligne il génère une erreur je vais revoir la doc.

Donc voilà les résultats de mes tests :
Si on appuye sur entrée (sagit-il d'un indigestion du "\n" ou </br> ?) on obtiens le message d'erreur suivant :

Parse error: syntax error, unexpected '<' in c:\program files\apache group\Apache\htdocs\Web\TP\gestion de blocs\index2.php(30) : eval()'d code on line 1


Par contre si tout le code est sur la même ligne tout va bien.

2 solutions :

1ère méthode
lire les lignes une par une et les faire traiter par eval()...

2ème méthode
Supprimer tout les caractères spéciaux genre \n pour que tout le code soit traité comme une seule ligne tout en laissant à l'admin la possibilité de coder comme bon lui semble.

A suivre donc...

par Xenon_54 » 21 mars 2005, 01:09

La fonction eval() permet d'exécuter du code PHP à partir d'une chaine de caractères contenant le code en question. Seulement, il faut prendre les plus grandes précautions afin de vérifier si ce que l'on exécute est sécuritaire et sans erreur.

;)

par ouckileou » 21 mars 2005, 00:53

je ne pense pas que le problème vienne du fait que ton code soit dans la table

là tu récupères ce code grace à du PHP, il l'écrit dans ton fichier et il poursuit son chemin
et c'est le navigateur qui récupère ce fichier ensuite, et pour lui PHP ou pas c'est pareil

si par exemple tu récupérais ton code dans la base de données, que tu le mettais dans un fichier et que tu appelais ce fichier de telle sorte qu'il soit interprété par le serveur, là ça pourrait fonctionner

je ne sais pas si je suis très clair désolé :)

par Spetznaz » 21 mars 2005, 00:07

Oui je pense que tu as bien compris le problème.
On constate en effet que le code semble être pris comme un texte à partir du moment où il était dans la table.

Comment puis-je faire pour que ce code soit traité comme du PHP ?

par ouckileou » 20 mars 2005, 23:47

si j'ai bien compris du veux extraire du code de ta base de données par PHP et l'insérer dans ta page pour qu'il soit exécuté ?

à mon avis tu ne peux pas faire ça comme ça, une fois que le PHP à extrait ton code, ce code/texte est écris dans la page qui sera envoyé vers le navigateur et ne sera pas réexécuté

Contenu d'une table MySQL et execution de code PHP

par Spetznaz » 20 mars 2005, 23:37

Bonjour à tous ! :)

Je fais moi même mon site (plutôt ma page perso) et ce soir j'ai travaillé vite fait sur la gestion de blocs. J'ai un code qui extrait le contenu d'une cellule texte de MySQL et je voudrais que ce texte soit éxecuté comme un script PHP mais je ne vois pas où est le problème. Je ne comprend pas pourquoi ça ne marche pas et comment je dois faire.

En mettant à jour les valeurs à la main (dans la table des blocs) les choses sont executées de manière satisfaisantes.
Si je veut afficher ou pas un bloc le mettre à gauche à droite au dessus ou en dessous d'un autre bloc pas de problème.
Seul le contenu en HTML voir textuel marche bien. Pour le PHP il me faut trouver un autre moyen.

Voici mon code de fonction :
C'est une fonction qui me classe les blocs. Ici celle qui affiche les blocs centraux.
  function fMenuCentral()
  {
    connect_bd();

    $requete ="SELECT * FROM definblocs WHERE (affbloc >= 1 AND posbloc=1) ORDER BY poidsbloc ASC";
    $result = mysql_query($requete);

    //$id= mysql_insert_id();

    echo "<table cellspacing=0 cellpadding=2>";
     while(@$row = mysql_fetch_row($result))
     {
       $bloc_id = $row[0];
       $bloc_contenu = nl2br($row[4]);

     echo "
     <tr>
        <td width=\"*\" class=\"titrebloc\">
          $bloc_id
        </td>
      </tr>
      <tr>
        <td class=\"textebasic\" colspan=\"2\">
            $bloc_contenu
        </td>
      </tr>
      <tr>
        <td><br></td>
      </tr>";
    }
    echo "</table>";
    // Déconnexion de la base de donnée
    deco_bd();
  };
Voilà comment le code est inséré :
<html>
<head>
<title>Spetznaz Prods.TP sur la gestion de blocs</title>
<?php
  include_once("includes/includes.php");
  connect_bd();
  $skin= params(4);
  // include_once("modules/admin/skins/$skin/style.php");
  deco_bd();
?>
</head>
<body>
  <center>
    <table class=\"maintable\" cellspacing=0 valign=top>
    <tr>
      <td width=150 valign=top>
        <?php
          fMenuGauche();
        ?>
      </td>
      <td width=500 valign=top>
        <?php
          fMenuCentral();
        ?>
      </td>
      <td width=150 valign=top>
        <?php
          fMenuDroit();
        ?>
      </td>
    </tr>
   </table>
  </center>
</body>
</html>
J'ai essayé de mettre
"; //ferme l'instruction echo
--<>--| CODE PHP ICI |--<>--
echo " // pour réouvrir l'instruction echo
// Les commentaires ici écrits ne sont pas présents dans ma version test
Si vous voyez ce que je peut faire merci de bien vouloir me faire des propositions. :)

Dans l'espoir d'avoir été suffisament clair sur l'étendu de mon problème et d'obtenir des réponses satisfaisantes. Merci à vous :)