PHP > Espace membre > Erreur !

Fermé
94uaehd - 18 juil. 2009 à 20:37
 Utilisateur anonyme - 20 nov. 2010 à 17:43
Bonjour,
J'ai créé un espace membre en m'aidant de http://www.vulgarisation-informatique.com/source-10--zone-membres--espace-membre-avec-mysql--tres-simple.php
Lors de l'inscription, le message "Column count doesn't match value count at row 1" s'affiche.

Voici le code PHP:
<?php
session_start();
require 'conf.php';

$erreur=0;

if(isset($_GET['action'],$_POST['passe_membre'],$_POST['confirm_mdp']) AND $_POST['passe_membre']===$_POST['confirm_mdp'])
{
	if(get_magic_quotes_gpc()===1)
	{
		$pseudo=$_POST['pseudo'];
		$passe=$_POST['passe_membre'];
	}
	else
	{
		$pseudo=addslashes($_POST['pseudo']);
		$passe=addslashes($_POST['passe_membre']);
	}

	if(!trim($pseudo) OR !trim($passe))
	{
		header('location:inscription.php');
		exit;
	}

	mysql_connect($mysql_host,$mysql_login,$mysql_passe) OR die('<p>Connexion impossible à la base de données. Réessayez plus tard.</p>');

	mysql_select_db($mysql_base) OR die('<p>sélection impossible</p>');
	$requete=mysql_query('SELECT COUNT(*) FROM membres WHERE pseudo="'.$pseudo.'"') OR die(mysql_error());

	$r=mysql_fetch_row($requete);

	if($r[0]!=='0')
	{
		mysql_close();
		$erreur=1;
	}
	else
	{
		mysql_query('INSERT INTO membres VALUES("","'.$pseudo.'",md5("'.$passe.'"))') OR die(mysql_error());
		$_SESSION['login']=$pseudo;

		mysql_close();
		header('location:zonemembre.php');
		exit;
	}

}
	if($erreur===1)
	{
		echo '<p>Ce pseudo existe déjà. Veuillez en choisir un autre</p>';
	}
?>                  
                  <p>L'inscription est rapide et gratuite. Elle vous permet de bénéficier de multiples avantages.</p>
<hr />
<form method="post" action="inscription.php?action=ajout">
<p>
  <label for="log">Nom d'utilisateur (login) :</label>
  <input type="text" name="pseudo" size="20" id="log" />
  <br /><br />
Mot de passe :
<input type="password" name="passe_membre" size="20" id="mdp" /></p>
<p><label for="cmdp">Confirmez votre mot de passe :</label>
  <input type="password" name="confirm_mdp" size="20" id="cmdp" />
  <br /></p>
<p><input type="submit" value="Inscription" /></p>
</form>&nbsp;</p>
</div>
A voir également:

2 réponses

Utilisateur anonyme
20 nov. 2010 à 17:42
Voici le meme script en plus rapide !
le script membre :

<?php
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
	if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))) {
		if ($_POST['pass'] != $_POST['pass_confirm']) {
			$erreur = 'Les 2 mots de passe sont différents.';
		}
		else {
			$base = mysql_connect ('serveur', 'login', 'password');
			mysql_select_db ('nom_base', $base);

			$sql = 'SELECT id FROM membres WHERE login="'.mysql_escape_string($_POST['login']).'"';
			$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
			$nb = mysql_num_rows($req);

			if ($nb == 0) {
				$sql = 'INSERT INTO membres (id, login, pass_md5) VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.md5(mysql_escape_string($_POST['pass'])).'")';
				mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

				// on récupère l'id de notre nouveau membre
				$id = mysql_insert_id();

				session_start();
				$_SESSION['login'] = $_POST['login'];

				// on stocke cet id dans une variable de session
				$_SESSION['id'] = $id;
				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">
Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo stripslashes(htmlentities(trim($_POST['login']))); ?>"><br />
Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo stripslashes(htmlentities(trim($_POST['pass']))); ?>"><br />
Confirmation du mot de passe : <input type="password" name="pass_confirm" value="<?php if (isset($_POST['pass_confirm'])) echo stripslashes(htmlentities(trim($_POST['pass_confirm']))); ?>"><br />
<input type="submit" name="inscription" value="Inscription">
</form>
<?php
if (isset($erreur)) echo '<br />',$erreur;
?>
</body>
</html>

et la table membre :
CREATE TABLE membres (
id int(11) NOT NULL auto_increment,
login text NOT NULL,
pass_md5 text NOT NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;
1
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
18 juil. 2009 à 20:44
Remplace
mysql_query('INSERT INTO membres VALUES("","'.$pseudo.'",md5("'.$passe.'"))') OR die(mysql_error());

Par
mysql_query('INSERT INTO membres VALUES("","'.$pseudo.'","'.md5($passe).'")') OR die(mysql_error());
0
En fait, j'avais fait une erreur dans le nom de ma table PHP !! Merci quand même...
0
Utilisateur anonyme
20 nov. 2010 à 17:35
fait carement
mysql_query('INSERT INTO membres VALUES(" ","'.$pseudo.'","'.md5($passe).'")') OR die(mysql_error());

le espace pour le champ auto_incentement evite de poser des pobleme chez one et tt ca ! et precise ta sctrucure de base de donnee comme ca :
mysql_query('INSERT INTO membres(id, pseudo, passe) VALUES(" ","'.$pseudo.'","'.md5($passe).'")') OR die(mysql_error());

Encore une fois, ca accelere le processus et evite toutes erreures !
0
Utilisateur anonyme
20 nov. 2010 à 17:37
et ici : tu fait au lieu de === tu fait == :
$_POST['passe_membre']===$_POST['confirm_mdp'])

devient donc :
$_POST['passe_membre']==$_POST['confirm_mdp'])

encore une acceleration et pour ton probleme fait comme j'ai dit :
mysql_query('INSERT INTO membres(id, pseudo, passe) VALUES(" ","'.$pseudo.'","'.md5($passe).'")') OR die(mysql_error());
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 505
Modifié par avion-f16 le 20/11/2010 à 17:53
Le problème est résolu depuis le temps ...
Si tu précises la structure, inutile de mettre l'id et sa valeur.

« et ici : tu fait au lieu de === tu fait == »
Il y a une différence.
Le premier signifie "est strictement égal" et le second "est égal"
La différence, c'est que pour PHP, null, false, une chaine vide, 0, etc sont égaux mais pas strictement égaux.
0