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 :

INSERT INTO dans plusieurs tables [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Par défaut INSERT INTO dans plusieurs tables
    Bonjour,

    Je fais appel à vous parce que j'ai un problème avec l'enregistrement de données dans des tables provenant d'un formulaire et je ne trouve pas tellement mon bonheur sur la toile.

    J'ai un formulaire php qui fonctionne sauf lorsque je souhaite enregistrer les données dans mes tables, il me dit que mes variables ne sont pas définis or elles le sont car j'ai effectué le test ac un echo. Je vous laisse mon code ci-dessous:

    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
    <?php
     
    	if (isset($_POST['Nom'])){
    		$Nom = ($_POST['Nom']);
    	}
    	if (isset($_POST['Prenom'])){
    	 	$Prenom = ($_POST['Prenom']);
    	}
     
    	if (isset($_POST['Depart'])){
    	 	$Depart = $_POST['Depart'];
    	}
     
    	if (isset($_POST['Retour'])){
    	 	$Retour = $_POST['Retour'];
    	}
     
    	if (isset($_POST['BL'])){
    	 	$BL = ($_POST['BL']);
    	}
     
    include("connexion.php");
    $sql2 = "";
    $sql3 = "";
    $sql4 = "";
     
    $sql2 = "INSERT INTO personnes VALUES('', '".$Nom."', '".$Prenom."')";
    $sql3="INSERT INTO emprunts VALUES('',STR_TO_DATE('".$Depart."', '%d/%m/%Y'), '', STR_TO_DATE('".$Retour."', '%d/%m/%Y')";
    $sql4="INSERT INTO bl VALUES ('','".$BL."')";
    	mysql_query($sql2);
    	mysql_query($sql3);
    	mysql_query($sql4);
    	echo '<p>vous serez redirigé automatiquement dans quelques secondes ...</p>';
    	echo '<meta http-equiv="Refresh" content="2"; URL=http://localhost/Essai/Pret.php">';
     
     
    ?>

  2. #2
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 501
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 501
    Par défaut
    Salut,

    As-tu essaye d'afficher les requetes generees ($sql2, $sql3, $sql4) pour voire si elles etaient correctes ?

    Puis, as-tu essaye de copier/coller les requetes generees directement dans phpmyadmin ?

    Si c'est le cas, as-tu un message d'erreur ?
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  3. #3
    Membre Expert
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Par défaut
    Bonjour,

    Je te propose d'initialiser tes variables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $Nom = "";
    if (isset($_POST['Nom'])){ 		$Nom = ($_POST['Nom']); 	}
    Bien cordialement,

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Par défaut
    @Doksuri: J'ai tenter de les afficher dans un tableau mais il ne trouve pas d'enregistrement je pense que cela vient de ma syntaxe dans mon INSERT INTO qui ne doit pas être bonne.

    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
    <?php
     
    	if (isset($_POST['Nom'])){
    		$Nom = ($_POST['Nom']);
    	}
    	if (isset($_POST['Prenom'])){
    	 	$Prenom = ($_POST['Prenom']);
    	}
     
    	if (isset($_POST['Depart'])){
    	 	$Depart = $_POST['Depart'];
    	}
     
    	if (isset($_POST['Retour'])){
    	 	$Retour = $_POST['Retour'];
    	}
     
    	if (isset($_POST['BL'])){
    	 	$BL = ($_POST['BL']);
    	}
     
    include("connexion.php");
    $sql2 = "";
    $sql3 = "";
    $sql4 = "";
     
    $sql2="INSERT INTO personnes VALUES('', '".$Nom."', '".$Prenom."')";
    $sql3="INSERT INTO emprunts VALUES('',STR_TO_DATE('".$Depart."', '%d/%m/%Y'), '', STR_TO_DATE('".$Retour."', '%d/%m/%Y')";
    $sql4="INSERT INTO bl VALUES ('','".$BL."')";
    	$resultat = mysql_query($sql2)or die(mysql_error());
    		$nombre=mysql_num_rows($resultat);
     
    		if($nombre>0){
    	 	 echo "<table>\n";
    			echo "<tr>";
    			echo "<th>Nom responsable</th>";
    			echo "<th>Nom titulaire</th>";
    			echo "<th>Date depart</th>";
    			echo "<th>Date retour</th>";
    			echo "<th>Numéro BL</th>";
    			echo "<th>Consulter</th>";
    			echo "</tr>"; 
    	 	while($row = mysql_fetch_row($resultat)){
    			echo "<tr>";
    			echo "<td>$row[1]</td>";
    			echo "<td>$row[2]</td>";
    			echo "<td>$row[3]</td>";
    			echo "<td>$row[4]</td>";
    			echo "<td>$row[5]</td>";
    			echo "<td><a href='Pret.php'><img src=\"images/fleche2.png\" border=0></a></td>";
    			echo "</tr>";
    		}
    		 echo "</table>";
    		 mysql_free_result($resultat);
    	 	} else
    	 		echo "Aucun résultat ne correspond à votre recherche";
     
     
    ?>
    il me dit "column count doesn't match value count at row 1" donc je n'ai pas d'enregistrement.


    @Mahefasoa:

    J'ai essayer ce que tu m'as conseillé, cela fonctionne cependant il reste bloqué au message "vous serez redirigé automatiquement dans quelques secondes.." donc je ne pense pas qu'il arrive à enregistrer les données ds la bdd.

  5. #5
    Membre Expert
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Par défaut
    Euh ... NON!

    Car d'après ton code originel, quelque soit le résultat mysq_query, il passera toujours par:
    echo '<p>vous serez redirigé automatiquement dans quelques secondes ...</p>';
    ensuite, dans le nouveau code que tu as émis, utilises plutôt mysql_affected_rows() mais pas mysql_num_rows()

    Mysql_affected_rows() retourne le nombre de lignes affectées lors de la dernière requête INSERT, UPDATE, REPLACE ou DELETE. http://php.net/manual/fr/function.my...ected-rows.php

    En plus, pourquoi utilises-tu while($row = mysql_fetch_row($resultat)){ ... alors que $resultat n'est pas une requête SELECT mais INSERT???
    Bien cordialement,

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Par défaut
    J'ai le même message avec mysql_affected_rows() "column count doesn't match value count at row 1" et en regardant dans phpmyadmin il n'y a aucun enregistrement. donc je pense que mon problème se situe au niveau de ma syntaxe de mes INSERT INTO qui ne doit pas être bonne je ne sais pas à vrai dire

  7. #7
    Membre Expert
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Par défaut
    Re,

    Cela veut dire que le nombre de champ contenus dans la table personnes ne correspond pas au nombre de valeur à insérer ...

    Bien cordialement,

  8. #8
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 501
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 501
    Par défaut
    Citation Envoyé par benjamin002 Voir le message
    il me dit "column count doesn't match value count at row 1"
    Le message est pourtant clair, comme la souligne Mahefasoa, tu n'insert pas le bon nombre de champs dans ta table

    si tu ne renseigne pas tous les champs d'une table, tu dois preciser quels champs tu insert
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO ta_table (champ_1, champ_2, ..., champ_n) VALUES (val_1, val_2, ..., val_n)
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Par défaut
    Merci Doksuri et Mahefasoa pour votre aide, le problème venait bien du fait que je ne renseignais pas tous les champs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO ta_table (champ_1, champ_2, ..., champ_n) VALUES (val_1, val_2, ..., val_n)
    Maintenant il ne prend pas en compte toute mes requêtes sql3 et sql4. J'ai besoin de faire des jointures dans un INSERT INTO?

  10. #10
    Membre Expert
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Par défaut
    Bonjour,

    Quel est ton code actuel? Je ne pense pas que ce soit nécessaire (ou possible???) de faire des jointures dans INSERT INTO à moins d'utiliser un SELECT à la place de VALUES ...

    Bien cordialement,

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Par défaut
    voici mon code actuel:

    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
    <?php
     
    $Nom = "";
    $Prenom = "";
    $Depart = "";
    $Retour = "";
    $BL = "";
     
    	if (isset($_POST['Nom'])){
    		$Nom = ($_POST['Nom']);
    	}
    	if (isset($_POST['Prenom'])){
    	 	$Prenom = ($_POST['Prenom']);
    	}
     
    	if (isset($_POST['Depart'])){
    	 	$Depart = $_POST['Depart'];
    	}
     
    	if (isset($_POST['Retour'])){
    	 	$Retour = $_POST['Retour'];
    	}
     
    	if (isset($_POST['BL'])){
    	 	$BL = ($_POST['BL']);
    	}
     
    include("connexion.php");
    $sql2 = "";
    $sql3 = "";
    $sql4 = "";
     
    $sql2="INSERT INTO personnes (nom_responsable, nom_destinataire) VALUES('".$Nom."', '".$Prenom."')";
    $sql3="INSERT INTO emprunts(date_emprunt, date_retour_prevu) VALUES('',STR_TO_DATE('".$Depart."', '%d/%m/%Y'), '', STR_TO_DATE('".$Retour."', '%d/%m/%Y')";
    $sql4="INSERT INTO bl(numero_BL) VALUES ('','".$BL."')";
    	mysql_query($sql2);
    	mysql_query($sql3);
    	mysql_query($sql4);
    	echo '<p>vous serez redirigé automatiquement dans quelques secondes ...</p>';
    	echo '<meta http-equiv="Refresh" content="2; URL=http://localhost/Essai/Pret.php">';
     
    ?>

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Par défaut
    Je rectifie:

    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
    <?php
     
    $Nom = "";
    $Prenom = "";
    $Depart = "";
    $Retour = "";
    $BL = "";
     
    	if (isset($_POST['Nom'])){
    		$Nom = ($_POST['Nom']);
    	}
    	if (isset($_POST['Prenom'])){
    	 	$Prenom = ($_POST['Prenom']);
    	}
     
    	if (isset($_POST['Depart'])){
    	 	$Depart = $_POST['Depart'];
    	}
     
    	if (isset($_POST['Retour'])){
    	 	$Retour = $_POST['Retour'];
    	}
     
    	if (isset($_POST['BL'])){
    	 	$BL = ($_POST['BL']);
    	}
     
    include("connexion.php");
    $sql2 = "";
    $sql3 = "";
    $sql4 = "";
     
    $sql2="INSERT INTO personnes (nom_responsable, nom_destinataire) VALUES('".$Nom."', '".$Prenom."')";
    $sql3="INSERT INTO emprunts(date_emprunt, date_retour_prevu) VALUES(STR_TO_DATE('".$Depart."', '%d/%m/%Y'), STR_TO_DATE('".$Retour."', '%d/%m/%Y')";
    $sql4="INSERT INTO bl(numero_BL) VALUES ('".$BL."')";
    	mysql_query($sql2);
    	mysql_query($sql3);
    	mysql_query($sql4);
    	echo '<p>vous serez redirigé automatiquement dans quelques secondes ...</p>';
    	echo '<meta http-equiv="Refresh" content="2; URL=http://localhost/Essai/Pret.php">';
     
    ?>
    Depuis le numéro BL passe dans l'enregistremetn, il n'y a plus que les dates qui ne s'enregistre pas

  13. #13
    Membre Expert
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Par défaut
    Re,

    As-tu vérifié le contenu des variables $Depart et $Retour en faisant echo sur elles?

    En plus, je ne sais pas quel est le type des champs date_emprunt et date_retour_prevu car si c'est de type DATE ou DATETIME, MySQL les enregistre de la façon suivante: %Y-%m-%d et non %d/%m/%Y (à vérifier)

    Bien cordialement,

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Par défaut
    En faisant un echo je retrouve bien mes données.

    En ce qui concerne date_emprunt et date_retour_prevu ce sont bien des champs DATE. En gros le STR_TO_DATE je ne le met pas dans ce cas, il faut que je l'utilise lorsque j'en ferais appel dans une recherche par exemple pour retrouver ma date dans le format approprié?

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Par défaut
    Lorsque je fais un echo je retrouve donc bien mes valeurs mais sous la forme 00/00/0000 or elles doivent s'enregistrer sous la forme 0000/00/00, d'ou le STR_TO_DATE mais qui n'a pas l'air de fonctionner.. ai-je fais une erreur dans ma syntaxe?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql3="INSERT INTO emprunts(date_emprunt, date_retour_prevu) VALUES(STR_TO_DATE('$Depart', '%d/%m/%Y'), STR_TO_DATE('$Retour', '%d/%m/%Y)";

  16. #16
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 501
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 501
    Par défaut
    Citation Envoyé par benjamin002 Voir le message
    ai-je fais une erreur dans ma syntaxe?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql3="INSERT INTO emprunts(date_emprunt, date_retour_prevu) VALUES(STR_TO_DATE('$Depart', '%d/%m/%Y'), STR_TO_DATE('$Retour', '%d/%m/%Y)";
    je dirais que oui... tu as oublie une parenthese a la fin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql3="INSERT INTO emprunts(date_emprunt, date_retour_prevu) VALUES(STR_TO_DATE('$Depart', '%d/%m/%Y'), STR_TO_DATE('$Retour', '%d/%m/%Y))";
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  17. #17
    Membre Expert
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Par défaut
    Je pense qu'il est assez sage de faire comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query($sql2) or die(mysql_error());
    Au moins le système te renseignera sur l'état des choses quand ça va pas.

    Bien cordialement,

  18. #18
    Membre très actif
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations forums :
    Inscription : Septembre 2008
    Messages : 168
    Par défaut
    Citation Envoyé par benjamin002 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql3="INSERT INTO emprunts(date_emprunt, date_retour_prevu) VALUES(STR_TO_DATE('$Depart', '%d/%m/%Y'), STR_TO_DATE('$Retour', '%d/%m/%Y)";
    Si je ne me trompe pas, sous mysql, la date est au format YYYY-MM-DD et non dd/MM/YYY

    à part, tu peux prendre la bonne habitude de dier tes requêtes. genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query("TRUC") or die (msql_error());
    le or die (msql_error()); te permet de comprendre pourquoi rien n'est exécuté.!

    Pour les jointure d'INSERT, cela n'est pas possible. Mais la problématique d'incohérence entre différents INSERT est résolue avec l'utilisation des transactions.
    Ainsi tu peux annuler un INSERT si les deux autres ne marchent pas comme il se doit!

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 123
    Par défaut
    ok c'est un simple problème de parenthèse.. merci Doksuri

    @tresorunikin:
    Si je ne me trompe pas, sous mysql, la date est au format YYYY-MM-DD et non dd/MM/YYY
    En fait dans mon formulaire la date est au format dd/mm/YYYY et le STR_TO_DATE permet de traduire en YYYY/mm/dd afin qu'elle puisse etre enregistrée ds ma base de donnée.

    En tout cas merci pour votre aide cela fonctionne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. INSERT INTO dans plusieurs tables
    Par moirs555 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 24/08/2011, 13h45
  2. INSERT INTO dans une table vide
    Par DeepXtaZy dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/06/2007, 08h37
  3. Recordset pour INSERT INTO dans une table vide
    Par tAKAmAkA dans le forum VBA Access
    Réponses: 12
    Dernier message: 09/02/2007, 20h52
  4. Insert Into dans une table avec select
    Par smail25 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/12/2006, 13h06
  5. INSERT INTO sur plusieurs tables
    Par Thierry8 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 12/02/2006, 15h26

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