PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 04/05/2011 15:10:30

unisol
Membre

Enregistrement aléatoire avec pg_query

Bonjour,

dans le code ci dessous, j'ai des ecritures aléatoires dans la base de données.
à savoir que parfois les valeurs sont inscrites et d'autre fois, rien ne se passe.
ce la concerne la section

/// ENREGISTRER NOS REFS VOS REFS MODE DE PAIEMENT CONDITIONS ///


les autres sections se comportent normalement.
quand faut il fermer les connexions ?
merci pour votre aide

//debut du code

////////////////////////////////////// VALIDER LE DOCUMENT /////////////////////
   
    $_SESSION['numero_document'] = $_GET['numero_document'];
    if (isset($_POST['valider']))   
    {
        $requete = "update entete_document set valide = true  where numero_document = $_SESSION[numero_document] and nrosociete = $_SESSION[NroSociete] ";
        $result =  pg_query( $cnx, $requete);
    }
///////////////////////////////////////VALIDER BLOC NOTE ////////////////////////////
    if (isset($_POST['bpsave_blocnote']))   
    {
        $requete = "update entete_document set blocnote = '$_POST[textblocnote]' where numero_document = $_SESSION[numero_document]  and nrosociete = $_SESSION[NroSociete] ";
        $result =  pg_query( $cnx, $requete);
       
    }
///////////////////////////////////////MISE A JOUR QUANTITE ////////////////////////////
    if (isset($_POST['maj_article']))   
    {
        if (!$_POST['remise']){$remise=0;}else{$remise=$_POST['remise'];}
        $requete = "update appel set quantite = $_POST[quantite], puht = $_POST[puht], remise = $remise  where id_doc = $_POST[iddoc]";
        $result =  pg_query( $cnx, $requete);
    }
/////////////////////////////////////// ENREGISTRER NOS REFS VOS REFS MODE DE PAIEMENT CONDITIONS ///////////////
    if (isset($_POST['bpenregistrer']))   
    {
        $requete = "update entete_document set nos_refs = '$_POST[nos_refs]', vos_refs = '$_POST[vos_refs]', mode_paiement = '$_POST[mode_paiement]', conditions = '$_POST[conditions]' where numero_document = $_GET[numero_document]  and nrosociete = $_SESSION[NroSociete] ";
        $result =  pg_query( $cnx, $requete);
       
    }
//////////////////////////////////////////// CLOTURE SIGNATURE CLIENT ////////////////////////////
    if (isset($_POST['output']) and $_POST['heure_fin_intervention']=='')
    {
        ///////// CREATION IMAGE SIGNATURE
        $json = $_POST['output'];
        require_once 'signature-pad/signature-to-image.php';
        $img = sigJsonToImage($json);
        imagepng($img, 'signature-pad/'.$_SESSION['numero_affaire'].'_'.$_SESSION['NroSociete'].'.png');
        imagedestroy($img);
        //////// HEURE FIN
        $requete = "update entete_document set heure_fin_intervention = localtime where numero_document = $_GET[numero_document]  and nrosociete = $_SESSION[NroSociete] ";
        $result =  pg_query( $cnx, $requete);
        //$_POST['heure_fin_intervention']= date('d/m/Y H:m');
        //////// ENVOI MAIL AU RESPONSABLE////////////////////////
        //recup de l'adresse mail du responsable
        //envoi de l'email
        $mailheaders .= "From: Unigest Web Gestion <$email>\r\n";
           $mailheaders .= "Content-type: text/html; charset=utf-8\r\n";
           $mailheaders .= "Clôture chantier\n\n";
      
        $sujet="Clôture chantier client : ".$_SESSION['client']; // sujet
        $message="Le chantier numéro ".$_GET['numero_document']." du client ".$_SESSION['client']." a été clôturé a : ".date('d/m/Y H:m') ; // message
        //pg_close($cnx);
        mail($emails, $sujet, $message, $mailheaders);
        //
        $tab=1;
    }
