Faire une page membre

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Faire une page membre

Re: Faire une page membre

par chabgyver » 20 avr. 2016, 11:25

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

Re: Faire une page membre

par chabgyver » 20 avr. 2016, 10:33

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

par @rthur » 20 avr. 2016, 09:29

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 ! :-D
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

par chabgyver » 19 avr. 2016, 15:02

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

par @rthur » 19 avr. 2016, 12:02

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à ! :D

Re: Faire une page membre

par chabgyver » 19 avr. 2016, 11:47

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

par @rthur » 19 avr. 2016, 11:35

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

par chabgyver » 19 avr. 2016, 10:51

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

par @rthur » 19 avr. 2016, 10:43

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

par chabgyver » 19 avr. 2016, 10:34

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

par @rthur » 19 avr. 2016, 10:25

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

par chabgyver » 19 avr. 2016, 10:12

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

par chabgyver » 18 avr. 2016, 16:41

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

par or 1 » 18 avr. 2016, 15:44

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

Faire une page membre

par chabgyver » 18 avr. 2016, 15:35

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