erreur sql

Répondre
alexandryne
le 11/10/2009 à 20:11
alexandryne
Bonjour,

Quand j'envoie mon formulaire d'inscription, j'ai une erreur sql : Erreur SQL !INSERT INTO membre VALUES("", "alexandryne", "80fce8d1a73529f0bac163fc289eeae2")
Column count doesn't match value count at row 1.

Dans la base de données, j'ai : id, login, pass_md5 et email.

Voilà le code du formulaire d'inscription. Merci de m'aider. J'ai aussi "au moins un des champs est vide qui s'inscrit quand j'ai le formulaire qui apparaît.

<?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 &eacute;galement si elles ne sont pas vides
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm'])) && (isset($_POST['email']) && !empty($_POST['email'])))
// on teste les deux mots de passe
if ($_POST['pass'] != $_POST['pass_confirm']) {
$erreur = 'Les 2 mots de passe sont diff&eacute;rents.';
}
else {
$base = mysql_connect ('localhost', '*****', '******');
mysql_select_db ('*****', $base);

// on recherche si ce login est d&eacute;j&agrave; utilis&eacute; par un autre membre
$sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'"';
$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 membre VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.md5(mysql_escape_string($_POST['pass']).'", "'.mysql_escape_string($_POST['email'])).'")';
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

session_start();
$_SESSION['login'] = $_POST['login'];
header('Location: membre.php');
exit();
}
else {
$erreur = 'Un membre poss&egrave;de d&eacute;j&agrave; ce login.';
}
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}

?>
<html>
<head>
<title>Inscription</title>
</head>

<body>
Inscription &agrave; l'espace membre :<br />
<form action="inscription.php" method="post">
<table>
<tr>
<tr>
<td align="right">Login</td>
<td>
<td align="left"><input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"></td>
</tr>
<tr>
<tr>
<td align="right">Mot de Passe</td>
<td><td align="left"><input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"></td>
</tr>
<tr>
<td align="right">Confirmation du mot de passe</td>
<td><td align="left"><input type="password" name="pass_confirm" value="<?php if (isset($_POST['pass_confirm'])) echo htmlentities(trim($_POST['pass_confirm'])); ?>"></td>
</tr>
<tr>
<tr>
<td align="right">Adresse Email</td>
<td><td align="left"><input type="text" name="email" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['email'])); ?>"></td>
</tr>
<tr>
<tr>
<td colspan="2"><input type="submit" name="inscription" value="Inscription">
</table>
</form>
<?php
if (isset($erreur)) echo '<br />',$erreur;
?>
</body>
</html>

php ?>
LA GLOBULE
le 11/10/2009 à 20:19
LA GLOBULE
L'erreur dit clairement que ton insert ne comporte pas le meme nombre de champs que ta table SQL.
laura
le 11/10/2009 à 22:09
laura
Je ne suis pas pour les INSERT comme ça :

<?php
$sql = 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.md5(mysql_escape_string($_POST['pass'])).'", "'.mysql_escape_string($_POST['email']).'")';
?>


Pour moi il manque un morceau que je trouve indispensable

<?php
$sql = 'INSERT INTO membre (id , login , pass_md5, email) VALUES (NULL , "'.mysql_escape_string($_POST['login']).'", "'.md5(mysql_escape_string($_POST['pass'])).'", "'.mysql_escape_string($_POST['email']).'")';
?>

Cela permet de lier les données à insérer aux champs présents dans la table , donc moins de risque d'erreur.
Bon c'est juste une subjection smiley
Des étoiles dans les yeux, le ciel pour m'évader
alexandryne
le 12/10/2009 à 11:08
alexandryne
Bonjour,

Merci, Laura. Ca fonctionne avec ton bout de code. Avant ça fonctionnait avec l'autre, mais c'est avant que je rajoute l'email.

Par contre, j'ai l'erreur "au moins un des champs est vide " qui se met en-dessous du formulaire. Ca ne l'empêche pas de fonctionner, mais il ne devrait avoir rien d'écrit. Comment faire pour que ça ne s'affiche pas. Merci.
LA GLOBULE
le 12/10/2009 à 11:27
LA GLOBULE
Si tu comprenais ce que tu as copié collé, tu saurais pourquoi ce message s'affiche.
Je le repete, le but du site, c'est d'apprendre à coder, de comprendre ce que l'on fait. Ta question montre clairement que tu ne comprends pas ce qu'il se passe, alors qu'il suffit de "dérouler le code dans sa tête" pour voir le problème.

Mais sinon, le problème, c'est qu'il manque un } dans ton code qui fait que ce message s'affiche.
alexandryne
le 12/10/2009 à 11:51
alexandryne
J'avais justement rajouté un "}" à la ligne 35 parce que je pensais que c'était ça, mais ça me donne un message d'erreur et plus de formulaire :


Parse error: syntax error, unexpected '}' in /home/bonsplan/public_html/accueil/inscription.php on line 36. J'ai essayé de réfléchir avant de demander, mais comme je ne trouvais pas... Voilà le bout de code qui me donne cette erreur :


}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>
laura
le 12/10/2009 à 12:47
laura
Pour éviter les erreurs d'accolade, il faut toujours fermer celle-ci après ouverture.

Ex if(){}

Si tu prends cette habitude, tu vas te faciliter la vie smiley

Un autre petit conseil, il faut toujours indenter ton code (le mettre en forme) car ainsi tu vois plus facilement les erreurs d'accolades et autres.
Tu peux aussi mettre un commentaire sur l'accolage fermente.

<?php
if()
{
foreach()
{
if()
{
}//if
}//foreach
}//if
?>
Des étoiles dans les yeux, le ciel pour m'évader
alexandryne
le 12/10/2009 à 13:54
alexandryne
Je ne vois pas du tout où il y a une erreur d'accolade. De toute façon, si j'en rajoute une, j'ai une erreur. Et ce que je ne comprends pas, c'est qu'avant que je rajoute l'email dans le code, je n'avais pas d'erreur du tout et j'avais deux "}" après "au moins un des champs est vide", mais depuis, je n'ai pas de message d'erreur quand j'ai une seule accolade, j'ai le formulaire, mais avec le message "au moins un des champs est vide", et si j'en rajoute une, là, j'ai "parse error : unexpected "}". La Globule me dit que l'accolade est dans l'autre sens. Le code PHP est fini après "au moins un des champs est vide". Il faut donc bien fermer les accolades ? Non ? Merci.
alexandryne
le 12/10/2009 à 14:07
alexandryne
J'ai trouvé. J'ai enlevé une accolade au-dessus de "else" et j'en ai rajouté une en-dessous de "au moins un des champs est vide" et ça fonctionne. Merci.
Répondre
LoadingChargement en cours