IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Mettre à jour une liste de favoris


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut Mettre à jour une liste de favoris
    Bonjour,

    J'ai une table dat_favourites avec le code SQL suivant:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    CREATE TABLE IF NOT EXISTS `dat_recents` (
      `id_user` int(10) UNSIGNED NOT NULL,
      `id_customer` int(10) UNSIGNED NOT NULL,
      `update_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      KEY `id_user` (`id_user`),
      KEY `id_customer` (`id_customer`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    INSERT INTO `dat_recents` (`id_user`, `id_customer`, `update_date`) VALUES
    (4, 399, '2021-04-14 19:49:54'),
    (6, 2950, '2021-06-02 10:04:22'),
    (6, 2951, '2021-06-02 09:55:47'),
    (6, 2953, '2021-06-02 10:03:52'),
    (6, 3010, '2021-06-02 10:03:59'),
    (6, 3011, '2021-06-02 10:04:41'),
    (7, 1, '2021-06-13 08:09:31'),
    (7, 2, '2021-06-13 08:06:17'),
    (7, 3, '2021-06-13 08:07:15'),
    (7, 5, '2021-06-13 08:05:40'),
    (7, 6, '2021-06-13 07:30:32');
     
    ALTER TABLE `dat_recents`
      ADD CONSTRAINT `dat_recents_ibfk_1` FOREIGN KEY (`id_customer`) REFERENCES `dat_customers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
      ADD CONSTRAINT `dat_recents_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `dat_users.old` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
    Et la fonction PDO suivante:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function updateLatest($userId, $customerId) {
    	$db = dbConnect();
    	// By deleting then inserting, the column 'update_date' is automatic updated
    	// there are also no duplicate and unused tuples
    	var_dump($userId,$customerId); // return 9, 3
     
    	$sql = <<<SQL
    	DELETE FROM dat_recents
    	WHERE id_user=:userId AND id_customer=:customerId
    SQL;
    	$stmt = $db->prepare($sql);
    	$stmt->execute([':userId'=>$userId, ':customerId'=>$customerId]);
     
    	$sql = <<<SQL
    		INSERT IGNORE INTO dat_recents
    		(id_user, id_customer) VALUES(:userId, :customerId)
    SQL;
    	$stmt = $db->prepare($sql);
    	$stmt->execute([':userId'=>$userId, ':customerId'=>$customerId]);
    }

    Pourquoi le couple 9,3 ne s'enregistre pas?

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Problème d'intégrité référentielle ?
    Ces valeurs existent-elles dans les tables dat_customers et dat_users.old ?

    Pour connaître la raison de l'échec d'une requête préparée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $insert = $pdo->prepare($sql);
    $insert->execute(...);
    print_r($insert->errorInfo());
    Ou dans un try/catch si tu as paramétré PDO pour lever une exception.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Ligne 18 on voit que sans la table la valeur 3 existe mais pas la valeur 7 qui lui est associée.
    En modifiant mes index avec une clef primaire sur les deux colonnes, cela fonctionne.
    Voici mes nouvelles contraintes:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      PRIMARY KEY (`id_user`,`id_customer`),
      KEY `id_customer` (`id_customer`),
      KEY `id_user` (`id_user`)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [QtGui] Mettre à jour une liste QComboBox
    Par autousto dans le forum PyQt
    Réponses: 2
    Dernier message: 07/07/2011, 13h17
  2. mettre à jour une liste deroulante
    Par emenemza dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 30/09/2008, 08h39
  3. Réponses: 6
    Dernier message: 23/09/2008, 15h57
  4. Soucis pour mettre à jour une liste déroulante.
    Par Fbzn_office dans le forum VBA Access
    Réponses: 1
    Dernier message: 06/03/2008, 19h22
  5. impossible de mettre à jour une liste déroulante
    Par nicolovitch dans le forum Access
    Réponses: 3
    Dernier message: 02/08/2006, 11h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo