[PHP SQL] Insert into

Résolu
Bonjour alors ça c'est un problème incroyable :
je fait un insert into dans ma page et je l'affiche, ça m'affiche ceci:
insert into Impression values('20091201046','1','0','0')

et lorsque je vais dans ma table fenetre j'ai ceci:
('2147483647','1','0','0')

donc c'est de ja pas le bon numéro et du coup lorsque j'insére quelque chose d'autre, il me dit que la cles est dupliqué car il veut toujours mettre ce numéro.

Voici le code

$numbon=$_POST['numbon'];

$insert="insert into Impression values('".$numbon."','".$edition."','".$cb."','".$autre."')";
echo "insert : ".$insert."<br>";
mysql_query($insert) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

On est d'accord c'est impossible mon histoire....
Merci de votre aide
Configuration: Windows XP
Firefox 3.0.15

12 réponses

  1. as tu mis une cle primaire a ta table

    perso je mets toujours le premier champ

    id (ou num) en INT cle primaire autoincrement

    rajoutes les en plus de tes autres champs

    et ta requette devient donc:

    $insert="insert into Impression values('','".$numbon."','".$edition."','".$cb."','".$autre."')"; 


    premiere valeur vide, mysql se charge de l'incrementer
    1. ok merci j'ai recréer un champs idImpression qui s'increment et qui est ma clés.
      Mais le pb est toujours le même
      insert into Impression values('','20091201001','1','1','1')
      et dans ma base
      4 ,2147483647,1,1,1

      voici le code
      $numerocommnade=$_GET['cmd'];
      echo $numerocommnade."<br>";

      $insertionbss="insert into Impression values('','".$numerocommnade."','1','1','1')";
      echo $insertionbss;
      $requete=mysql_query($insertionbss) or die('Erreur SQL'.mysql_error());

      mais je fait par exemple :
      $numerocommnade=2;
      la ça fonctionne correctement
      je ne comprend rien
      merci de ton aide
      1. je ne comprend rien
        si je fait
        $numerocommnade='2009120100';
        $insertionbss="insert into Impression values('".$numerocommnade."','".$edition."','".$cb."','".$autre."')";
        echo $insertionbss;
        $requete=mysql_query($insertionbss) or die('Erreur SQL'.mysql_error());

        il m'insére bien 2009120100 dans premiere colonne bdd

        mais si je fait

        $numerocommnade='20091201001';
        $insertionbss="insert into Impression values('".$numerocommnade."','".$edition."','".$cb."','".$autre."')";
        echo $insertionbss;
        $requete=mysql_query($insertionbss) or die('Erreur SQL'.mysql_error());

        il m'insére 2147483647 dans la première colone de ma bdd
        Enfaite si $numerocommnade à un nombre de caractère < 10 c'est ok
        et si $numerocommnade à un nombre de caractère > 10 il insére 2147483647

        Alors j'ai vérifié ma table ma colone numCommande dans Impression est un int(100) donc ça ne vient pas de la
        Autre idées???
        Merci bcp
        1. si je fait
          $numerocommnade='2009120100';
          $insertionbss="insert into Impression values('".$numerocommnade."','".$edition."','".$cb."','".$autre."')";


          il est passé ou ton premier champp dans Values(... ?

          insertionbss="insert into Impression values('','".$numerocommnade."','".$edition."','".$cb."','".$autre."')"; 
          1. ben j'ai essayé avec un id et sans id mais ça ne change rien le pb est toujours la.
            merci de ton aide
            1. Première chose: les requêtes s'écrivent en majuscule.
              Donc:
              $numerocommnade='2009120100';
              $insertionbss="INSERT INTO Impression VALUES('".$numerocommnade."','".$edition."','".$cb."','".$autre."')"; 

              Ensuite, mais je ne sais pas si dans la finalité ça change grand chose, je met toujours les guillements à l'inverse de toi:
              $numerocommnade='2009120100';
              $insertionbss='INSERT INTO Impression VALUES("'.$numerocommnade.'","'.$edition.'","'.$cb.'","'.$autre.'")';

              Pour finir, si tu met un colonne id en premier avec un auto_increment, il faut le rajouter avec un champ vide dans ta requête et donc:
              $numerocommnade='2009120100';
              $insertionbss='INSERT INTO Impression VALUES("", "'.$numerocommnade.'", "'.$edition.'", "'.$cb.'", "'.$autre.'")';
              1. Merci bcp de votre aide mais le probleme est toujours le même
                voici mon code

                <? session_start();
                include('../fonction/connect.php');

                $numerocommnade='20091201001';
                $edition='0';
                $cb='0';
                $autre='0';
                $insertion='INSERT INTO Impression VALUES("", "'.$numerocommnade.'", "'.$edition.'", "'.$cb.'", "'.$autre.'")';
                $requete=mysql_query($insertion) or die('Erreur SQL'.mysql_error());
                ?>

                voici ma table:
                CREATE TABLE IF NOT EXISTS `Impression` (
                `idImpression` int(10) NOT NULL auto_increment,
                `NumCmd` int(100) NOT NULL,
                `Edition` int(2) NOT NULL,
                `CB` int(2) NOT NULL,
                `Autres` int(2) NOT NULL,
                PRIMARY KEY (`idImpression`)
                ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

                et le contenu de ma table
                (1, 2147483647, 0, 0, 0)

                je ne comprend pas....
                Merci
                1. Remplace:
                  $requete=mysql_query($insertion) or die('Erreur SQL'.mysql_error());

                  par:
                  mysql_query($insertion) or die('Erreur SQL'.mysql_error()); 


                  Mais sinon quelle est la nature du problème ?
                  J'ai pas tout suivi et il faudrait que tu précises au passage ce que change ou non les changements qu'on te fait faire.
                  Hésite pas à rajouter un
                  echo $insertion;

                  pour voir comment réagit ta requête et ce qui est traité par le serveur.
                  1. Ok ok toujours la même chose

                    <? session_start();
                    include('../fonction/connect.php');

                    $numerocommnade='20091201001';
                    $edition='0';
                    $cb='0';
                    $autre='0';
                    $insertion='INSERT INTO Impression VALUES("", "'.$numerocommnade.'", "'.$edition.'", "'.$cb.'", "'.$autre.'")';
                    echo $insertion;
                    mysql_query($insertion) or die('Erreur SQL'.mysql_error());
                    ?>

                    echo $insertion affiche :
                    INSERT INTO Impression VALUES("", "20091201001", "0", "0", "0")

                    mais dans ma base il y a
                    (2, 2147483647, 0, 0, 0);

                    c'est un truc impossible
                    si par exemple je met
                    $numerocommnade='2009120100'; //j'enlève un chiffre ou plus
                    => la ça fonctionne le nombre inscrit est bien le nombre qui va aller dans ma bdd
                    mais si je met
                    $numerocommnade='20091201005';// avec un autre chiffre à la fin ou en ajoutant
                    =>le nombre inscrit n'ira pas dans la bdd, mais c'est ce nombre 2147483647 qui ira pourtant dans le insert into c'est bien le chiffre de $numerocommnade qui apparait

                    Je te dit c'est incomprehensible

                    enfin merci bcp de ton aide
                    1. Logique.

                      int (accepte des nombres de -2147483648 à +2147483647)

                      L'explication est là.

                      Passe la colonne de INT à BIGINT.

                      1. OLLALALALALALALALALALALAL
                        quelle merde
                        enfin en tout cas
                        MERCI MERCI MERCI
                        j'aurais jamais trouvé
                        MERCI BCP

                        bonne journée
                        1. Je me suis souvenu que INT était limité en taille sinon j'aurai pas trouvé non plus. :p