Requète DELETE et INSERT [Résolu/Fermé]

Signaler
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
-
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
-
Bonjour,
Excusez moi du titre je ne savais pas trop comment le nommer.
En fait c'est un peu particulier.
J'ai un lien afin de pouvoir supprimer une entrée d'une table.
le lien
<a href="./index.php?body=supp_calendrier&type=admin&id_calendrier=<?php echo $donnees['id_calendrier'];?>"></a>

Mais ce que je souhaiterai c'est lorsque je supprime cette entrée ça m'insert cette même entrée dans une autre table.
voilà ce que j'ai ébauché.
	public function SuppCalendrier() {
		$sql = "DELETE
				FROM tb_calendrier
				WHERE id_calendrier = :id_calendrier";
		$requete = $this->bdd->prepare($sql);
		$success = $requete->execute(array(
						':id_calendrier' 	=> $this->id_calendrier,
						));
		
		$sql2 = "INSERT INTO tb_historique_calendrier(date_sortie_historique, lieu_sortie_historique)
				VALUES(:date_sortie_historique, :lieu_sortie_historique)";
		$requete2 = $this->bdd->prepare($sql2);
		$success = $requete2->execute(array(
						'date_sortie_historique' 	=> $this->date_sortie_historique,
						'lieu_sortie_historique' 	=> $this->lieu_sortie_historique,
						));
		
		return $success;
	}

La suppression ce fait bien mais pas l'insert, pouvez vous s'ils vous plait m'éclairer un peu je ne vois vraiment pas comment m'y prendre.
Merci beaucoup

17 réponses

Messages postés
31509
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
3 283
Bonsoir,

@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;
}

2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
2708
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
20 avril 2016
861
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.
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
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
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
Bonjour
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.
Messages postés
31509
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
3 283
Tu es sûr que tes variables sont bien initialisées ?
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;
}

Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
Bonjour
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] => 
)

Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
attends j'ai inversé le nom des table
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
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.
 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] => 
)

Messages postés
31509
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
3 283
Ben... le PARAMS .. est vide....
donc .. normal que ça ne marche pas !

tes
$this->date_sortie_historique
.. ne contiennent rien visiblement !
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
En fait ça m'insert 2 entrées vide à chaque suppression d'entrée
Messages postés
31509
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
3 283
Ben oui... tes variables SONT VIDES
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
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.
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
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.
Messages postés
31509
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
3 283
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
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
oui les variables je les ai bien renseigné.
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:
Messages postés
31509
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
3 283
En faisant quoi ?
Tu n'as rien d'autre qui s'affiche ?
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
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
)

Messages postés
31509
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
3 283
Le message est clair. ..la colonne n'existe pas dans l'une des tables.
Ne connaissant pas la structure de tes tables je ne peux pas te répondre
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
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
Messages postés
31509
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
3 283
Et bien. ... tu n'arrive pas à modifier la requête ?
Messages postés
31509
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 février 2021
3 283
Le message d'erreur dit :
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;
}


Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
super j'ai finalement trouvé, Merci pour tout
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);
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
Merci pout tout, j'avais pas vu que tu m'avais renvoyé un post.