Page 1 sur 1

Problème INSERT

Posté : 03 août 2006, 22:41
par dunbar
bonjour,
Pour que des données s'enregistre dans ma TABLE je suis obliger de supprimer la 1 ligne de ma table donc je ne sais enregistré qu'une seule ligne et après plus aucun enregistrement ne fonctionne, de plus à chaque enregistrement je dois aller chercher le message (merci les infos sont enregistrée ) trois pages plus bas :?:
<?php

/*************************************************************
*          Titre du fichier : validation.php                                                        *
*          Description : insertion des données du formulaire dans la base     *
**************************************************************/

/*************************************************************
*          Inclusion du fichier de connexion à  la base                                  *
**************************************************************/

include_once "../connect_tvd/connexion_bdd.php";

/*************************************************************
*          Déclaration des variables                                                                     *
**************************************************************/

// compteur de lignes
$cpt_total_lignes = 1;

// compteur de cases
$cpt_total_cases = 1;


/*************************************************************
*          Informations chantier et équipe                                                     *
**************************************************************/

// récupération référence chantier
$chantier = $_POST["chantier"];

// récupération équipe
$equipe = $_POST["equipe"];

/*************************************************************
*          Réseau LD                                                                                            *
**************************************************************/

/*************************************************************
*          Informations pylones - postes - total                                                    *
**************************************************************/

// parcours des 10 lignes du réseau
for ($cpt_ld=1;$cpt_ld!=11;$cpt_ld++)
{

        // boucle de parcours du formulaire pour récupérer les valeurs des pylones
        for($i=1;$i!=11;$i++)
        {

                // récupération de la valeur
                $valeur = $_POST['p'][$cpt_total_cases];


                // insertion dans la base
                $insert = mysql_query("INSERT INTO chantier VALUES ('1','$chantier','$equipe','10','$cpt_total_lignes','$cpt_total_cases','$valeur')");


}



                // incrémentation du compteur de cases
                $cpt_total_cases = $cpt_total_cases+1; echo '<br>';

        }

        // récupération valeur poste
        $poste = $_POST['texter'][$cpt_total_lignes];

        // récupération valeur total
        $total = $_POST['total'][$cpt_total_lignes];

        // incrémentation du nombre de lignes total récupérées
        $cpt_total_lignes = $cpt_total_lignes+1;





/*************************************************************
*          Réseau LM                                                                                            *
**************************************************************/

/*************************************************************
*          Informations pylones - postes - total                                                    *
**************************************************************/

// parcours des 10 lignes du réseau
for ($cpt_lm=1;$cpt_lm!=11;$cpt_lm++)
{

        // boucle de parcours du formulaire pour récupérer les valeurs des pylones
        for($i=1;$i!=11;$i++)
        {
        // affichage de chaque valeur
        //echo $_POST['p'][$cpt_total_cases];

                // incrémentation du compteur de cases
                $cpt_total_cases = $cpt_total_cases+1; echo '<br>';

        }

        // récupération valeur poste
        $poste = $_POST['texter'][$cpt_total_lignes];

        // récupération valeur total
        $total = $_POST['total'][$cpt_total_lignes];

        // incrémentation du nombre de lignes total récupérées
        $cpt_total_lignes = $cpt_total_lignes+1;

}

/*************************************************************
*          Electronique - Distribution                                                                    *
**************************************************************/

/*************************************************************
*          Informations pylones - postes - total                                                    *
**************************************************************/

// parcours des 9 lignes du réseau
for ($cpt_elec=1;$cpt_elec!=10;$cpt_elec++)
{

        // boucle de parcours du formulaire pour récupérer les valeurs des pylones
        for($i=1;$i!=11;$i++)
        {
        // affichage de chaque valeur
        //echo $_POST['p'][$cpt_total_cases];

                // incrémentation du compteur de cases
                $cpt_total_cases = $cpt_total_cases+1; echo '<br>';

        }

        // récupération valeur poste
        $poste = $_POST['texter'][$cpt_total_lignes];

        // récupération valeur total
        $total = $_POST['total'][$cpt_total_lignes];

        // incrémentation du nombre de lignes total récupérées
        $cpt_total_lignes = $cpt_total_lignes+1;

}

/*************************************************************
*          Electronique primaire                                                                              *
**************************************************************/

/*************************************************************
*          Informations pylones - postes - total                                                    *
**************************************************************/

// parcours des 11 lignes du réseau
for ($cpt_elec_prim=1;$cpt_elec_prim!=12;$cpt_elec_prim++)
{

        // boucle de parcours du formulaire pour récupérer les valeurs des pylones
        for($i=1;$i!=11;$i++)
        {
        // affichage de chaque valeur
        //echo $_POST['p'][$cpt_total_cases];

                // incrémentation du compteur de cases
                $cpt_total_cases = $cpt_total_cases+1; echo '<br>';

        }

        // récupération valeur poste
        $poste = $_POST['texter'][$cpt_total_lignes];

        // récupération valeur total
        $total = $_POST['total'][$cpt_total_lignes];

        // incrémentation du nombre de lignes total récupérées
        $cpt_total_lignes = $cpt_total_lignes+1;

}

