Column count doesn't match value count at row

Résolu
AWare -  
 Eléa7 -
Bonjour,

Voila , je suis en train de créer un espace membre en php .

voici le script du formulaire d'inscription d'un utilisateur:

<?php
// on teste si le visiteur a soumis le formulaire
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
	// on teste l'existence de nos variables. On teste également si elles ne sont pas vides
	if ((isset($_POST['account_name']) && !empty($_POST['account_name'])) && (isset($_POST['account_pwd']) && !empty($_POST['account_pwd'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))) {
		// on teste les deux mots de passe
		if ($_POST['account_pwd'] != $_POST['pass_confirm']) {
			$erreur = 'Les 2 mots de passe sont différents.';
		}
		else {
			$base = mysql_connect ('localhost', 'root', 'password');
			mysql_select_db ('AWare', $base);

			// on recherche si ce login est déjà utilisé par un autre membre
			$sql = 'SELECT count(*) FROM egw_agw_accounts WHERE account_name="'.mysql_escape_string($_POST['account_name']).'"';
			$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
			$data = mysql_fetch_array($req);

			if ($data[0] == 0) {
				$sql = 'INSERT INTO egw_agw_accounts VALUES("","'.mysql_escape_string($_POST['account_name']).'", "'.md5(mysql_escape_string($_POST['account_pwd'])).'")';
				mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

				session_start();
				$_SESSION['account_name'] = $_POST['account_name'];
				header('Location: membre.php');
				exit();
			}
			else {
				$erreur = 'Un membre possède déjà ce login.';
			}
		}
	}
	else {
		$erreur = 'Au moins un des champs est vide.';
	}
}
?>
<html>
<head>
<title>Inscription</title>
</head>

<body>
Inscription à l'espace membre :<br />
<form action="inscription.php" method="post">
Votre identifiant : <input type="text" name="account_name" value="<?php if (isset($_POST['account_name'])) echo htmlentities(trim($_POST['account_name'])); ?>"><br />
Votre mot de passe : <input type="password" name="account_pwd" value="<?php if (isset($_POST['account_pwd'])) echo htmlentities(trim($_POST['account_pwd'])); ?>"><br />
Confirmation du mot de passe : <input type="password" name="pass_confirm" value="<?php if (isset($_POST['pass_confirm'])) echo htmlentities(trim($_POST['pass_confirm'])); ?>"><br />
<input type="submit" name="inscription" value="Inscription">
</form>
<?php
if (isset($erreur)) echo '<br />',$erreur;
?>
</body>
</html>


Et voici ce qui s'affiche après un essai d'inscription d'utilisateur:
Column count doesn't match value count at row 1
Configuration: Linux
Firefox 3.0.10

5 réponses

  1. le père
     
    normal, c'était $sql=.. et non pas sql=...
    Mais ça tu pouvais le voir toi-même, essaye de comprendre au lieu de recopier aveuglément. Nous aussi nous faisons des fautes de frappe.
    4
  2. AWare
     
    Oops, petit click non voulu ,

    donc , revenons à nos moutons...

    Voici aussi la table concernée:

    egw_agw_accounts nom de la table
    account_id identifiant d'un utilisateur
    account_name représentant le nom d’utilisateur du visiteur
    account_pwd mot de passe d'un utilisateur
    account_mail représentant l’adresse e-mail du visiteur
    account_type type d'un utilisateur

    Pouvez vous m'éclaircir à propos de mon erreur?

    Merci!
    1
  3. le père
     
    Bonjour

    Ce message signifie que le nombre de champs que tu initialises ne correspond pas au nombre de champs de la table
    sql = 'INSERT INTO egw_agw_accounts VALUES("","'.mysql_escape_string($_POST['account_name']).'", "'.md5(mysql_escape_string($_POST['account_pwd'])).'")'
    Si je compte bien, tu initialises 3 champs alors que ta table en compte 5. Comment veux-tu que mysql devine lesquels ?
    En lui disant lesquels:
    sql = 'INSERT INTO egw_agw_accounts (account_id,account_name,account_pwd) VALUES("","'.mysql_escape_string($_POST['account_name']).'", "'.md5(mysql_escape_string($_POST['account_pwd'])).'")'

    Au passage, mysql_escape_string n'est pas utile sur le mot de passe, comme tu calcules le md5, il n'y a vraiment aucun risque d'y retrouver de l'injection sql ou des caractères spéciaux...
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. AWare
     
    Merci,

    j'ai modifié comme vous me l'avez conseillé ,mais maintenant j'ai le message d'erreur suivant :
    parse error: syntax error, unexpected '=' in /var/www/AWare/Espace_membre/inscription.php on line 20
    0