Bonjour a tous,
en souhaitant récupérer des valeurs d'un formulaires d'une page afin de les insérer dans ma bdd je tombe sur ce message d'erreur :
Array ( [0] => 21S01 [1] => 1136 [2] => Column count doesn't match value count at row 1 ).
J'ai essayé de lire un peu de doc sur ce genre d'erreur qui semble être dû au fait que les colonnes ne soient pas remplies convenablement.

Mon code : formulaire

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
 
		<h1> Ajouter un contact </h1>
 
	<form action="traitementajoutcontact.php" method="post">
 
		<p> Les informations suivies d'un symbole * sont a compléter obligatoirement </p>
 
			<label for="contact_nom"> Nom : *</label> <!-- Nom du contact -->  
			<input type= "text" name= "contact_nom"> </br>
 
			<label for="contact_prenom"> Prenom : * </label> <!-- Prenom du contact -->
			<input type="text" name="contact_prenom"> </br>
 
			<label for="contact_numtel"> Numéro de téléphone fixe : </label> <!-- Numéro du contact -->
			<input type="text" name="contact_numtel" minlength="9" maxlength="14"> </br>
 
			<label for="contact_numtelmobil"> Numéro de téléphone mobile : </label> <!-- Rôle du contact -->
			<input type="text" name="contact_numtelmobil" minlength="9" maxlength="14"> </br>
 
			<label for="contact_email"> Adresse Email : </label> <!-- Email du contact -->
			<input type="email" name="contact_email"> </br>
 
			<label for="contact_adresse"> Adresse : </label> <!-- Adresse du contact (à modifier ajouter champ cp/ville/...) -->
			<input type="text" name="contact_adresse"> </br>
 
			<label for="contact_cp"> Code Postal : </label> <!-- Code postal du contact -->
			<input type="number" name="contact_cp" min="0"> </br>
 
			<label for="contact_ville"> Ville : </label> <!-- Vile du contact -->
			<input type="text" name="contact_ville"> </br>
 
			<label for="contact_association"> Association : </label> 
			<select name="contact_association" id="contact_association">
				<option> </option> <!-- Ajout d'une option vide -->
				<?php
				$reponse = $bdd->query('SELECT * FROM association');
				while($donnees = $reponse->fetch())
				{
					?>
					<option value="<?php echo $donnees['ID']; ?>"> <?php echo $donnees['ID'] ." ". $donnees['LIBELLE']; ?> </option> 
					<?php
				}
				?>
			</select> </br>	
 
			<label for="contact_activite"> Activité : </label>
			<select name="contact_activite" id="contact_activite">					
				<option> </option> <!-- Ajout d'une option vide -->
				<?php
				$reponse2 = $bdd->query('SELECT * FROM activite');
				while ($donnees2 = $reponse2->fetch())
				{
					?>
					<option value="<?php echo $donnees2['ID']; ?>"> <?php echo $donnees2['ID'] ." ". $donnees2['LIBELLE']; ?> </option>
					<?php
				}
				?>
				</select> </br>	
 
			</br>
            <input type= "submit" value= "Valider"> </br>
 
	</form>
Ma page de traitement :

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
	<?php 
	include 'connectionbdd.php'; // permet la connection à la base de données grâce au fichier connectionbdd.php
 
	$testnom_contact = !empty($_POST['contact_nom']) ? $_POST['contact_nom'] : NULL; // On regarde si le champ est rempli ou non
	$testprenom_contact = !empty($_POST['contact_prenom']) ? $_POST['contact_prenom'] : NULL;
 
	$contact_nom = $_POST['contact_nom'];
	$contact_prenom = $_POST['contact_prenom'];
	$contact_numtel = $_POST['contact_numtel'];
	$contact_numtelmobil = $_POST['contact_numtelmobil'];
	$contact_email = $_POST['contact_email'];
	$contact_adresse = $_POST['contact_adresse'];
	$contact_cp = $_POST['contact_cp'];
	$contact_ville = $_POST['contact_ville'];
	$contact_association = $_POST['contact_association'];
	$contact_activite = $_POST['contact_activite'];
 
	$req = $bdd->prepare('SELECT * FROM contact WHERE NOM = :nom'); // Permet de vérifier que le nom ne soit pas déjà entré
	$req->bindValue(':nom',$_POST['contact_nom'], PDO::PARAM_STR);
	$req->execute();
	$data=$req->fetch();
 
	if($testnom_contact==NULL || $testprenom_contact==NULL) // Si les champs obligatoire (*) ne sont pas remplis -> message d'erreur
	{
		$message = '<p> Des renseignements manquent, essayez de nouveau.';
		// include 'ajoutcontact.php';
	}
	elseif($data['NOM']==$contact_nom AND $data['PRENOM']==$contact_prenom) // Sinon si les informations sont déjà entrées --> message d'erreur
	{
		$message = '<p> Un contact de cette association possède déjà ces informations </p>';
	}
	else // Si aucun soucis --> met les informations dans la base de données
	{ 
		$req2 = $bdd->prepare('INSERT INTO contact(NOM, PRENOM, NUMTEL, NUMTELMOBIL, EMAIL, ADRESSE, CP, VILLE, ID_ASSOCIATION, ID_ACTIVITE) VALUES(:NOM, :PRENOM, :NUMTEL, :NUMTELMOBIL :EMAIL, :ADRESSE, :CP, :VILLE, :ID_ASSOCIATION, :ID_ACTIVITE)'); // prépare une requête d'insertion
		$req2->execute(array('NOM' => $contact_nom, 'PRENOM' => $contact_prenom, 'NUMTEL' => $contact_numtel, 'NUMTELMOBIL' => $contact_numtelmobil, 'EMAIL' => $contact_email, 'ADRESSE' => $contact_adresse, 'CP' => $contact_cp, 'VILLE' => $contact_ville, 'ID_ASSOCIATION' => $contact_association, 'ID_ACTIVITE' => $contact_activite));
		print_r($req2->errorInfo());
		$message = '<p> Le contact ' . $contact_nom . ' a été ajouté avec succès </p>';
	}
	echo $message; // Affiche le message correspondant 
	?>
Le but de ces pages et de récupérer un formulaire pour l'ajout d'un contact et de l'entrer dans la base de données.
Le formulaire récupère bien les données (testé avec echo $nomdonnees).
Le problème est-il dû à un problème dans la table d'insertion ? Je suis allé voir de ce côté là, il ne semble pas avoir de faute au niveau des champs entrés dans la requête mais peut-être que les types de variables sont mal choisis ?

Voici la configuration de la table ou les données doivent être ajoutées :
Nom : pbcontact.png
Affichages : 398
Taille : 26,7 Ko