/*************************************************************
*          Main d'oeuvre hors poste                                                                    *
**************************************************************/

/*************************************************************
*          Informations pylones - postes - total                                                    *
**************************************************************/

// parcours des 11 lignes du réseau
for ($cpt_main_oeuvre=1;$cpt_main_oeuvre!=12;$cpt_main_oeuvre++)
{

        // boucle de parcours du formulaire pour récupérer les valeurs des pylones
        for($i=1;$i!=11;$i++)
        {
        // affichage de chaque valeur
        //echo $_POST['p'][$cpt_total_cases];

                // incrémentation du compteur de cases
                $cpt_total_cases = $cpt_total_cases+1; echo '<br>';

        }

        // récupération valeur poste
        $poste = $_POST['texter'][$cpt_total_lignes];

        // récupération valeur total
        $total = $_POST['total'][$cpt_total_lignes];

        // incrémentation du nombre de lignes total récupérées
        $cpt_total_lignes = $cpt_total_lignes+1;

}

// récupération de la valeur bobine LM
$bob_lm = $_POST['bobine_lm'];
echo($bob_lm);
echo ' ';

// récupération de la valeur bobine LD
$bob_ld = $_POST['bobine_ld'];
echo($bob_ld);
echo ' ';

// récupération du commentaire
$com = $_POST['commentaire'];
echo($com);
echo ' ';

echo ('<br>');

?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<body background="../img/grd-4px.gif">
<?php
echo "Merci les informations sont enregistrées.";
?>

