web-dev-qa-db-fra.com

Impossible d'insérer des valeurs de formulaire dans la base de données Joomla 3

Je crée un module joomla personnalisé basé sur la soumission de formulaire, mais j'ai quelques problèmes pour insérer les valeurs. J'ai un formulaire html contenant certains champs qui transmettent des valeurs à mod_score.php qui vérifie la validation vide et procède à helper.php, où i avoir la fonction pour insérer les valeurs de formulaire.

Test sur mon hôte local (XAMPP)
Version 3.4
Modèle Protostar

  // This is the class

class modScoreCardHelper
        {
    function saveCard($params)
        {
        $input= new JInput;
        $match_id           =   $input->get('match_id',null);
        $match_time         =   $input->get('match_time',null);
        $match_venue        =   $input->get('match_venue',null);
        $match_team_one     =   $input->get('match_team_one',null);
        $match_team_two     =   $input->get('match_team_two',null);
        $match_result       =   $input->get('match_result',null);
        $match_umpire_one   =   $input->get('match_umpire_one',null);
        $match_umpire_two   =   $input->get('match_umpire_two',null);
        $match_mom          =   $input->get('match_mom',null);
        $match_toss         =   $input->get('match_toss',null);
        $match_fow          =   $input->get('match_fow',null);
        $match_comments     =   $input->get('match_comments',null);
        $match_debutants    =   $input->get('match_debutants',null);


        // Get a db connection.
        $db = JFactory::getDbo();
        echo 'starting to insert in db';
        // Create a new query object.
        $query = $db->getQuery(true);

        // Insert columns.
        $columns = array('match_id', 'match_time', 'match_venue', 'match_result','match_team_one',
                'match_team_two','match_umpire_one','match_mom','match_comments','match_debutants',
                'match_umpire_two','match_toss','match_fow');



        $values = array($match_id, $match_time, $match_venue,$match_result,$match_team_one,
                $match_team_two,$match_umpire_one,$match_mom,$match_comments,
                $match_debutants,$match_umpire_two,$match_toss,$match_fow);




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

        // Set the query using our newly populated query object and execute it.
            $db->setQuery($query);
            $db->execute();


        }
    }

J'ai simplement copié la requête dans phpmyadmin et exécuté le code qui m'a donné l'erreur 1064 telle qu'elle apparaît sur le site. J'ai beaucoup cherché sur Google et ajouté des guillemets au champ des valeurs de colonne comme "MI", "RCB" dans phpmyadmin et la requête a été exécutée avec succès .there mais je ne sais pas comment ajouter des guillemets doubles. De plus, dans la requête, les espaces sont supprimés
Par exemple: valeur réelle = MI gagné devient MIwon.

comment supprimer ces espaces et guillemets dans ma requête et supprimer cette erreur Merci d'avance

enter image description here

1
Srinath Naidu

Remplacez votre entrée $ par ce qui suit:

$input = JFactory::getApplication()->input

Utilisez $db->quote($name_of_your_value_var);

Donc, vos valeurs en dollars seront les suivantes:

$values = array($match_id, $db->quote($match_time), $db->quote($match_venue),$db->quote($match_result),$db->quote($match_team_one),
                $db->quote($match_team_two),$db->quote($match_umpire_one),$db->quote($match_mom),$db->quote($match_comments),
                $db->quote($match_debutants),$db->quote($match_umpire_two),$db->quote($match_toss),$db->quote($match_fow));

Vous pouvez omettre $db->quote Si vous passez un entier à la base de données. par exemple Je n'ai pas ajouté $db->quote Pour $match_id. (en supposant que vous passez un entier dans cette variable)

Aussi, je vous suggère d'utiliser la méthode JTable pour les opérations CRUD sur la base de données. Cela vous facilitera sûrement la vie.

1
Sahil Purav

Juste un peu pour développer la réponse de @Sahil Purav. La raison pour laquelle vos valeurs pourraient ne pas être stockées comme elles le devraient est que vous devez définir un filtre dans vos entrées.

Essayez d’ajouter RAW à chacun d’entre eux, comme suit:

$match_id           =   $input->get('match_id', null, 'RAW');
$match_time         =   $input->get('match_time', null, 'RAW');
$match_venue        =   $input->get('match_venue', null, 'RAW');
$match_team_one     =   $input->get('match_team_one', null, 'RAW');
$match_team_two     =   $input->get('match_team_two' null, 'RAW');
$match_result       =   $input->get('match_result', null, 'RAW');
$match_umpire_one   =   $input->get('match_umpire_one', null, 'RAW');
$match_umpire_two   =   $input->get('match_umpire_two', null, 'RAW');
$match_mom          =   $input->get('match_mom', null, 'RAW');
$match_toss         =   $input->get('match_toss', null, 'RAW');
$match_fow          =   $input->get('match_fow', null, 'RAW');
$match_comments     =   $input->get('match_comments', null, 'RAW');
$match_debutants    =   $input->get('match_debutants', null, 'RAW');
2
Lodder