IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Ajout de données en base


Sujet :

PHP & Base de données

  1. #1
    Invité
    Invité(e)
    Par défaut Ajout de données en base
    Bonjour

    grace a adresse http://****.fr/http/temp.php?temp=11&niveau=12

    je souhaite ajouter 2 variables dans une bdd

    la page temp.php =

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
       <head>
           <title>Siphon 2.0</title>
           <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       </head>
       <body>
     
       <p>Temperature <?php echo $_GET['temp'] . ' ' ; ?> </p>
        <p>Niveau d'eau <?php echo $_GET['niveau'] . ' '; ?> </p>
     
    	<?php
    echo "Ajouter en BDD";
     
     $Ma_Date = date('Y-m-d');  //date dans une variable
     
    $bdd = new PDO('mysql:host=localhost:3307;dbname=test;charset=utf8', 'root', '***'); //connexion a la bdd
     
    $bdd->exec("INSERT INTO siphon(Numero,Date,temp,niveau) VALUES(NULL,'".$Ma_Date."','".$_POST['temp']."','".$_POST['niveau']."')"); //envoie valeur a la bdd
     
    ?>
       </body>
    </html>
    j'arrive bien a recuperer mes deux valeurs
    j'arrive bien a ma connecter a ma base mysql
    mais je n'arrive pas a incrementer les donnes en bases

    Merci beaucoup pour le temps passé a m'aider

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Le SGBD renvoie sans aucun doute un message d'erreur.
    Que dit-il ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 988
    Par défaut
    Poste ce que renvoie la requête: SHOW CREATE TABLE test.siphon; (fait le via phpmyadmin ou MySQL Workbench par exemple), ça nous en dira plus sur ta table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->exec("INSERT INTO siphon(Numero,Date,temp,niveau) VALUES(NULL,'".$Ma_Date."','".$_POST['temp']."','".$_POST['niveau']."')");
    Pas mal de choses à dire sur cette ligne:
    • les valeurs temp et niveau sont passées par la méthode GET, pas par la méthode POST.
    • on ne passe pas des valeurs à une requête SQL en les concaténant, c'est un trou de sécurité (d'autant plus que ces valeurs viennent de l'extérieur du script et que celui-ci ne les teste pas). Utilise une requête préparée (regarde aussi les tutoriels sur le sujet).
    • tu devrais préfixer le nom de tes colonnes* par exemple avec sph_ ou autre, ce qui permet de savoir à quelle table elles appartiennent, mais aussi évite que tes noms de colonne soient des mots réservés comme Date. * Il n'y a pas de consensus à ce sujet, certains préfèrent ne pas le faire et utiliser des backticks pour éviter les ambiguïtés.
    • En partant du principe que Numero est la colonne de ta clef primaire et qu'elle est de type INT et auto-incrémentée, elle devrait donc être NOT NULL (je pense que c'est la raison qui fait échouer ta requête, suite à une erreur du type Column cannot be null). D'autre part, si cette colonne est bien ce que je crois qu'elle est, inutile alors de la faire figurer dans la requête, elle se remplira toute seule comme une grande.


    Bref, je ferais plutôt un truc comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
       <head>
           <title>Siphon 2.0</title>
           <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       </head>
       <body>
     
    <?php
        // TODO: On commence par contrôler les variables (si elles sont du type correct
        // et si leurs valeurs ne sont pas délirantes. Si ce n'est pas le cas, mieux
        // vaut interrompre le script.
     
        // Si c'est OK, alors on les stocke dans des variables (ce qui évite de se
        // trimbaler des `$_GET` jusqu'à la fin du script).
     
        $temp = $_GET['temp'];
        $niveau = $_GET['niveau'];
    ?>
        <h2>Valeurs</h2>
     
        <p>Température <?= $temp ?></p>
        <p>Niveau d'eau <?= $niveau ?></p>
     
     
        <h2>Ajout en BDD</h2>
    <?php 
     
    $host = 'localhost';
    $dbname = 'test';
    $user = 'root';
    $pass = '***';
    $port = '3307';
    $charset = 'utf8mb4';
     
    $dsn = "mysql:$host;dbname=$dbname;charset=$charset;port=$port";
     
    $options = [
        \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_EMULATE_PREPARES => false
    ];
     
    try {
        $pdo = new \PDO($dsn, $user, $pass, $options);
    } catch (\PDOException $e) {
        throw new \PDOException($e->getMessage(), (int)$e->getCode());
    }
     
    $query = 'INSERT INTO t_siphon (sph_date, sph_temp, sph_niveau)
    VALUES (:date, :temp, :niveau)';
     
    $stmt = $pdo->prepare($query);
     
    $stmt->execute([
        'date' => date('Y-m-d'),
        'temp' => $temp,
        'niveau' => $niveau
    ]);
     
    ?>
       </body>
    </html>

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Merci beaucoup pour ton code.

    Bonne journée

    Arnaud
    Dernière modification par Invité ; 11/11/2020 à 19h18.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Problème d'ajout de données à une base de données
    Par ahmed_kh dans le forum VB.NET
    Réponses: 9
    Dernier message: 07/04/2012, 00h00
  2. Réponses: 1
    Dernier message: 02/04/2008, 13h42
  3. Réponses: 3
    Dernier message: 10/03/2008, 23h43
  4. Impossible d'ajouter données dans base de données
    Par spartaxhit dans le forum Requêtes
    Réponses: 1
    Dernier message: 14/01/2008, 02h58
  5. [MySQL] Ajouter des informations à notre base de données
    Par wild_seven dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 26/12/2005, 17h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo