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 :

Erreur INSERT INTO rédaction instruction ? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    rjl
    rjl est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 129
    Points
    129
    Par défaut Erreur INSERT INTO rédaction instruction ?
    Bonjour,

    J'ai créé un formulaire pour mettre à jour une base MySQL.
    Lorsque je lance le traitement, en direct, je n'obtiens pas d'erreur mais le codage de mon module traitement PHP !
    Je dois avoir ouvert (et même réouvert après erreur) le traitement de ma base de donnée MySQL pour que le traitement PHP soit lancé !

    Jusqu'à maintenant, le formulaire était bien transmis (j'avais mis des print et echo du formulaire et de chaque zone et les erreurs étaient détectées).

    J'ai fait un envoi "correct" mais, là, étant allé jusqu'à la MàJ de ma BD, j'ai eu quelques soucis !
    Je n'avais pas adapté les champs de l'instruction $sql = "INSERT INTO formulaire VALUES
    Je l'ai fait… mal… générant une erreur :
    Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /web/utlsudgoelo/www/pgUTL/traitformul.php on line 57

    Quelle que soit les modifs essayées, je patine et n'en sort pas !
    J'ai cru lire que toutes les zones de la BD MySQL devaient être citées, modifiées ou non dont ne particulier la colonne 16 en Primary et Auto incrementation … C'est la raison pour laquelle je les ai toutes citées en INSERT INTO !

    Merci d'excuser les bêtises que j'ai pu induire étant débutant en PHP te avec MySQL !
    Merci plus encore des conseils que vous saurez me donner.
    Compte tenu de mon niveau, des remarques ou conseils, même en dehors du problème spécifique seront appréciés.
    Amicalement RJL2629

    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
    <?php
    // Parametres mysql à remplacer par les vôtres
    define('DB_SERVER', 'sql1'); 					// serveur mysql Nuxit 'localhost' (init)
    define('DB_SERVER_USERNAME', 'utlsudgoelo'); 	// nom d'utilisateur    root (init)
    define('DB_SERVER_PASSWORD', '********'); 		// mot de passe         motpasse (init)
    define('DB_DATABASE', 'utlsudgoelo'); 			// nom de la base       telechargement (init)
    // Connexion au serveur mysql
    $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD) 
    or die('Impossible de se connecter : ' . mysql_error());
     
    // controle valeurs transmises
     
     
     
     
    // sélection de la base de données
    mysql_select_db(DB_DATABASE, $connect);
    $msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis:
    <br/><br/>";
    $msg_ok = "Votre demande a bien été prise en compte.";
    $message = $msg_erreur;
    // vérification des champs
    print_r($_POST); 
    $anais =($_POST['anais']);
    if (empty($anais)) 
      $message .= "Votre année de naissance<br/>";
      $ancour = date("Y");
    if  (($anais <$ancour - 100) or
    	($annais > $ancour -25)) 
    	$message .= "Année naissance incorrecte<br/>";
    if (empty($_POST['civil'])) 
      $message .= "Votre civilité<br/>";
    if (empty($_POST['nomadh'])) 
      $message .= "Votre nom<br/>";
    if (empty($_POST['prenom'])) 
      $message .= "Votre prénom<br/>";
    if (empty($_POST['ad1'])) 
      $message .= "Votre adresse<br/>"; 
    $anais =($_POST['anais']);
    $cpost =($_POST['cpost']);
    if  ($cpost <1000)
      $message .= "Code postal erroné<br/>";
    if	($cpost > 95999)
      $message .= "Code postal erroné<br/>";
    if (empty($_POST['ville'])) 
      $message .= "Votre ville<br/>";
    // si un champ est vide, on affiche le message d'erreur
    if (strlen($message) > strlen($msg_erreur)) {
      echo $message;
     
    // sinon c'est ok 
    } else {
      foreach($_POST as $index => $valeur) {
        $$index = mysql_real_escape_string(trim($valeur));
      }
     
    $sql = "INSERT INTO adh VALUES ('".$cart."', '".$anais."', '".$civil."', '".$nomadh."', '".$prenom."', '".$ad1."', '".$ad2."', '".$cpost."', '".$ville."', '".$tfixe."', '".$tmob"', '".$admail."', '".$anadh."', '".$fonc."', '".$anpaye"', '".$cle."', now())";
      $res = mysql_query($sql);
     
      if ($res) {
        echo $msg_ok;
      } else {
        echo mysql_error();
      }
     
    }
    ?>

    Structure de la base MySQL
    # Colonne Type Interclassement Attributs Null Défaut Extra
    1 cart smallint(5) UNSIGNED Non Aucune
    2 anais year(4) Non Aucune
    3 civil char(3) latin1_general_ci Non Aucune
    4 nomadh char(25) latin1_general_ci Non Aucune
    5 prenom char(30) latin1_general_ci Non Aucune
    6 ad1 char(30) latin1_general_ci Non Aucune
    7 ad2 char(30) latin1_general_ci Non Aucune
    8 cpost medium int(8) UNSIGNED Non Aucune
    9 ville char(30) latin1_general_ci Non Aucune
    10 tfixe char(15) latin1_general_ci Non Aucune
    11 tmob char(15) latin1_general_ci Non Aucune
    12 admail char(80) latin1_general_ci Non Aucune
    13 anadh year(4) Non Aucune
    14 fonc char(2) latin1_general_ci Non Aucune
    15 anpaye year(4) Non Aucune
    16 cle int(11) Non Aucune AUTO_INCREMENT

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    1) Il est conseillé de mettre le nom des champs dans la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO table_name (column1, column2, column3,...)
     VALUES (value1, value2, value3,...)
    2) C'est quoi le now() à la fin ? je comprends pas qu'il soit là !
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2012
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2012
    Messages : 179
    Points : 153
    Points
    153
    Par défaut
    Oui le NOW() à la fin n'a pas de sens...
    Qu'est ce que tu voulais faire ?

    Et si ta clé est en auto-incrément pas besoin de lui rentrer la valeur.
    Sinon +1 pour Fench.

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Et si ta clé est en auto-incrément pas besoin de lui rentrer la valeur.
    Ou sont mes lunettes !!!

    J'avais pas vu que la clé est à la fin du tableau (j'ai encore été trop vite dans la lecture du post , d'habitude je les vois tjs au début alors j'ai zappé) , et donc en effet tu as pas à faire une insert de cette valeur (au pire mettre "" pour ce champ). En plus tu essayes d'affecter une valeur $cle à un champ en auto incrémentation !
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  5. #5
    rjl
    rjl est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 129
    Points
    129
    Par défaut
    Bonjour,
    Merci à Tanoak_LaCapuche et Fench de vos observations et conseils.
    J'ai modifié le code en ce sens : ajout points et $ ; j'ai ajouté les noms des champs mais supprimé en Value la clé pour éviter un double comptage et l'ai aussi omise des noms de champs.


    Mais me restent quelques questions avant lesquelles je dois m'expliquer :
    J'œuvre en bénévolat associatif et veux abonder une BD existante à partir de formulaires remplis par les usagers. Je ne dois pas modifier d'enregistrement existant mais peux simplement en créer (pré-inscriptions).
    J'ai commencé le site Web il y a 2 ou 3 semaines mais ne connait rien ni en PHP, ni pour MySQL (j'ai déjà un site qui fonctionne depuis plus de 3 ans avec 24000 visites et ai pratiqué Access). J'ai donc la "prétention" d'apprendre ainsi (livres + tutos… + forum !).
    C'est à partir d'un tuto que j'ai adapté mon formulaire et préparé son traitement en PHP.
    Quand je lis le NOW() à la fin n'a pas de sens...
    Qu'est ce que tu voulais faire ?
    Réaction initiale : si je savais…
    Réaction après examen de la fonction NOW : ça peut m'être utile mais sans l'heure donc en CURDATE() ! Encore faut-il, sans doute définir le champs concerné… pour l'utiliser par ailleurs ?

    Dans l'immédiat pour le test, je crée un champ MaJ et le déclare en champ (type date) et Value juste devant la clé, regrettant de n'avoir pu lui donner par défaut la valeur CURRENT_TIMESTAMP pour une initialisation automatique par la création d'un nouvel enregistrement !
    Dans ma vue (simpliste ?) des choses, Now (), transformé en CURDATE (), devrait maintenant instruire $MaJ ?

    J'ai d'abord fait un essai ainsi… tout s'est déroulé mais… pas d'enregistrement ajouté ni de message d'erreur !
    J'ai alors ajouté des print ou écho en différents points pour y voir clair… crois-ai-je !

    Mais mauvais positionnement autre : je bloque avec des parse en 49 ou 51 alternativement pour des ; ou { selon mes essais !
    Pour corser le tout, j'ai été incapable de restaurer malgré des annulations multiples (j'ai dû pourtant forcer les possibilités à 50) !

    Désolé, bien des questions et problèmes en un même envoi.
    Je suis absent 48 heures.
    Merci cependant de vos réponses et conseils précieux dès que vous le pourrez.
    Amicalement RJL2629

    Je donne à nouveau le code :
    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
    <?php
    // Parametres mysql à remplacer par les vôtres
    define('DB_SERVER', 'sql1'); 					// serveur mysql 'localhost' (init)
    define('DB_SERVER_USERNAME', 'utlsudgoelo'); 	// nom d'utilisateur    root (init)
    define('DB_SERVER_PASSWORD', '********'); 		// mot de passe         motpasse (init)
    define('DB_DATABASE', 'utlsudgoelo'); 			// nom de la base       telechargement (init)
    // Connexion au serveur mysql
    $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD) 
    or die('Impossible de se connecter : ' . mysql_error());
     
    // controle valeurs transmises
     
    // sélection de la base de données
    mysql_select_db(DB_DATABASE, $connect);
    $msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis:
    <br/><br/>";
    $msg_ok = "Votre demande a bien été prise en compte.";
    $message = $msg_erreur;
    // vérification des champs
     
    print_r($_POST);     // contrôle données traitées
    $anais =($_POST['anais']);
    if (empty($anais)) 
      $message .= "Votre année de naissance<br/>";
      $ancour = date("Y");
    if  (($anais <$ancour - 100) or
    	($annais > $ancour -25)) 
    	$message .= "Année naissance incorrecte<br/>";
    if (empty($_POST['civil'])) 
      $message .= "Votre civilité<br/>";
    if (empty($_POST['nomadh'])) 
      $message .= "Votre nom<br/>";
    if (empty($_POST['prenom'])) 
      $message .= "Votre prénom<br/>";
    if (empty($_POST['ad1'])) 
      $message .= "Votre adresse<br/>"; 
    $anais =($_POST['anais']);
    $cpost =($_POST['cpost']);
    if  ($cpost <1000)
      $message .= "Code postal erroné<br/>";
    if	($cpost > 95999)
      $message .= "Code postal erroné<br/>";
    if (empty($_POST['ville'])) 
      $message .= "Votre ville<br/>";
    // si un champ est vide, on affiche le message d'erreur
     
    echo $message;    // contrôle message
    if (strlen($message) > strlen($msg_erreur)) {
      echo (strlen($message)            //    ;  
    // sinon c'est ok 
    } else     {        // {  était appliqué  jusqu'en 70 !
      foreach($_POST as $index => $valeur) {
        $index = mysql_real_escape_string(trim($valeur));
      }
     
     echo affichage avant $sql en ligne 56;
     print_r($sql);     // contrôle données traitées
      $sql = "INSERT INTO adh ($cart, $anais, $civil, $nomadh, $prenom, ad1, ad2, $cpost, $ville, $tfixe, $tmob, $admail, $anadh, $fonc, $anpaye,$MaJ,$cle)
    			VALUES ('".$cart."', '".$anais."', '".$civil."', '".$nomadh."', '".$prenom."', '".$ad1."', '".$ad2."', '".$cpost."', '".$ville."', '".$tfixe."', '".$tmob."', '".$admail."', '".$anadh."', '".$fonc."', '".$anpaye."', CURDATE () )";
     echo affichage avant $res en ligne 60;
     print_r($res);     // contrôle données traitées
    			$res = mysql_query($sql);
     
      if ($res) {
        echo $msg_ok;
      } else {
        echo mysql_error();
      }
     
       } //      était en relation avec 51      }
    ?>

  6. #6
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    quelques trucs...
    les entiers, ça sert à rien de mettre entre parenthèses la valeur, qui en fait est le nombre de chiffres significatifs et pas du tout le nombre d'octets qu'il faut pour les contenir...

    pour optimiser la bufferisation des tables, il vaut mieux toujours mettre les types fixe devant, et les variable à la fin...en commençant toujours par la clé primaire, suivit de toutes les colonnes d'entiers des plus large au moins larges suivis (éventuellement) des dates puis des varchar (ou char) ou varbinary (ou binary) et enfin les dérivés de text ou blob (ceux sont sont principalement stockés dans des fichiers séparés)

    accessoirement ça permet d'avoir tous tes index en premiers mieux pour le sgbd et pour ceux qui lisent ta table...

    les noms de colonnes sont sur 64 caractères donc même sans exagérer tu peux quand même mettre des noms moins compacts et plus explicites

    l'extension mysql pour te connecter à mysql est à oubliée car plus maintenue et va disparaitre, passe à mysqli ou mieux encore à pdo...

    il ne faut jamais mettre des trucs qui viennent de post ou get dans un insert... tu dois les échapper pour éviter les attaques par injection... (ne jamais faire confiance à ce qui est sensé venir d'un formulaire)

    ça fait déjà quelques trucs à digérer en plus
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  7. #7
    rjl
    rjl est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 129
    Points
    129
    Par défaut
    Bonjour, merci Eric pour ces éléments précieux où j'avais tout faux parfois avec le sentiment d'améliorer (ainsi ma clé en auto indexation mise en fin puisque n'en ayant pas la maîtrise, je ne pouvais pas l'invoquer).

    J'en profite pour donner ma situation actuelle :

    J'ai disposé d'un peu de temps avant de partir ce matin et donc j' ai repris les essais.
    La situation a changé grâce aux réponses reçues et j'ai éliminé les parses bloquants !
    Je traverse l'ensemble de mon traitement… sans messages d'erreurs (à l'exception de quelques messages pour voir où je passe avec d'ailleurs des passages à la ligne non maîtrisés et ici finis main) !


    Array ( [anais] => 1942 [civil] => M. [nomadh] => RJL [prenom] => rj [ad1] => 19 rue du Grand Léjon [ad2] => [cpost] => 22680 [ville] => ETABLES SUR MER [tfixe] => 0296766573 [tmob] => [admail] => rjl22@wanadoo.fr [envoi] => Envoi du Formulaire ) affichage avant en ligne 60
    FUNCTION utlsudgoelo.
    CURDATE does not exist


    Ne voyant pas comment initialiser ce CURRENT DATE utilisé en zone MaJ (ça reste à définir,
    J'ai éliminé ce champ et relancé ma transaction et j'obtiens alors le message attendu "Votre demande a bien été prise en compte."
    Array ( [anais] => 1942 [civil] => M. [nomadh] => RJL [prenom] => rj [ad1] => 19 rue du Grand Léjon [ad2] => [cpost] => 22680 [ville] => ETABLES SUR MER [tfixe] => 0296766573 [tmob] => [admail] => rjl22@wanadoo.fr [envoi] => Envoi du Formulaire ) Votre demande a bien été prise en compte.

    Sauf… qu'il n'y a pas d'enregistrement nouveau créé !
    Merci de vos éclairages et bon week end.
    RJL2630

    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
    // Parametres mysql à remplacer par les vôtres
    define('DB_SERVER', 'sql1'); 					// serveur mysql 'localhost' (init)
    define('DB_SERVER_USERNAME', 'utlsudgoelo'); 	// nom d'utilisateur    root (init)
    define('DB_SERVER_PASSWORD', '********'); 		// mot de passe         motpasse (init)
    define('DB_DATABASE', 'utlsudgoelo'); 			// nom de la base       telechargement (init)
    // Connexion au serveur mysql
    $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD) 
    or die('Impossible de se connecter : ' . mysql_error());
     
    // controle valeurs transmises
     
    // sélection de la base de données
    mysql_select_db(DB_DATABASE, $connect);
    $msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis:
    <br/><br/>";
    $msg_ok = "Votre demande a bien été prise en compte.";
    $message = $msg_erreur;
    // vérification des champs
     
    print_r($_POST);  echo "\n";  // contrôle données traitées
    $anais =($_POST['anais']);
    if (empty($anais)) 
      $message .= "Votre année de naissance<br/>";
      $ancour = date("Y");
    if  (($anais <$ancour - 100) or
    	($annais > $ancour -25)) 
    	$message .= "Année naissance incorrecte<br/>";
    if (empty($_POST['civil'])) 
      $message .= "Votre civilité<br/>";
    if (empty($_POST['nomadh'])) 
      $message .= "Votre nom<br/>";
    if (empty($_POST['prenom'])) 
      $message .= "Votre prénom<br/>";
    if (empty($_POST['ad1'])) 
      $message .= "Votre adresse<br/>"; 
    $anais =($_POST['anais']);
    $cpost =($_POST['cpost']);
    if  (($cpost <1000) or
    	($cpost > 95999))
      $message .= "Code postal erroné<br/>";
    if (empty($_POST['ville'])) 
      $message .= "Votre ville<br/>";
    // si un champ est vide, on affiche le message d'erreur
     
    if (strlen($message) > strlen($msg_erreur)) {
      echo strlen($message); 
    // sinon c'est ok 
    } else    
     { 
      foreach($_POST as $index => $valeur)  
        $index = mysql_real_escape_string(trim($valeur));   
     
    // echo "affichage avant $sql en ligne 56";
     print_r($sql); echo "\n";    // contrôle données traitées
      $sql = "INSERT INTO adh (cart, anais, civil, nomadh, prenom, ad1, ad2, cpost, ville, tfixe, tmob, admail)   
    			VALUES ('".$cart."', '".$anais."', '".$civil."', '".$nomadh."', '".$prenom."', '".$ad1."', '".$ad2."', '".$cpost."', '".$ville."', '".$tfixe."', '".$tmob."', '".$admail."' )";//, CURDATE ()    //ligne INSERT ,MaJ 
     //echo "affichage avant $res en ligne 60";echo "\n";
     print_r($res);echo "\n";     // contrôle données traitées
    			$res = mysql_query($sql);
    echo mysql_error();
      if ($res) {
        echo $msg_ok;
      } else {
        echo mysql_error();
      }
     
       } //      était en relation avec 51      }
    ?>

  8. #8
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    D'après la déclaration de ta table, il y a ces champs;
    13 anadh year(4) Non Aucune
    14 fonc char(2) latin1_general_ci Non Aucune
    15 anpaye year(4) Non Aucune
    qui ne sont pas dans la requête INSERT et comme ils ne peuvent pas être nul, tu n'auras pas d'insertion !
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  9. #9
    rjl
    rjl est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 129
    Points
    129
    Par défaut
    Bonjour Fench,

    Merci de ta réponse,
    J'ai supprimé ces champs dans ma déclaration d'INSERT INTO : je les avais mis car ils appartiennent effectivement à l'enregistrement de la table !
    Aborder PHP et MySQL simultanément est un véritable challenge pour mettre chaque chose à sa place et qui plus est, tenter de comprendre les instructions nombreuses semble-t'il et très variées à travers diverses manières de traiter les BD (ordre directs en MySQL ou sous d'autres formes comme MyISAM ou INNO DB, ordres SQL ou PDO,...)

    J'ai une méthode de travail parfois bizarre et, là, il m'est arrivé une fois encore, entre 2 réflexions écrites de modifier mon code pour refaire un essai... et l'attention est de rigueur entre les modifs de mon mot de passe, la mise à jour des modifs et leur remontées chez mon hébergeur (puisque je travaille en direct...), il vaut mieux contrôler 2 fois chaque chose...
    Mais miracle encourageant, l'ensemble modifié a été efficace :

    Array ( [anais] => 1942 [civil] => M. [nomadh] => RJL [prenom] => rj [ad1] => 19 r du Gd Léjon [ad2] => [cpost] => 22680 [ville] => Etables [tfixe] => [tmob] => [admail] => [envoi] => Envoi du Formulaire )
    INSERT INTO adh (anais, civil, nomadh, prenom, ad1, ad2, cpost, ville, tfixe, tmob, admail) VALUES ('1942', 'M.', 'RJL', 'rj', '19 r du Gd Léjon', '', '22680', 'Etables', '', '', '' )
    1Votre demande a bien été prise en compte.

    Je règle maintenant le problème de contrôle des champs numériques ou autres
    Merci de tes observations et @ bientôt... sans doute sur d'autres thèmes où je risque de ne pas être beaucoup plus brillant !

    RJL2706

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    <?php
    // Parametres mysql 
    define('DB_SERVER', 'sql1'); 				 // serveur mysql     localhost
    define('DB_SERVER_USERNAME', 'utlsudgoelo'); // nom d'utilisateur root
    define('DB_SERVER_PASSWORD', '********'); 	 // mot de passe      motpasse
    define('DB_DATABASE', 'utlsudgoelo'); 		 // nom de la base    telechargement
    // Connexion au serveur mysql
    $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD) 
    or die('Impossible de se connecter : ' . mysql_error());
     
    // controle valeurs transmises
     
    // sélection de la base de données
     
    mysql_select_db(DB_DATABASE, $connect) or die (mysql_error());
    mysql_query("SET NAMES utf8"); 
    // à ajouter au début du script au cas où magic_quotes soit à ON 
    if (get_magic_quotes_gpc()) 
    { 
    $_POST = array_map('stripslashes', $_POST); 
    } 
     
    //  echo "($_POST)"; echo ($_POST);
     
    $msg_erreur = "Erreur. Les champs suivants doivent être correctement remplis:
    <br/><br/>";
    $msg_ok = "Votre demande a bien été prise en compte.";
    $message = $msg_erreur;
    // vérification des champs
     
    // print_r($_POST);  echo "\n";  // contrôle données traitées
     
    $anais =($_POST['anais']);
    if (empty($anais)) 
      $message .= "Votre année de naissance<br/>";
    $ancour = date("Y");
    if (is_int($anais))
        $message  .= "Année naissance non conforme<br/>";
    else if  (($anais <$ancour - 100) or
    		  ($anais > $ancour -25)) 
    	$message .= "Année naissance incorrecte<br/>";
    if (empty($_POST['civil'])) 
        $message .= "Votre civilité<br/>"; 
    if (empty($_POST['nomadh'])) 
    	$message .= "Votre nom<br/>";
    if (empty($_POST['prenom'])) 
    	$message .= "Votre prénom<br/>";
    if (empty($_POST['ad1'])) 
    	$message .= "Votre adresse<br/>"; 
    $cpost =($_POST['cpost']);
    if (is_int($cpost))
        $message  .= "Code postal non conforme<br/>";
    	else if  (($cpost <1000) or
    			  ($cpost > 95999))
    	$message .= "Code postal erroné<br/>";
    if (empty($_POST['ville'])) 
    	$message .= "Votre ville<br/>";
    // On va vérifier l'email ...
    $admail=mysql_real_escape_string(trim($_POST['admail']));
    If (empty ($admail))
    	{$a = $a ;}
    else
    	if(preg_match("#^[a-z0-9._-]{1,}@[a-z0-9._-]{2,}\.[a-z]{2,4}$#",$admail)) // Si l adresse Email est valide 
    			{$a = $a ;}
    			//    /*  adresse mail OK */
    	else
    			$message .= "Code e-mail invalide<br/>";	
    $tfixe=mysql_real_escape_string(trim($_POST['tfixe'])); 
    $tmob=mysql_real_escape_string(trim($_POST['tmob'])); 
    If (empty ($tfixe))
    		{$a = $a ;}
    else
    	if(preg_match("#^0[1-68][0-9]{8}$#",$tfixe)) // Si le téléphone fixe est valide 	
    if(preg_match("#^0[1-68][0-9]{8}$#",$tfixe)) // Si le téléphone fixe est valide 
    			{$a = $a ;}    //    /*  tfixe OK */
    	else  $message .= "N° Téléphone fixe invalide<br/>";
    If (empty ($tmob))
    		{$a = $a ;}
    else	
    	if(preg_match("#^0[1-68][0-9]{8}$#",$tmob)) // Si le téléphone mobile est valide 
    		{$a = $a ;}    //    /*  tmobile OK */
    	else  $message .= "N° Téléphone mobile invalide<br/>";
    $nomadh=mysql_real_escape_string(trim($_POST['nomadh']));
    if(preg_match("@^(\pL+[\' -]?)+\pL+$@D",$nomadh)) // Si le nom est valide 
    		{$a = $a ;}    //    /*  nomadh OK */
    else  $message .= "Nom Adhérent invalide<br/>";
    $prenom=mysql_real_escape_string(trim($_POST['prenom']));
    $ad1=mysql_real_escape_string(trim($_POST['ad1'])); 
    $ad2=mysql_real_escape_string(trim($_POST['ad2'])); 
    $civil=mysql_real_escape_string(trim($_POST['civil'])); 
    if(preg_match("@^(\pL+[\' -]?)+\pL+$@D",$prenom)) // Si le prenom est valide 
    		{$a = $a ;}    //    /*  prenom OK */
    else  $message .= "Prénom invalide<br/>";	 
    $ville=mysql_real_escape_string(trim($_POST['ville']));
    if(preg_match("@^(\pL+[\' -]?)+\pL+$@D",$ville)) // Si la ville est valide 
    		{$a = $a ;}    //    /*  ville OK */
    else  $message .= "Ville invalide<br/>";	
     
    // si un champ est vide, afficher le message d erreur
    if (strlen($message) > strlen($msg_erreur)) {
    	echo $message; exit;} 
    // sinon c est ok 
     
    $sql = "INSERT INTO adh (anais, civil, nomadh, prenom, ad1, ad2, cpost, ville, tfixe, tmob, admail, MaJ)   
    			VALUES ('$anais', '$civil', '$nomadh', '$prenom', '$ad1', '$ad2', '$cpost', '$ville', '$tfixe', '$tmob', '$admail',CURDATE() )";
     
    $res = mysql_query($sql);
     
    if ($res) {
        echo $msg_ok;
    	}
    else {
        echo mysql_error();
    	}
     ?>

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

Discussions similaires

  1. Erreur insert into
    Par hugoclo dans le forum VB.NET
    Réponses: 1
    Dernier message: 23/10/2010, 20h50
  2. [MySQL] erreur insert into set
    Par nox77 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/07/2010, 18h38
  3. Erreur de syntaxe ds l'instruction INSERT INTO
    Par 810mcu dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 17/06/2008, 17h22
  4. Erreur de syntaxe dans l'instruction INSERT INTO
    Par doolar dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/05/2008, 15h37
  5. Erreur de syntaxe dans l'instruction INSERT INTO
    Par logiciel_const dans le forum Bases de données
    Réponses: 8
    Dernier message: 19/03/2008, 10h57

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