Enregistrer dans une table

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Enregistrer dans une table

    Bonjour,
    Je tente d'envoyer une valeur dans une table.
    J'ai fait un petit fichier php qui à pour rôle d'enregistrer une valeur, mais la valeur n'est pas enregistrée.
    Pour cela j'ai consulté la doc: https://docs.joomla.org/Inserting,_U...g_JDatabase/fr

    Code PHP:
    <?php
    //$MyStyle = $_POST['style'];
    $MyStyle "blue";

    $db JFactory::getDbo();
    $query $db->getQuery(true);
    // Insert columns.
    $columns = array('style');
    // Insert values.
    $values = array(1001$db->quote($MyStyle), $db->quote('Inserting a record using insert()'), 1);

    // Prepare the insert query.
    $query
        
    ->insert($db->quoteName('#__social_stream'))
        ->
    columns($db->quoteName($columns))
        ->
    values(implode(','$values));

    // Set the query using our newly populated query object and execute it.
    $db->setQuery($query);
    $db->execute();
    ?>
    La valeur $MyStyle n'st pas enregistrée dans la colonne style de la table.

    Est-ce que j'utilise correctement ce qui est décrit dans la doc JOOMLA ?

    Cordialement.

    Eric

  • #2
    Bonjour Eric,

    $columns = liste des zones de ta table à remplir
    $values = les valeurs à mettre dans chacune des zones définies dans $columns

    Donc, tu dois avoir le même nombre d'éléments dans les tables $columns et $values.

    Pour avoir les erreurs, tu peux mettre ta requête dans un try : voir exemple dans le plugin profile (plugins/user/profile/profile.php lignes 412 à 465).

    Pascal
    If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

    Commentaire


    • #3
      bonsoir,
      +1pm.
      sauf que ce sont des tableaux.
      si tu ecrit la requete ci dessus en sql brut :
      insert into social_stream style (1001,blue,'Inserting a record using insert()',1)

      Pour que la requete fonctionne, le tableau ne devrais contenir qu une valeur.
      $values = array($db->quote($MyStyle));

      La c'est plus un probleme sql que joomla.
      Dans la page ou tu t inspire
      $columns = array('user_id', 'profile_key', 'profile_value', 'ordering'); tu as 4 valeurs dans le tableau des colonnes
      et 4 valeurs associées.
      $values = array(1001, $db->quote('custom.message'), $db->quote('Inserting a record using insert()'), 1);

      Commentaire


      • #4
        Bonjour,
        Merci beaucoup pour votre aide.
        Je me pose une question, au moment ou je charge JOOMLA dans le fichier, j'ai :
        define('JPATH_BASE', '../../../../..');
        Pour un fichier qui se trouve dans templates\protostar\html\com_easysocial\story\
        Est-ce correct ?

        Ensuite, si j'omet la ligne,
        $columns = array('style');

        Et met, pour indiquer la colonne 'style" de la table, (Vu que je n'ai qu'une colonne concernée)
        ->columns($db->quoteName('style'))

        Aussi, le Implode, quand j'envoie l'information à la table, est-il utile vu que je n'ai qu'une seule valeur ?
        Cela serait-il correct ?

        Code PHP:
        <?php
        $MyStyle 
        "blue";

        $db JFactory::getDbo();
        $query $db->getQuery(true);

        $values = array($db->quote($MyStyle));

        $query
            
        ->insert($db->quoteName('#__social_stream'))
            ->
        columns($db->quoteName('style'))
            ->
        values($MyStyle);

        $db->setQuery($query);
        $db->execute();
        ?>
        Cordialement.

        Eric
        Dernière édition par Agrepe à 29/12/2017, 12h21

        Commentaire


        • #5
          To code doit marcher, voici quelques corrections (mineures)

          Code PHP:
          <?php
          $MyStyle 
          "blue";

          $db \Joomla\CMS\Factory::getDbo();
          $query $db->getQuery(true);

          $query
          ->insert($db->quoteName('#__social_stream'))
          ->
          columns($db->quoteName('style'))
          ->
          values($db->quote($MyStyle));

          $db->setQuery($query);
          $db->execute();
          ?>
          Oublie les appels à JFactory, bien que cela devrait encore marcher en J4, voir : https://ordi-genie.com/joomla/develo...partir-de-j3-8


          A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
          Rejoignez le Joomla Users Groupe Alsace...
          roland_d_alsace va-t-il devenir roland_du_grand_est ?

          Commentaire


          • #6
            Bonjour,
            Merci beaucoup.

            Quelle est la différence entre :
            $db = \Joomla\CMS\Factory::getDbo();
            et
            $db = JFactory::getDbo();

            Cordialement.
            Eric

            Commentaire


            • #7
              Envoyé par Agrepe Voir le message
              Bonjour,
              Merci beaucoup.

              Quelle est la différence entre :
              $db = \Joomla\CMS\Factory::getDbo();
              et
              $db = JFactory::getDbo();

              Cordialement.
              Eric
              Tu n'as pas lu toute ma réponse.
              C'est lié à la mise en place des namespaces depuis J 3.8.

              Voir le lien que je t'ai donné :
              https://ordi-genie.com/joomla/develo...partir-de-j3-8

              ou cette discussion
              Vous ne savez pas comment vous y prendre, vous avez des questions sur le développement.


              ou celle là
              un truc, une astuce de développement ? n'hésitez pas à la partager.
              Dernière édition par roland_d_alsace à 30/12/2017, 13h25
              A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
              Rejoignez le Joomla Users Groupe Alsace...
              roland_d_alsace va-t-il devenir roland_du_grand_est ?

              Commentaire


              • #8
                Bonjour,
                Tout d'abord mes meilleurs vœux pour cette nouvelle année.
                Effectivement, je suis désolé, je n'avais pas vu la fin de ta réponse.
                Merci beaucoup.
                Bien cordialement.
                Eric

                Commentaire


                • #9
                  Bonjour,
                  J'ai regardé la doc et les discussions, effectivement il y a du changement.

                  J'ai bien remplacé la ligne:
                  $db = JFactory::getDbo();
                  par:
                  $db = \Joomla\CMS\Factory::getDbo();

                  Mais le fichier où est placé ce code ne fonctionne plus.
                  Je suis pourtant bien en version 3.8.2

                  J'ai remis:
                  $db = JFactory::getDbo();
                  Et là, cela fonctionne.

                  Mais en tout cas, merci beaucoup, cela permet de prévoir l'avenir.

                  Bien cordialement.

                  Eric

                  Commentaire


                  • #10
                    Bonjour et meilleurs voeux à tous.

                    Je reviens pour quelques informations qui m'échappent.
                    Dans ma table j'ai besoin d'enregistrer:

                    Valeur / Colonne de la table
                    $IdUser -> Uid
                    $StreamID -> id_stream
                    $MyStyles -> styles

                    Comment indiquer quoi va où ?
                    Je n'ai pas compris.

                    Code PHP:
                    $columns = array('Uid''id_stream''styles');
                    $values = array(1001$db->quote('custom.message'), $db->quote('Inserting a record using insert()'), 1);

                    $query
                        
                    ->insert($db->quoteName('#__es_stream_styles))
                        ->columns($db->quoteName($columns))
                        ->values(implode('
                    ,', $values));

                    $db->setQuery($query);
                    $db->execute(); 

                    Cordialement.

                    Eric
                    Dernière édition par Agrepe à 02/01/2018, 18h29

                    Commentaire

                    Annonce

                    Réduire
                    Aucune annonce pour le moment.

                    Partenaire de l'association

                    Réduire

                    Hébergeur Web PlanetHoster
                    Travaille ...
                    X