Column count doesn't match value count at row 1

Répondre
Morganpog
le 18/05/2008 à 13:08
Morganpog
Bonjour j'ai une petite erreur sur un formulaire d'inscription.
Lorsque je valide mon formulaire il me renvoie une erreur sql

Erreur SQL !INSERT INTO membre VALUES("", "rrrr", "rrrr","rrrr@rrr.fr","http//www.","1","18 05 2008, 12:06 ","88.160.100.14")
Column count doesn't match value count at row 1


Voici mon bout de code php:

if ($data[0] == 0) {
$sql = 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.mysql_escape_string($_POST['pass']).'","'.mysql_escape_string($_POST['email']).'","' . $_POST["site_web"] . '","' . $_POST["news"] . '","'.date("d m Y, H:i ").'","'.$ip.'")';
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

Si vous avez une petite idée
merci
LupusMic
le 18/05/2008 à 13:26
LupusMic
Quel est le create de la table membre ?
show create table ;


Je te conseil aussi de ne pas utiliser l'opérateur de concaténation pour créer ta chaîne :
<?php
$sql = sprintf("insert into membre values "
. "('%s','%s','%s','%s','%s','%s','%s')"
, mysql_real_escape_string($_POST['login'])
, mysql_real_escape_string($_POST['pass'])
, mysql_real_escape_string($_POST['email'])
, mysql_real_escape_string($_POST["site_web"])
, mysql_real_escape_string($_POST["news"])
, date("d m Y, H:i ")
, $ip) ;

$ok = mysql_query($sql) ;
if(!$ok)
/* Gestion de l'erreur*/ ;
?>


Attention à ne pas confondre l'usage de l'apostrophe et de la double quote !
Bien qu'en XML/HTML elles soient équivalentes, en PHP elles n'entraînent pas le même comportement, ainsi qu'en SQL.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Morganpog
le 18/05/2008 à 15:49
Morganpog
D'accord je te remercie LupusMic.

voici à quoi ressemble ma table "membre" :
CREATE TABLE `membre` (
`id` int(11) NOT NULL auto_increment,
`login` varchar(50) NOT NULL,
`pass` varchar(50) NOT NULL,
`email` varchar(50) NOT NULL,
`site_web` varchar(70) default NULL,
`New` enum('0','1') NOT NULL,
`Date_inscription` varchar(20) NOT NULL,
`ip` varchar(16) NOT NULL,
`Date_connection` varchar(20) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=37 DEFAULT CHARSET=latin1 PACK_KEYS=1 AUTO_INCREMENT=37 ;
LupusMic
le 18/05/2008 à 20:12
LupusMic
Vu que tu ne renseigne pas id dans ta requête d'insertion, il faut nommer les propriétés que tu veux renseigner. Le problème, c'est que j'ai l'impression que tu la requête d'insertion n'est pas très cohérente avec la structure de la table.

Tu devrais mettre le champ « New » en default true.

Pourquoi Date_inscription est un champs « chaîne de caractère » plutôt qu'un champs « date » ? Pareil pour « Date_connection ».
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Morganpog
le 18/05/2008 à 22:46
Morganpog
Merci LupusMic
Je viens juste de trouver.
Je viens de rajouter une date en plus pour la valeur "Date_connection" (dans la table membre).

if ($data[0] == 0) {
$sql = 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.mysql_escape_string($_POST['pass']).'","'.mysql_escape_string($_POST['email']).'","' . $_POST["site_web"] . '","' . $_POST["news"] . '","'.date("d m Y, H:i ").'","'.$ip.'","'.date("d m Y, H:i ").'")';
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

C'est vrai que ce n'est pas trés cohérent je vais essayer d'optimiser cela.

Pour les champs date j'ai un peu bidouillé, j'avais essayé de mettre le champ date à la place d'une chaîne de caractère mais ca ne fonctionner pas.
Je vais réessayer pour optimiser tous cela.

Encore merci
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours