Insertion php

salut !

j'ai fait un script pour insérer des données dans ma bdmais ça ne veux pas le faire....
en fait, des la premiere requete, ça plente !!

<?php
//cnx à la bd
$bd = mysql_connect('localhost', 'login','mot de passe') or die ("erreur de connexion");
//séléction de la bd
mysql_select_db(courrier, $bd) or die("erreur de connexion à la base");

//verification des données
// if(empty($nomexp))
//{
// echo "Le nom de l'expéditeur n'est pas rempli ! ";
//}
//if (empty($objet) || empty($typecourrier))
//{
// echo "L'objet ou le type du courrier ne sont pas spécifiés ! ";
//}
//if(empty($datenvoi))
//{
// echo "La date d'envoi du courrier n'est pas spécifiée ! ";
//}
//if (empty($service))
//{
// echo " Le service n'est pas rempli ! ";
//}

// on récupere le no de l'expediteur
$query1 = "SELECT noexpediteur FROM expediteur WHERE nomexpediteur = '$nomexp', prenexpediteur = '$prenexp', steexpediteur = '$steexp', villeexpediteur = '$villexp'";
$result1 = mysql_query($query1) or die ("La requete a echoué ");
//on vérifie que l'expéditeur n'existe pas
if (mysql_num_rows($result1)==0) // si l'expediteur n'existe pas il faut l'insérer
{
$query2 = "INSERT INTO expediteur (noexpediteur, nomexpediteur, prenexpediteur, steexpediteur, activiteexp, villeexp) VALUES (NULL, '$nomexp', '$prenexp', '$steexp', '$activiteexp', '$villexp')";
$result2 = mysql_query($query2) or die ("L'insertion à échoué !");
$query3 = $query1;
$result3 = mysql_query($query3) or die ("La requete 3 a échoué");
$line = mysql_fetch_array($result3);
$numeroexp = $line[0];
}
else //sinon, on récupere son numéro
{
$line = mysql_fetch_array($result1);
$numeroexp = $line[0];
}

//on récupere le no du destinataire correspondant au nom (dans la table destinataire);
$query4= "SELECT * FROM destinataire WHERE nomdestinataire = '$nomdest'";
$result4 = mysql_query($query4) or die ("La requete 4 à échoué");
$linenodest = mysql_fetch_array($result4);
$nodest = $linenodest[0];

//on récupere le numéro du service (de la table service)
$query5 = "SELECT * FROM service WHERE libservice = '$service'";
$result5 = mysql_querry($query5) or die ("La requete 5 à échoué");
$linenoserv = mysql_fetch_array($result5);
$noserv = $linenoserv[0];

//on récupere le numéro du type de courrier (de la table type courrier)
$query6 = "SELECT * FROM typecourrier WHERE libtypecourrier = '$typecourrier'";
$result6 = mysql_query($query6) or die ("la requete 6 à échoué");
$linetypnocour = mysql_fetch_array($result6);
$notypcour = $linetypnocour[0];

//on insere les champs dans la table courrier
$query5 = "INSERT INTO courrier (nocourier, objetcourrier, chpsrqs, datenvoi, refnoexpediteur, refnotypcourrier, chpsrqs, datenvoi, confidentiel, ) VALUES (NULL, '".$objet."', '".$chpsrqs."', '".$detenvoi."', '".$numeroexp."', '".$numtypcour."')";
$result5 = mysql_query($query5) or die("La requete 5 à échouer");

mysql_close();
?>

30 réponses

Résumé de la discussion

Un script PHP destiné à insérer des données dans une base MySQL échoue dès la première requête, avec des erreurs liées à l'exécution des requêtes et à la connexion. Plusieurs éléments problématiques ressortent, notamment des fautes de frappe (mysql_querry), des requêtes mal formées, et des noms de champs manquants comme activiteexp dans la table. Des indices suggèrent aussi d'unifier les requêtes et d'utiliser les fonctions compatibles ou FROM_UNIXTIME pour manipuler les dates, afin d'éviter les conversions manuelles et les erreurs. En complément, certains commentateurs recommandent de réduire les requêtes en chaîne en privilégiant des procédures ou une logique transactionnelle afin d'améliorer la robustesse et la maintenabilité du script.

