web-dev-qa-db-fra.com

Joomla 3.7 change la valeur de la base de données après l’appui du bouton de formulaire

Je veux faire quelque chose de très simple, mais je dois utiliser Joomla, ce qui le rend probablement compliqué parce que j'ai moins d'expérience dans le développement de Joomla.

J'ai un champ avec une valeur (un nombre) qui est déclarée par un autre composant et enregistrée dans la base de données joomla. Ensuite, j'ai un bouton submite dans un formulaire (j'utilise chronoforms5 en passant).

Ce que je veux, c'est changer la valeur de mon champ après avoir appuyé sur le bouton d'envoi de mon formulaire.

D'habitude, j'écrivais un fichier PHP avec la connexion à la base de données, la requête, etc. et j'écrivais un gestionnaire javascript pour le bouton qui effectue un appel AJAX à ce fichier PHP . Mais comment puis-je faire cela en utilisant Joomla? Je cherche une solution simple, la sécurité n’est presque pas pertinente. Merci!

1
Patrick Münster

J'ai lu une partie de la documentation de Chronoforms 5. Après cela, j'ai pu écrire du code personnalisé dans l'élément "Code personnalisé" ajouté à la fin d'un formulaire Chronoforms normal avec le bouton d'envoi. Le code suivant sera exécuté après une soumission réussie. Il lit un paramètre "POST", charge un champ de la base de données et le met à jour après quelques modifications. Des suggestions et des améliorations sont toujours souhaitées.

<?php
    // Get a db connection.
    $db = JFactory::getDbo();

    // Create a new query object.
    $query = $db->getQuery(true);

    // Get event ID from form post
    $eventID = $form->data['eventID'];
    $numberOfTickets = $form->data['numberOfTickets'];

    //#### GET FIELD FROM DB ####//

    // Conditions for which records should be updated and selected.
    $conditions = array(
        $db->quoteName('search') .'='. $db->quote('event-id'.$eventID)
    );

    $query->select($db->quoteName('replace'))->from($db->quoteName('#__rereplacer'))->where($conditions);

    $db->setQuery($query);
    $availableTickets = $db->loadResult();

    //#### UPDATE FIELD FROM DB ####//

    // Fields to update .
    $availableTickets = (int)$availableTickets - (int)$numberOfTickets;
    if ($availableTickets < 0) {
        $availableTickets = 0;
    }

    $fields = array(
        $db->quoteName('replace') . ' = '. $db->quote($availableTickets)
    );

    $query->update($db->quoteName('#__rereplacer'))->set($fields)->where($conditions);

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

 ?>
0
Patrick Münster

Puisque vous utilisez une extension de formulaire, vous devez le faire en suivant ses options et ses fonctionnalités. Je n'ai pas beaucoup d'expérience avec Chronoforms mais je rechercherais une option d'envoi pour exécuter du code personnalisé. Je ne sais pas si vous devez implémenter AJAX (js lors de la soumission à une action côté serveur)) ou tout simplement un extrait de code php qui mettra à jour tout ce que vous souhaitez mettre à jour dans la base de données.

Il est également possible que les chronoformes constituent un autre moyen interne permettant de manipuler les données de la base de données à partir du formulaire - utilisez donc au préalable toutes les possibilités des chronoformes en étudiant leur documentation.

Enfin, il n’est pas clair dans votre question si vous demandez comment faire les choses de la base de données CRUD ... Si c’est ce que vous demandez, cochez ici:

https://docs.joomla.org/Inserting,_Updating_and_Removing_data_using_JDatabase

2
FFrewin