Problème d'insertion, de modification et de suppression

34 views
Skip to first unread message

mamoud...@gmail.com

unread,
Oct 22, 2015, 8:25:10 AM10/22/15
to ZnetDK
Bonjour

1. Lorsque je fais une insertion via le formulaire, j'ai le message Echec d'enregistrement du niveau. Mais en vérifiant dans la table, je vois bien l'enregistrement

2. Lorsque je veux modifier un enregistrement j'ai l'erreur Un problème technique est survenu pendant le traitement de la dernière action demandée. Veuillez contacter votre administrateur et lui signaler le détail de l'erreur ci-dessous :
"SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'moi' for key 'PRIMARY' - C:\EasyPHP\data\localweb\znetdk\engine\core\dao.php(356)"

3. Lorsque je veux supprimer un enregistrement j'ai l'erreur Un problème technique est survenu pendant le traitement de la dernière action demandée. Veuillez contacter votre administrateur et lui signaler le détail de l'erreur ci-dessous :
"DAO-006: the parameter 'rowID' is absent when calling the method 'DAO::remove()' or the properties 'filterValues' and 'filterClause' are not properly set for the class 'app\model\NiveauDAO' to remove data row! - C:\EasyPHP\data\localweb\znetdk\engine\core\dao.php(398)"

Pascal Martinez

unread,
Oct 22, 2015, 2:17:42 PM10/22/15
to ZnetDK
Bonsoir,

1. Lorsque je fais une insertion via le formulaire....
Pourriez-vous me communiquer le code source de l'action du contrôleur qui retourne le message "Echec d'enregistrement du niveau" en réponse à ce post ? 

2. Lorsque je veux modifier un enregistrement j'ai l'erreur...
Comme indiqué dans le message, une violation de contrainte unique a été détectée à la modification d'une ligne de table (erreur retournée par MySQL). La valeur 'moi' est mise à jour pour la clé primaire de la table spécifiée dans le DAO alors qu'une ligne existe déjà avec la même valeur de clé primaire. 
>> La valeur 'moi' n'est pas une valeur habituelle de clé primaire qui devrait être une valeur entière. 

3. Lorsque je veux supprimer un enregistrement j'ai l'erreur...
Comme indiqué dans le message, le paramètre d'appel de la méthode DAO::remove($rowID) est absent ou NULL.
>> Vérifier que l'identifiant de la ligne à supprimer est correctement transmis à l'appel de la méthode DAO::remove($rowID) depuis l'action de suppression dans le contrôleur.

Cordialement,

Pascal MARTINEZ

mamoud...@gmail.com

unread,
Oct 22, 2015, 7:24:44 PM10/22/15
to ZnetDK
Bonsoir Pascal
Ci-dessous les différents éléments :

TABLE SQL
CREATE TABLE niveaux (
  niveau varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  description varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (niveau )
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

MODELE
<?php
namespace app\model;
class NiveauDAO extends \DAO
{
    protected function initDaoProperties() {
        $this->table = "niveaux";
    }
}

CONTROLEUR
<?php
namespace app\controller;
class NiveauCtrl extends \AppController
{
static protected function action_lister() { $niveauDAO = new \app\model\NiveauDAO(); $niveaux = array(); while($row = $niveauDAO->getResult()) { $niveaux[] = $row; } /* Réponse retournée au contrôleur de façade */ $response = new \Response(); $response->rows = $niveaux; $response->success = true; return $response; } static protected function action_enregistrer() { /* Lecture des données de la requête HTTP */ $request = new \Request(); $row = $request->getValuesAsMap('niveau','description'); /* Enregistrement des données en Base de données */ $niveauDAO = new \app\model\NiveauDAO(); $result = $niveauDAO->store($row); /* Réponse retournée au contrôleur de façade */ $response = new \Response(); if ($result) { $response->setSuccessMessage('Enregistrement', 'Enregistrement réussi.'); } else { $response->setFailedMessage('Enregistrement', "Echec d'enregistrement."); } return $response; } static protected function action_supprimer() { /* Lecture des données de la requête HTTP */ $request = new \Request(); $rowID = $request->id; /* Suppression du fournisseur en Base de données */ $niveauDAO = new \app\model\NiveauDAO(); $result = $niveauDAO->remove($rowID); /* Réponse retournée au contrôleur de façade */ $response = new \Response(); if ($result) { $response->setSuccessMessage('Suppression', 'Suppression du fournisseur réussie.'); } else { $response->setFailedMessage('Suppression', 'Echec de suppression du fournisseur.'); } return $response; } }


mamoud...@gmail.com

unread,
Oct 22, 2015, 7:26:38 PM10/22/15
to ZnetDK
VUE
<!-- Boutons d'action -->
<div class="zdk-action-bar" data-zdk-dialog="dlg_niveau"
                            data-zdk-datatable="table_niveaux">
    <button class="zdk-bt-add" title="Nouveau">Ajouter</button>
    <button class="zdk-bt-edit" title="Modification">Modifier</button>
    <button class="zdk-bt-remove" title="Suppression"
            data-zdk-action="niveauCtrl:supprimer">Supprimer</button>
</div>
<!-- Tableau des fournisseurs -->
<div id="table_niveaux" class="zdk-datatable" title="Fournisseurs"
        data-zdk-action="niveauCtrl:lister"
        data-zdk-columns='[{"field":"niveau", "headerText": "Niveau"},
                {"field":"description", "headerText": "description"}]'>
</div>
<!-- Formulaire dans boîte de dialogue -->
<div id="dlg_niveau" class="zdk-modal" title="Niveau">
    <form class="zdk-form"
        data-zdk-action="niveauCtrl:enregistrer"
        data-zdk-datatable="table_niveaux">
        <label>Niveau : </label>
        <input name="niveau" maxlength="50" required type="text">        
        <label>description : </label>
        <input name="description" maxlength="50" required type="text">
        <button class="zdk-bt-save zdk-close-dialog" type="submit">Enregistrer</button>
        <button class="zdk-bt-cancel zdk-close-dialog" type="button">Annuler</button>
    </form>
</div>

Pascal Martinez

unread,
Oct 23, 2015, 10:48:39 AM10/23/15
to ZnetDK
Bonjour,

Il vous manque dans la table MySQL "niveaux" un identifiant technique correspondant normalement à la colonne "id" , comme dans la table "fournisseurs" du tutoriel ZnetDK :

CREATE TABLE fournisseurs (
 id int(11) NOT NULL AUTO_INCREMENT,
 nom varchar(50) COLLATE utf8_unicode_ci NOT NULL,
 adresse varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
 code_postal varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
 ville varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
 PRIMARY KEY (id),
 UNIQUE KEY fournisseurs_nom_uk (nom)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

En vous aidant du tutoriel, ajouter la valeur 'id' à la table "niveaux", à l'action "enregistrer"et à la vue dans le formulaire de saisie  (le champ "id" peut être un champ désactivé ou caché).

Tout devrait alors beaucoup mieux fonctionner.

Pascal MARTINEZ

mamoud...@gmail.com

unread,
Oct 27, 2015, 1:15:21 PM10/27/15
to ZnetDK
Bonjour Pascal

c'est parfait. ça marche super bien.
Reply all
Reply to author
Forward
0 new messages