We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 28330
    • 7 Posts
    Bonjour,

    J’ai repris un script php qui crée un formulaire dans lequel on peut transmettre des données à la Bdd et les mettre à jour.

    Si je le mets dans le répertoire www en local (sans Modx), il marche très bien mais pas quand je l’intègre en tant que snippet en réinstallallant Modx.

    Voici le script :
    ------------------------------------------------------------------------------------
    <?php

    // INFOS DE CONNEXION à la BDD
    $serveur=’localhost’; // serveur
    $user=’root’; // nom d’utilisateur
    $password=’’; // mot de passe
    $base=’’; // nom de la base contenant les tables
    /*
    Noms des tables et leurs champs :
    Note : il est obligatoire que vos tables disposent d’un champ "id" bénéficiant de l’option

    d’auto-incrémentation ou étant une clé primaire
    S’il existe un champ "mdp" (mot de passe), son contenu sera obligatoirement caché lors du

    listage des entrées de la table.

    Dans l’exemple ci-dessous, la première entrée, qui est en fait un sous-tableau, est le nom

    de la table à administrer.
    dans le sous-tableau, vous devez mettre le nom exact des champs que vous souhaitez

    administrer (peu importe l’ordre)
    */
    $champs=array(
    "véhicules"=>array("id","Nom"),
    "mode_paiement"=>array("id","Type","Montant")
    );
    /*
    Pour finir, vous devez modifier les liens apparaissant dans le cadre "menu" plus bas dans

    cette page. Prenez exemple sur les liens existants pour
    en créer d’autres. La syntaxe est la suivante :
    <a

    href="<?=$_SERVER["PHP_SELF"]?>?table=NOM_DE_LA_TABLE&q=ACTION_A_EFFECTUER">NOM_DU_LIEN</a>
    Avec ACTION_A_EFFECTUER valant "Ajouter" si vous voulez ajouter une entrée dans la table ou

    valant "" si vous voulez simplement lister.
    */


    // Connexion à la base
    $connexion = mysql_connect("$serveur","$user","$password") or die ("Impossible de se

    connecter à la base de données");
    // sélection de la base
    mysql_select_db("$base",$connexion);
    // FONCTIONS DIVERSES
    function Ajouter($table, $query) {
    $insert=mysql_query("insert into $table set $query");
    if ($insert==TRUE) {
    echo "Les données ont été correctement ajoutées
    ";
    }
    else {
    echo "Erreur lors de l’ajout des données
    ";
    }
    }
    function Modifier($table, $query, $where) {
    $update=mysql_query("update $table set $query where $where");
    if ($update==TRUE) {
    echo "Les données ont été correctement modifiées
    ";
    }
    else {
    echo "Erreur lors de la modification des données
    ";
    }
    }
    function Supprimer($table, $where) {
    $delete=mysql_query("delete from $table where $where");
    if ($delete==TRUE) {
    echo "Les données ont été correctement effacées
    ";
    }
    else {
    echo "Erreur lors de la suppression des données
    ";
    }
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">

    <head>
    <title>Administration des bdd</title>

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta http-equiv="imagetoolbar" content="no" />
    <meta content="TRUE" name="MSSmartTagsPreventParsing" />
    <link type="text/css" href="assets\templates\mon_fichier_css.css" rel="stylesheet" />

    <script language="Javascript">
    function confirmation(url)
    {
    if(confirm(’Voulez-vous vraiment supprimer ?’))
    document.location.href=url
    }
    </script>
    </head>

    <body>
    <!-- CADRE PRINCIPAL //-->
    <div id="cadreprincipal">
    <!-- MENU //-->
    <div id="menu">
    <div class="titremenu">
    Sports
    </div>
    <div class="liensmenu">
    <ul>
    <li><a href="<?php echo

    $_SERVER["PHP_SELF"]?>?table=véhicules">Gérer les véhicules</a></li>
    <li><a href="<?php

    echo$_SERVER["PHP_SELF"]?>?table=véhiculess&q=Ajouter">Ajouter une entrée</a></li>
    </ul>
    </div>
    <div class="titremenu">
    Modes de paiement
    </div>
    <div class="liensmenu">
    <ul>
    <li><a href="<?php echo

    $_SERVER["PHP_SELF"]?>?table=mode_paiement">Gérer les paiements</a></li>
    <li><a href="<?php echo

    $_SERVER["PHP_SELF"]?>?table=mode_paiement&q=Ajouter">Ajouter une entrée</a></li>
    </ul>
    </div>



    </div>
    <div id="main">
    <?php
    /////////////////// PROGRAMME PRINCIPAL
    if (isset($_GET["q"])) { $q=$_GET["q"]; } elseif(isset($_POST["q"])) {

    $q=$_POST["q"]; } else { $q=""; }
    if (isset($_GET["sq"])) { $sq=$_GET["sq"]; } elseif(isset($_POST["sq"])) {

    $sq=$_POST["sq"]; } else { $sq=""; }
    if (!isset($_GET["table"])) {
    echo "";
    } else {
    $table=$_GET["table"];
    $prefixe=""; // Utile si vous désirez préfixer automatiquement les tables
    $table_utilisee="$prefixe".$table."";

    switch($q) {
    /// Formulaire d’ajout
    case "Ajouter";
    $nb_champs=sizeof($champs["$table"]);
    echo "<div class=\"titrecorps\">Ajout d’une entrée dans la

    table \"$table\"</div>";
    if ($sq=="Valider") {
    $valeurs="";
    $i=0;
    while($i<$nb_champs) {
    $nom_champ=$champs["$table"]["$i"];
    if ($i!=0) {
    $valeurs.=" ,";
    }


    $valeurs.="$nom_champ=\"$_POST[$nom_champ]\"";
    $i++;
    }
    Ajouter("$table_utilisee",$valeurs);
    ?>
    <script language="Javascript">
    window.location="<? echo

    "".$_SERVER["PHP_SELF"]."?table=$table&msg=1"; ?>";
    </script>
    <?php
    } else {
    echo "
    <form

    action=\"".$_SERVER["PHP_SELF"]."?table=$table&q=Ajouter&sq=Valider\" method=\"post\">
    <table border=\"0\">";
    $i=0;
    while($i<$nb_champs) {
    $nom_champ=$champs["$table"]["$i"];
    $nom_champ_maj=strtoupper($nom_champ);
    echo "
    <tr>


    <td><b>$nom_champ_maj</b></td><td><textarea name=\"$nom_champ\" cols=\"40\"

    rows=\"3\"></textarea></td>
    </tr>";
    $i++;
    }
    echo "
    <tr valign=\"top\">
    <td colspan=\"2\" align=\"center\"><input

    type=\"submit\" value=\"Valider\"></td>
    </tr>
    </table>
    </form>";
    }
    break;

    case "Modifier";
    $nb_champs=sizeof($champs["$table"]);
    echo "<div class=\"titrecorps\">Modification d’une entrée de

    la table \"$table\"</div>";
    $id=$_GET["id"];
    if ($sq=="Valider") {
    $valeurs="";
    $i=0;
    while($i<$nb_champs) {
    $nom_champ=$champs["$table"]["$i"];
    if ($i!=0) {
    $valeurs.=" ,";
    }


    $valeurs.="$nom_champ=\"$_POST[$nom_champ]\"";
    $i++;
    }
    Modifier("$table_utilisee",$valeurs,"id=\"$id\"");
    ?>
    <script language="Javascript">
    window.location="<? echo

    "".$_SERVER["PHP_SELF"]."?table=$table&msg=2"; ?>";
    </script>
    <?php
    } else {

    $select=mysql_query("select * from $table_utilisee where

    id=\"$id\"");
    $res=mysql_fetch_array($select);
    echo "
    <form

    action=\"".$_SERVER["PHP_SELF"]."?table=$table&q=Modifier&sq=Valider&id=$id\"

    method=\"post\">
    <table border=\"0\">";
    $i=0;
    while($i<$nb_champs) {
    $nom_champ=$champs["$table"]["$i"];
    $nom_champ_maj=strtoupper($nom_champ);
    echo "
    <tr>
    <td>$nom_champ_maj</td><td><textarea

    name=\"$nom_champ\" cols=\"40\" rows=\"3\">".$res["$nom_champ"]."</textarea></td>
    </tr>";
    $i++;
    }
    echo "
    <tr valign=\"top\">
    <td colspan=\"2\" align=\"center\"><input

    type=\"submit\" value=\"Valider\"></td>
    </tr>
    </table>
    </form>";

    }
    break;

    case "Supprimer";
    echo "<div class=\"titrecorps\">Suppression d’une entrée de la table

    \"$table\"</div>";
    Supprimer("$table_utilisee","id=\"$_GET[id]\"");
    ?>
    <script language="Javascript">
    window.location="<? echo

    "".$_SERVER["PHP_SELF"]."?table=$table&msg=3"; ?>";
    </script>
    <?php
    break;


    default:
    echo "<div class=\"titrecorps\">Enregistrements de la table

    \"$table\" :</div>";
    $ordre=$champs["$table"]["0"];
    $select=mysql_query("select * from $table_utilisee order by $ordre

    ASC");
    $nb_enregistrements=mysql_num_rows($select);
    $tab_msg=array(
    "1"=>"Les données ont été

    correctement ajoutées !",
    "2"=>"Les données ont été

    correctement modifiées !",
    "3"=>"Suppression de

    l’enregistrement effectué !");
    ?>
    &raquo; <?=$nb_enregistrements?> enregistrement(s) dans cette liste.
    <?php
    if (isset($_GET["msg"])) {
    echo "<div

    class=\"erreur\">".$tab_msg[$_GET["msg"]]."</div>";
    }
    ?>
    <table border="1">
    <tr align="center"><td><b>ACTIONS</b></td>
    <?php
    $nb_champs=sizeof($champs["$table"]);
    while(list($k,$nom_champ)=each($champs["$table"])) {
    $nom_champ_maj=strtoupper($nom_champ);
    echo "<td><b>$nom_champ_maj</b></td>";
    }
    ?>
    </tr>
    <?php
    while ($res=mysql_fetch_array($select)) {
    echo "<tr><td>[<a

    href=\"".$_SERVER["PHP_SELF"]."?table=$table&q=Modifier&id=".$res["id"]."\">M</a>] - [<a

    href=\"javascript:confirmation(’".$_SERVER["PHP_SELF"]."?table=$table&q=Supprimer&id=".$res[

    "id"]."’);\">S</a>]</td>";
    $i=0;
    while($i<$nb_champs) {
    $nom_champ=$champs["$table"]["$i"];
    if ($nom_champ=="mdp") {
    echo "<td>********</td>";
    } else {
    echo "<td>".$res["$nom_champ"]."</td>";
    }
    $i++;
    }
    echo "</tr>";
    }
    ?>
    </table>
    <?php
    break;
    }
    }
    mysql_close();
    ?>
    </div>
    </div>
    </body>
    </html>
    ------------------------------------------------------------------------------

    Les liens "gérer les véhicules" et "gérer les paiements" fonctionnent mais les liens "ajouter", "modifier", ou "supprimer" aboutissent à : 404 page not found alors que je voudrais qu’ils rafraichissent ma page en cours (comme "gérer les véhicules" et "gérer les paiements").

    Le lien vers une feuille de style externe pour mettre en forme, n’aboutit pas non plus.

    Et enfin, une dernière question : si je renseigne les codes d’accès à mysql dans ce snippet (éventuellement dans un include) et que ce snippet n’est appelé que depuis une page que seul un utilisateur web loggué peut voir, est ce que ma Bdd est sécurisée ou sinon, comment je dois faire ?

    Excusez-moi pour toutes ces questions mais ça fait un bon moment que je galère sur ces problèmes.

    Merci d’avance.

    PS : version de Modx : 0.9.6.
      • 23050
      • 1,842 Posts
      Bonjour Stabilo smiley

      Je crois qu’il faudrait que tu regardes du côté de l’API pour utiliser les classes de MODx : http://modxcms.com/api-quick-reference.html

      Plein de fonctions déjà définies qui pourront te faciliter la vie wink
        • 28330
        • 7 Posts
        Merci beaucoup Perrine pour ton conseil.

        J’ai bien consulté l’api de modx sur le wiki mais je ne sais pas si j’en aurai besoin car le script fonctionne seul, sans Modx et il est opérationnel.
        Il peut d’ailleurs servir à la communauté pour mettre à jour des données.

        Mais je cherche depuis plusieurs jours (sans résultat et je commence à désespérer ! :’() surtout comment faire déjà aboutir sous Modx, et de plus, sur la même page, le résultat des reqêtes sql envoyées à partir des liens suivants:
        - <li><a href="<?php echo $_SERVER["PHP_SELF"]?>?table=véhiculess&q=Ajouter"></a></li>

        - <li><a href="<?php echo $_SERVER["PHP_SELF"]?>?table=véhiculess&q=Modifier"></a></li>

        - <li><a href="<?php ech$_SERVER["PHP_SELF"]?>?table=véhiculess&q=Supprimer"></a></li>

        Est-ce que quelqu’un aurait une idée ? Merci.
          • 28330
          • 7 Posts
          Je crois avoir trouvé la solution. grin

          En fait, il y avait un problème entre le nom de la clé primaire de chacune de mes tables : id et la notation dans les adresses url de l’id d’une page !
            • 28330
            • 7 Posts
            Non, en fait ce n’était pas ça !

            N’y a t’il vraiment personne pour me donner un conseil sur ce point précis ? Merci.
              • 11975
              • 2,542 Posts
              Salut,

              essaie d’éviter l’emploi des noms de variable id et q dans ton passage de variables au script.
              ces deux là sont réservées par MODx

              :-)
                Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
                • 28330
                • 7 Posts
                Merci beaucoup heliotrope !! grin

                C’était la variable q qui posait problème (en plus de la variable id).