Problème INSERT

ViPHP
ViPHP | 2291 Messages

03 août 2006, 22:41

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:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Mammouth du PHP | 19672 Messages

03 août 2006, 22:58

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 2291 Messages

03 août 2006, 23:05

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:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Mammouth du PHP | 19672 Messages

03 août 2006, 23:09

Alors récupère les messages d'erreur avec un "or die(mysql_error())" par exemple sur l'exécution de la requête.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 2291 Messages

03 août 2006, 23:16

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 :?:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 août 2006, 23:57

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 :)

ViPHP
ViPHP | 2291 Messages

04 août 2006, 00:06

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
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 août 2006, 00:24

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 ;)

Eléphant du PHP | 88 Messages

04 août 2006, 08:57

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

ViPHP
ViPHP | 2291 Messages

04 août 2006, 13:32

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:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.