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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 494
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 494
    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 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,

  5. #5
    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

  6. #6
    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,

  7. #7
    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.

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 494
    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,

+ 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