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 23/05/2020 12:54:25

php : problème d'insertion dans la base

Je deviens fou ! Pouvez-vous m'aider ?
J'ai créer un formulaire :

    <form id="data" name="envoyer" action="action.php" method="post">
        <input name="id" type="hidden" value="">
        <table align="center" width="300" border="0" cellspacing="0" cellpadding="0">
          <tbody>
            <tr>
              <td colspan="2"><p align="center">Date et heure :<br><input type="datetime-local" name="date" value="" class="date"></p><p>&nbsp;</p></td>
            </tr>
            <tr>
              <td>Taux de glycémie avant :</td>
              <td align="center"><input type="number" name="avant"></td>
            </tr>
            <tr>
              <td>Trulicitie :</td>
              <td align="center"><input type="checkbox" name="trulicitie" ></td>
            </tr>
            <tr>
              <td>Nombre d'unité de rapide : </td>
              <td align="center"><input type="number" name="rapide" ></td>
            </tr>
            <tr>
              <td>Nombre d'unité de lente :</td>
              <td align="center"><input type="number" name="lente" ></td>
            </tr>
            <tr>
              <td>Taux de glycémie après :</td>
              <td align="center"><input type="number" name="apres" ></td>
            </tr>
              <tr colspan="2"><td>&nbsp;<input type="hidden" id="type" name="type"></td></tr>
          </tbody>
        </table>
</form>



J'ai une page php qui resoit les info et les enregistre normalement dans ma base :

    if (isset($_POST["date"])) {
        $id = $_POST["id"];
        $date = $_POST["date"];
        $avant = $_POST["avant"];
        $trulicitie = $_POST["trulicitie"];
        $lente = $_POST["lente"];
        $rapide = $_POST["rapide"];
        $apres = $_POST["apres"];
        $type = $_POST["type"];
    }

    $sql_insert = "INSERT INTO glycemie (id, date, avant, trulicity, lente, rapide, apres) VALUES (DEFAULT,'$date',$avant,'$trulicitie',$lente,$rapide,$apres);";
    $result = pg_query($sql_insert);


Mais j'ai beau tous faire pour trouver l'erreur il m'écrit :

Warning: pg_query() [function.pg-query]: Query failed: ERROR: syntax error at or near "," LINE 1: ... rapide, apres) VALUES (DEFAULT,'2020-05-23 12:49',,'1',,,); ^ in /mnt/100/sdb/c/6/jb.martinez/glycemie/admin/action.php on line 62


Que se passe t-il ???
Je ne comprend pas ?
Pouvez-vous m'éder ?
Merci.

Hors ligne

#2 23/05/2020 14:49:42

gleu
Administrateur

Re : php : problème d'insertion dans la base

La requête est en erreur parce qu'un bon nombre de champs ne sont pas renseignés (avant, rapide, apres, type). La seule explication que je vois est que vous ne les avez pas renseigné sur le formulaire HTML.


Guillaume.

Hors ligne

#3 23/05/2020 15:34:36

Re : php : problème d'insertion dans la base

Merci beaucoup pour votre aide ! En réalité c'était trulicity que je gérais avec un checkbox et une variable de base de donnée boolean. Je croyais pouvoir envoyer une variable true ou false. En réalité il n'a accepté que de prendre une valeur string contenant "true" ou "false". Si non il considérait en effet que la valeur n'était pas remplie comme vous me le suggérez dans votre réponse. Et merci pour votre rapidité de réaction !

Hors ligne

#4 23/05/2020 19:51:09

rjuju
Administrateur

Re : php : problème d'insertion dans la base

Petit détail concernant pg_query : c'est une faille de sécurité ambulante côté injection SQL.  Comme précisé dans la documentation (https://www.php.net/manual/en/function.pg-query.php ):

WARNING:  String interpolation of user-supplied data is extremely dangerous and is likely to lead to SQL injection vulnerabilities. In most cases pg_query_params() should be preferred, passing user-supplied values as parameters rather than substituting them into the query string.

Any user-supplied data substituted directly into a query string should be properly escaped.

Hors ligne

Pied de page des forums