Bobot (l’IA à votre service)
  1. c'est l'utilisateur qui va saisir une date... et puis une autre lui ai visible que j'ai mis (un script qui génere la date du jour !)
    1. ben je sais pas moi !!! j'y connais rien !!!

      Heu... Tu sais quand meme ou tu veux en venir, non ?

      Tu veux que ce soit l'utilisateur qui saisisse une date au format JJ-MM-AAAA et le coller dans ta base ? Ou alors, mettre une date lu dans ta bdd au format JJ-MM-AAAA ?

      Kalamit,
      Amis motards, attention à la ligne blanche ! :@)
      1. ben je sais pas moi !!! j'y connais rien !!! le seule truc que je voudrais c'est laisser le format JJ-MM-AAAA pour l'utilisateur parce qu'il n'est pas forcement au courrant de tous les formats!
        1. bon, j'ai pas tout compris mais c'est pas tres grave.... comment faire pour seulement transformer AAAA-MM-JJ en JJ-MM-AAAA avec ta solution (parce que je ne veux pas calculer de différence entre une date et une autre )
          1. Mais la transformer ou ???

            A la lecture de la base ou à l'insert ?
            Ton champ date il est en format date ou char ?

            Kalamit,
            Amis motards, attention à la ligne blanche ! :@)
        2. Bon, je vais reprendre mon post, vu que je n'ai pas ete tres clair (c peu de le dire).

          Voila l'inconvinient de sauvegarder en format date de mysql (format YYYY-MM-DD ou YYYYMMDD).
          aucune indication de l'heure, minute et seconde. Mais on peut l'etendre pour afficher YYYY-MM-DD HH:MM:SS cependant.
          pour l'afficher dans un autre format (par ex, le jour de la semaine) il faut parser la chaine et le mettre dans un tableau par ex, puis la reafficher en passant par les functions mktime() et date();
          de meme, pour faire un calcul sur le temps, il faut reformater la date.

          Exemple concret:
          la base me retourne '2003-02-24' ($date), je veux l'afficher en 'monday, 24th february 2003'. je dois faire :
          $tab = explode("-", $date);// pour mettre les valeurs YYYY, MM et DD dans un tableau
          $time = mktime(0,0,0, $tab[1], $tab[2], $tab[0]); // pour avoir le temps unix de $date
          $date_formatee = date ("l, jS F Y", $time);

          de meme, essaie de calculer le nombre de jours entre les 7 mars 2003 et le 28 novembre 2002

          Ma solution consiste a entrer le temps unix a la place de YYYY-MM-DD ou autre:
          tu l'obtiens avec la commande mktime(); en php.
          Le champs mysql devra etre un int.
          ainsi, dans mon ex precedent, j'aurais deja les resultats en mktime.( c'est a dire que la valeur retournee par la base est $time)
          et il ne restera plus qu'a afficher le resultat dans le format qu'on souhaite.

          de meme, pour calculer une difference de date, il suffit de faire simplement la difference, on a alors le nombre de seconde qui separe les 2 dates

          et pour manipuler a l'interieur de la bdd, il existe toujours la fonction FROM_UNIXTIME() dans mysql.

          Voila

          ... ouais, pas super clair .... :p
          1. kalamit, comment je peux faire avec ta solution (elle a l'air plus simple )
            1. La solution de wiwimagique est la meilleure et la plus simple ! :o)

              Kalamit,
              Amis motards, attention à la ligne blanche ! :@)
          2. et comment faire pour adapter tout ça à mon script ?
            en voila des parties (php et html):

            //la c'est la premiere date
            <p align="right"><b><font color="#3333CC" face="Geneva, Arial, Helvetica, sans-serif" size="3">date du jour :</font>
            <input type="text" name="date" value="  <?php
            $date=date("d-m-Y");
            echo "".$date."";
            ?>" size="10">

            //et la seconde
            <input type="text" name="datenvoi" size="10">

            et entre ya du html ( mon formulaire )
            1. et ben ta solution me parait la bonne mais qu'est ce que tu appelles "expressions régulieres"?? comment tu fais ???
              1. alors pour les dates, je conseille de stocker sous forme de temps unix en int.
                Il s'agit du nombre de secondes depuis le 1er janvier 1970, etc (se referer au manuelle php).
                Ensuite, on peut afficher la date dans le format qu'on veut avec date("d-m-Y", $date); ou $date est le champ date de ta table.
                De plus, ca te permet de faire des calculs directement dans la bdd: Par ex des differences pour trouver le nombre de jours entre 2 dates. Et enfin, un format JJ-MM-AAAA ne peut meme pas etre classe par ordre chronologique...
                1. Bah en fait, moi, je les stocke au format 'aaaa-mm-jj' et après je me sers d'expressions regulieres pour les retrier et les afficher.

                  Je me suis toujours demerdé pour pas avoir à trier par date. Maintenant, je sais pas ce que tu veux faire...

                  Kalamit,
                  Amis motards, attention à la ligne blanche ! :@)
                  1. c'est bon, ça marche !!!!
                    par contre j'ai un pb de dates ... en fait, elles sont au format : AAAA-MM-JJ alors que je les rentre au format JJ-MM-AAAA comment faut faire pour le mettre au bon format ?
                    1. et bien j'ai ça :
                      MySQL a répondu: Champ 'reftypcourrier' inconnu dans field list
                      et pourtant reftypcourrier existe bien dans ma bd !!!
                      1. Ah ? Tu as essayé de faire un echo de ta requete et de la copie/collé dans phpmyadmin ?

                        Fais le ! Tu auras un message d'erreur plus clair.

                        Kalamit,
                        Amis motards, attention à la ligne blanche ! :@)
                        1. est ce que ça peut etre à cause de la date parce que $date est au format 0000-00-00 ???
                          1. je suis arrivé à arrenger ma requete, mais elle ne fonctionne toujours pas, pourtant, je l'ai vérifier plusieurs fois !!!
                            qu'est-ce qui ne va pas la dedans ???

                            //on insere les champs dans la table courrier
                            $query6 = "INSERT INTO courrier (objetcourrier, refnoexpediteur, reftypcourrier, chpsrqs, datenvoi, confidentiel, refnodest, datereception) VALUES ('$objet', '$noexp', '$typecourrier', '$chpsrqs', '$detenvoi', '$confidentiel', '$nodest','$date')";
                            $result6 = mysql_query($query6) or die("La requete 6 a échoué ! ");

                            j'ai : la requete 6 a échoué !
                            1. j'ai encore un erreur : ma requete ne veux pas se faire :

                              //on récupere le numéro du type de courrier (de la table type courrier)
                              $query6 = "SELECT * FROM typecourrier WHERE typecourrier = '$typecourrier'";
                              $result6 = mysql_query($query6) or die ("la requete 6 à échoué");
                              $linetypnocour = mysql_fetch_array($result6);
                              $notypcour = $linetypnocour[0];

                              pourquoi ???
                              1. c'est bon, j'ai trouvé mon erreur mais j'en ai une autre !
                                Fatal error: Call to undefined function: mysql_querry() in c:\program files\easyphp\www\suivi courrier\insertion.php on line 54

                                c'est sur cette requete :
                                //on récupere le numéro du service (de la table service)
                                $query5 = "SELECT * FROM service WHERE libservice = '$service'";
                                $result5 = mysql_querry($query5) or die ("La requete 5 à échoué");
                                $linenoserv = mysql_fetch_array($result5);
                                $noserv = $linenoserv[0];
                                • 1
                                • 2