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 :

Problème de requête UPDATE


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 9
    Par défaut Problème de requête UPDATE
    Bonjour Messieurs,

    J'ai un projet de diplôme qui à un bug dont je n'arrive pas à trouver la cause

    Ça fait plusieurs jours que j tourne autour et je n'arrive pas à faire ce que je veux.

    Pour résumer. j'ai deux clés étrangères envoyé depuis une table utilisateur (fk_pk_tec, fk_pk_cli) sur une table tâche.

    Lorsque je fais un ajout, tout fonctionne très bien mais lorsque je modifie, je n'arrive pas à récupérer la pk de mes listes déroulantes.

    Client et Technicien sont des alias dans ma base de données.

    Pour être encore plus précis, ces fichiers PHP interagissent avec une appli ExtJS

    Voilà mon code.

    Code : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    <?php
    /**
     * This is general file which contains
     * connection file, common function file, etc.,
     *
     */
        require "connection.php";
     
    	$fk_pk_cli = $_REQUEST['comboClient-inputEl'];
    	$fk_pk_tec = $_REQUEST['comboTechnicien-inputEl'];
    	$fk_pk_statac = $_REQUEST['comboStatutTache-inputEl'];
    	$fk_pk_inf = $_REQUEST['comboInfrastructure-inputEl'];
    	$fk_pk_fac = 1;
    	$nom_cli = $_REQUEST['client'];
    	$nom_tec = $_REQUEST['technicien'];
    	$nom_statac = $_REQUEST['nom_statac'];
    	$nom_inf = $_REQUEST['nom_inf'];
    	$tit_tac = $_REQUEST['tit_tac'];
    	$des_tac	= $_REQUEST['des_tac'];
    	$datdeb_tac = $_REQUEST['datdeb_tac'];
    	$heudeb_tac = $_REQUEST['heudeb_tac'];
    	$datfin_tac = $_REQUEST['datfin_tac'];
    	$heufin_tac = $_REQUEST['heufin_tac'];
    	$cat_tac = $_REQUEST['cat_tac'];
    	$urg_tac = $_REQUEST['urg_tac'];
    	$pri_tac = $_REQUEST['pri_tac'];
     
    	//print_r $REQUEST[];
     
    	if(isset($_REQUEST['pk_tac']))
    	{
    		 $requeteclient = "Select pk_uti from tb_utilisateur where client = '$nom_cli'";
    		 $execclient = mysql_query($requeteclient) or die ("Erreur dans la requête ExecClient".mysql_error()); 
    		 $clientid=mysql_fetch_assoc($execclient);
    		 $selectclient= $clientid["pk_uti"];
    		 echo $selectclient;
     
    		$requetetechnicien = "Select pk_uti from tb_utilisateur where technicien = '$nom_tec'";
    		$exectechnicien = mysql_query($requetetechnicien) or die ("Erreur dans la requête ExecTechnicien".mysql_error()); 
    		$technicienid=mysql_fetch_assoc($exectechnicien);
    		$selecttechnicien= $technicienid["pk_uti"];
    		echo $selecttechnicien;
     
     
     
    		 $requeteinfrastructure = "Select pk_inf from tb_infrastructure where nom_inf = '$nom_inf'";
    		 $execinfrastructure = mysql_query($requeteinfrastructure) or die ("Erreur dans la requête ExecInfrastructure".mysql_error()); 
    		 $infrastructureid=mysql_fetch_assoc($execinfrastructure);
    		 $selectinfrastructure= $infrastructureid["pk_inf"];
     
    		 $requetestatuttache = "Select pk_statac from tb_statut_tache where nom_statac = '$nom_statac'";
    		 $execstatuttache = mysql_query($requetestatuttache) or die ("Erreur dans la requête ExecStatutTache".mysql_error()); 
    		 $statuttacheid=mysql_fetch_assoc($execstatuttache);
    		 $selectstatuttache= $statuttacheid["pk_sta_tac"];
     
    		$pk_tac = $_REQUEST['pk_tac'];
    		$querytache = "Update tb_tache SET fk_pk_cli = '$selectclient' ,fk_pk_tec = '$selecttechnicien',  fk_pk_statac = '$selectstatuttache', fk_pk_inf = '$selectinfrastructure' , tit_tac = '$tit_tac', des_tac = '$des_tac' , datdeb_tac = '$datdeb_tac', heudeb_tac= '$heudeb_tac , datfin_tac = '$datfin_tac' , heufin_tac = '$heufin_tac' , cat_tac = '$cat_tac', urg_tac = '$urg_tac', pri_tac = '$pri_tac' where pk_tac = '$pk_tac'";	
    	}
    	else
    	{
    		$querytache = "Insert into tb_tache (fk_pk_cli, fk_pk_tec, fk_pk_inf, fk_pk_statac, fk_pk_fac, tit_tac, des_tac, datdeb_tac, heudeb_tac, datfin_tac, heufin_tac, cat_tac, urg_tac, pri_tac) values ('$fk_pk_cli','$fk_pk_tec','$fk_pk_inf','$fk_pk_statac','$fk_pk_fac','$tit_tac','$des_tac', '$datdeb_tac', '$heudeb_tac', '$datfin_tac', '$heufin_tac', '$cat_tac','$urg_tac', '$pri_tac')";
    	}
    	$exectache = mysql_query($querytache) or die ("Erreur dans la requête ExecTache".mysql_error()); 
     
    	echo '{"success":"true","msg":""}';	
    ?>
    Merci d'avance

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Visiblement, tu as une erreur d'apostrophe dans la requête UPDATE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Update tb_tache
    SET fk_pk_cli = '$selectclient',
    	fk_pk_tec = '$selecttechnicien',
    	fk_pk_statac = '$selectstatuttache',
    	fk_pk_inf = '$selectinfrastructure' ,
    	tit_tac = '$tit_tac',
    	des_tac = '$des_tac' ,
    	datdeb_tac = '$datdeb_tac',
    	heudeb_tac= '$heudeb_tac , -- <== Ici il manque une apostrophe !
    	datfin_tac = '$datfin_tac' ,
    	heufin_tac = '$heufin_tac' ,
    	cat_tac = '$cat_tac',
    	urg_tac = '$urg_tac',
    	pri_tac = '$pri_tac'
    where pk_tac = '$pk_tac'
    En écrivant la requête comme je l'ai fait, elle est plus claire et plus facile à débugguer. Une bonne habitude à prendre !
    D'une manière générale, aère et indente ton code.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 9
    Par défaut Merci mais...
    Je te remercie pour cette erreur que je n'avais pas vu mais le problème est récurant...

    C'est un problème de contrainte en fait...

    Voilà l'erreur FireBug

    Erreur dans la requ�te ExecTacheCannot add or update a child row: a foreign key constraint fails (`itmanagement`.`tb_tache`, CONSTRAINT `tb_tache_ibfk_1` FOREIGN KEY (`fk_pk_tec`) REFERENCES `tb_utilisateur` (`pk_uti`))

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Fais un echo de la requête avant envoi au serveur ou bien complète le die :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    die ("Erreur dans la requête ExecTache ".mysql_error().'<br />Requête : '.$querytache)
    Tu verras ainsi tes variables incluses dans la requête avec leur valeur et ce sera plus facile de comprendre pourquoi tu as cette erreur de violation de contrainte de clé étrangère.
    Soit ta variable $selecttechnicien n'est pas valorisée, soit elle contient une valeur qui n'existe pas dans la table de référence.

    Fais attention aussi aux injections SQL ! Tu devrais protéger toutes les variables passées dans les requêtes avec mysql_real_escape_string pour les variables textuelles et intval pour les entiers, ou bien utiliser PDO.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. [Hibernate][proxy] Problème exécution requêtes update et remove
    Par amadoulamine1 dans le forum Hibernate
    Réponses: 2
    Dernier message: 08/07/2011, 12h18
  2. Problème avec requête UPDATE: mystère
    Par land willys dans le forum VB.NET
    Réponses: 6
    Dernier message: 18/08/2008, 16h05
  3. Problème de requête Update
    Par neuneu1 dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/11/2007, 14h08
  4. Réponses: 5
    Dernier message: 10/07/2006, 12h05
  5. [VB6] Problème avec requête Update
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/02/2006, 03h40

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