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 :

probleme execution de requete insertion


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé

    Profil pro
    Pompier
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Par défaut probleme execution de requete insertion
    bonjour,
    j'ai une requete insertion

    la table n'a pas de clé primaire

    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
    <?php
     if  (isset($_POST['ajout'])){
    			$matricule=$_POST['matricule'];
    			$nom=$_POST['nom'];
    			$prenom=$_POST['prenom'];
    			$centre1=$_POST['centre1'];
    			$centre2=$_POST['centre2'];
    			$grade=$_POST['grade'];
     
    		$sqlA ="INSERT  INTO RH_personnel ( matricule, nom, prenom, centre1, centre2, grade) VALUES ( $matricule, $nom, $prenom, $centre1,  $centre2, $grade)";
     
    echo $sqlA;
     //connection à la base de données:
        $cnx = odbc_connect( "DSN_disponibilite", "root", "" ) or die ("Impossible de se connecter à la base de donnée") ;
    	//echo $cnx;
    		$requeteA = odbc_do($cnx,$sqlA);
    		echo "ok";
    				}?>
    Lorsque je remplie mon formulaire et que je clique sur le bouton, voici le message
    d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO RH_personnel ( matricule, nom, prenom, centre1, centre2, grade) VALUES ( 987654, DUPONT , Hugues, 300, 300, 4)
     Warning: odbc_do() [function.odbc-do]: SQL error: [Microsoft][Pilote ODBC Microsoft Access] Trop peu de parametres. 2 attendu., SQL state 07001 in SQLExecDirect in C:\Program Files (x86)\EasyPHP-5.3.9\www\centre_liste.php on line 16
    avec cette requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $sqlA = "UPDATE RH_personnel SET prenom=$prenom WHERE matricule=".$matricule."";
    			?>
    j'ai meme message avec "1 attendu"

    merci pour votre aide

  2. #2
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Salam;
    t' pas protégé contre les injections sql.

  3. #3
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    la table n'a pas de clé primaire
    Comment ce fait-il qu'il n'y ait pas de clé primaire de défini pour cette table ?
    Le champ "matricule" pourrait l'être, non ? (à priori ça à l'air d'être un nombre entier unique).

    J'ai jamais utilisé ODBC (du moins ça remonte très loin), mais en règle général, pour des nombre on peu les mettre tel quel.
    Mais pour des chaines (comme un nom, prénom, etc ...), il faut entourer les valeur par des quotes.
    En somme, il faut générer une chaine SQL du genre :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO RH_personnel (matricule, nom, prenom, centre1, centre2, grade)
    VALUES (987654, 'NOM', 'Prénom', 300,  300, 4)
    Encore que ...
    Si par exemple un nom genre : O'CONNOR, les délimiteurs (les quotes) risques forts d'entrer en conflit avec l'apostrophe qu'il y a dans le nom.
    Pour ça il faudrait échapper les chaine, au cas où.

    Ceci dit, faudrait peut être voir du coté des requêtes préparées.
    Si ODBC fonctionne comme PDO (que je connais mieux), ça devrait régler le problème.


    Petite remarque au passage.
    C'est quoi ces champs "centre1" et "centre2" ?
    Tout dépend bien sûr, mais la nome en SQL dit qu'il faut éviter les trucs du genre : champ1, champ2, champ3, etc ...
    On dit que la conception ne serait pas 3 NF (3ème forme normale, qui est conseillé de respecter).
    Faut voir.

  4. #4
    Membre éclairé

    Profil pro
    Pompier
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Pompier

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Par défaut
    bravo, il s'agissait bien de mettre les valeurs entre guillemets simple.

    A la base j'avais hôter la clé primaire et le doublon sur le matricule qui effectivement est unique car je croyais que c'était la cause d'erreur.

    Avec les guillemets et la cmé primaire et l'indexation, ça marche parfaitement.

    C'est cool.

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

Discussions similaires

  1. executer une requete "insert to"
    Par ouatson10 dans le forum VB.NET
    Réponses: 3
    Dernier message: 03/06/2011, 10h43
  2. executer une requete INSERT INTO
    Par thor18 dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/11/2007, 09h43
  3. [débutant]probleme execution requete INSERT
    Par melodie53 dans le forum JDBC
    Réponses: 2
    Dernier message: 03/08/2006, 16h45
  4. [VB.net] Probleme execution requete
    Par nico10gbb dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/04/2006, 11h13
  5. [VB6] Probleme d'execution de requete
    Par Sytchev3 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 05/04/2006, 16h45

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