///////////////////////////////////////// HEURE DEBUT ///////////////////////////////
    if (isset($_POST['bpheuredebut']))
        {
            $requete = "update entete_document set heure_debut_intervention = '$_POST[heure_debut]' where numero_document = $_SESSION[numero_document] and nrosociete = $_SESSION[NroSociete] ";
            $result =  pg_query( $cnx, $requete);
            pg_close($cnx);
            echo "<script>alert(\"Enregistrement réalisé avec succès.\")</script>".$_SESSION['numero_document'].$_POST['heure_debut'];
            $tab=1;
        }
   
       
/////////////////////////////////////////////////////////////////
//                                  LES REQUETES
///
    include ("requete_document.php");
//////////////////////////////////////////// CROQUIS ////////////////////////////
    if (isset($_POST['output_croquis']))
    {
        ///////// CREATION IMAGE SIGNATURE
        $json = $_POST['output_croquis'];
        require_once 'signature-pad/signature-to-image.php';
        $img = sigJsonToImage($json);
        imagepng($img, 'signature-pad/'.$_POST['numero_affaire'].'.png');
        imagedestroy($img);
    }

    //acomptes
    $requete = "select sum(mtttc) from acomptes where numero_affaire = $_POST[numero_affaire] and nrosociete = $_SESSION[NroSociete]";
    $result =  pg_exec( $cnx, $requete);
    $acompte = pg_result($result, 0);
    //montant_heure_intervention
    $requete = "select sum(extract(epoch from nombre) * taux_horaire)/3600 from intervention where numero_affaire = $_POST[numero_affaire] and nrosociete = $_SESSION[NroSociete]";
    $result =  pg_exec( $cnx, $requete);
    $montant_heure_intervention = pg_result($result, 0);
   
    //somme H.T.
    $requete = "select sum(nombre) from intervention where numero_affaire = $_POST[numero_affaire] and nrosociete = $_SESSION[NroSociete]";
    $result =  pg_exec( $cnx, $requete);
    $somme_heure_intervention = pg_result($result, 0);
    //delais_reglement
    $requete = "select conditions FROM delais_reglement where nrosociete = $_SESSION[NroSociete]";
    $result_cond =  pg_exec( $cnx, $requete);
    $numrows_cond = pg_numrows($result_cond);
    //mode_paiement
    $requete = "select conditions FROM mode_paiement where nrosociete = $_SESSION[NroSociete]";
    $result_paiement =  pg_exec( $cnx, $requete);
    $numrows_paiement = pg_numrows($result_paiement);
    // TVA
    $requete = "select tva FROM taux_tva where nrosociete = $_SESSION[NroSociete]";
    $result_tva =  pg_exec( $cnx, $requete);
    $numrows_tva = pg_numrows($result_tva);
    //
   
    //echo "hf :".$_POST['heure_fin_intervention'];
   

?>


/// extrait de l'include requete_document.php

<?php

include ("connexion/connexionpg.php");
        $requete = "select numero_document, txtdate, nos_refs, vos_refs, montant_total_tva, acompte, remise, signature, heure_debut_intervention, heure_fin_intervention, client, adresse1, adresse2, codepostal, ville, telephone, numero_affaire, blocnote, entete_document.conditions, entete_document.mode_paiement from entete_document inner join fichier_clients on entete_document.numero_client = fichier_clients.numero_client where numero_document = '$_GET[numero_document]' and entete_document.nrosociete = $_SESSION[NroSociete]";
    $result =  pg_exec( $cnx, $requete);
    $_POST['numero_document']= pg_result($result, "numero_document");
    $_POST['txtdate']= pg_result($result, "txtdate");
    $_POST['nos_refs']= pg_result($result, "nos_refs");
    $_POST['vos_refs']= pg_result($result, "vos_refs");
    $_POST['montant_total_tva'] = pg_result($result, "montant_total_tva");
...

Hors ligne

#2 04/05/2011 16:15:34

Marc Cousin
Membre

Re : Enregistrement aléatoire avec pg_query

Vous ne validez absolument rien de ce qui est dans le POST. C'est vraisemblablement le problème: il suffit qu'il y ait n'importe quoi de faux dedans et l'ordre SQL va échouer.

        $requete = "update entete_document set nos_refs = '$_POST[nos_refs]', vos_refs = '$_POST[vos_refs]', mode_paiement = '$_POST[mode_paiement]', conditions = '$_POST[conditions]' where numero_document = $_GET[numero_document]  and nrosociete = $_SESSION[NroSociete] ";
        $result =  pg_query( $cnx, $requete);

