Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

script de connexion MySQL en PHP

1 réponse
Avatar
Agathe
Bonjour,

Je développe une application disposant d'un back office avec PHP/MySQL mon
application fonctionne normalement en local (EasyPHP 1.6).

Un utilisateur s'authentifie via un formulaire traité en php qui hashe son
mot de passe en md5 pour le comparer à celui stocké dans la table des
utilisateurs (également stocké sous sa forme hashée).
Le script de traitement du formulaire d'authentification appelle lui même un
script de connexion à la bdd par un include().
Si les login et mot de passe correpondent, l'accès est autorisé.
Tout cela fonctionne à merveille en local.
Puis :
Je transfère mon appli chez mon hébergeur (l'accès à PHPMyAdmin est sécurisé
via HTTPS/SSL son adresse est du type
https://secure.monhebergeur/fr/mysql/).
lorsque je me connecte au site www.mondomaine.fr/test/ je tombe bien sur mon
index (le formulaire d'authentification) mais quand je m'authentifie ou si
je laisse le formulaire vide j'obtient systématiquement "vous n'êtes pas
autorisé à afficher la page", je n'ai même pas l'affichage du controle
d'erreur que j'ai mis en place et qui oblige l'utilisateur à remplir les
champs obligatoires...
--------
voici mon script de connexion (mon fichier s'appelle "connexion.inc.php") :
<?
$host = "localhost";
$user = "login";
$password = "motdepasse";
$db = "mabase";

$connexion = mysql_connect($host,$user,$password);
if (!$connexion) {
echo "Impossible d'effectuer la connexion";
exit;
} else {
echo "connexion établie<br>";
}//endif;

$bdd = mysql_select_db($db,$connexion);
if (!bdd) {
echo "Impossible de sélectionner cette BDD<br>";
exit;
}//endif;
?>
--------------
Voici maintenant mon script de traitement du formulaire (mon fichier
s'appelle "traitement.inc.php") :
<?
session_start();
require("functions/connexion.inc.php");

$hpw = md5($pw);//hash du mot de passe saisi dans le formulaire

//comparaison login et pw hashé par md5
$sql = "SELECT id,login,password,nomuser,prenomuser, FROM matable WHERE
login = '$log' AND userpassword = '$hpw' ";

$query = mysql_query($sql);

$result = mysql_num_rows($query);

if (!$result) {

header("Location: form.php?error=login");
echo "Les paramètres de connexion sont invalides";
//exit();

} ELSE {

$rs = mysql_fetch_array ($query);

session_register("id");

$iduser = $rs["id"];//attribution session

}//EndIF;

//vérification remplissage des champs obligatoires

if ( (!$log) && (!$pw) ) {
header("Location: form.php?error=champ");
exit();
}//EndIF;

header ("Location: accueil.php");

//fermeture connexion bdd

mysql_close();
?>
-------------------
Par acquis de conscience, je me dis "je vais faire une copie du fichier et
je vais essayer de frapper directement l'addresse du script dans mon
navigateur", je crée donc un fichier du nom de "connexion.inc_new.php" avec
extactement le même contenu que le premier script figurant dans mon post et
dans mon navigateur je frappe
www.mondomaine.fr/test/functions/connexion.inc_new.php et bingo : connexion
établie !!!
J'y perd mon latin...

Pourquoi ça ne fonctionne pas en cliquant dans le formulaire?
le script de traitement ne fonctionne pas non plus en ligne alors qu'il
fonctionne en local...
toutes les manips effectuées dans le formulaire html se soldent par "vous
n'êtes pas autorisé à afficher la page" !
alors que si je frappe l'adresse complète :
www.mondomaine.fr/test/functions/connexion.inc_new.php j'obtiens connexion
établie !!!
par contre www.mondomaine.fr/test/functions/traitement.inc.php donne "vous
n'êtes pas autorisé à afficher la page" !

Avez vous déjà rencontré ce type de problème ? est-ce du au tandem https/ssl
? avez-vous une solution à me proposer ? une idée ?

Merci d'avance à tous
Agathe

1 réponse

Avatar
Thibaut Allender

Avez vous déjà rencontré ce type de problème ? est-ce du au tandem https/ssl
? avez-vous une solution à me proposer ? une idée ?


euh, j'ai vraiment lu en diagonale, mais c'est pas simplement un
probleme de register globals off sur ton hebergeur est on en local ?

parce que dans le traitement du formulaire, $pw, ca sort d'ou ? c'est la
variable postee en GET ou POST ?
auquel cas il faut utiliser $_REQUEST['pw'] pour etre sur de recuperer
une valeur quelle que soit la config de l'hebergeur

idem pour $log

et puis il y a une coquille :

$bdd = mysql_select_db($db,$connexion);
if (!bdd) {
echo "Impossible de sélectionner cette BDD<br>";
exit;

il manque un $ dans if (!bdd)

de même, ta gestion des sessions est obsolète :
session_register("id"); est à remplacer par $_SESSION['id'] = value;

en plus, tu registres 'id' en session, mais tu attribues la valeur à une
autre variable ???

session_register("id");
$iduser = $rs["id"];//attribution session

session_register("iduser"); <- plutôt, et si on veut utiliser une
méthode plus actuelle :
$_SESSION['iduser'] = $rs["id"];//attribution session

bref, une petite lecture de
http://fr.php.net/manual/fr/language.variables.predefined.php s'impose

--
thibaut allender | freelance | http://capsule.org