Requète DELETE et INSERT [Résolu/Fermé]
Signaler
papyclic
papyclic
- Messages postés
- 446
- Date d'inscription
- mercredi 5 novembre 2014
- Statut
- Membre
- Dernière intervention
- 18 octobre 2016
papyclic
- Messages postés
- 446
- Date d'inscription
- mercredi 5 novembre 2014
- Statut
- Membre
- Dernière intervention
- 18 octobre 2016
A voir également:
- Requete delete php
- Requète DELETE et INSERT ✓ - Forum - PHP
- Pb syntaxe requète DELETE (php) ✓ - Forum - PHP
- Problème requete delete en php ✓ - Forum - PHP
- [PHP] Requete delete ✓ - Forum - PHP
- PHP/SQL Probléme Requête Delete ✓ - Forum - PHP
17 réponses
jordane45
- Messages postés
- 31509
- Date d'inscription
- mercredi 22 octobre 2003
- Statut
- Modérateur
- Dernière intervention
- 26 février 2021
Bonsoir,
@Anthox:
Hein ?
Il ne fait pas ça du tout....
Il supprime de sa table tb_calendrier la ligne correspondante.... puis il insert dans une autre table des données qu'il a "stocké" dans son objet..... il n'y a rien d'anormal là dedans.
Là oui, je suis d'accord avec toi.
@Papy:
On va dire ça... :-)
Pour ce qui est de ton souci :
L'idéal.. est de séparer tes deux requêtes... dans deux fonctions...
De séparer les paramètres que tu passes dans le execute (du execute)
De faire attention à la syntaxe (tu as des virgules en trop à la fin de tes array)
De nous donner le message d'erreur...car tu dois en avoir sûrement un....
Et si tu n'en as pas.. ajouter un bloc TRY CATCH pour les avoir.
ce qui donnerait :
@Anthox:
Parce-que la... tu fais une requête qui supprime les id du champ id_calendrier de la table tb_calendrier
Et après tu ajoute dans la table tb_historique_calendrier des id dans les champs date_sortie_historique et lieu_sortie_historique.
Hein ?
Il ne fait pas ça du tout....
Il supprime de sa table tb_calendrier la ligne correspondante.... puis il insert dans une autre table des données qu'il a "stocké" dans son objet..... il n'y a rien d'anormal là dedans.
on ne supprime pas quelques chose avant de l'ajouter
Là oui, je suis d'accord avec toi.
@Papy:
j'ai déjà pu faire un petit espace membre qui est opérationnel sans trop de complications bien sur
On va dire ça... :-)
Pour ce qui est de ton souci :
L'idéal.. est de séparer tes deux requêtes... dans deux fonctions...
De séparer les paramètres que tu passes dans le execute (du execute)
De faire attention à la syntaxe (tu as des virgules en trop à la fin de tes array)
De nous donner le message d'erreur...car tu dois en avoir sûrement un....
Et si tu n'en as pas.. ajouter un bloc TRY CATCH pour les avoir.
ce qui donnerait :
public function SuppCalendrier(){ $result=array(); $result['historisation'] = $this->HistoCalendrier(); $result['suppression'] = $this->SuppCalendrierByID(); return $result; } private function SuppCalendrierByID() { try{ $params = array('id_calendrier'=> $this->id_calendrier); $sql = "DELETE FROM tb_calendrier WHERE id_calendrier = :id_calendrier"; $requete = $this->bdd->prepare($sql); $success = $requete->execute($params); }catch(Exception $e) { echo '<br>Exception -> '$e->getMessage(); } return $success; } private function HistoCalendrier(){ try{ $params = array('date_sortie_historique'=> $this->date_sortie_historique ,'lieu_sortie_historique'=> $this->lieu_sortie_historique); $sql = "INSERT INTO tb_historique_calendrier(date_sortie_historique, lieu_sortie_historique) VALUES(:date_sortie_historique, :lieu_sortie_historique)"; $requete = $this->bdd->prepare($sql); $success = $requete->execute($params); }catch(Exception $e) { echo '<br>Exception -> '$e->getMessage(); } return $success; }
Anth0x
- Messages postés
- 2708
- Date d'inscription
- lundi 22 janvier 2007
- Statut
- Membre
- Dernière intervention
- 20 avril 2016
Salut,
Tu a copier coller ce code et tu ne sais pas comment fonctionne le SQL et encore moins PHP (visiblement de l'orienté objet, c'est du PDO) ?
Tu utilise quel logiciel pour coder tout ça ?
Parce-que la... tu fais une requête qui supprime les id du champ id_calendrier de la table tb_calendrier
Et après tu ajoute dans la table tb_historique_calendrier des id dans les champs date_sortie_historique et lieu_sortie_historique.
Pour simplifier, tu supprime une entrée d'une table et de l'autre tu ajoute (id, date ?) dans 2 champs qui n'ont aucun rapport avec l'autre.
De plus on ne supprime pas quelques chose avant de l'ajouter, c'est comme vouloir ajouter quelque chose qui n'existe plus, mais dans tout les cas ce que tu cherche à faire et au vu du code il n'y a rien de cohérent.
Tu a copier coller ce code et tu ne sais pas comment fonctionne le SQL et encore moins PHP (visiblement de l'orienté objet, c'est du PDO) ?
Tu utilise quel logiciel pour coder tout ça ?
Parce-que la... tu fais une requête qui supprime les id du champ id_calendrier de la table tb_calendrier
Et après tu ajoute dans la table tb_historique_calendrier des id dans les champs date_sortie_historique et lieu_sortie_historique.
Pour simplifier, tu supprime une entrée d'une table et de l'autre tu ajoute (id, date ?) dans 2 champs qui n'ont aucun rapport avec l'autre.
De plus on ne supprime pas quelques chose avant de l'ajouter, c'est comme vouloir ajouter quelque chose qui n'existe plus, mais dans tout les cas ce que tu cherche à faire et au vu du code il n'y a rien de cohérent.
papyclic
- Messages postés
- 446
- Date d'inscription
- mercredi 5 novembre 2014
- Statut
- Membre
- Dernière intervention
- 18 octobre 2016
Bonjour
Déjà merci pour ton retour, ce code je ne l'ai copié de null part, je n'ai aucun logiciel je code à la main avec komodo edit.
Je suis débutant avec des requète simple j'ai déjà pu faire un petit espace membre qui est opérationnel sans trop de complications bien sur.
Si j'ai mis ça c'est parce que j'aurai espéré que quelqu'un me donne une directions à suivre en me disant faut faire comme ça ou comme ça.
Mon problème en fait je ne prends pas assez de temps pour réfléchir, mais avec quelques explications j'arrive plus ou moins a faire quelque chose.
Salutations
Déjà merci pour ton retour, ce code je ne l'ai copié de null part, je n'ai aucun logiciel je code à la main avec komodo edit.
Je suis débutant avec des requète simple j'ai déjà pu faire un petit espace membre qui est opérationnel sans trop de complications bien sur.
Si j'ai mis ça c'est parce que j'aurai espéré que quelqu'un me donne une directions à suivre en me disant faut faire comme ça ou comme ça.
Mon problème en fait je ne prends pas assez de temps pour réfléchir, mais avec quelques explications j'arrive plus ou moins a faire quelque chose.
Salutations
papyclic
- Messages postés
- 446
- Date d'inscription
- mercredi 5 novembre 2014
- Statut
- Membre
- Dernière intervention
- 18 octobre 2016
Bonjour
J'ai une erreur
et puis une notice sur le return $success à la ligne 34
Merci pour ton aide.
J'ai une erreur
Erreur : SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
et puis une notice sur le return $success à la ligne 34
Notice: Undefined variable: success in C
Merci pour ton aide.
jordane45
- Messages postés
- 31509
- Date d'inscription
- mercredi 22 octobre 2003
- Statut
- Modérateur
- Dernière intervention
- 26 février 2021
Tu es sûr que tes variables sont bien initialisées ?
Testes ça :
Testes ça :
private function HistoCalendrier(){ try{ $params = array('date_sortie_historique'=> $this->date_sortie_historique ,'lieu_sortie_historique'=> $this->lieu_sortie_historique); $sql = "INSERT INTO tb_historique_calendrier (date_sortie_historique , lieu_sortie_historique) VALUES(:date_sortie_historique, :lieu_sortie_historique)"; $requete = $this->bdd->prepare($sql); $success = $requete->execute($params); }catch(Exception $e) { echo "<br><b>Exception -></b> " . $e->getMessage(); echo "<pre> Requete :<br>".$sql; echo "<br> Params :<br>"; print_r($params); echo "</pre>"; $success = false; } return $success; }
papyclic
- Messages postés
- 446
- Date d'inscription
- mercredi 5 novembre 2014
- Statut
- Membre
- Dernière intervention
- 18 octobre 2016
Bonjour
oui c'est sur mes variables sont bien initialisée je viens juste de vérifier.
Voici le résultat
oui c'est sur mes variables sont bien initialisée je viens juste de vérifier.
Voici le résultat
Exception -> SQLSTATE[42S02]: Base table or view not found: 1146 Table 'cliquedecruet.tb_historique_calendrier' doesn't exist Requete : INSERT INTO tb_historique_calendrier (date_sortie_historique , lieu_sortie_historique) VALUES(:date_sortie_historique, :lieu_sortie_historique) Params : Array ( [date_sortie_historique] => [lieu_sortie_historique] => ) Exception -> SQLSTATE[42S02]: Base table or view not found: 1146 Table 'cliquedecruet.tb_historique_calendrier' doesn't exist Requete : INSERT INTO tb_historique_calendrier (date_sortie_historique , lieu_sortie_historique) VALUES(:date_sortie_historique, :lieu_sortie_historique) Params : Array ( [date_sortie_historique] => [lieu_sortie_historique] => )
papyclic
- Messages postés
- 446
- Date d'inscription
- mercredi 5 novembre 2014
- Statut
- Membre
- Dernière intervention
- 18 octobre 2016
attends j'ai inversé le nom des table
papyclic
- Messages postés
- 446
- Date d'inscription
- mercredi 5 novembre 2014
- Statut
- Membre
- Dernière intervention
- 18 octobre 2016
Alors voilà le retour de la requète par contre j'ai rajouté 2 champs que j'avais dans ma BDD mais pas dans la requète.
Pourtant j'ai bien vérifié le nombre de paramètre.
Pourtant j'ai bien vérifié le nombre de paramètre.
Requete : INSERT INTO tb_calendrier_historique(date_sortie_historique, lieu_sortie_historique, objet_sortie_historique, rdv_sortie_historique) VALUES(:date_sortie_historique, :lieu_sortie_historique, objet_sortie_historique, rdv_sortie_historique) Params : Array ( [date_sortie_historique] => [lieu_sortie_historique] => [objet_sortie_historique] => [rdv_sortie_historique] => ) Exception -> SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens Requete : INSERT INTO tb_calendrier_historique(date_sortie_historique, lieu_sortie_historique, objet_sortie_historique, rdv_sortie_historique) VALUES(:date_sortie_historique, :lieu_sortie_historique, objet_sortie_historique, rdv_sortie_historique) Params : Array ( [date_sortie_historique] => [lieu_sortie_historique] => [objet_sortie_historique] => [rdv_sortie_historique] => )
papyclic
- Messages postés
- 446
- Date d'inscription
- mercredi 5 novembre 2014
- Statut
- Membre
- Dernière intervention
- 18 octobre 2016
En fait ça m'insert 2 entrées vide à chaque suppression d'entrée
papyclic
- Messages postés
- 446
- Date d'inscription
- mercredi 5 novembre 2014
- Statut
- Membre
- Dernière intervention
- 18 octobre 2016
Que faudrait-il faire à ton avis ?
Dans ma t^te c'est pas clair.
Les variables existent bien dans une table.
je pensais pouvoir insérer les entrées dans une table en les supprimant d'une autre tables.
Dans ma t^te c'est pas clair.
Les variables existent bien dans une table.
je pensais pouvoir insérer les entrées dans une table en les supprimant d'une autre tables.
papyclic
- Messages postés
- 446
- Date d'inscription
- mercredi 5 novembre 2014
- Statut
- Membre
- Dernière intervention
- 18 octobre 2016
sinon est-il possible d'insérer les données d'une table dans une autre table.
En fait ce que je souhaite c'est pouvoir supprimer les dates lorsqu'elles sont dépassées mais pouvoir garder un historique de toutes les dates indéfiniments.
En fait ce que je souhaite c'est pouvoir supprimer les dates lorsqu'elles sont dépassées mais pouvoir garder un historique de toutes les dates indéfiniments.
jordane45
- Messages postés
- 31509
- Date d'inscription
- mercredi 22 octobre 2003
- Statut
- Modérateur
- Dernière intervention
- 26 février 2021
Les variables existent bien dans une table.
Oui peut être.. mais .. as tu , à un moment quelconque, dans ton code , renseigné les variables :
$this->lieu_sortie_historique ... etc....
??
Sinon.. il est possible de faire un INSERT/SELECT (avant de supprimer la ligne.. tu l'enregistres dans ton autre table directement...)
Un truc du genre :
private function HistoCalendrier(){ try{ $params = array('id_calendrier'=> $this->id_calendrier); $sql = "INSERT INTO tb_historique_calendrier (date_sortie_historique , lieu_sortie_historique) SELECT date_sortie_historique , lieu_sortie_historique FROM tb_calendrier WHERE id_calendrier = :id_calendrier"; $requete = $this->bdd->prepare($sql); $success = $requete->execute($params); }catch(Exception $e) { echo "<br><b>Exception -></b> " . $e->getMessage(); echo "<pre> Requete :<br>".$sql; echo "<br> Params :<br>"; print_r($params); echo "</pre>"; $success = false; } return $success; }
Cordialement,
Jordane
papyclic
- Messages postés
- 446
- Date d'inscription
- mercredi 5 novembre 2014
- Statut
- Membre
- Dernière intervention
- 18 octobre 2016
oui les variables je les ai bien renseigné.
je rencontre cette erreur, peut tu me donner une explication.
Merci
je rencontre cette erreur, peut tu me donner une explication.
Merci
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'date_sortie_historique' in 'field list'' in C:
papyclic
- Messages postés
- 446
- Date d'inscription
- mercredi 5 novembre 2014
- Statut
- Membre
- Dernière intervention
- 18 octobre 2016
en fait ça donne ça
Exception -> SQLSTATE[42S22]: Column not found: 1054 Unknown column 'date_sortie_historique' in 'field list' Requete : INSERT INTO tb_calendrier_historique (date_sortie_historique , lieu_sortie_historique) SELECT date_sortie_historique , lieu_sortie_historique FROM tb_calendrier WHERE id_calendrier = :id_calendrier Params : Array ( [id_calendrier] => 44 ) Exception -> SQLSTATE[42S22]: Column not found: 1054 Unknown column 'date_sortie_historique' in 'field list' Requete : INSERT INTO tb_calendrier_historique (date_sortie_historique , lieu_sortie_historique) SELECT date_sortie_historique , lieu_sortie_historique FROM tb_calendrier WHERE id_calendrier = :id_calendrier Params : Array ( [id_calendrier] => 44 )
papyclic
- Messages postés
- 446
- Date d'inscription
- mercredi 5 novembre 2014
- Statut
- Membre
- Dernière intervention
- 18 octobre 2016
voici la scructure de mes 2 tables
table tb_calendrier id_calendrier date_sortie lieu_sortie objet_sortie rdv_sortie table tb_calendrier_historique id_calendrier_historique date_sortie_historique lieu_sortie_historique objet_sortie_historique rdv_sortie_historique
jordane45
- Messages postés
- 31509
- Date d'inscription
- mercredi 22 octobre 2003
- Statut
- Modérateur
- Dernière intervention
- 26 février 2021
Le message d'erreur dit :
... en regardant la structure des tables ... tu t'aperçois qu'en effet.. ce champ n'existe pas dans la table tb_calendrier ....
de là ... il suffit de corriger la requête dans le code....
ce qui donne :
Unknown column 'date_sortie_historique' in 'field list'
... en regardant la structure des tables ... tu t'aperçois qu'en effet.. ce champ n'existe pas dans la table tb_calendrier ....
de là ... il suffit de corriger la requête dans le code....
ce qui donne :
private function HistoCalendrier(){ try{ $params = array('id_calendrier'=> $this->id_calendrier); $sql = "INSERT INTO tb_historique_calendrier (date_sortie_historique , lieu_sortie_historique) SELECT date_sortie , lieu_sortie FROM tb_calendrier WHERE id_calendrier = :id_calendrier"; $requete = $this->bdd->prepare($sql); $success = $requete->execute($params); }catch(Exception $e) { echo "<br><b>Exception -></b> " . $e->getMessage(); echo "<pre> Requete :<br>".$sql; echo "<br> Params :<br>"; print_r($params); echo "</pre>"; $success = false; } return $success; }
papyclic
- Messages postés
- 446
- Date d'inscription
- mercredi 5 novembre 2014
- Statut
- Membre
- Dernière intervention
- 18 octobre 2016
super j'ai finalement trouvé, Merci pour tout
Voici la requète finale peut-être que ça peux aider quelqu'un.
Voici la requète finale peut-être que ça peux aider quelqu'un.
$params = array('id_calendrier'=> $this->id_calendrier); $sql = "INSERT INTO tb_calendrier_historique (date_sortie_historique , lieu_sortie_historique, objet_sortie_historique, rdv_sortie_historique) SELECT date_sortie, lieu_sortie, objet_sortie, rdv_sortie FROM tb_calendrier WHERE id_calendrier = :id_calendrier"; $requete = $this->bdd->prepare($sql); $success = $requete->execute($params);