Souci avec PHP Mysqlserver [Résolu] - MySQL

A voir également:Souci avec php mysqlserverPhp redirect - Conseils pratiques - PHP Php - Articles Undefined index php - Conseils pratiques - PHP Alert php ✓ - Forum - PHP Easy php - Télécharger - Serveurs

Bonjour Chers Tous,

J'ai besoin d'aide SVP

Voici l'erreur que je rencontre :

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`shop`.`comments`, CONSTRAINT `items_comment` FOREIGN KEY (`item_id`) REFERENCES `items` (`Item_ID`) ON DELETE CASCADE ON UPDATE CASCADE)' in C:\wamp\www\Admin\items.php on line 98


Voici la ligne 98 : $stmt->execute(array('zcomment' => $comment, 'zitemid' => $itemid, 'zuserid' => $userid));

Merci de m'aider SVP

Forum

A voir également:Souci avec php mysqlserverPhp redirect - Conseils pratiques - PHP Php - Articles Undefined index php - Conseils pratiques - PHP Alert php ✓ - Forum - PHP Easy php - Télécharger - Serveurs

Web: www.shapebootstrap.net

2 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

bonjour, ta base de données inclut cette contrainte:

 CONSTRAINT `items_comment` FOREIGN KEY (`item_id`) REFERENCES `items` (`Item_ID`) ON DELETE CASCADE ON UPDATE CASCADE 

je suppose que tu sais pourquoi.
et le changement que tu essaies de faire via php ne respecte pas cette contrainte.

Reply
réponses:
  • auteur

  • auteur

    Donc que dois-je faire ?
    Parce que j'ai essayé de faire des modifications mais toujours la même erreur
    Please

  • auteur

    explique-nous ton contexte, qu'essaies-tu de réaliser? modifies-tu un programme qui fonctionnait, crées-tu un nouveau programme, une nouvelle base de données?
    n'hésite pas à nous donner trop d'explications. jusqu'à présent, tu n'as partagé qu'une ligne de code et un message d'erreur.

  • auteur

    Okay,
    J'ai crée des Items (Exemple: Speaker) et je veux ajouter des commentaires, lorsque j'écris le commentaire, que je valide j'ai le message d'erreur : <code>Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`shop`.`comments`, CONSTRAINT `items_comment` FOREIGN KEY (`item_id`) REFERENCES `items` (`Item_ID`) ON DELETE CASCADE ON UPDATE CASCADE)' in C:\wamp\www\Admin\items.php on line 98></code

    Pour la contrainte, c'est pour que lorsque j'effectue une modification soit Update ou Delete sur le User ou la Catégorie ou ou la Itemcela prenne en compte les tables qui sont liées

  • auteur

    quand je te demande des explications supplémentaires, il est inutile de répéter ce que tu as déjà expliqué, et de redonner les mêmes informations. il est plus utile de donner d'autres informations.

    explique-nous ton contexte, qu'essaies-tu de réaliser? modifies-tu un programme qui fonctionnait, crées-tu un nouveau programme, une nouvelle base de données?

    ensuite, explique aussi quelle requête SQL tu exécutes en ligne 98. insert ou update, dans quelle table?

    la contrainte fait plus que ce que tu décris: elle empêche de créer des enregistrements non liés (Cannot add or update a child row).

  • auteur

    $stmt = $con->prepare("INSERT INTO comments(comment, status, comment_date, item_id, user_id) VALUES(:zcomment, 0, NOW(), :zitemid, :zuserid)");

    Ligne 98 : $stmt->execute(array('zcomment' => $comment, 'zitemid' => $itemid, 'zuserid' => $userid));

  • auteur

    est-ce que tu as dans la table items un enregistrement ayant la valeur de la variable $itemid dans le champ Item_ID?

  • auteur

    J'apprends à créer un site ecommerce, la contrainte créé j'avais des difficultés(les mêmes erreurs) là dessus, j'ai vider ma table et j'ai repris l'enregistrement c'est passé. Donc tout marchait très bien, et arriver au stade d'ajout des commentaires, la même erreur est revenue

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

