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 :

Eviter deux requêtes


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut Eviter deux requêtes
    Bonjour j'ai un soucis j'ai crée une page (index) qui m'affiche les données de ma table et en haut un formulaire pour rentrer des nouvelles entrée dans ma table,
    le problème est que j'ai rajouté un lien pour modifier les entrée de mon tableau, mais voila lorsque j'enregistre mes modification il retombe sur ma page (index) et ainsi il crée une nouvelle entrée avec les modifications et une entrée sans les modifications, voici le début de ma page (index) qui contient les requêtes :
    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
    if(isset($_POST['gestionnaire'])){ // vérifie la présence des variables de formulaire 
    	if(($_POST['gestionnaire'] == "") || ($_POST['equipe'] == "") || ($_POST['date'] == "") || ($_POST['poste'] == "") || ($_POST['semaine'] == "") || ($_POST['montage'] == "") || ($_POST['profil'] == "") || ($_POST['cde_acier'] == "") || ($_POST['casier'] == "") || ($_POST['nombre'] == "") || ($_POST['wagon'] == "") || ($_POST['coullee'] == "") || ($_POST['commande'] == "")){ 
    	header("Location:rapport.php?erreur=empty"); // message en cas de champ non remplis
    	}
    		// passe les variables $POST en variables
    		$id = $_POST['id'];
    		$gestionnaire = $_POST['gestionnaire'];
    		$equipe = $_POST['equipe'];
    		$date = $_POST['date'];
    		$poste = $_POST['poste'];
    		$semaine = $_POST['semaine'];
    		$montage = $_POST['montage'];
    		$profil = $_POST['profil'];
    		$cde_acier = $_POST['cde_acier'];
    		$casier = $_POST['casier'];
    		$nombre = $_POST['nombre'];
    		$wagon = $_POST['wagon'];
    		$coullee = $_POST['coullee'];
    		$commande = $_POST['commande'];
    		// insert into dans raport
    		$add_user = sprintf("INSERT INTO rapport (gestionnaire, equipe, date, poste, semaine, montage, profil, cde_acier, casier, nombre, wagon, coullee, commande) VALUES ('$gestionnaire', '$equipe', '$date', '$poste', '$semaine', '$montage', '$profil', '$cde_acier', '$casier', '$nombre', '$wagon', '$coullee', '$commande')");
      		mysql_select_db($database_dbprotect, $dbprotect);
      		$result = mysql_query($add_user, $dbprotect) or die(mysql_error());
    		header("Location:rapport.php?add=ok"); // message comme quoi l'enregistrement à été fait
    		// on fait la requête pour la modification
    		mysql_select_db($database_dbprotect, $dbprotect);
    		$modif_users = "UPDATE rapport
                SET gestionnaire         = '$gestionnaire', 
    	      equipe     = '$equipe',
    		  date    = '$date',
    		  poste           = '$poste',
    		  semaine = '$semaine',
    		  montage     = '$montage',
    		  profil    = '$profil',
    		  cde_acier           = '$cde_acier',
    		  casier = '$casier',
    		  nombre    = '$nombre',
    		  wagon           = '$wagon',
    		  coullee = '$coullee'
    		  commande     = '$commande'
               WHERE id = '$id' "; 
    		$modifier = mysql_query($modif_users, $dbprotect) or die(mysql_error());
    		header("Location:rapport.php?add=ok"); // message comme quoi l'enregistrement à été fait
    }
    j'espère avoir été clair ! je pense que le problème vien du fait que en retombant sur la page index il lance d'abord la requête insert et ensuite update, il me faudrait un moyen de lui faire comprendre que si je sort de ma page (modfi) après avoir modifier les données alors il exécute la requête update sinon si on rempli le form sur la page index il exécute insert !

  2. #2
    Membre émérite
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Par défaut
    Bonjour,
    Je pense que c'est normal car dans le même bloc de code, tu as une requete d'insertion ET une requête de modification.
    il faut que tu exécutes l'une ou l'autre selon ce que tu fais avec ton formulaire : ajout ou modification.
    Une solution serait un champ caché dans le formulaire qui pourrait s'appeler 'action'. Si action contient 'insert', tu fais une insertion. Si actio contient 'modif', et bien tu fais la modification. Tout ca bien sur avec un if qui test $_POST['action'].

    Bon courage.
    Z.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut
    Merci bonne idée

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut
    j'ai donc appliqué ton conseil, mais j'ai un soucis, quand je modifie une entrée de ma table, il fait la modification mais il garde toujours l'autre entrée (non modifier dans ma table)

    alors voici mon code car je ne voit pas du tout ou j'ai fait une erreur :

    en début de page, se code dit si action est égal a insertion alors on crée une nouvelle entrée sinon si c'est modification on modifier l'entrée portant l'id selectionner :
    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
    if(isset($_POST['action']) == "insertion"){ // vérifie la présence des variables de formulaire 
    	if(($_POST['gestionnaire'] == "") || ($_POST['equipe'] == "") || ($_POST['date'] == "") || ($_POST['poste'] == "") || ($_POST['semaine'] == "") || ($_POST['montage'] == "") || ($_POST['profil'] == "") || ($_POST['cde_acier'] == "") || ($_POST['casier'] == "") || ($_POST['nombre'] == "") || ($_POST['wagon'] == "") || ($_POST['coullee'] == "") || ($_POST['commande'] == "")){ 
    	header("Location:rapport.php?erreur=empty"); // message en cas de champ non remplis
    	}
    		// passe les variables $POST en variables
    		$id = $_POST['id'];
    		$gestionnaire = $_POST['gestionnaire'];
    		$equipe = $_POST['equipe'];
    		$date = $_POST['date'];
    		$poste = $_POST['poste'];
    		$semaine = $_POST['semaine'];
    		$montage = $_POST['montage'];
    		$profil = $_POST['profil'];
    		$cde_acier = $_POST['cde_acier'];
    		$casier = $_POST['casier'];
    		$nombre = $_POST['nombre'];
    		$wagon = $_POST['wagon'];
    		$coullee = $_POST['coullee'];
    		$commande = $_POST['commande'];
    		// insert into dans raport
    		$add_user = sprintf("INSERT INTO rapport (gestionnaire, equipe, date, poste, semaine, montage, profil, cde_acier, casier, nombre, wagon, coullee, commande) VALUES ('$gestionnaire', '$equipe', '$date', '$poste', '$semaine', '$montage', '$profil', '$cde_acier', '$casier', '$nombre', '$wagon', '$coullee', '$commande')");
      		mysql_select_db($database_dbprotect, $dbprotect);
      		$result = mysql_query($add_user, $dbprotect) or die(mysql_error());
    		header("Location:rapport.php?add=ok"); // message comme quoi l'enregistrement à été fait
    }
    else if(isset($_POST['action']) == "modification"){
    	// on fait la requête pour la modification
    		mysql_select_db($database_dbprotect, $dbprotect);
    		$modif_users = "UPDATE rapport
                SET gestionnaire         = '$gestionnaire', 
    	      equipe     = '$equipe',
    		  date    = '$date',
    		  poste           = '$poste',
    		  semaine = '$semaine',
    		  montage     = '$montage',
    		  profil    = '$profil',
    		  cde_acier           = '$cde_acier',
    		  casier = '$casier',
    		  nombre    = '$nombre',
    		  wagon           = '$wagon',
    		  coullee = '$coullee'
    		  commande     = '$commande'
               WHERE id = '$id' "; 
    		$modifier = mysql_query($modif_users, $dbprotect) or die(mysql_error());
    		header("Location:rapport.php?modif=ok"); // message comme quoi l'enregistrement à été fait
    }

  5. #5
    Membre émérite
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Par défaut
    isset retourne une valeur booléenne non ?
    Ou bien je viens d'apprendre qu'on peut faire isset(var) == 'data'

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    quand je modifie une entrée de ma table, il fait la modification mais il garde toujours l'autre entrée (non modifier dans ma table)
    C'est quoi l'autre entrée ?
    Comment ce fait il que tu ais 2 entrées pour 1 ID (identifiant) ? (c'est pas normal).

    D'ailleurs, pour l'action "insertion", tu fais ceci : $id = $_POST['id'];
    C'est pas normal, car vu que l'insertion n'a pas encore été effectuée à ce stade, il est impossible d'avoir (ou d'obtenir) son ID, car un identifiant par définition est unique.
    Donc c'est une fois avoir exécuté la requête d'insertion qu'il sera possible d'avoir le nouvel ID, et ceci ce fait grâce à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id = mysql_insert_id();

    Ceci dit, quand tu entre dans l'action "modification", tu ne récupère pas les données reçues en POST, donc aucune variable n'est initialisée (tu le fais que pour l'insertion).
    Du coup, tu devrais avoir des messages d'erreurs Php indiquant que les variables n'existent pas ($id entre autre).
    C'est à mon sens pour ça qu'aucune modif est faite dans ta table.
    Si tu n'as pas d'erreur, faudrait peut être faire en sorte que ça les affichent (ça aide à comprendre), comme agir sur ton php.ini : display_errors à mettre à On et mettre le error_reporting à E_ALL.

Discussions similaires

  1. Comparer le contenu de deux requêtes
    Par Floch dans le forum Access
    Réponses: 2
    Dernier message: 04/05/2006, 11h43
  2. [MySQL] Afficher deux requêtes en deux colonnes
    Par SnickeursMan dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 21/11/2005, 11h19
  3. Mixer deux requêtes
    Par WriteLN dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/11/2005, 09h34
  4. Afficher le ratio du résultat de deux requêtes
    Par decour dans le forum Access
    Réponses: 25
    Dernier message: 07/11/2005, 19h54
  5. Eviter deux nombres identiques dans un tirage aléatoire
    Par moon tiger dans le forum Pascal
    Réponses: 5
    Dernier message: 25/11/2002, 09h57

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