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 :

Ma première requete INSERT qui n'INSERT PAS ! [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 62
    Points : 52
    Points
    52
    Par défaut Ma première requete INSERT qui n'INSERT PAS !
    Bonjour,

    J'ai créé un formulaire de saisie de mission.



    Le formulaire ci dessus me permet de vérifier les données avant la requête INSERT

    Que voici !

    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
    <?php
    // Récupération des variables de [list_user]
    list($use_id, $use_nom, $use_prenom) = explode(":", $_POST["list_user"]);
     
    // Attribution des variables pour la requete d'insert
    $miss_ville=$_POST[miss_ville];
    $miss_pays=$_POST[miss_pays];
    $miss_date_dep=fr_to_eng($_POST['miss_date_dep']); //fonction pour transformer les dates saisies au format US pour insertion en bdd
    $miss_date_ret=fr_to_eng($_POST['miss_date_ret']);//fonction pour transformer les dates saisies au format US pour insertion en bdd
     
    //Attribution de la valeur 0 ou 1 pour l'enregistrement en bdd pour les missions de terrain
    $miss_terrain=$_POST[miss_terrain];
    if (isset($_POST[miss_terrain])) {
    		$miss_terrain=1;	}
    		else {
    		$miss_terrain=0;
    		}
    //Attribution de la valeur 0 ou 1 pour l'enregistrement en bdd pour l'utilisation de Téléphone satellite		
    $miss_telsat=$_POST[miss_telsat];	
    if (isset($_POST[miss_telsat])) {	
    	$miss_telsat=1;	}
    		else {
    		$miss_telsat=0;
    		}					
    $observation=$_POST[miss_observation];
     
    if(isset($_POST['submit'])) // Déclanchement de la requete INSERT
    {
    $sql="INSERT INTO MISSION (miss_id,use_id,miss_dem,miss_ville,miss_pays,miss_date_dep,miss_date_ret,miss_terrain,miss_telsat,miss_observation) 
    VALUES('','".$use_id."','".$use_nom."','".$miss_ville."','".$miss_pays."','".$miss_date_dep."','".$miss_date_ret."','".$miss_terrain."','".$miss-telsat."','".$observation."')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    }
    ?>
    Elle est peut être un peu bazar, mais elle fonctionne si je la saisie directement dans phpmyAdmin en mettant des valeurs au bon format.

    Par contre, lorsque je valide le formulaire, j'obtiens ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur SQL !0','RAS')
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0','RAS')' at line 1
    Je précise que j'avance pas à pas dans ce projet qui est mon premier projet, et que le résultat est du en partie à l'aide que j'ai déjà reçu.

    Comme d'habitude, je suis sur ce point d'insert depuis ce matin, c'est à dire 6 heures de test en tout genre, mais rien qui fonctionne.

    Merci encore pour votre aide

    Patrice

  2. #2
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    Bonjour,

    là où tu attends des entiers dans ta table, ne mets pas de simples quotes.

    Et ensuite, tu as une var qui s'appelle $miss_telsat que tu as écrit $miss-telsat dans la requête.

    Tu devrais aussi échapper tes variables avec mysql_real_escape_string pour les chaines et intval pour les int. Pour éviter les injections et erreurs d'insertion avec des guillemets.
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 62
    Points : 52
    Points
    52
    Par défaut
    Merci pour la réponse,

    J'ai modifié la requête et enlevé les ".$mavar." pour les champs miss_telsat et miss_terrain et modifié le mauvais nom de variable pour miss_telsat.

    l'Insert fonctionne en partie maintenant, il rempli correctement les 2 champs dates et miss_telsat et miss_terrain, par contre, il ne rempli pas les champ dans la table qui s'appelle miss_dem=$use_nom, et use_id=$use_id.

    De plus, j'ai modifié le bout de code pour miss_telsat et miss_terrain pour mettre la valeur à 1 ou à 0 car cela ne fonctionnait pas correctement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //Attribution de la valeur 0 ou 1 pour l'enregistrement en bdd pour les missions de terrain
    $miss_terrain=$_POST[miss_terrain];
    if ($miss_terrain==Oui) {
    		$miss_terrain=1;	}
    		else {
    		$miss_terrain=0;
    		}
    //Attribution de la valeur 0 ou 1 pour l'enregistrement en bdd pour l'utilisation de Téléphone satelitte		
    $miss_telsat=$_POST[miss_telsat];	
    if ($miss_telsat==Oui) {	
    	$miss_telsat=1;	}
    		else {
    		$miss_telsat=0;
    		}
    comme cela, c'est mieux

    Voici le code complet, mais qui ne rempli par les champs use_id et use_nom :

    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
    <?php
    // Récupération des variables de [list_user]
    list($use_id, $use_nom, $use_prenom) = explode(":", $_POST["list_user"]);
     
    // Attribution des variables pour la requete d'insert
    $miss_ville=$_POST[miss_ville];
    $miss_pays=$_POST[miss_pays];
    $miss_date_dep=fr_to_eng($_POST['miss_date_dep']); //fonction pour transformer les dates saisies au format Fr pour insertion en bdd
    $miss_date_ret=fr_to_eng($_POST['miss_date_ret']);//fonction pour transformer les dates saisies au format Fr pour insertion en bdd
     
    //Attribution de la valeur 0 ou 1 pour l'enregistrement en bdd pour les missions de terrain
    $miss_terrain=$_POST[miss_terrain];
    if ($miss_terrain==Oui) {
    		$miss_terrain=1;	}
    		else {
    		$miss_terrain=0;
    		}
    //Attribution de la valeur 0 ou 1 pour l'enregistrement en bdd pour l'utilisation de Téléphone satelitte		
    $miss_telsat=$_POST[miss_telsat];	
    if ($miss_telsat==Oui) {	
    	$miss_telsat=1;	}
    		else {
    		$miss_telsat=0;
    		}					
    $observation=$_POST[miss_observation];
     
    if(isset($_POST['submit'])) // Déclanchement de la requete INSERT
    {
    $sql="INSERT INTO MISSION (miss_id,use_id,miss_dem,miss_ville,miss_pays,miss_date_dep,miss_date_ret,miss_terrain,miss_telsat,miss_observation) 
    VALUES('','".$use_id."','".$use_nom."','".$miss_ville."','".$miss_pays."','".$miss_date_dep."','".$miss_date_ret."','$miss_terrain','$miss_telsat','".$observation."')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    }
    ?>
    Auriez vous une idée ?

    Merci d'avance

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    peux tu faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<pre>';
    print_r($_POST);
    echo '</pre>';
    poiur connaitre les données envoyées via le formulaire
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  5. #5
    Membre régulier Avatar de blaiso
    Profil pro
    Banquier
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Banquier

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Points : 104
    Points
    104
    Par défaut
    Bonjour,

    Juste pour savoir, as-tu vérifié la syntaxe de la variable globale "$_POST" ?

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $miss_ville=$_POST[miss_ville];
    $miss_pays=$_POST[miss_pays];
    ...
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $miss_ville=$_POST['miss_ville'];
    $miss_pays=$_POST['miss_pays'];
    ...
    Patience et longueur de temps font plus que force, ni que rage.
    Mon site: http://www.emiage.infopluseco.net
    Mon blog: http://azojeca07.wordpress.com

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 62
    Points : 52
    Points
    52
    Par défaut
    Voici le résultat du print_r après validation du form

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Array
    (
        [use_nom] => TOTO
        [use_prenom] => Tata
        [miss_ville] => Paris
        [miss_pays] => France
        [miss_date_dep] => 28/10/2010
        [miss_date_ret] => 03/11/2010
        [use_id] => 10903
        [miss_terrain] => Oui
        [miss_telsat] => Oui
        [miss_observation] => RAS
        [submit] => Valider
    )
    Je confirme que uniquement les champs use_id=use_id et miss_dem=use_nom ne sont pas du tout renseignés.

    voici un rappel de la requête et des correspondances.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql="INSERT INTO MISSION (miss_id,use_id,miss_dem,miss_ville,miss_pays,miss_date_dep,miss_date_ret,miss_terrain,miss_telsat,miss_observation) 
    VALUES('','".$use_id."','".$use_nom."','".$miss_ville."','".$miss_pays."','".$miss_date_dep."','".$miss_date_ret."','$miss_terrain','$miss_telsat','".$observation."')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    Cela ne fonctionne pas !

    Merci encore pour votre aide

  7. #7
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    Bonjour,

    essaye comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql="INSERT INTO MISSION (miss_id,use_id,miss_dem,miss_ville,miss_pays,miss_date_dep,miss_date_ret,miss_terrain,miss_telsat,miss_observation) 
    VALUES('','".$_POST['use_id']."','".$_POST['use_nom']."','".$miss_ville."','".$miss_pays."','".$miss_date_dep."','".$miss_date_ret."','$miss_terrain','$miss_telsat','".$observation."')";
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    
    echo $sql;
    tu devrais aussi utiliser des fonctions pour échapper des caractères spéciaux

    http://php.net/manual/fr/function.my...ape-string.php
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 62
    Points : 52
    Points
    52
    Par défaut Merci !
    Effectivement, maintenant, cela fonctionne parfaitement.

    En ce qui concerne le point soulevé :

    tu devrais aussi utiliser des fonctions pour échapper des caractères spéciaux

    Pour le moment, je me concentre sur l'apprentissage des fonctions de base, la sécurité n'est pas trop un problème du fait que le système que je met en place est utilisé sur un Intranet très sécurisé.

    Je met d'abord en place le module mission, je travaillerai les points sécurités après. Normalement, je devrais certainement le faire en même temps, mais j'ai déjà du mal à faire une requête d'insert tout seul, donc chaque chose en son temps.

    Mais merci quand même pour le conseil et pour le coup de main efficace de tous ceux qui m'ont aidé à finaliser la première partie de ce module.

  9. #9
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    Cette fonction est utile pour la sécurité certes mais aussi pour pas que ta requête te renvoie une erreur à cause des caractères spéciaux

    Par exemple, tu insères une ville comme l'haye les roses, tu risques d'avoir des soucis.
    Le savoir est utile que s'il est partagé par tous.
    /(bb|[^b]{2})/
    !sleep() ? array((string))

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 62
    Points : 52
    Points
    52
    Par défaut
    Ok, j'avais pas pensé à cet aspect, je vais examiner la question !

    Encore merci

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

Discussions similaires

  1. Faire un insert qui ne soit pas inclu dans un rollback global
    Par vhellers dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/09/2007, 17h53
  2. [MySQL] INSERT qui ne fonctionne pas
    Par djudjublondin dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 08/08/2007, 19h46
  3. [MySQL] Insert qui n enregistre pas ?
    Par nikki113 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 20/06/2006, 20h31
  4. [ODBC] une requete d'insertion qui ne fonctionne pas
    Par boulhous dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/05/2006, 13h56
  5. Insert qui ne fonctionne pas
    Par Nyrianne dans le forum Outils
    Réponses: 7
    Dernier message: 09/01/2006, 17h50

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