[RESOLU] Formulaire et traitement en une page

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Formulaire et traitement en une page

Re: Formulaire et traitement en une page

par Dilidim » 03 juin 2015, 18:17

Il y a ID dans la table client_tb et dans la table inter il y a ID et ID_client qui fait référence a l'ID de la table client_tb.
Cet ID_client est bien ma clé étrangère qui est référencé. C'est pour ça que je ne comprend pas =/

Re: Formulaire et traitement en une page

par Saian » 03 juin 2015, 16:23

L'id client existe-t-il dans la table client_tb ? car s'il y a bien une ligne correspondante dans la table client_tb et que id_client est bien définit dans la requête d'insertion, il n'y a aucune raison pour que tu ais l'erreur foreign key constraint fails.

Re: Formulaire et traitement en une page

par Dilidim » 03 juin 2015, 11:47

Même en renseignant et en ajoutant l'id_client dans l'insert ça m'affiche toujours l'erreur.
if(isset($_POST)){
    
    $id = getPost("id");
    $id_client = getPost("id_client");
    $date = getPost("date");
    $inter = getPost("inter");
    $tech = getPost("tech");
    $comm = getPost("comm");
    $temps = getPost("temps");

  if($id){
  // Mise à jour via un UPDATE
    $sql_inter = "UPDATE inter
                  SET date = '$date'
                       , inter = '$inter'
                       , tech =  '$tech'
                       , comm =  '$comm'
                       , temps = '$temps'
                  WHERE id ='$id' ";
    $requete = mysql_query($sql_inter) or die( mysql_error()."<br>REQUETE:<pre>".$sql_inter."</pre>");

  }else{
   // Création nouveau ( INSERT )
      $sql_inter = "INSERT  INTO inter
                 (id_client, date, inter, tech, comm, temps)
                VALUES ('$id_client', '$date','$inter', '$tech', '$comm', '$temps')";
    $requete = mysql_query($sql_inter) or die( mysql_error()."<br>REQUETE:<pre>".$sql_inter."</pre>");
  }

Re: Formulaire et traitement en une page

par Saian » 02 juin 2015, 18:39

Tu as une table inter avec une colonne id_client not null et tu as de plus une contrainte de clé étrangère sur cette même colonne.
Il faut bien entendu la renseigner lors de l'insertion de la ligne.

Sinon tu as mis ça dans ton code : $client_id = mysql_insert_id();
Alors si tu mets $id_client dans la requête ça ne va pas fonctionner...

Re: Formulaire et traitement en une page

par Dilidim » 02 juin 2015, 18:15

Je dois modifier ma requête comme ceci ?
{
   // Création nouveau ( INSERT )
      $sql_inter = "INSERT  INTO inter
                 (id_client, date, inter, tech, comm, temps)
                VALUES ('$id_client', '$date','$inter', '$tech', '$comm', '$temps')";
    $requete = mysql_query($sql_inter) or die( mysql_error()."<br>REQUETE:<pre>".$sql_inter."</pre>");
  }

Re: Formulaire et traitement en une page

par Saian » 02 juin 2015, 18:08

Il est où l'id_client dans ta requête d'insert la ?

INSERT INTO inter
(date, inter, tech, comm, temps)
VALUES ('2015-05-29','Bureau', 'Dimitri', 'Test', '5')

Tu comprends toujours pas ?

Re: Formulaire et traitement en une page

par Dilidim » 02 juin 2015, 17:46

L' id_client doit correspondre à l'id de la table client_tb. Si je met en NULL l'inter ne va être attribué a personne =/
CREATE TABLE IF NOT EXISTS `client_tb` (
  `id` smallint(5) NOT NULL,
  `nom_e` varchar(30) NOT NULL,
  `nom_cl` varchar(30) NOT NULL,
  `fixe` varchar(20) NOT NULL,
  `fonc` varchar(30) NOT NULL,
  `civ` varchar(20) NOT NULL,
  `groupe` varchar(20) NOT NULL,
  `contrat` varchar(20) NOT NULL,
  `fax` varchar(20) NOT NULL,
  `mob` varchar(20) NOT NULL,
  `mail` varchar(30) NOT NULL,
  `web` varchar(30) NOT NULL,
  `adr` varchar(30) NOT NULL,
  `ville` varchar(30) NOT NULL,
  `cp` char(5) NOT NULL,
  `infos` longblob NOT NULL

CREATE TABLE IF NOT EXISTS `inter` (
  `id` smallint(5) NOT NULL,
  `id_client` smallint(5) NOT NULL,
  `date` date NOT NULL,
  `inter` varchar(20) NOT NULL,
  `tech` varchar(20) NOT NULL,
  `comm` text NOT NULL,
  `temps` decimal(10,0) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `client_tb`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `inter`
  ADD PRIMARY KEY (`id`),
  ADD KEY `id_client` (`id_client`);

ALTER TABLE `client_tb`
  MODIFY `id` smallint(5) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3;

ALTER TABLE `inter`
  MODIFY `id` smallint(5) NOT NULL AUTO_INCREMENT;

ALTER TABLE `inter`
  ADD CONSTRAINT `inter_ibfk_1` FOREIGN KEY (`id_client`) REFERENCES `client_tb` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

Re: Formulaire et traitement en une page

par Saian » 02 juin 2015, 15:35

Comme dit précédemment, j'imagine que la colonne id_client DOIT être définie.

Si tu veux pouvoir ajouter une ligne dans la table inter sans être obligé de renseigner cette colonne, alors modifie la structure de la table en conséquence (autoriser le NULL sur la colonne par exemple).

Re: Formulaire et traitement en une page

par Diidim » 02 juin 2015, 10:44

Help SVP :)

Re: Formulaire et traitement en une page

par Dilidim » 01 juin 2015, 09:40

Dans la table client_tb j'ai ID et dans la table inter j'ai ID (pour l'intervention) ainsi que ID_client (qui est la clé étrangère).

Re: Formulaire et traitement en une page

par Saian » 29 mai 2015, 18:16

Oui, il y a une contrainte de clé étrangère qui échoue.
Je suppose que tu dois avoir une colonne id_client sur la table inter et tu ne l'as défini pas alors qu'elle devrait ?

Re: Formulaire et traitement en une page

par Dilidim » 29 mai 2015, 18:13

Merci Saian, je n'avais pas vu.

Hélas erreur :

Cannot add or update a child row: a foreign key constraint fails (`intervention`.`inter`, CONSTRAINT `inter_ibfk_1` FOREIGN KEY (`id_client`) REFERENCES `client_tb` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
REQUETE:

INSERT INTO inter
(date, inter, tech, comm, temps)
VALUES ('2015-05-29','Bureau', 'Dimitri', 'Test', '5')

Problème de clé étrangère ?

Re: Formulaire et traitement en une page

par Saian » 29 mai 2015, 17:56

Salut Dilidim, j'ai pas tout lu mais sur ton lien il manque un " :
echo '<td><a href=[u]"[/u]inter.php?id='.$ligne['id'].'">'.$value.'</a></td>';

Re: Formulaire et traitement en une page

par Dilidim » 29 mai 2015, 17:54

Pour le paramètre dans l'url, je le renseigne dans formulaire.php avec
<table id="rec">
   <?php
    $NbrCol = 6;
     if($resulta){
      echo "<th>N°</th><th>Date</th><th>Type d'inter</th><th>Tech</th><th>Commentaire</th><th>Temps</th>";
      while($ligne=mysql_fetch_assoc($resulta)) {
       echo "<tr>";
       foreach($ligne as $value){
       [u] echo'<td><a href=inter.php?id='.$ligne['id'].'">'.$value.'</a></td>';[/u]

C'est pas la bonne méthode ?

Merci pour le lien faut que je lise plusieurs fois pour vraiment comprendre la totalité.

Re: Formulaire et traitement en une page

par Gregory » 29 mai 2015, 15:32

$_SERVER['PHP_SELF'] : contient le nom du script en cours.

Dans ton formulaire de création de client tu dois bien avoir un bouton submit pour valider les informations, c'est le nom de ce bouton qui va te permettre de mettre ta condition pour créer ton client le if (isset( ....

pour modifier il faut passer un paramètre dans l'url et verifier si ce paramètre existe, sa valeur, si c est bien un entier etc... puis avec le meme principe.
Je te conseille de regarder ici http://sylvie-vauthier.developpez.com/t ... ormulaires ca te donnera une petite idee de comment fonctionne les formulaire en php.