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 :

INSERTION PDO SQL SERVER, PAS D'ERREUR MAIS PAS D'INSERTION


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 83
    Par défaut INSERTION PDO SQL SERVER, PAS D'ERREUR MAIS PAS D'INSERTION
    Bonsoir,

    Quelqu'un peut m'aider à inspecter ce code, j'essaie de faire une insertion dans ma table j'utilise SQL SERVER 2008, le code n'affiche aucune erreur mais pourtant aucune donnée n'est enregistrer dans ma table, je crois qu'il y a quelque chose qui cloche mais je ne sais pas où.

    Voici le code, merci

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    <?php
    include("config_pdo.php");
    ?>
     
     
    <form action="" method="post" name="form1" id="form1">
    <?php
     
        $renderForm = true;
        if (isset($_POST['Valider']) && $_POST['Valider'] == 'Valider') {
            extract($_POST);
            if ((isset($_POST['MONEY_TRANSAC_NUM']) && !empty($_POST['MONEY_TRANSAC_NUM'])) && (isset($_POST['NOM_PRENOM']) && !empty($_POST['NOM_PRENOM']))) {
     
                if(strlen($_POST['MONEY_TRANSAC_NUM'])>=10)
                {
                if (preg_match("#(\+[0-9]{2}\([0-9]\))?[0-9]{10}#", $_POST['MONEY_TRANSAC_NUM']))
                {
                /* Verifier si l'utilisateur n'est pas déjà dans la base des données */
                $bdconnect= new ConnectMe();
                $req = $bdconnect->prepare('SELECT MONEY_TRANSAC_NUM FROM CFCO_TICKETS WHERE MONEY_TRANSAC_NUM = :MONEY_TRANSAC_NUM');
                $req->execute(array('MONEY_TRANSAC_NUM' => $_POST['MONEY_TRANSAC_NUM']));
                $checkMoneyT = $req->fetch();
     
                if (!$checkMoneyT)  {
     
                    $SQL = "INSERT INTO CFCO_TICKETS (MONEY_TRANSAC_NUM, NOM_PRENOM) VALUES (:MONEY_TRANSAC_NUM, :NOM_PRENOM)";
                    $requete = $bdconnect->prepare($SQL);
                    $requete->execute(array(':MONEY_TRANSAC_NUM'=>$MONEY_TRANSAC_NUM,':NOM_PRENOM'=>$NOM_PRENOM));
     
                    $succes = 'TRANSACTION VALIDE VOTRE TICKET EST : EA34924A';
                    echo '<div class="alert alert-success">' . $succes . ' </br> <a href="?page=signup">REVENIR</a></div><!--succes-->';
                    exit();
                } else {
                    $erreur = 'Ce code ' . $NOM_PRENOM . ' à été utilisé.';
                }
     
                }
                else 
                 { 
                    $erreur = 'LE NUMERO DE TRANSACTION NEST PAS VALIDE'; 
    				//si l'NOM_PRENOM est déjà est incorrect
                 }
     
                 }
    		   else 
    			 { 
                    $erreur = 'LE CODE DE TRANSACTION DOIT AVOIR 10 CHIFFRE'; 
                 }//si le mot de passe contient moins de 6 caracteres
     
            } 
     
            else {
                $erreur = 'Tous les champs sont obligatoire.';
            }
        }
        // échec de l'envoi
        if (isset($erreur)) {
            echo '<div class="alert alert-danger"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>' . $erreur . '</div><!--error-->';
        } if ($renderForm) {
            ?>
     
         <div class="form-group">
    		</br></br>
    			<label for="nomcomplet">Nom & Prénom</label>
                            <input type="text" class="form-control" id="nomcomplet"  name="MONEY_TRANSAC_NUM" type="text" value="<?php if (isset($_POST['MONEY_TRANSAC_NUM'])) echo htmlentities(trim($_POST['MONEY_TRANSAC_NUM'])); ?>"  placeholder="10121341"/>
    		  </div>
     
                    <div class="form-group">
    			<label for="NOM_PRENOM">NOM_PRENOM address</label>
    			<input type="NOM_PRENOM" class="form-control" id="NOM_PRENOM"   name="NOM_PRENOM" type="text" value="<?php if (isset($_POST['NOM_PRENOM'])) echo htmlentities(trim($_POST['NOM_PRENOM'])); ?>"  placeholder="NOM_PRENOM"/>
    		  </div>
     
     
            <input type="submit" name="Valider"  class="btn btn-default" value="Valider" /> 
     
        </form>
     
     
    	   <?php
    }
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Concernant la présentation, c'est un peu étrange d'avoir le traitement dans le formulaire.
    Concernant la sécurité, n'utilise pas extract(), cela peut conduire à des injections de variables.
    Concernant le problème, est-ce que tu as contrôlé le retour de execute() ? D'ailleurs ça serait bien de ne pas afficher un message positif à l'utilisateur sans avoir contrôlé que la requête s'est bien executée.
    Si ce n'est pas fait, active les erreurs PDO.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 83
    Par défaut
    Bonsoir et merci

    Concernant la présentation, c'est un peu étrange d'avoir le traitement dans le formulaire.
    Concernant la sécurité, n'utilise pas extract(), cela peut conduire à des injections de variables.
    Concernant le problème, est-ce que tu as contrôlé le retour de execute() ? D'ailleurs ça serait bien de ne pas afficher un message positif à l'utilisateur sans avoir contrôlé que la requête s'est bien executée.
    Si ce n'est pas fait, active les erreurs PDO.
    Pour :
    1. J'ai souhaité traiter dans le formulaire, il t-il un inconvenient concernant la sécurité ? Si oui, merci d'avance pour ton aide.
    2. Merci beaucoup j'y tâcherai
    3. J'ai vérifié execute() et c'est justement pour ça que le message est affiché à l'utilisateur
    4. Les erreurs PDO sont activités

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    1 - comme je t'ai dis c'est une question de clarté de présentation HTML/PHP
    3 - ce n'est pas le cas dans le code que tu nous montres.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 83
    Par défaut
    Bonjour,

    J'ai à nouveau vérifié execute() le problème persiste et pour de raison de clarté, j'ai séparé le code... J'espère que je pourrais recevoir votre assistance.

    Formulaire
    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
     
    <form method="post" action="checkticket.php" name="form1" id="form1">
         <div class="form-group">
    		</br></br>
    			<label for="nomcomplet">Nom & Prénom</label>
                            <input type="text" class="form-control" id="nomcomplet"  name="MONEY_TRANSAC_NUM" type="text" value="<?php if (isset($_POST['MONEY_TRANSAC_NUM'])) echo htmlentities(trim($_POST['MONEY_TRANSAC_NUM'])); ?>"  placeholder="10121341"/>
    		  </div>
     
                    <div class="form-group">
    			<label for="NOM_PRENOM">NOM_PRENOM address</label>
    			<input type="NOM_PRENOM" class="form-control" id="NOM_PRENOM"   name="NOM_PRENOM" type="text" value="<?php if (isset($_POST['NOM_PRENOM'])) echo htmlentities(trim($_POST['NOM_PRENOM'])); ?>"  placeholder="NOM_PRENOM"/>
    		  </div>
     
     
            <input type="submit" name="Valider"  class="btn btn-default" value="Valider" /> 
     
        </form>
    checkticket.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
    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
    70
    71
    72
    73
    74
    75
    76
    77
     
    <?php
    include("config_pdo.php");
    //echo $_SERVER['PHP_SELF'].'/<script>alert("XSS HERE");</script>';
    //echo filter_var($_SERVER['PHP_SELF'], FILTER_SANITIZE_STRING);//PHP SELF PROTEGE
     
    //CODE GENERATOR
    $characts = 'abcdefghijklmnopqrstuvwxyz'; 
    $characts .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';  
    $characts .= '1234567890'; 
    $code_aleatoire = ''; 
     
    for($i=0;$i < 10;$i++) 
    { 
    $code_aleatoire .= $characts[ rand() % strlen($characts) ]; 
    }
     
        if (isset($_POST['Valider']) && $_POST['Valider'] == 'Valider') {
            extract($_POST);
            if ((isset($_POST['MONEY_TRANSAC_NUM']) && !empty($_POST['MONEY_TRANSAC_NUM'])) && (isset($_POST['NOM_PRENOM']) && !empty($_POST['NOM_PRENOM']))) {
     
                if(strlen($_POST['MONEY_TRANSAC_NUM'])>=10)
                {
                if (preg_match("#(\+[0-9]{2}\([0-9]\))?[0-9]{10}#", $_POST['MONEY_TRANSAC_NUM']))
                {
                /* Verifier si l'utilisateur n'est pas déjà dans la base des données */
                $bdconnect= new ConnectMe();
                $req = $bdconnect->prepare('SELECT MONEY_TRANSAC_NUM FROM CFCO_TICKETS WHERE MONEY_TRANSAC_NUM = :MONEY_TRANSAC_NUM');
                $req->execute(array('MONEY_TRANSAC_NUM' => $_POST['MONEY_TRANSAC_NUM']));
                $checkMoneyT = $req->fetch();
     
                if (!$checkMoneyT)  
                {
                    $MyREQ = "INSERT INTO CFCO_TICKETS (NOM_PRENOM,MONEY_TRANSAC_NUM, WHEN_DATE) VALUES ( :NOM_PRENOM,:MONEY_TRANSAC_NUM,:WHEN_DATE)";
                    $req2 = $bdconnect->prepare($MyREQ);
                    $req2->execute(array(':MONEY_TRANSAC_NUM' => $_POST['MONEY_TRANSAC_NUM'],
                      ':NOM_PRENOM' => $_POST['NOM_PRENOM'], ':WHEN_DATE' =>date('Y-m-d h:i:s')));
                    $insertOk=$req->fetch();
                    if ($insertOk) {
                      # code... 
                      $succes = 'TRANSACTION VALIDE VOTRE TICKET EST : <b>'.$code_aleatoire.'</b>';
                    echo '<div class="alert alert-success">' . $succes . ' </br> <a href="?page=signup">REVENIR</a></div><!--succes-->';
                    exit();
                    }
                 else
                 {
                  echo "Insertion échouée";
                 }
     
                } else {
                    $erreur = 'Ce code ' . $MONEY_TRANSAC_NUM . ' a été utilisé.';
                }
     
                }
                else 
                 { 
                    $erreur = 'LE NUMERO DE TRANSACTION NEST PAS VALIDE'; 
    				//si l'NOM_PRENOM est déjà est incorrect
                 }
     
                 }
    		   else 
    			 { 
                    $erreur = 'LE CODE DE TRANSACTION DOIT AVOIR 10 CHIFFRE'; 
                 }//si le mot de passe contient moins de 6 caracteres
     
            } 
     
            else {
                $erreur = 'Tous les champs sont obligatoire.';
            }
        }
        // échec de l'envoi
        if (isset($erreur)) {
            echo '<div class="alert alert-danger"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>' . $erreur . '</div><!--error-->';
        } 
            ?>

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    On ne fait pas un fetch sur un Insert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $result = $req2->execute(array(':MONEY_TRANSAC_NUM' => $_POST['MONEY_TRANSAC_NUM'], ':NOM_PRENOM' => $_POST['NOM_PRENOM'], ':WHEN_DATE' =>date('Y-m-d h:i:s')));
    var_dump($result);
    var_dump($req2->rowCount);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 83
    Par défaut
    PDO semble ne pas reconnaitre rowCount

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Undefined property: PDOStatement::$rowCount in C:\wamp\www\cfco\checkticket.php on line 38
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $result = $req2->execute(array(':MONEY_TRANSAC_NUM' => $_POST['MONEY_TRANSAC_NUM'], ':NOM_PRENOM' => $_POST['NOM_PRENOM'], ':WHEN_DATE' =>date('Y-m-d h:i:s')));
    var_dump($result);
    var_dump($req2->rowCount);

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var_dump($result);
    var_dump($req2->rowCount());
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 83
    Par défaut
    Désolé mais rien ne marche :
    Je veux savoir vraiment à quel niveau j'ai fait une erreur

    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
     $MyREQ = "INSERT INTO CFCO_TICKETS (NOM_PRENOM,MONEY_TRANSAC_NUM, WHEN_DATE) VALUES ( :NOM_PRENOM,:MONEY_TRANSAC_NUM,:WHEN_DATE)";
                    $req2 = $bdconnect->prepare($MyREQ);
                    $result = $req2->execute(array(':MONEY_TRANSAC_NUM' => $_POST['MONEY_TRANSAC_NUM'], ':NOM_PRENOM' => $_POST['NOM_PRENOM'], ':WHEN_DATE' =>date('Y-m-d h:i:s')));
                    var_dump($result);
                    var_dump($req2->rowCount());
                    if ($result) {
                      # code... 
                      $succes = 'TRANSACTION VALIDE VOTRE TICKET EST : <b>'.$code_aleatoire.'</b>';
                    echo '<div class="alert alert-success">' . $succes . ' </br> <a href="?page=signup">REVENIR</a></div><!--succes-->';
                    exit();
                    }
                 else
                 {
                  echo "Insertion échouée";
                 }

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    c'est quoi "rien" dans "rien ne marche" ?
    Tu obtiens quoi ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 83
    Par défaut
    Les données ne sont toujours pas insérées dans ma table:


  12. #12
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 83
    Par défaut
    Bonjour,

    ça marché enfin de compte j'ai trouvé la faille, c'était au niveau de l'insertion de la date, WHEN_DATE c'était NON NULL dans alors donc en plus le format de la date que j'utilise semble erroné , donc j'ai supprimé la cette ligne et c'est passé. Quelle fonction de date php je peux utiliser pour qu'il prenne la date encours lors de l'enregistrement ?

    Merci

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    J'ai comme un doute sur le fait que les erreurs PDO soient actives.

    Pour avoir la date actuelle, utilise directement la fonction SQL GETDATE() dans ta requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. isql pas d'erreur mais pas d'action
    Par mariannickd dans le forum Outils
    Réponses: 4
    Dernier message: 14/11/2011, 10h39
  2. Réponses: 10
    Dernier message: 12/03/2011, 16h18
  3. Réponses: 3
    Dernier message: 12/06/2010, 10h16
  4. [SSIS 2K5] Pas d'erreur mais pas de données
    Par tornade69 dans le forum SSIS
    Réponses: 2
    Dernier message: 14/07/2009, 15h03
  5. Pas d'erreur, mais pas d'affichage
    Par FotoXe33 dans le forum Langage
    Réponses: 7
    Dernier message: 21/06/2009, 12h54

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