- Est-ce que vous vérifiez $result quelque part ?
- Utiliser les $_POST et les $_GET de cette façon est très dangereux: ces champs sont fournis par le navigateur de l'utilisateur, qui peut y mettre ce qu'il veut. Par exemple, il peut y mettre : <'; SELECT * FROM coordonnees_bancaires;> (injection SQL).


Marc.

Hors ligne

#3 04/05/2011 17:54:55

unisol
Membre

Re : Enregistrement aléatoire avec pg_query

votre remarque sur l'injection est judicieuse.
pour le controle de la validation
j'ai ajouté :

if (!$result){echo "<script>alert(\"Une erreur est apparue.\")</script>"; }

mais cela va controler si la requete a échoué.

je n'arrive pas à m'expliquer que des MEMES données la réussite de requete
est aléatoire.

Hors ligne

#4 04/05/2011 18:04:14

Marc Cousin
Membre

Re : Enregistrement aléatoire avec pg_query

Sans code retour, moi non plus…

Il faudrait récupérer le message d'erreur, pas juste que $result est faux, sans quoi cela va être impossible à diagnostiquer.


Marc.

Hors ligne

#5 04/05/2011 18:21:37

unisol
Membre

Re : Enregistrement aléatoire avec pg_query

il n'y a pas d'erreur, juste un enregistrement qui ne se fait pas
ou parfois si ....???

Hors ligne

#6 04/05/2011 19:21:26

Marc Cousin
Membre

Re : Enregistrement aléatoire avec pg_query

Un 'enregistrement qui ne se fait pas', ça n'est pas possible. Par contre, une erreur non interceptée, c'est possible. Ou un update qui essaye de modifier un enregistrement, alors que la clause WHERE est fausse, aussi. Je vous conseille, pour commencer:
- D'afficher pg_last_error dans votre message d'erreur
- De trouver le nombre d'enregistrements affectés par l'ordre SQL. Aucune idée de comment on fait ça en PHP, mais ça doit être faisable. Ça l'est dans la majeure partie des autres langages.


Marc.

Hors ligne

#7 04/05/2011 19:48:37

unisol
Membre

Re : Enregistrement aléatoire avec pg_query

je pense localiser l'erreur, mais je pense qu'honnetement cela est plus
du PHP que du postgresql pur.

par conséquent, je clos le sujet ici en vous remerciant.

Hors ligne

#8 04/05/2011 20:22:53

unisol
Membre

Re : Enregistrement aléatoire avec pg_query

oups! confusion de fenetre, je suis sur le bon forum.

voici le probleme, dans la 2eme partie, si je selectionne le 1ere item (Carte bancaire)
ce dernier n'apparait pas lors de l'affichage,
à partir du 2eme item (Virement) pas de probleme
pourquoi ?
voici la table lue:
---------------------------------
'vide'
--------------
Carte bancaire
--------------
Virement
--------------
Chèque
--------------

              <label>
                <select name="conditions" size="1" id="conditions">
                     <?php
                     echo "<option ></option>";
                      for($ri = 0; $ri < $numrows_cond; $ri++)
                      {
                      $row = pg_fetch_array($result_cond, $ri);
                      if ($row['conditions']==$_POST['conditions'])
                          {echo "<option selected>".$_POST['conditions']."</option>";}
                      else
                          {echo "<option >".$row['conditions']."</option>";}
                      }
                      ?>
                </select>
              </label>
              </td>
            </tr>
            <tr>
// 2eme partie
              <td height="24" class="style12">Mode paiement</td>
              <td ><label>
                <select name="mode_paiement" size="1" id="mode_paiement">
                  <?php
                      echo "<option ></option>";
                      for($ri = 0; $ri < $numrows_paiement; $ri++)
                      {
                      $rowp = pg_fetch_array($result_paiement, $ri);
                      if ($rowp['mode_paiement']==$_POST['mode_paiement'])
                          {echo "<option selected>".$rowp['mode_paiement']."</option>";}
                      else
                          {echo "<option >".$rowp['mode_paiement']."</option>";}
                      }
                  ?>
                </select>
              </label>