Yg_be t'a donné les informations nécéssaires à la compréhension de ton erreur...
Si tu ne comprends pas, et pour que l'on puisse t'aider.. il nous faut :

- La structure de tes tables (un dump sql serait pas mal)
- Le code PHP qui provoque cette erreur (celui contenant ta requête)

NB: Pour poster du code sur le forum, il faut utiliser la coloration syntaxique (voir ici pour les explications : http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code )

Reply
réponses:
  • auteur

  • auteur

    Le code PHP qui provoque l'erreur :

    if ($_SERVER['REQUEST_METHOD'] == 'POST') { $comment  = filter_var($_POST['comment'], FILTER_SANITIZE_STRING); $itemid  = $item['Cat_ID']; $userid  = $_SESSION['uid'];         if (! empty($comment)) { $stmt = $con->prepare("INSERT INTO comments(comment, status, comment_date, item_id, user_id) VALUES(:zcomment, 0, NOW(), :zitemid, :zuserid)"); Ligne 98 :  $stmt->execute(array('zcomment' => $comment, 'zitemid' => $itemid, 'zuserid' => $userid));  if ($stmt) { echo '<[div] class="alert alert-success">Comment Added</div>'; }


    Structure des tables :
    -- phpMyAdmin SQL Dump -- version 4.0.4 -- http://www.phpmyadmin.net -- -- Client: localhost -- Généré le: Sam 10 Mars 2018 à 12:04 -- Version du serveur: 5.6.12-log -- Version de PHP: 5.4.12  SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00";  /*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; /*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; /*!40101 SET @[email protected]@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */;  -- -- Base de données: `shop` -- CREATE DATABASE IF NOT EXISTS `shop` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; USE `shop`;  -- -------------------------------------------------------- -- -- Structure de la table `categories` --  CREATE TABLE IF NOT EXISTS `categories` (   `ID` int(11) NOT NULL AUTO_INCREMENT,   `Name` varchar(255) NOT NULL,   `Description` text NOT NULL,   `Ordering` int(11) DEFAULT NULL,   `Visibility` tinyint(4) NOT NULL DEFAULT '0',   `Allow_Comment` tinyint(4) NOT NULL DEFAULT '0',   `Allow_Ads` tinyint(4) NOT NULL DEFAULT '0',   PRIMARY KEY (`ID`),   UNIQUE KEY `name` (`Name`) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ;  -- -- Contenu de la table `categories` --  INSERT INTO `categories` (`ID`, `Name`, `Description`, `Ordering`, `Visibility`, `Allow_Comment`, `Allow_Ads`) VALUES (8, 'Hand Made', 'Hand Made Items', 1, 0, 0, 0), (9, 'Computers ', 'Computers Item', 2, 0, 0, 0), (10, 'Cell Phones ', 'Cell Phones', 3, 0, 0, 0), (11, 'Clothing ', 'Clothing And Fashion', 4, 0, 0, 0), (12, 'Tools ', 'Home Tools', 5, 0, 0, 0);  -- --------------------------------------------------------  -- -- Structure de la table `comments` --  CREATE TABLE IF NOT EXISTS `comments` (   `c_id` int(11) NOT NULL AUTO_INCREMENT,   `comment` text NOT NULL,   `status` tinyint(4) NOT NULL,   `comment_date` date NOT NULL,   `item_id` int(11) NOT NULL,   `user_id` int(11) NOT NULL,   PRIMARY KEY (`c_id`),   KEY `items_comment` (`item_id`),   KEY `comment_user` (`user_id`) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=83 ;  -- -- Contenu de la table `comments` --  INSERT INTO `comments` (`c_id`, `comment`, `status`, `comment_date`, `item_id`, `user_id`) VALUES (17, 'Very Nice ', 1, '2018-03-09', 19, 9), (20, 'This Is Very Nice', 1, '2018-03-08', 20, 10), (24, 'Very Thanks for the Speaker', 1, '2018-03-10', 12, 10), (25, 'Very Good This is Speaker', 1, '2018-03-10', 12, 10), (42, 'TET HAMMER', 1, '2018-03-10', 12, 10), (47, 'Very Cool', 1, '2018-03-10', 12, 10), (48, 'Test Cool HAMMER', 1, '2018-03-14', 19, 10), (50, 'Essai Test HAMMER', 1, '2018-03-10', 12, 10), (51, 'This Is Good Phone ', 1, '2018-03-15', 18, 10), (61, 'Test', 1, '2018-03-10', 12, 10), (62, 'Essai', 1, '2018-03-10', 12, 10);  -- --------------------------------------------------------  -- -- Structure de la table `items` --  CREATE TABLE IF NOT EXISTS `items` (   `Item_ID` int(11) NOT NULL AUTO_INCREMENT,   `Name` varchar(255) NOT NULL,   `Description` text NOT NULL,   `Price` varchar(255) NOT NULL,   `Add_Date` date NOT NULL,   `Country_Made` varchar(255) NOT NULL,   `Image` varchar(255) NOT NULL,   `Status` varchar(255) NOT NULL,   `Rating` smallint(6) NOT NULL,   `Approve` int(11) NOT NULL DEFAULT '0',   `Cat_ID` int(11) NOT NULL,   `Member_ID` int(11) NOT NULL,   PRIMARY KEY (`Item_ID`),   KEY `member_1` (`Member_ID`),   KEY `cat_1` (`Cat_ID`) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ;  -- -- Contenu de la table `items` --  INSERT INTO `items` (`Item_ID`, `Name`, `Description`, `Price`, `Add_Date`, `Country_Made`, `Image`, `Status`, `Rating`, `Approve`, `Cat_ID`, `Member_ID`) VALUES (12, 'Speaker', 'Very Good Speaker', '$10', '2018-03-07', 'China', '', '1', 0, 0, 9, 8), (13, 'Yeti Blue Mic', 'Very Good Microphone Very Good Microphone ', '$108', '2018-03-07', 'USA', '', '1', 0, 0, 9, 8), (15, 'Magic House', 'Apple Magic House ', '$150', '2018-03-07', 'USA', '', '1', 0, 0, 9, 4), (17, 'Game', 'Test Game For Item', '120', '2018-03-09', 'USA', '', '2', 0, 0, 9, 10), (18, 'iPhone 6s', 'iPhone 6s Very Cool Phone', '1500', '2018-03-09', 'USA', '', '1', 0, 0, 10, 10), (19, 'Hammer', 'A Very Good Iron Hammer', '30', '2018-03-09', 'China', '', '2', 0, 0, 12, 10), (20, 'Good Box', 'Nice Hand Made Box', '40', '2018-03-09', 'Egypt', '', '1', 0, 1, 8, 10), (22, 'Game Boy 4', 'Game Boy 4 PS', '15', '2018-03-10', 'Usa', '', '1', 0, 0, 9, 9), (23, 'Network Cable ', 'Cat 9 Network Cable ', '100', '2018-03-10', 'USA', '', '1', 0, 0, 9, 10), (24, 'Microphone 4', 'Good Microphone 4', '20', '2018-03-10', 'China', '', '2', 0, 1, 10, 10), (25, 'SamsungGalaxy S8', 'Very Good Phone Last Generation', '200', '2018-03-10', 'USA', '', '2', 0, 0, 10, 8), (26, 'Samsung S7', 'Samsung Galaxy S7', '150', '2018-03-10', 'USA', '', '2', 0, 0, 10, 10);  -- --------------------------------------------------------  -- -- Structure de la table `users` --  CREATE TABLE IF NOT EXISTS `users` (   `UserID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'To Identify User',   `Username` varchar(255) NOT NULL COMMENT 'Username To Login',   `Password` varchar(255) NOT NULL COMMENT 'Password To Login',   `Email` varchar(255) NOT NULL,   `FullName` varchar(255) NOT NULL,   `GroupeID` int(11) NOT NULL DEFAULT '0' COMMENT 'Identify User Group',   `TrustStatus` int(11) NOT NULL DEFAULT '0' COMMENT 'Seller Rank',   `RegStatus` int(11) NOT NULL DEFAULT '0' COMMENT 'User Approval',   `Date` date NOT NULL,   PRIMARY KEY (`UserID`),   UNIQUE KEY `Username` (`Username`) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;  -- -- Contenu de la table `users` --  INSERT INTO `users` (`UserID`, `Username`, `Password`, `Email`, `FullName`, `GroupeID`, `TrustStatus`, `RegStatus`, `Date`) VALUES (1, 'Osee', 'b1cc6d1236555bc8697c08a2e8525f3a28f9ef62', '[email protected]', 'Osee KOUAKOU', 1, 0, 1, '0000-00-00'), (4, 'Joel', '9b20e3fda40f19fb383c7e2514d7ed7c0f1f7e8a', '[email protected]', 'Joel NIKEBIE', 0, 0, 1, '2018-03-06'), (5, 'Oseek', '872460d8d00ac671722d85b0e7009f2668200c6d', '[email protected]', 'Oseek KOUAKOU ', 0, 0, 1, '2018-03-06'), (6, 'Koffi', 'd337d00783ddfcf439b6456b2f7d77d5416f7d2e', '[email protected]', 'Koffi KOUAKOU', 0, 0, 1, '2018-03-06'), (7, 'Application', '7d1043473d55bfa90e8530d35801d4e381bc69f0', '[email protected]', 'Application API', 0, 0, 0, '2018-03-07'), (8, 'MichelO', '181178b1bd9a2e2c445075cad43d010ff0f73295', '[email protected]', 'Michel Osée', 0, 0, 1, '2018-03-08'), (9, 'Solange', '41e26370f5c33c92d1ed618bdb6678afda69a625', '[email protected]', '', 0, 0, 0, '2018-03-09'), (10, 'Michel', 'd86cf0597f44b91b8401b079c7b26728c48c7301', '[email protected]', '', 0, 0, 1, '2018-03-09'), (11, 'Oseekouakou', '7e8f0575b8d3bdbc742142924b27e2c99c40cb44', '[email protected]', '', 0, 0, 0, '2018-03-09');  -- -- Contraintes pour les tables exportées --  -- -- Contraintes pour la table `comments` -- ALTER TABLE `comments`   ADD CONSTRAINT `comment_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`UserID`) ON DELETE CASCADE ON UPDATE CASCADE,   ADD CONSTRAINT `items_comment` FOREIGN KEY (`item_id`) REFERENCES `items` (`Item_ID`) ON DELETE CASCADE ON UPDATE CASCADE;  -- -- Contraintes pour la table `items` -- ALTER TABLE `items`   ADD CONSTRAINT `cat_1` FOREIGN KEY (`Cat_ID`) REFERENCES `categories` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE,   ADD CONSTRAINT `member_1` FOREIGN KEY (`Member_ID`) REFERENCES `users` (`UserID`) ON DELETE CASCADE ON UPDATE CASCADE;  /*!40101 SET [email protected]_CHARACTER_SET_CLIENT */; /*!40101 SET [email protected]_CHARACTER_SET_RESULTS */; /*!40101 SET [email protected]_COLLATION_CONNECTION */; 

  • auteur

    que contient $itemid?

  • auteur

     if ($_SERVER['REQUEST_METHOD'] == 'POST') {  $comment = filter_var($_POST['comment'], FILTER_SANITIZE_STRING); $itemid = $item['Cat_ID']; $userid = $_SESSION['uid'];   if (! empty($comment)) { $stmt = $con->prepare("INSERT INTO comments(comment, status, comment_date, item_id, user_id) VALUES(:zcomment, 0, NOW(), :zitemid, :zuserid)");  $stmt->execute(array('zcomment' => $comment, 'zitemid' => $itemid, 'zuserid' => $userid));  if ($stmt) {cho '<div class="alert alert-success">Comment Added</div>';}

  • auteur

    pour savoir ce que contient $itemid, fais

    echo $itemid;
    , et partage le ce qui est affiché. cela te permettra de vérifie si tu as dans la table items un enregistrement ayant la valeur de la variable $itemid dans le champ Item_ID.

  • auteur

    J'ai mis cette ligne en commentaire :

    $stmt->execute(array('zcomment' => $comment, 'zitemid' => $itemid, 'zuserid' => $userid));


    Et j'ai fais
    echo $stmt;
    , voici le résultat :
     Catchable fatal error: Object of class PDOStatement could not be converted to string in C:\wamp\www\Admin\items.php on line 100


    En laissant cette ligne :
    $stmt->execute(array('zcomment' => $comment, 'zitemid' => $itemid, 'zuserid' => $userid));


    Voici ce que j'obtiens :
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`shop`.`comments`, CONSTRAINT `items_comment` FOREIGN KEY (`item_id`) REFERENCES `items` (`Item_ID`) ON DELETE CASCADE ON UPDATE CASCADE)' in C:\wamp\www\Admin\items.php on line 98

  • auteur

    bizarre, pourquoi fais-tu

    echo $stmt;
    quand je suggère
    echo $itemid;
    ?

  • auteur

    Oh désolé je ne me suis pas rendu compte, j'ai regarder la requête juste en haut. Desolé

    Sinon voici le résultat :

    echo $itemid; 12

    Lorsque je mets
    echo $itemid;
    j'atoute un commentaire dans le Item HAMMER, cela m'affiche le
    Item_ID
    de l'Item SPEAKER qui est 12

    Désolé pour l'incompréhension

  • auteur

    Je ne comprends pas pourquoi tu obtiens l'erreur sur "CONSTRAINT `items_comment`" si $itemid vaut 12 et que tu as bien l'enregistrement "(12, 'Speaker',..." dans la table items.

  • auteur

    J'obtiens l'erreur lorsque j'ajoute cette ligne :

    $stmt->execute(array('zcomment' => $comment, 'zitemid' => $itemid, 'zuserid' => $userid)); 


    Et aussi, le résultat du $itemid = 12 équivaut à l'Item du Speaker pourtant je suis sur la page de l'ITEM Hammer afin d'ajouter un commentaire à l'article Hammer

  • auteur

    En ce moment, lorsque je veux ajouter un commentaire dans le Item Hammer qui a pour itemid= 19, cela prend en compte le itemid = 12 de l'Item Speaker, le commentaire s'affiche bien dans le Item Speaker alors qu'il devrait s'afficher dans le Item Hammer
    Et tous les autres Items, lorsque je veux ajouter un commentaire, cela m'affiche l'erreur suivante :

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`shop`.`comments`, CONSTRAINT `items_comment` FOREIGN KEY (`item_id`) REFERENCES `items` (`Item_ID`) ON DELETE CASCADE ON UPDATE CASCADE)' in C:\wamp\www\Admin\items.php on line 98

    ( ! ) PDOException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`shop`.`comments`, CONSTRAINT `items_comment` FOREIGN KEY (`item_id`) REFERENCES `items` (`Item_ID`) ON DELETE CASCADE ON UPDATE CASCADE) in C:\wamp\www\Admin\items.php on line 98

  • auteur

    tu ne nous as montré qu'une partie de ton code, celle où le message d'erreur est affiché.
    cela semble être la conséquence d'une erreur de logique qui se produit à la ligne

    $itemid = $item['Cat_ID'];
    , ou avant.
    je me demande si tu ne mélanges pas ID dans la table categories avec Item_ID dans la table items.

  • auteur

    Oui effectivement, je me suis un peu mélangé. Je me suis fais aidé aussi et j'ai trouvé d'où l'erreur venait.
    Merci infiniment pour ton assistance, cela m'a mis sur le chemin.

  • auteur

    parfait, peux-tu alors marquer le sujet comme résolu (via la roue dentée à droite du titre)?

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed