[RESOLU] Insertion formulaire et clé étrangère

Petit nouveau ! | 7 Messages

26 août 2013, 13:26

Bonjour voici mon problème :
Voici le MCD de ma BDD
http://hpics.li/c5ba26a

J'ai un formulaire qui permet d'ajouter des projet cependant il ne prend pas en compte les 3 clès étrangères (nroId,idType,idEtat) : valeurs 0 dans la base de données.
Toutes mes données s'ajoutent sauf ces 3 là !

Voici le code d'insertion :
<?php

// on test si le formulaire a bien été soumis
if(isset($_POST['subProjet']))
{
  $nomProjet=$_POST['nomProjet'];
  $etat=$_POST['etat'];
  $type=$_POST['type'];
  $commentaires=addslashes($_POST['commentaires']);
  $dateDebut=date("d-m-Y");
 
  //connexion à la base de donnée
  include('connexion.php');
  
  //création de la requête SQL:
  $sql =  " INSERT  INTO projet(dateDebut, nomProjet, etatProjet, typeProjet, commentaires)
            VALUES ('$dateDebut','$nomProjet','$etat','$type','$commentaires')";
  $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
  //affichage d'un message de validation de l'ajout
  if($requete)
  {
	header("Location:index.php");
  }
  else
  {
    echo "<script> alert ('Votre ajout a échoué !');</script>" ;
  }
}
?>
Merci de votre aide

ViPHP
ViPHP | 2577 Messages

26 août 2013, 13:39

Tu ne mets pas à jour nroId,idType et idEtat
Mais : dateDebut, nomProjet, etatProjet, typeProjet, commentaires

Peut être dois tu ajouter un insert sur une table (idType,typeprojet) ?

Petit nouveau ! | 7 Messages

26 août 2013, 13:45

Merci de ta réponse,
En fait il y a deja des valeurs dans les tables etat, type et utilisateur.
Je vois mon erreur en gros il faudrait faire 3 jointures mais je ne voit pas comment ??
Pour les éléments de la table projet c'est bon je les récupère via le formulaire mais pour ces 3 clés étrangère il faudrait les récupérer dans les autres tables!
Une idée?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 août 2013, 13:54

salut,

de plus le modèle n'est pas correct (au vu des noms des colonnes), a priori etatProjet, typeProjet n'ont rien a faire dans la table projet, car proviennent des relation avec les autres tables ;)

ensuite qu'elles sont les valeurs que tu renseigne actuellement dans ces deux colonnes ? (ce ne serait pas les clef primaire des autres tables des fois ?)

ensuite si la requête n'échoue pas c'est que tu as des index zéro dans les autres table ?(étonnant) ou que les FK ne sont pas déclarée comme tel au niveau du sgbd, ou nullable ?

sans le formulaire on ne pas trop savoir ce que tu passe comme valeur, mais j'imagine que l'état et le type sont des liste déroulante ?
si oui c'est la clef primaire des tables qu'il faut passer en value des options (<option value="412">le nom textuelle</option> par exemple, 412 étant la valeur de la clef primaire).

Ton code est ouvert aux injections SQL (CF google ;) ).
pour éviter cela tu peux utiliser mysql_real_escape_string.

Dernière chose, l'extension mysql est voué à disparaître, tu peux t'orienter vers mysqli qui est similaire en mieux ;)

@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 2577 Messages

26 août 2013, 13:56

Je ne comprends pas trop ton problème. Lors de l'insert dans la table Projet , tu renseignes etatProjet, tu dois pouvoir le récupérer.

Par contre, il me semblerai plus logique de stocker idEtat dans la table projet de rechercher etatProjet dans la table correspondante lorsque tu en a besoin.

(Mon proxy m'empêche de voir le MCD.)

Petit nouveau ! | 7 Messages

26 août 2013, 14:27

Problème résolu ! Gros fouilli dans la BDD ! Du n'importe quoi et des champs en trop :)
Merci de vos réponses je vais faire de mon mieux