</body>
</html>
Ma TABLE
CREATE TABLE `chantier` (
  `id_chantier` int(11) NOT NULL default '0',
  `ref_chantier` int(11) default NULL,
  `ref_equipe` int(11) default NULL,
  `quantite_prevue` int(11) default NULL,
  `num_ligne` int(11) default NULL,
  `num_case` int(11) default NULL,
  `valeur_case` int(11) default NULL,
  PRIMARY KEY  (`id_chantier`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Merci :oops:

Posté : 03 août 2006, 22:58
par Cyrano
Normal, regarde ta requête :
        $insert = mysql_query("INSERT INTO chantier ".
                              "VALUES ('1','$chantier','$equipe','10','$cpt_total_lignes','$cpt_total_cases','$valeur')");
La première valeur est inscrite en dur : donc la première requête fonctionne et ça s'arrête là parce que la seconde requête essaye d'envoyer la même valeur en clé primaire. Remplace par :
        $insert = mysql_query("INSERT INTO chantier ".
                              "VALUES ('','$chantier','$equipe','10','$cpt_total_lignes','$cpt_total_cases','$valeur')");
Ça devrait aller mieux.

Posté : 03 août 2006, 23:05
par dunbar
Normal, regarde ta requête :
        $insert = mysql_query("INSERT INTO chantier ".
                              "VALUES ('1','$chantier','$equipe','10','$cpt_total_lignes','$cpt_total_cases','$valeur')");
La première valeur est inscrite en dur : donc la première requête fonctionne et ça s'arrête là parce que la seconde requête essaye d'envoyer la même valeur en clé primaire. Remplace par :
        $insert = mysql_query("INSERT INTO chantier ".
                              "VALUES ('','$chantier','$equipe','10','$cpt_total_lignes','$cpt_total_cases','$valeur')");
Ça devrait aller mieux.
Je te remercie mais cela ne change rien :oops:

Posté : 03 août 2006, 23:09
par Cyrano
Alors récupère les messages d'erreur avec un "or die(mysql_error())" par exemple sur l'exécution de la requête.

Posté : 03 août 2006, 23:16
par dunbar
Alors récupère les messages d'erreur avec un "or die(mysql_error())" par exemple sur l'exécution de la requête.
Et voilà l'erreur
Erreur SQL !Query was empty
Si je comprend c'ets ma requete qui ne fonctionne pas c'est bien ça :?:

Posté : 03 août 2006, 23:57
par Ryle
C'est pas qu'elle fonctionne pas, c'est qu'elle semble être vide... je ne sais pas où tu as collé le or die, mais j'ai comme un doute.. Sors le sql de ta requête, c'est toujours plus pratique pour l'afficher et débugger :
<? php 
$sql = "INSERT INTO chantier VALUES ";
$sql.= "('', '$chantier', '$equipe', 10, '$cpt_total_lignes', '$cpt_total_cases', '$valeur')";

echo 'Requête : ' . $sql;

$insert = mysql_query($sql) or die (mysql_error());  

echo '<br>Résultat : ' . $insert;
?>
Tu pourras ainsi vérifier que la requête sql que tu génères est bonne (en faisant attention par exemple à l'ordre des champs puisqu'il n'est pas spécifié dans la requête) et qu'elle s'exécute correctement :)

Nota : j'ai viré les apostrophes autour du 10. Elles ne doivent servir que pour les chaines de caractères (varchar, date, etc.) pas pour les nombres, même si mysql les tolère et fais la conversion pour toi ;) Je te laisse le soin de faire de même pour tes $cpt_* si nécessaire :)

Posté : 04 août 2006, 00:06
par dunbar
C'est pas qu'elle fonctionne pas, c'est qu'elle semble être vide... je ne sais pas où tu as collé le or die, mais j'ai comme un doute.. Sors le sql de ta requête, c'est toujours plus pratique pour l'afficher et débugger :
<? php 
$sql = "INSERT INTO chantier VALUES ";
$sql.= "('', '$chantier', '$equipe', 10, '$cpt_total_lignes', '$cpt_total_cases', '$valeur')";

echo 'Requête : ' . $sql;

$insert = mysql_query($sql) or die (mysql_error());  

echo '<br>Résultat : ' . $insert;
?>
Tu pourras ainsi vérifier que la requête sql que tu génères est bonne (en faisant attention par exemple à l'ordre des champs puisqu'il n'est pas spécifié dans la requête) et qu'elle s'exécute correctement :)

Nota : j'ai viré les apostrophes autour du 10. Elles ne doivent servir que pour les chaines de caractères (varchar, date, etc.) pas pour les nombres, même si mysql les tolère et fais la conversion pour toi ;) Je te laisse le soin de faire de même pour tes $cpt_* si nécessaire :)
Pourquoi avais tu un doute :?: :oops:
Mais effectivement j'ai plus d'infos avec ta méthode :wink:
Merci

Posté : 04 août 2006, 00:24
par Ryle
Ben dans la mesure ou ta requête était passée directement en paramètre de la fonction mysql_query(), je vois pas trop comment elle pouvait être vide.. d'où mon doute quant à l'usage du mysql_error() :)

Bon cela dit tu y vois plus clair, certes, et c'est une bonne chose, mais est ce que cela t'aide à résoudre ton problème ? :) sinon faudra nous éclairer aussi un peu pour pouvoir continuer à t'aider ;)

Posté : 04 août 2006, 08:57
par leakcim51
Salut.

Alors déjà dans ta table chantier id_chantier n'est pas en auto_increment et la valeur par défaut est '0' donc lorsque tu fais :
<?php $insert = mysql_query("INSERT INTO chantier ". 
                              "VALUES ('','$chantier','$equipe','10','$cpt_total_lignes','$cpt_total_cases','$valeur')");  
tu n'enregistres qu'une requête la dernière avec id_chantier qui va prendre pour valeur 0.

De plus je ne comprends pas l'interêt de ta boucle :
// boucle de parcours du formulaire pour récupérer les valeurs des pylones 
        for($i=1;$i!=11;$i++) 
        { 

                // récupération de la valeur 
                $valeur = $_POST['p'][$cpt_total_cases]; 


                // insertion dans la base 
                $insert = mysql_query("INSERT INTO chantier VALUES ('1','$chantier','$equipe','10','$cpt_total_lignes','$cpt_total_cases','$valeur')"); 


} 
car tu n'utilises pas $i donc tu vas faire 10 fois la même requête! ??

Bon courage

Posté : 04 août 2006, 13:32
par dunbar
Salut.

Alors déjà dans ta table chantier id_chantier n'est pas en auto_increment et la valeur par défaut est '0' donc lorsque tu fais :
<?php $insert = mysql_query("INSERT INTO chantier ". 
                              "VALUES ('','$chantier','$equipe','10','$cpt_total_lignes','$cpt_total_cases','$valeur')");  
tu n'enregistres qu'une requête la dernière avec id_chantier qui va prendre pour valeur 0.

De plus je ne comprends pas l'interêt de ta boucle :
// boucle de parcours du formulaire pour récupérer les valeurs des pylones 
        for($i=1;$i!=11;$i++) 
        { 

                // récupération de la valeur 
                $valeur = $_POST['p'][$cpt_total_cases]; 


                // insertion dans la base 
                $insert = mysql_query("INSERT INTO chantier VALUES ('1','$chantier','$equipe','10','$cpt_total_lignes','$cpt_total_cases','$valeur')"); 


} 
car tu n'utilises pas $i donc tu vas faire 10 fois la même requête! ??

Bon courage
Ne fait pas attention à l'insert je fessais juste un test pour voire si les case s'enregistrais.
Et merci pour votre aide cela fonctionne l'erreur étais belle et bien
Alors déjà dans ta table chantier id_chantier n'est pas en auto_increment et la valeur par défaut est '0' donc lorsque tu fais :
Merci
Mais je vais surement revenir :lol: