Inscription/Connexion

Tip
Petit nouveau ! | 5 Messages

11 déc. 2008, 17:54

Bonjour à tous,


Voulant réaliser un système d'inscription/connexion sur mon site je me suis aider du tutoriel de ce site.

Seulement, j'ai ajouter 2 lignes a ma base de donnée (nom et prénom) mais celle-ci refuse de se poster.

J'ai modifié/rajouté quelque petit truc mais ca ne focntionne pas.

Voici le code, et merci de votre aide ;)
<?php

header('Content-type: text/html; charset=UTF-8');


function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);

return $chaine;
}


$message = null;



if (isset($_POST['pseudo']))
{


$pseudo = (isset($_POST['pseudo']) && trim($_POST['pseudo']) != '')? Verif_magicquotes($_POST['pseudo']) : null;
$pass = (isset($_POST['pass']) && trim($_POST['pass']) != '')? Verif_magicquotes($_POST['pass']) : null;
$nom = (isset($_POST['nom']) && trim($_POST['nom']) != '')? Verif_magicquotes($_POST['nom']) : null;
$prenom = (isset($_POST['prenom']) && trim($_POST['prenom']) != '')? Verif_magicquotes($_POST['prenom']) : null;




if(isset($pseudo,$pass,$nom,$prenom))
{

$hostname = "localhost";
$database = "bdd_site_php_cours";
$username = "root";
$password = "";

$connection = mysql_connect($hostname, $username, $password) or die(mysql_error());

// Connexion à la base
mysql_select_db($database, $connection);

// Indique à mySql de travailler en UTF-8 (par défaut mySql risque de travailler au standard ISO-8859-1)
mysql_query("SET NAMES 'utf8'");

// Préparation des données pour les requêtes à l'aide de la fonction mysql_real_escape_string
$nom = mysql_real_escape_string($pseudo);
$password = mysql_real_escape_string($pass);


// Requête pour compter le nombre d'enregistrements répondant à la clause : champ du pseudo de la table = pseudo posté dans le formulaire
$requete = "SELECT count(*) as nb FROM membres WHERE pseudo = '".$nom."'";

// Exécution de la requête
$req_exec = mysql_query($requete) or die(mysql_error());

// Création du tableau associatif du résultat
$resultat = mysql_fetch_assoc($req_exec);


// nb est le nom de l'allias associé à count(*) et retourne le résultat de la requête dans le tableau $resultat;
if ($resultat['nb'] == 0)
// Résultat du comptage = 0 pour ce pseudo, on peut donc l'enregistrer
{
// Pour enregistrer la date actuelle (date/heure/minutes/secondes) on peut utiliser directement la fonction mysql : NOW()
$insertion = "INSERT INTO membres(pseudo,pass,date_enregistrement) VALUES('".$nom."', '".$password."', NOW())";

// Exécution de la requête d'insertion
$inser_exec = mysql_query($insertion) or die(mysql_error());

/* Si l'insertion s'est faite correctement (une requête d'insertion retourne "true" en cas de succès, je peux donc utiliser
l'opérateur de comparaison strict '===' c.f. http://fr.php.net/manual/fr/language.operators.comparison.php) */
if ($inser_exec === true)
{
/* Démarre la session et enregistre le pseudo dans la variable de session $_SESSION['login']
qui donne au visiteur la possibilité de se connecter. */
session_start();
$_SESSION['login'] = $pseudo;

// A MODIFIER Remplacer le '#' par l'adresse de votre page de destination, sinon ce lien indique la page actuelle.
$message = 'Votre inscription est enregistrée. <a href = "#">Cliquez ici pour vous connecter</a>';
}
}
else
{ // Le pseudo est déjà utilisé
$message = 'Ce pseudo est déjà utilisé, changez-le.';
}
}
else
{ // Au moins un des deux champs "pseudo" ou "mot de passe" n'a pas été rempli
$message = 'Les champs "Pseudo" et "Mot de passe" doivent être remplis.';
}
}
?>

PS: Je suis un grand débutant en php...

Eléphant du PHP | 353 Messages

11 déc. 2008, 17:59

Bonjour.
A première vue, tu dois modifier cette ligne :
// Pour enregistrer la date actuelle (date/heure/minutes/secondes) on peut utiliser directement la fonction mysql : NOW()
$insertion = "INSERT INTO membres(pseudo,pass,date_enregistrement) VALUES('".$nom."', '".$password."', NOW())"; 
Regarde bien, tu n'as pas modifié la requête pour y ajouter l'insertion des 2 valeurs pour les 2 champs que tu as rajouté

ViPHP
AB
ViPHP | 5818 Messages

11 déc. 2008, 18:02

Effectivement l'enregistrement original est :
$insertion = "INSERT INTO membres(pseudo,pass,date_enregistrement) VALUES('".$nom."', '".$password."', NOW())"; 
Si tu veux enregistrer des champs supplémentaires il faut les indiquer dans ta requête d'insertion :wink:

Tip
Petit nouveau ! | 5 Messages

11 déc. 2008, 18:06

Merci de ton aide mais quand je remplace ca:
// Pour enregistrer la date actuelle (date/heure/minutes/secondes) on peut utiliser directement la fonction mysql : NOW()
$insertion = "INSERT INTO membres(pseudo,pass,date_enregistrement) VALUES('".$nom."', '".$password."', NOW())";
par
// Pour enregistrer la date actuelle (date/heure/minutes/secondes) on peut utiliser directement la fonction mysql : NOW()
             $insertion = "INSERT INTO membres(pseudo,nom,prenom,pass,date_enregistrement) VALUES('".$nom."', '".$password."', NOW())";
J'ai une erreur quand j'envoie le formulaire qui me dit : Column count doesn't match value count at row 1

Eléphant du PHP | 353 Messages

11 déc. 2008, 18:08

Attention aux erreurs bêtes.

Tu lui donnes 5 champs... mais pas 5 valeurs :wink:

Tip
Petit nouveau ! | 5 Messages

11 déc. 2008, 18:12

Bingo!

Ça fonctionne, merci beaucoup ;)