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 :

Requête préparée bloque sur l'INSERT


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 48
    Par défaut Requête préparée bloque sur l'INSERT
    Bonjour a tous,

    j'ai un petit problème d'INSERT avec une requête préparé qui fonctionne en mode "bac a sable" et ne fonctionne pas sur le serveur interne.
    mes autres requête INSERT pour d'autres besoins sont construite pareille et pas de souci, mais celle-là marche pas. J'avoue que je tourne en rond et j'aurais besoin d'un oeil extérieur.
    ça déroule jusqu'au header ('location:../index.php?result=Enregistrement confirmé,un modérateur doit encore valider votre inscription. Un E-mail vous sera envoyé.'); sans erreur.
    Mais l'INSERT ne se fait pas dans la BDD.

    Merci de votre aide.

    ci-dessous le code :

    Code php : 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
    <?php
    session_start();
    // On n'effectue les traitement qu'à la condition que 
    // les informations aient été effectivement postées
    if ( isset($_POST) && (!empty($_POST['mail'])) ) {
     
      extract($_POST);
      $id1= $_POST['nom'];
      $id2= $_POST['prenom'];
      $id3= $_POST['password1'];
      $id4= $_POST['mail'];
      $id5= $_POST['region'];
      $id6= $_POST['mailcc'];
     
     // inclusion connexion BDD
    	include("../connexion_bdd.php");
     
      // inclusion requete login 
    	include("../requete_bdd/SELECT_verifie_user_existe.php");
     
      if ($nombre === 0) {
        // insert nouveau membre
        $Insertuser=$connexion->prepare ('INSERT INTO `user` (`nom`,`prenom`,`typeacces`,`psw`,`mail`,`centre_cc`,`mail_centre_cc`,`actif_hotline`) VALUES (?,?,?,?,?,?,?,?)');
        $Insertuser->execute (array($id1,$id2,'999',$id3,$id4,$id5,$id6,'0'));
        //print_r($connexion->errorInfo()); // sert au debug erreur SQL
        unset( $connexion ); // on coupe la connexion a la BDD
    	//inclusion appel des class phpmailer
    		include("../appel_phpmailer.php");
    		//parametrage config du serveur mail
    		include("../configmail.php");
    		// inclusion mail demandeur
    		include("../commun/mail_alerte_new_membre.php");
        header ('location:../index.php?result=Enregistrement confirmé,un modérateur doit encore valider votre inscription. Un E-mail vous sera envoyé.');
        }
      else{
        unset( $connexion ); // on coupe la connexion a la BDD
        header ('location:../index.php?result=E-mail déja utilisé.Enregistrement annulé.');
      }
    }

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 519
    Par défaut
    Bonjour,

    Si la requête fonctionne correctement sur un serveur et ne fonctionne pas sur un autre, cela dit que la configuration du 2éme serveur n'est pas identique que celle du premier.

    À mon avis, c'est extract() qui pose problème, essayez aussi d'afficher les erreurs/avertissements PHP et utiliser un bloc try catch.

    Avez-vous vérifié les valeurs avec un echo ou var_dump des variables avant et après l'extraction ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 48
    Par défaut
    Bonjour,

    les valeur avant et après sont conforme car je les recupéres correctement dans mail d'alerte après la ligne d'INSERT
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    include("../commun/mail_alerte_new_membre.php");

    j'ai pas d'erreur sur la ligne errorinfo() quand je l'active
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    //print_r($connexion->errorInfo()); // sert au debug erreur SQL

    Oui je sais vous allez me dire que c'est normal "tu n'est pas sur le même système BDD , c'est pas les même version, etc..", néanmoins ci-dessous les versions et autre INSERT qui fonctionne sur les deux environnements le principe de code reste le même pourtant.
    qu'en pensez-vous ?
    Merci de votre aide.

    sur le PC bac a sable je suis en version Xampp v3.3.0 :

    Version du serveur : 10.4.25 - MariaDB
    Version de PHP : 8.1.10
    Version PHPmyadmin : 5.2.0
    serveur : apache v2.4.54 sous windows 10 (win64)

    sur le serveur interne je suis en version :

    Version du serveur : 8.0.12 - MySQL
    Version de PHP : 7.2.7
    Version PHPmyadmin : 4.8.3
    serveur : Microsoft-IIS/10.0

    INSERT qui fonctionne sur les 2 environnements :
    Code php : 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
     
    $_POST['contrat'][$i] = strtoupper($_POST['contrat'][$i]);
    $_POST['reference'][$i] = strtoupper($_POST['reference'][$i]);
    $_POST['contact'][$i] = strtoupper($_POST['contact'][$i]);
     
    $preparation = $connexion->prepare("INSERT INTO `detail_contrat` (`CONTRAT`,`REFERENCE`,`STATUS`,`DATE DE DEBUT`,`DATE DE FIN`,`RENOUVELE`,`UNITES DE VENTE`,`CONTACT`,`MAIL CONTACT`,`TELEPHONE`,`SOLDE`,`COMPTE SOON`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)");
    $preparation->execute(array($_POST['contrat'][$i],
    $_POST['reference'][$i],
    $_POST['status'][$i],
    $_POST['date_debut'][$i],
    $_POST['date_fin'][$i],
    $_POST['renouvele'][$i],
    $_POST['unite_vente'][$i],
    $_POST['contact'][$i],
    $_POST['mail'][$i],
    $_POST['telephone'][$i],
    $_POST['solde'][$i],
    $_POST['compte_soon'][0]));
    print_r($connexion->errorInfo()); // sert au debug erreur SQL

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 519
    Par défaut
    Bonjour,

    errorInfo() n'affichera rien si vous n'avez pas activé correctement l'affichage des erreurs/warnings, il faudrait ajouter ces 3 lignes tout au début de votre fichier PHP :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);

    Après vous initialisez l'objet de connexion avec un 4éme paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $dsn="mysql:host=.....";
    $user="......";
    $password="......";
    $connexion=new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
    Voir la documentation de gestion d'erreurs/avertissements PDO .

    Dernière étape est d'utiliser un bloc try catch lors de l'insertion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try{
        $Insertuser=$connexion->prepare ('INSERT INTO `user` (`nom`,`prenom`,`typeacces`,`psw`,`mail`,`centre_cc`,`mail_centre_cc`,`actif_hotline`) VALUES (?,?,?,?,?,?,?,?)');
        $Insertuser->execute (array($id1,$id2,'999',$id3,$id4,$id5,$id6,'0'));
    }catch(PDOException $e){//notez PDOException 
       die("Erreur d'insertion :".$e->getMessage());
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 48
    Par défaut
    Bonjour,

    Merci Toufik83 pour tes recommandations.

    J'ai pas reussi à mettre en place la gestion les erreurs pour l'instant, mais ça m'a permis de réfléchir sur la BDD...
    J'ai trouvé le problème

    En fait sur la version "bac a sables" tout mes items de colonne sont typé avec une valeur par défaut "null" , alors que sur le serveur c'était pas le cas...
    En modifiant ça fonctionne.
    Effectivement si je fais une requète SQL INSERT directement depuis phpmyadmin, ça ne fonctionne pas avec les items valeur par defaut "" quand ils ne sont pas traité dans l'INSERT.

    Merci et bonne journée.

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

Discussions similaires

  1. problème requete asp
    Par bichonjp dans le forum ASP
    Réponses: 5
    Dernier message: 08/09/2005, 12h05
  2. Problème requete update
    Par krfa1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/03/2005, 08h47
  3. Problème requete SQL
    Par tonyskn dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/11/2004, 20h37
  4. problème requete sql
    Par Fred- dans le forum ASP
    Réponses: 2
    Dernier message: 13/06/2004, 02h20
  5. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31

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