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 :

Insérer données avec champs à 0 PAR DEFAUT


Sujet :

PHP & Base de données

  1. #1
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut Insérer données avec champs à 0 PAR DEFAUT
    Bonjour à tous.
    Merci pour votre aide.

    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
     
    $servername = "localhost";
    $database = "philippe";
    $username = "root";
    $password = "";
    // Create connection
    $conn = mysqli_connect($servername, $username, $password, $database);
    // Check connection
    mysqli_close($conn);
    // session_start();
     
    // if(isset($_POST["conducteur"], $_POST["lieudepart"], $_POST["lieuarrive"],$_POST["participation"],$_POST["debutActivite"], $_POST["finActivite"] )) {
     
     
        $conducteur = htmlspecialchars( $_POST['conducteur']) ;
        $lieudepart = htmlspecialchars( $_POST['lieudepart']);
        $lieuarrive = htmlspecialchars( $_POST['lieuarrive']);
        $participation = htmlspecialchars( $_POST['participation']);
        $datedepart = htmlspecialchars( $_POST['$datedepart']);
        $datearrive = htmlspecialchars( $_POST['$datearrive']);
     
        $datedepart = date('Y/m/d', strtotime($datedepart));
        $datearrive = date('Y/m/d', strtotime($datearrive));
     
     
        $conn = mysqli_connect('127.0.0.1', 'root', '', 'philippe');
     
     
    $req = " INSERT INTO `orders` (`order_number`, `conducteur`, `lieudepart`, `lieuarrive`, `participation`, `datedepart`, `datearrive`,' 
    idtrajet', 'idmembre') VALUES (NULL,'$conducteur','$lieudepart','$lieuarrive','$participation','$debutActivite','$finActivite',0,0)";
    try {$conn->query($req);} catch (Exception $e) {$e->getMessage();}
    echo 'Success';
    Ca ne fontionne pas malgres un copier coller d'un INSERT avec PHPMYSL

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Il existe plusieurs manières de faire.

    Tu peux par exemple procéder ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = <<<SQL
        INSERT INTO orders (column, ...)
        VALUES (NULLIF('$value', ''), ...)
        SQL;
    Avec NULLIF() si $value (qui doit être proprement échappée !) vaut chaîne vide => Alors NULL est retourné, sinon $value est retourné.

    https://dev.mysql.com/doc/refman/8.0...unction_nullif

    Important : il ne faut pas enregistrer tes valeurs codées en HTML (cela permet d'avoir de la data neutre de la techno de rendu) et il faut les échapper correctement pour SQL, donc pas de htmlspecialchars(), mais plutôt un mysqli_real_escape_string()

    https://www.php.net/manual/fr/mysqli...ape-string.php
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Par défaut inserer donnee avec champs à PAR DEFAUT 0
    Ah tiens, il me semble que c'était NULL par défaut, soit j'ai mal lu, soit il y a eu du changement entre temps

    Pour poursuivre sur une solution purement SQL, on peut utiliser COALESCE() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = <<<SQL
        INSERT INTO orders (column, ...)
        VALUES (COALESCE(NULLIF('$value', ''), 0), ...)
        SQL;
    Si $value vaut chaine vide on le valorise NULL (avec NULLIF()), si NULLIF() retourne NULL COALESCE() permet d'obtenir 0.

    https://dev.mysql.com/doc/refman/8.0...ction_coalesce
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  4. #4
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    Merci pour ton attention.
    Je comprend pas grand chose.

  5. #5
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    J'essaye ceci en dure dans myphp admin et ca fonctionne.
    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
     
    <?php
     
    $servername = "localhost";
    $database = "philippe";
    $username = "root";
    $password = "";
    // Create connection
    $conn = mysqli_connect($servername, $username, $password, $database);
    // Check connection
    mysqli_close($conn);
     
        $conn = mysqli_connect('127.0.0.1', 'root', '', 'philippe');
     
        $req = " INSERT INTO `orders` (`order_number`, `conducteur`, `lieudepart`, `lieuarrive`, `participation`, `datedepart`, `datearrive`,'
    idtrajet', 'idmembre') VALUES (NULL,$conducteur,$lieudepart,$lieuarrive,$participation,$datedepart,$datearrive,0,0)";
     
        try {$conn->query($req);} catch (Exception $e) {$e->getMessage();}
    echo 'Success';
     
    // ceci fonction dans php myadmin.
    // INSERT INTO `orders` (`order_number`, `conducteur`, `lieudepart`, `lieuarrive`, `participation`, `datedepart`, `datearrive`, `idtrajet`, `idmembre`) VALUES (NULL, 'Philippe', 'Paris', 'Limoge', '50', '2022-08-15 12:31:27.000000', '2022-08-31 14:31:27', '0', '0');
    Comment l'adapter Merci. En sachant que les variables seront fournies avec required dans la propritee des champs du formulaire.

  6. #6
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    J ai aussi fait cela mais ca ne marche pas.

    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
     
    <?php
    if(isset($_POST["conducteur"], $_POST["lieudepart"], $_POST["lieuarrive"],$_POST["participation"],$_POST["debutActivite"], $_POST["finActivite"] )) {
     
    $order_number = NULL;
    $conducteur = htmlentities($_POST['conducteur']) ;
    $lieudepart = htmlentities($_POST['lieudepart']);
    $lieuarrive = htmlentities($_POST['lieuarrive']);
    $participation = htmlentities($_POST['participation']);
    $datedepart = htmlentities($_POST['$datedepart']);
    $datearrive = htmlentities($_POST['$datearrive']);
    $idtrajet = '0';
    $idmembre = '0';
    try
     
    {
     
        $bdd = new PDO('mysql:host=localhost;dbname=philippe','root', '');
        $req = $bdd->prepare("INSERT INTO 'orders' ('order_number', 'conducteur', 'lieudepart`, 'lieuarrive', 'participation', 'datedepart', 'datearrive','idtrajet', 'idmembre') 
    VALUES (:order_number,:conducteur,:lieudepart,:lieuarrive,:participation,:datedepart,:datearrive,:idtrajet,:idmembre)");
     
        $req->execute(array(
     
            'order_number' => NULL,
     
            'conducteur' => $conducteur,
     
            'lieudepart' => $lieudepart,
     
            'lieuarrive' => $lieuarrive,
     
            'participation' => $participation,
     
            'datedepart' => $datedepart,
     
            'datearrive' => $datearrive,
     
            'idtrajet' => $idtrajet,
     
            'idmembre' => $idmembre
     
        ));
    }
     
    catch(Exception $e)
     
    {
     
        die('Erreur : '.$e->getMessage());
     
    }
     
    echo 'Success';
    }

  7. #7
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    Le code fonctionne que si on li transmert des valeur en dure mais pas avec la methode $_POST[].

    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
    63
    64
    65
    66
    67
    68
    69
     
    <?php
    if(isset($_POST["conducteur"], $_POST["lieudepart"], $_POST["lieuarrive"],$_POST["participation"],$_POST["datedepart"], $_POST["datearrive"] )) {
     
    $order_number = NULL;
    $conducteur = htmlentities($_POST['conducteur']) ;
    $lieudepart = htmlentities($_POST['lieudepart']);
    $lieuarrive = htmlentities($_POST['lieuarrive']);
    $participation = htmlentities($_POST['participation']);
    $datedepart = $_POST['$datedepart'];
    $datearrive = $_POST['$datearrive'];
    $idtrajet = '0';
    $idmembre = '0';
     
     
    // $conducteur = 'Moi et mamam';
    // $lieudepart = 'Paris';
    // $lieuarrive = 'Pekin';
    // $participation = 500;
    // $datedepart = '2022-08-09 09:23:00';
    // $datearrive = '2022-09-09 09:23:00';
     
      try {
     
     
          $PDO = new PDO('mysql:host=localhost;dbname=philippe','root','');
          $PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
          $PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
     
          $sql = "INSERT INTO orders (order_number, conducteur, lieudepart, lieuarrive, participation, datedepart, datearrive,idtrajet, idmembre)
    VALUES (:order_number,:conducteur,:lieudepart,:lieuarrive,:participation,:datedepart,:datearrive,:idtrajet,:idmembre)";
     
     
        $req = $PDO->prepare($sql);
     
     
        $req->execute(array(
     
            "order_number" => $order_number,
     
            "conducteur" => $conducteur,
     
            "lieudepart" => $lieudepart,
     
            "lieuarrive" => $lieuarrive,
     
            "participation" => $participation,
     
            "datedepart" => $datedepart,
     
            "datearrive" => $datearrive,
     
            "idtrajet" => $idtrajet,
     
            "idmembre" => $idmembre
     
        ));
     
      }
    catch(Exception $e)
     
    {
        echo '.$e->getMessage().';
    //     die('Erreur : '.$e->getMessage());
     
    }
     
    echo 'Success';
    }
    Combiné avec une methode jquery le message $e->getMassage() donne ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     ect ...  undifined  index: $datedepart  $datearrive ect...

  8. #8
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut
    Bonjour,

    Pourquoi il y'a un dollar en trop dans les variables $_POST ? $_POST['$datedepart'];$_POST['$datearrive'];

  9. #9
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    merci je viens juste de le remarquer. Tout marche à merveille.
    Ce code fonctionne.
    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
    63
    64
    65
    66
    67
    68
    69
     
    <?php
    if(isset($_POST["conducteur"], $_POST["lieudepart"], $_POST["lieuarrive"],$_POST["participation"],$_POST["datedepart"], $_POST["datearrive"] )) {
     
    $order_number = NULL;
    $conducteur = htmlentities($_POST['conducteur']) ;
    $lieudepart = htmlentities($_POST['lieudepart']);
    $lieuarrive = htmlentities($_POST['lieuarrive']);
    $participation = htmlentities($_POST['participation']);
    $datedepart = $_POST['datedepart'];
    $datearrive = $_POST['datearrive'];
    $idtrajet = '0';
    $idmembre = '0';
     
     
    // $conducteur = 'Moi';
    // $lieudepart = 'Paris';
    // $lieuarrive = 'Pekin';
    // $participation = 500;
    // $datedepart = '2022-08-09 09:23:00';
    // $datearrive = '2022-09-09 09:23:00';
     
      try {
     
     
          $PDO = new PDO('mysql:host=localhost;dbname=philippe','root','');
          $PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
          $PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
     
          $sql = "INSERT INTO orders (order_number, conducteur, lieudepart, lieuarrive, participation, datedepart, datearrive,idtrajet, idmembre)
    VALUES (:order_number,:conducteur,:lieudepart,:lieuarrive,:participation,:datedepart,:datearrive,:idtrajet,:idmembre)";
     
     
        $req = $PDO->prepare($sql);
     
     
        $req->execute(array(
     
            "order_number" => $order_number,
     
            "conducteur" => $conducteur,
     
            "lieudepart" => $lieudepart,
     
            "lieuarrive" => $lieuarrive,
     
            "participation" => $participation,
     
            "datedepart" => $datedepart,
     
            "datearrive" => $datearrive,
     
            "idtrajet" => $idtrajet,
     
            "idmembre" => $idmembre
     
        ));
     
      }
    catch(Exception $e)
     
    {
        echo '.$e->getMessage().';
    //     die('Erreur : '.$e->getMessage());
     
    }
     
    echo 'Success';
    }

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 135
    Points : 38 560
    Points
    38 560
    Billets dans le blog
    9
    Par défaut
    La meilleure façon d'attribuer une valeur par défaut à une colonne, c'est de coder cette valeur dans le script DDL de création de la table (utilisation du mot-clef DEFAULT).

    En standard, dans tous les SGBD-R, toute colonne numérique (integer, decimal, float) "not null" aura zéro comme valeur par défaut si on n'en précise pas une autre dans le script.

    Note : les "champs" sont les zones d'un formulaire ou d'un état, il n'y a pas de "champ" dans une table d'une base relationnelle.

  11. #11
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Salut,
    On utilise pas htmlentities sur les données à envoyer dans une table.
    Le bienfait n'est jamais perdu

  12. #12
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    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
    $sql = "INSERT INTO orders (conducteur, lieudepart, lieuarrive, participation, datedepart, datearrive)
    VALUES (conducteur,:lieudepart,:lieuarrive,:participation,:datedepart,:datearrive)";
     
     
        $req = $PDO->prepare($sql);
     
     
        $req->execute(array(
     
             "conducteur" => $conducteur,
     
            "lieudepart" => $lieudepart,
     
            "lieuarrive" => $lieuarrive,
     
            "participation" => $participation,
     
            "datedepart" => $datedepart,
     
            "datearrive" => $datearrive
     
        ));
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE IF NOT EXISTS `philippe`.`orders` (
      `order_number` INT NOT NULL AUTO_INCREMENT,
      `conducteur` VARCHAR(100) CHARACTER SET 'utf8' NOT NULL,
      `lieudepart` VARCHAR(500) CHARACTER SET 'utf8' NOT NULL,
      `lieuarrive` VARCHAR(255) CHARACTER SET 'utf8' NOT NULL,
      `participation` DOUBLE NOT NULL,
      `datedepart` DATETIME NOT NULL,
      `datearrive` DATETIME NOT NULL,
      `idmembre` INT NOT NULL DEFAULT 0,
      `idtrajet` INT NOT NULL DEFAULT 0,
      PRIMARY KEY (`order_number`),

    En effet il suffit de ne pas citer les valeur par default dans la requete sql.

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

Discussions similaires

  1. WHERE avec champ renseigné par l'utilisateur
    Par yuyuch dans le forum iReport
    Réponses: 1
    Dernier message: 20/03/2008, 12h11
  2. Mélange de données avec champ MEmo : Risque reconnu ?
    Par petitours dans le forum Sécurité
    Réponses: 1
    Dernier message: 18/09/2007, 11h39
  3. Réponses: 1
    Dernier message: 23/07/2007, 11h00
  4. Créer une fenêtre avec la couleur par defaut d'une dialog
    Par NicolasJolet dans le forum Windows
    Réponses: 2
    Dernier message: 03/08/2006, 16h01
  5. Réponses: 16
    Dernier message: 12/05/2006, 10h20

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