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 :

Invalid parameter number; parameter is not defined [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Par défaut Invalid parameter number; parameter is not defined
    Bonjour, je ne comprends pas pourquoi je récupère cette erreur à propos de la dernière ligne de l'array ('Compétences'). Quelqu'un a une idée ?

    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
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Formulaire pour profils</title>
        </head>
     
    <?php
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=mes_contacts;charset=utf8', 'root', '');
     
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    $Prénom = htmlspecialchars($_POST['Prénom']);
    echo '<p>'.$Prénom.'</p>';
    $Nom = htmlspecialchars($_POST['Nom']);
    echo '<p>'.$Nom.'</p>';
    $Adresse = htmlspecialchars($_POST['Adresse']);
    echo '<p>'.$Adresse.'</p>';
    $Ville = htmlspecialchars($_POST['Ville']);
    echo '<p>'.$Ville.'</p>';
    $Code = htmlspecialchars($_POST['Code_postal']);
    echo '<p>'.$Code.'</p>';
    $Pays = htmlspecialchars($_POST['Pays']);
    echo '<p>'.$Pays.'</p>';
    $Tel = htmlspecialchars($_POST['Tel']);
    echo '<p>'.$Tel.'</p>';
    $Email = htmlspecialchars($_POST['Email']);
    echo '<p>'.$Email.'</p>';
    $Comp = htmlspecialchars($_POST['Compétences']);
    echo '<p>'.$Comp.'</p>';
     
    $req = $bdd->prepare('INSERT INTO profils(Prénom, Nom, Adresse, Code postal, Ville, Pays, Tel, Email, Compétences) VALUES(:Prénom, :Nom, :Adresse, :Code postal, :Ville, :Pays, :Tel, :Email, :Compétences)');
    $req->execute(array(
    	'Prénom'=>$Prénom,
    	'Nom'=>$Nom,
    	'Adresse'=>$Adresse,
    	'Code postal'=>$Code,
    	'Ville'=>$Ville,
    	'Pays'=>$Pays,
    	'Tel' => $Tel,
    	'Email'=>$Email,
    	'Compétences'=>$Comp));
     
    ?>
       </body>
    </html>

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO profils(Prénom, Nom, Adresse, Code postal, Ville, Pays, Tel, Email, Compétences)
    Je ne sais pas si c'est la cause de l'erreur mais le nom d'une colonne ne doit pas contenir d'espace. MySQL permet de le faire à condition de toujours entourer le nom de colonne d'apostrophes inversées.
    Donc :
    - changez le nom de la colonne en code_postal ;
    - ou bien utilisez toujours votre colonne avec un espace de la sorte : `code postal`.

    L'emploi d'accents dans les noms d'objets de la BDD n'est pas recommandé non plus.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Que ce soit pour les variables/fonctions/... PHP ou les noms de tables/colonnes SQL en Bdd, il vaut mieux respecter certaines règles :


    Attention aussi au "case sensitive" : $Var est différent de $var.

    En base de données, le snake_case est préférable, surtout si on travaille en local + serveur.
    Certaines config. d'export de tables font que tout est transformé en minuscules...

  4. #4
    Membre habitué
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Par défaut
    Re,
    Merci pour ces remarques. Je vais me conformer à cette règle et je regarde si cela règle mon problème.
    Cordialement,
    Alain

  5. #5
    Membre habitué
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Par défaut
    Re
    C'est fou ! j'ai supprimé tous les accents et remplacé les espaces par des underscore dans la page formulaire, dans la page requête-préparée et dans les entêtes de colonnes de ma bdd et je récupère deux exceptions : prenom et competences undefined index.
    Je copie mon formulaire et le colle dans la page requête-préparée de façon à n'avoir qu'une seule page et là ça fonctionne sans rien modifier. J'en perds mon latin. Une explication ?
    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
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Formulaire pour profils</title>
        </head>
    	<body>
    	<p> Formulaire pour data profils</p>
     
    		<form method="post" action="requete-preparee.php">
    			<p> <label>Prenom</label> : <input type="text" name="Prenom"></p>
    			<p><label>Nom</label> : <input type="text" name="Nom"/></p>
    			<p> <label>Adresse</label> : <input type="text" name="Adresse"/></p>
    			<p><label>Code postal</label> : <input type="text" name="Code_postal"/></p>
    			<p> <label>Ville</label> : <input type="text" name="Ville"/></p>
    			<p> <label>Pays</label> : <input type="text" name="Pays"/></p>
    			<p> <label>Tel</label> : <input type="text" name="Tel"/></p>
    			<p><label>Email</label> : <input type="text" name="Email"/></p>
    			<p><label>Competences</label> : <input type="text" name="Competences"/></p>
    			<p><input type="submit" value="Envoyer" /></p>
    		</form>
     
    <?php
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=mes_contacts;charset=utf8', 'root', '');
     
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    $Prenom = htmlspecialchars($_POST['Prenom']);
    echo '<p>'.$Prenom.'</p>';
    $Nom = htmlspecialchars($_POST['Nom']);
    echo '<p>'.$Nom.'</p>';
    $Adresse = htmlspecialchars($_POST['Adresse']);
    echo '<p>'.$Adresse.'</p>';
    $Ville = htmlspecialchars($_POST['Ville']);
    echo '<p>'.$Ville.'</p>';
    $Code = htmlspecialchars($_POST['Code_postal']);
    echo '<p>'.$Code.'</p>';
    $Pays = htmlspecialchars($_POST['Pays']);
    echo '<p>'.$Pays.'</p>';
    $Tel = htmlspecialchars($_POST['Tel']);
    echo '<p>'.$Tel.'</p>';
    $Email = htmlspecialchars($_POST['Email']);
    echo '<p>'.$Email.'</p>';
    $Comp = htmlspecialchars($_POST['Competences']);
    echo '<p>'.$Comp.'</p>';
     
    $req = $bdd->prepare('INSERT INTO profils(Prenom, Nom, Adresse, Code_postal, Ville, Pays, Tel, Email, Competences) VALUES(:Prenom, :Nom, :Adresse, :Code_postal, :Ville, :Pays, :Tel, :Email, :Competences)');
    $req->execute(array(
    	'Prenom'=>$Prenom,
    	'Nom'=>$Nom,
    	'Adresse'=>$Adresse,
    	'Code_postal'=>$Code,
    	'Ville'=>$Ville,
    	'Pays'=>$Pays,
    	'Tel' => $Tel,
    	'Email'=>$Email,
    	'Competences'=>$Comp));
     
    ?>
       </body>
    </html>

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 518
    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 518
    Par défaut
    ça donne "undefined" index, par ce que au premier chargement de la page (il n'y a aucune donnée envoyée depuis le formulaire),donc $_POST n'existe pas.
    la solution de ton problème est de séparer le fichier formulaire.php du fichier requete-preparee.php, comme ça tu es sûr que le traitement d'insertion dans la base ne se déclenchera qu'après le submit du formulaire.
    genre :
    formulaire.php
    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
     
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Formulaire pour profils</title>
        </head>
    	<body>
    	<p> Formulaire pour data profils</p>
     
    		<form method="post" action="requete-preparee.php">
    			<p> <label>Prenom</label> : <input type="text" name="Prenom"></p>
    			<p><label>Nom</label> : <input type="text" name="Nom"/></p>
    			<p> <label>Adresse</label> : <input type="text" name="Adresse"/></p>
    			<p><label>Code postal</label> : <input type="text" name="Code_postal"/></p>
    			<p> <label>Ville</label> : <input type="text" name="Ville"/></p>
    			<p> <label>Pays</label> : <input type="text" name="Pays"/></p>
    			<p> <label>Tel</label> : <input type="text" name="Tel"/></p>
    			<p><label>Email</label> : <input type="text" name="Email"/></p>
    			<p><label>Competences</label> : <input type="text" name="Competences"/></p>
    			<p><input type="submit" value="Envoyer" /></p>
    		</form>
     </body>
    </html>
    requete-preparee.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
     
    <?php
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=mes_contacts;charset=utf8', 'root', '');
     
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    $Prenom = htmlspecialchars($_POST['Prenom']);
    echo '<p>'.$Prenom.'</p>';
    $Nom = htmlspecialchars($_POST['Nom']);
    echo '<p>'.$Nom.'</p>';
    $Adresse = htmlspecialchars($_POST['Adresse']);
    echo '<p>'.$Adresse.'</p>';
    $Ville = htmlspecialchars($_POST['Ville']);
    echo '<p>'.$Ville.'</p>';
    $Code = htmlspecialchars($_POST['Code_postal']);
    echo '<p>'.$Code.'</p>';
    $Pays = htmlspecialchars($_POST['Pays']);
    echo '<p>'.$Pays.'</p>';
    $Tel = htmlspecialchars($_POST['Tel']);
    echo '<p>'.$Tel.'</p>';
    $Email = htmlspecialchars($_POST['Email']);
    echo '<p>'.$Email.'</p>';
    $Comp = htmlspecialchars($_POST['Competences']);
    echo '<p>'.$Comp.'</p>';
     
    $req = $bdd->prepare('INSERT INTO profils(Prenom, Nom, Adresse, Code_postal, Ville, Pays, Tel, Email, Competences) VALUES(:Prenom, :Nom, :Adresse, :Code_postal, :Ville, :Pays, :Tel, :Email, :Competences)');
    $req->execute(array(
    	':Prenom'=>$Prenom,
    	':Nom'=>$Nom,
    	':Adresse'=>$Adresse,
    	':Code_postal'=>$Code,
    	':Ville'=>$Ville,
    	':Pays'=>$Pays,
    	':Tel' => $Tel,
    	':Email'=>$Email,
    	':Competences'=>$Comp));
     
    ?>
    EDIT : j'ai oublié aussi de te signaler qu'ils manquaient deux points ":" avant chaque paramètre de la requête $req->execute().

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/05/2015, 19h47
  2. Réponses: 7
    Dernier message: 08/04/2015, 10h16
  3. Invalid parameter number: parameter was not defined
    Par bizebi dans le forum Langage
    Réponses: 3
    Dernier message: 24/11/2013, 19h47
  4. [PDO] Invalid parameter number: parameter was not defined
    Par Xeuch dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/03/2013, 18h06
  5. Réponses: 6
    Dernier message: 03/06/2010, 10h09

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