Page 1 sur 1
Faire une page membre
Posté : 18 avr. 2016, 15:35
par chabgyver
Bonjour,
J'ai récupéré un bout de code pour mettre un accès privé sur l'une des pages de mon site que voici :
Code : Tout sélectionner
<?php
// Est-ce que on s'est loggé avec un "login" ?
if (isset($_POST['login'])) {
// Est-ce que ce login/mdp existe dans la table users ?
$login = $_POST['login'];
$mdp = $_POST['mdp'];
$selection = mysqli_query($lien,"SELECT * FROM users WHERE LOGIN='$login' AND MDP=' $mdp'");
if (mysqli_num_rows($selection)==1){
$_SESSION['nom_user']=$_POST['login']; }
}
// Est-ce qu'on a demandé la deconnexion ? (delog)
if (isset($_GET['delog'])) {
unset($_SESSION['nom_user']);
}
?><!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>A4 Copie - backoffice - login</title>
<link rel="stylesheet" href="styles.css" type="text/css" />
</head>
<body>
<div id="wrapper">
<div id="header1">
<?php if (isset($_SESSION['nom_user'])) {
echo "<p class='bienvenue'>Bienvenue ".
$_SESSION['nom_user']."- <a href='index.php?delog'>DECONNEXION</a></p>";
}
else { ?>
<form id="formlogin" method="post" action="index.php">
<label for="">Login : </label>
<input type="text" name="login" />
<br />
<label for="">Mot de passe : </label>
<input type="password" name="mdp" />
<input type="submit" value="OK" />
</form>
<?php } ?>
<img class="logohaut" src="images/logohaut.png" alt="Veuillez vous identifier" />
</div>
</div>
</div>
</body>
</html>
Le problème est qu'il me manque ce qui doit apparaître dans la base de donnée.
Je pense qu'il me faut 2 tables dans la base de données mais je ne sais pas comment faire.
Avez-vous une idée sur la question ?
Merci d'avance pour votre aide
Re: Faire une page membre
Posté : 18 avr. 2016, 15:44
par or 1
il n'y a vraiment pas la structure de la table avec le bout de code ?
SELECT * FROM users WHERE LOGIN='$login' AND MDP
donc une table users, avec au minimum un champ LOGIN et un champ MDP
Re: Faire une page membre
Posté : 18 avr. 2016, 16:41
par chabgyver
Oui en effet, je viens de m'en rendre compte, mais on problème réside dans la création de la table elle-même, j'avoue que là, j'éprouve quelques difficultés.
J'ai ajouté ça en haut de mon fichier :
// connexion à la base de données
$lien = mysqli_connect("localhost","xxx","xxx","xxxxxx");
mysqli_query($lien,"SET NAMES 'utf8'");
Re: Faire une page membre
Posté : 19 avr. 2016, 10:12
par chabgyver
J'ai décidé de repartir sur autre chose :
Donc 4 fichiers que j'ai placé dans un dossier ADMIN :
INDEX.PHP
Code : Tout sélectionner
<?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {
// connexion à la base de données
$lien = mysqli_connect("localhost","xxxx","xxxxxxxx","xxxx");
mysqli_query($lien,"SET NAMES 'utf8'");
// on teste si une entrée de la base contient ce couple login / pass
$sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);
mysql_free_result($req);
mysql_close();
// si on obtient une réponse, alors l'utilisateur est un membre
if ($data[0] == 1) {
session_start();
$_SESSION['login'] = $_POST['login'];
header('Location: membre.php');
exit();
}
// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
elseif ($data[0] == 0) {
$erreur = 'Compte non reconnu.';
}
// sinon, alors la, il y a un gros problème :)
else {
$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>
<html>
<head>
<title>Accueil</title>
</head>
<body>
Connexion à l'espace membre :<br />
<form action="index.php" method="post">
Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><br />
<input type="submit" name="connexion" value="Connexion">
</form>
<a href="inscription.php">Vous inscrire</a>
<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
</body>
</html>
MEMBRE.PHP
Code : Tout sélectionner
<?php
session_start();
if (!isset($_SESSION['login'])) {
header ('Location: index.php');
exit();
}
?>
<html>
<head>
<title>Espace membre</title>
</head>
<body>
Bienvenue <?php echo htmlentities(trim($_SESSION['login'])); ?> !<br />
<a href="deconnexion.php">Déconnexion</a>
</body>
</html>
DECONNEXION.PHP
Code : Tout sélectionner
<?php
session_start();
session_unset();
session_destroy();
header('Location: index.php');
exit();
?>
INSCRIPTION.PHP
Code : Tout sélectionner
<?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['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))) {
// on teste les deux mots de passe
if ($_POST['pass'] != $_POST['pass_confirm']) {
$erreur = 'Les 2 mots de passe sont différents.';
}
else {
// connexion à la base de données
$lien = mysqli_connect("localhost","xxxx","xxxxxxx","xxxx");
mysqli_query($lien,"SET NAMES 'utf8'");
// on recherche si ce login est déjà utilisé 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']).'", "'.mysql_escape_string(md5($_POST['pass'])).'")';
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è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 htmlentities(trim($_POST['login'])); ?>"><br />
Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><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>
La structure SQL ressemble à ça :
Code : Tout sélectionner
CREATE TABLE membre (
id int(11) NOT NULL auto_increment,
login text NOT NULL,
pass_md5 text NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM;
Dès lors que j'effectue un test d'inscription, j'ai droit à un beau message d'erreur :
Warning: mysql_query(): Access denied for user ''@'localhost' (using password: NO) in /home/thiebtcz/public_html/++a4copie++/admin/inscription.php on line 18
Warning: mysql_query(): A link to the server could not be established in /home/thiebtcz/public_html/++a4copie++/admin/inscription.php on line 18
Erreur SQL !
SELECT count(*) FROM membre WHERE login="admin"
Access denied for user ''@'localhost' (using password: NO)
Je ne vois vraiment pas où est le soucis.
Re: Faire une page membre
Posté : 19 avr. 2016, 10:25
par @rthur
Bonjour,
Tu fais un mysqli_connect() mais derrière un mysql_query() (sans "i") donc forcément ça ne peut pas marcher.
Et idem pour toutes tes fonctions en mysql_*
Re: Faire une page membre
Posté : 19 avr. 2016, 10:34
par chabgyver
Faut que j'ai essayé de remplacer tous les mysl par mysqli et j'ai essayé un par un mais j'ai toujours des messages d'erreurs.
Re: Faire une page membre
Posté : 19 avr. 2016, 10:43
par @rthur
Les messages d'erreurs de PHP sont d'une manière général très explicite donc lit les attentivement et essaye de comprendre ce qui pourrait provoquer ce message dans ton code (en regardant le n° de ligne indiqué)
Re: Faire une page membre
Posté : 19 avr. 2016, 10:51
par chabgyver
Cette fois j'ai ça :
Warning: mysqli_escape_string() expects exactly 2 parameters, 1 given in /home/thiebtcz/public_html/++a4copie++/admin/inscription.php on line 16
Warning: mysqli_query() expects at least 2 parameters, 1 given in /home/thiebtcz/public_html/++a4copie++/admin/inscription.php on line 17
Warning: mysqli_error() expects exactly 1 parameter, 0 given in /home/thiebtcz/public_html/++a4copie++/admin/inscription.php on line 17
Erreur SQL !
SELECT count(*) FROM membre WHERE login=""
Je vais te dire ce que je comprends :
Attention : mysqli_escape_string() attend 2 paramètres, donne 1 dans /home/ .... à la ligne 16
Attention : mysqli_escape_string() attend 2 paramètres, donne 1 dans /home/ .... à la ligne 17
...
J'ai bien compris qu'il manque un paramètre sur ces 3 lignes mais lesquels ?
Re: Faire une page membre
Posté : 19 avr. 2016, 11:35
par @rthur
Si tu regarde dans la doc PHP tu verras qu'il faut effectivement 2 paramètres :
http://fr.php.net/manual/fr/mysqli.real ... string.php
Le 1er c'est l'identifiant de connexion $lien dans ton cas et le 2ème c'est ta requête
Re: Faire une page membre
Posté : 19 avr. 2016, 11:47
par chabgyver
Bon, ok, je vais voir ce que je peux faire, pas forcément ce que je veux faire. Disons que j'y connais rien en PHP, mais alors rien de rien, donc le terme "requête" ne me parle pas vraiment.
Ce que je sais faire, c'est changer des valeurs mais si je peux éviter de toucher à une structure, j'évite bien soigneusement de le faire.
Mon niveau de compétence concerne le HTML et le CSS à condition que ça reste simple.
Pour que je comprenne, il e faut des exemples simples, ton lien est très bien car je vais essayer de m'en inspirer mais je pense que pour faire quelque chose qui prendrait 5 minutes à un codeur moyen, moi, je risque d'y passer des heures et des heures et ça sera bancal au final.
Re: Faire une page membre
Posté : 19 avr. 2016, 12:02
par @rthur
Pour que je comprenne, il e faut des exemples simples, ton lien est très bien car je vais essayer de m'en inspirer mais je pense que pour faire quelque chose qui prendrait 5 minutes à un codeur moyen, moi, je risque d'y passer des heures et des heures et ça sera bancal au final.
Mais quand tu auras passer des heures pour comprendre comment ça fonctionne, la prochaine fois que tu auras à le faire, tu passeras moitié moins de temps... C'est comme cela que l'on apprend et que l'on progresse

Et on est tous passé par là !

Re: Faire une page membre
Posté : 19 avr. 2016, 15:02
par chabgyver
Je vais y réfléchir, mais là, dans l'immédiat, j'ai un problème à résoudre et si je pouvais régler ça avant ce soir, ça serait bien.
Pour ce qui est de l'apprentissage du PHP ou de n'importe quoi, je suis bien d'accord qu'il faut y passer du temps mais on ne va pas débattre de l'utilité de consacrer du temps à apprendre des trucs car on est d'accord.
D'autre part, il y a 2 catégories de personnes : les matheux et les littéraires pour faire bref.
J'appartiens à la seconde catégorie, je comprends rien à rien à tout ce qui fait appel à l'esprit purement mathématique, je n'ai pas la moindre capacité d'abstraction logique, par conséquent, même si je bosse à apprendre un langage pendant des semaines, voir des mois, au mieux, j'arriverai peut-être un faire un petit formulaire qui fait "bonjour" en clignotant.
Le PHP ou n'importe quels langages, c'est exactement comme la musique ou la peinture, y'en a qui sont naturellement bon là dedans et qui mettront presque aucun temps à apprendre, d'autres, pour arriver au même résultat vont mettre 1000 ans.
Nous ne sommes pas tous doués en tout de la même façon, je suis conscient de mes lacunes et aussi de mes points forts, je n'ai pas envie de perdre mon temps à apprendre un truc que je ne comprendrai jamais de toute façon, je préfère solliciter l'expertise d'autres personnes plus talentueuses que moi quitte à leur rendre le même genre de service en retour dans un domaine qu'ils ne maîtrisent pas.
Ca s'appelle gagner du temps et avoir conscience de ce pourquoi on est doué ou non est une preuve de sagesse et d'humilité.
Re: Faire une page membre
Posté : 20 avr. 2016, 09:29
par @rthur
Je vais y réfléchir, mais là, dans l'immédiat, j'ai un problème à résoudre et si je pouvais régler ça avant ce soir, ça serait bien.
Bah arrête d'épiloguer et met toi au travail !
Je t'ai donné toutes les infos utiles, inspires toi des exemples de la doc et ça va marcher.
je n'ai pas envie de perdre mon temps à apprendre un truc que je ne comprendrai jamais de toute façon, je préfère solliciter l'expertise d'autres personnes plus talentueuses que moi quitte à leur rendre le même genre de service en retour dans un domaine qu'ils ne maîtrisent pas.
Ca s'appelle gagner du temps et avoir conscience de ce pourquoi on est doué ou non est une preuve de sagesse et d'humilité.
PHPfrance est un forum d'entraide entre développeurs PHP, si tu poses des questions techniques mais uniquement pour qu'on fasse le boulot à ta place, alors tu t'es trompé de forum.
Si tu n'as pas les compétences ni l'envie de t'y mettre car pour toi c'est une perte de temps, alors effectivement achète toi les services d'un vrai développeur.
Re: Faire une page membre
Posté : 20 avr. 2016, 10:33
par chabgyver
Je crois que tu as raison, je vais demander à un codeur dont c'est le métier, je pensais pouvoir y arriver avec les éléments que tu m'a indiqué mais force est de constater que j'y comprends vraiment rien.
Et pourtant à partir des éléments que j'ai mis plus haut, j'imagine qu'il y aurait presque rien à faire pour que ça fonctionne.
Outre la compréhension de la structure du code, il y a la maîtrise de l'algorythmie et la syntaxe assez tordue qu'il faut maîtriser et là, ça se complique.
Tes conseils sont bons mais adaptés à des personnes qui connaissent déjà bien le php.
Re: Faire une page membre
Posté : 20 avr. 2016, 11:25
par chabgyver
J'ai trouvé ça qui me paraît intéressant car il y a la différence entre mySql et mySqli
Là, je pense que je vais pouvoir avancer.
Ce n'est pas parce que je comprends rien que je vais baisser les bras pour autant, je suis curieux de nature mais c'est vrai que je galère à mort avec le PHP