Dernière modification par unisol (04/05/2011 20:25:04)

Hors ligne

#9 04/05/2011 21:10:05

Marc Cousin
Membre

Re : Enregistrement aléatoire avec pg_query

Désolé, je ne comprends pas la question. À mon avis il manque quelque chose. Il n'est pas censé y avoir des requêtes, quelque part ?


Marc.

Hors ligne

#10 04/05/2011 21:31:05

unisol
Membre

Re : Enregistrement aléatoire avec pg_query

oui bien sur.
    //delais_reglement
    $requete = "select conditions FROM delais_reglement where nrosociete = $_SESSION[NroSociete]";
    $result_cond =  pg_exec( $cnx, $requete);
    $numrows_cond = pg_numrows($result_cond);
    //mode_paiement
    $requete = "select mode_paiement FROM modes_paiement where nrosociete = $_SESSION[NroSociete]";
    $result_paiement =  pg_exec( $cnx, $requete);
    $numrows_paiement = pg_numrows($result_paiement);

            <label>
                <select name="conditions" size="1" id="conditions">
                     <?php
                     echo "<option ></option>";
                      for($ri = 0; $ri < $numrows_cond; $ri++)
                      {
                      $row = pg_fetch_array($result_cond, $ri);
                      if ($row['conditions']==$_POST['conditions'])
                          {echo "<option selected>".$_POST['conditions']."</option>";}
                      else
                          {echo "<option >".$row['conditions']."</option>";}
                      }
                      ?>
                </select>
              </label>
              </td>
            </tr>
            <tr>
// 2eme partie
              <td height="24" class="style12">Mode paiement</td>
              <td ><label>
                <select name="mode_paiement" size="1" id="mode_paiement">
                  <?php
                      echo "<option ></option>";
                      for($ri = 0; $ri < $numrows_paiement; $ri++)
                      {
                      $rowp = pg_fetch_array($result_paiement, $ri);
                      if ($rowp['mode_paiement']==$_POST['mode_paiement'])
                          {echo "<option selected>".$rowp['mode_paiement']."</option>";}
                      else
                          {echo "<option >".$rowp['mode_paiement']."</option>";}
                      }
                  ?>
                </select>
              </label>

Hors ligne

#11 04/05/2011 21:39:55

unisol
Membre

Re : Enregistrement aléatoire avec pg_query

donc je m'explique,

seule la 2 eme déroulante pose probleme
si on clic dessus, elle se déroule et affiche !
<une ligne vide>
<Carte bancaire>
<Virement bancaire>
etc.

si on selectionne une ligne autre que Carte bancaire
l'enregistrement est réalisé dans postgres puis affiché à l'ecran
si carte bancaire est selectionné, l'enregistrement est réalisé dans postgres
(j'ai vérifié, dans pgadmin) MAIS à l'ecran,
le couple HTML PHP ne me l'affiche pas
ce qui est curieux c'est que la déroulante du haut marche nickel.

Hors ligne

#12 04/05/2011 21:45:23

unisol
Membre

Re : Enregistrement aléatoire avec pg_query

precision,
j'ai modifié l'ordre des déroulantes dans le code

mode de paiment dabord
puis conditions ensuite
histoire de voir si une variable de la premiere déroulante ne venait pas troubler
l'exécution de la 2eme partie.

rien n'y fait le bug persiste

Hors ligne

#13 04/05/2011 21:56:58

Marc Cousin
Membre

Re : Enregistrement aléatoire avec pg_query

Aucune idée. En tout cas, pg_exec est dépréciée, c'est pg_query qu'il faut utiliser (je viens de me rendre compte de ça en regardant le code). Pour le reste, c'est plus une question PHP et HTML qu'une question Postgres. À moins qu'il y ait un développeur PHP dans les parages, vous obtiendrez certainement une meilleure réponse sur un forum PHP.


Marc.

Hors ligne

Pied de page des forums