Un problème possible dans une requête MySql Pdo

Signaler
Messages postés
12
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
19 janvier 2021
-
Messages postés
31089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
-
bonjour,

c'est mon 1er message et je suis encore peu avancé en Mysql mais j'ai déjà installé une BDD et j'ai fait des requêtes sur la base qui marchent.

là je suis en train de mettre en place un projet de section membres à partir d'exemples sur Internet (le fichier de départ est une plateforme qui sert à se loguer, à devenir membres via un formulaire et à changer de PW si oublié, la BDD à une table de membres) et je rencontre une difficulté.

le fichier de départ (fichier-de-depart.php) commence par le code suivant (connexionBDD.php contient les infos de connexion):
<?php
/******************Config***********************/
$v_editor_name = "aaaaa";
$v_editor_email = "bbbbbb";
$url = "cccccc";
$v_web_name = "dddd";
/**********************************************/
session_start();
error_reporting(E_ALL);
require ("connexionBDD.php");
try {
  $connexion = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
} catch (Exception $e) {
    echo 'Erreur : ' . $e->getMessage() . '<br />';
    echo 'N° : ' . $e->getCode();
}



le fichier de destination (fichier-de-destination.php) commence par le code:
<?php require ("../securite.php");?>
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8">


Lorsque dans localhost je clique sur le fichier de départ (fichier-de-depart.php), j'ai tout de suite les erreurs suivantes :

( ! ) Warning: require(../securite.php): failed to open stream: No such file or directory in D:\fichier-de-depart.php on line 1
Call Stack
# Time Memory Function Location
1 0.0004 407680 {main}( ) ...\fichier-de-depart.php:0
2 0.0335 465224 include( 'D:\fichier-de-depart.php' ) ...\fichier-de-depart.php:81

( ! ) Fatal error: require(): Failed opening required '../security.php' (include_path='.;C:\php\pear') in D:\membres\fichier-de-destination.php on line 1
Call Stack
# Time Memory Function Location
1 0.0004 407680 {main}( ) ...\fichier-de-depart.php:0
2 0.0335 465224 include( 'D:\membres\fichier-de-destination.php' ) ...\fichier-de-depart.php:81

Je ne comprend pas car j'ai bien un fichier securite.php dans le même dossier que le fichier de départ!
Il contient le code total suivant:
<?php

$file_log_navigation = "secret/log_navigation_authorized_visitor.txt";

$page_no_login = "login_failed.php";

//session_start();

if (isset($_SESSION['member'])) {

	// Navigation log
	
	$register = $date('Y-m-d H:m:s')."\t";
	$register .= $_SERVER['REMOTE_ADDR']."\t";
	$register .= $_SERVER['HTTP_USER_AGENT']."\t";
	$register .= $_SESSION['user']['Rk_members']."\t";
	$register .= $_SESSION['user']['first_name']." ";
	$register .= $_SESSION['user']['last_name']." (";
	$register .= $_SESSION['user']['country'].")\t";
	$register .= __FILE__;
	
	file_put_contents($file_log_navigation, $register, FILE_APPEND);

} else {
	
	// No login
	header('Location: '.$page_no_login);
	exit;
}

session_destroy();
?>


Pouvez-vous m'éclairer?

N.B. j'ai bien dans les 2 cas du code pour mettre en évidence les erreurs:
catch (Exception $e) {
echo 'Erreur : ' . $e->getMessage() . '<br />';
echo 'N° : ' . $e->getCode();
Je ne suis plus sûr que le signalement du code se fasse comme indiqué par <code php>, j'ai cherché sur CCM via le moteur de recherche mais je n'ai pas trouvé la bonne réponse!


Merci d'avance

Cordialement,
JH


Configuration: Windows / Firefox 84.0

15 réponses

Messages postés
31089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 193
Bonjour,

dans le même dossier ... donc .. pas de ../ mais simple ./

Ou mieux...
<?php 
require_once ( __DIR__  . "/securite.php");
?>

Messages postés
31089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 193
Au passage, active la gestion des erreurs PDO et place CHAQUE REQUETE dans un bloc TRY/CATCH
https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
Messages postés
12
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
19 janvier 2021

Merci Jordane,

Mais euh, le fichier-de-destination.php est dans le sous dossier 'membres' donc c'est normal de faire <?php require ("../securite.php");?> pour aller chercher securite.php qui est dans le dossier racine comme le fichier-de-depart.php, non?

JH
Messages postés
31089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 193
Bon...
On va reprendre dans l'ordre ...

Déjà .. pourquoi, alors que tu as un fichier nommé connexionBdd ... tu require ce fichier ET tu fais la connexion à la bdd ???
<?php
/******************Config***********************/
$v_editor_name = "aaaaa";
$v_editor_email = "bbbbbb";
$url = "cccccc";
$v_web_name = "dddd";
/**********************************************/
session_start();
error_reporting(E_ALL);
require ("connexionBDD.php"); // .. ce fichier ne contient pas la connexion à la bdd tel que son nom pourrait le laisser penser ?????
try {
  $connexion = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
 // Tu n'as pas activé la gestion des erreurs PDO ...
} catch (Exception $e) {
    echo 'Erreur : ' . $e->getMessage() . '<br />';
    echo 'N° : ' . $e->getCode();
}


Normalement, tu devrais avoir :
<?php 
// ceci est le  Fichier connexionBDD.php

/******************Config***********************/
$v_editor_name = "aaaaa";
$v_editor_email = "bbbbbb";
$url = "cccccc";
$v_web_name = "dddd";
/**********************************************/
try {
   $connexion =new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bd .';charset=utf8',$PARAM_utilisateur, $PARAM_mot_passe);
  // Activation des erreurs PDO
  $connexion ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $connexion ->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (Exception $e) {
    echo 'Erreur : ' . $e->getMessage() . '<br />';
    echo 'N° : ' . $e->getCode();
}
?>    

Ensuite...
Le message d'erreur indique

( ! ) Warning: require(../securite.php): failed to open stream: No such file or directory in D:\fichier-de-depart.php on line 1

Il s'agit bien ici, d'un problème dans le fichier D:\fichier-de-depart.php
Donc.. si les deux fichiers sont dans le même dossier .... alors ... le chemin avec les .. n'est pas bon !
Dans ton fichier D:\fichier-de-depart.php
<?php
// Fichier D:\fichier-de-depart.php

// pour tester.. on va regarder si le fichier existe
$fileSecurite = __DIR __ . '/securite.php';
if(!file_eixsts($fileSecurite)){
  echo " Fichier " . $fileSecurite . " manquant ou mal ortographié !!";
  exit;
}

require_once  __DIR __ . '/securite.php';


Ensuite.. le second message c'est :

( ! ) Fatal error: require(): Failed opening required '../security.php' (include_path='.;C:\php\pear') in D:\membres\fichier-de-destination.php on line 1

Là .. on est bien dans le fichier D:\membres\fichier-de-destination.php
et il essaye d'inclure le fichier security.php ... sauf que.. dans le premier fichier .. tu nous as dit que le fichier se nomme securite.php .... ouppss....!!!
Et donc,
<?php  
// Fichier D:\membres\fichier-de-destination.php

require_once __DIR__ "/../securite.php";



Il faudrait, avant tout, commencer par lire les messages d'erreur...
Comme tu peux le voir;. ça n'a rien ( mais alors vraiment rien..) à voir avec la connexion à la bdd, pdo.... (c'est pour ça que j'ai déplacé ta question qui se trouvait dans le forum mysql vers le forum php )

Bref.. ou mais heuu.. comme tu le dis ... avant tout... faut déjà juste lire .... en général ça aide à comprendre où se trouve les soucis...

Bonne journée.
Messages postés
12
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
19 janvier 2021

Merci Jordane,
Avec humour (partagé, j'espère) je te répondrai "on peut pas vivre avant d'avoir vécu", donc encore merci de ton activité pédagogique!

Le fichier connexionBDD.php contient les infos de connexion, donc si en local c'est:
<?php
$PARAM_hote = 'localhost';
$PARAM_port = '3306';
$PARAM_nom_bd = 'nomdemabase';
$PARAM_utilisateur = 'root';
$PARAM_mot_passe = '';
?>


dans la partie publique (dossier racine) où se trouve connexionBDD.php, page-de-depart.php et securite.php, il y a une autre page qui utilise la BDD sans passer par l'espace membre et donc j'ai repris le même code d'appel à la BDD pour page-de-depart.php (je répète: page-de-destination.php qui est la page d'accès à l'espace membre est dans un autre dossier, un sous-dossier du précédent, appelé membres, les deux fichiers, page-de-depart.php et page-de-destination.php, ne sont pas dans le même dossier)

J'ai bien vérifié (2 fois): il y a bien le fichier securite.php dans le dossier dit racine et il n'y est pas dans le sous-dossier membres.

Donc si je traduit bien ta demande (?) j'ajoute en haut du fichier page-de-depart.php le code:
<?php
// Fichier D:\fichier-de-depart.php

// pour tester.. on va regarder si le fichier existe
$fileSecurite = 'securite.php';
if(!file_exists($fileSecurite)){
  echo " Fichier " . $fileSecurite . " manquant ou mal ortographié !!";
  exit;}?>


réponse:
Fichier ../securite.php manquant ou mal ortographié !!

Je ne suis pas sûr de la "traduction" de ton code (je n'ai pas compris : __DIR __):
$fileSecurite = __DIR __ . '/securite.php';
sachant que securite.php est dans le même dossier que le fichier page-de-depart.php

J'ai essayé (par dépit) pour la ligne 5:
$fileSecurite = .'/securite.php';
mais là j'ai Parse error: syntax error, unexpected '.' in D:\page-de-depart.php on line 5
ET:
$fileSecurite = '/securite.php';
même réponse:
Fichier ../securite.php manquant ou mal ortographié !!

Cordialement,

A+

jh_kd
Messages postés
12
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
19 janvier 2021

Juste un mot de plus, je viens de faire "restart all services" puis dans local host je reteste:
avec le bout de code : $fileSecurite = 'securite.php'; pour page-de-depart.php, la réponse :
il n'y a plus : Fichier ../securite.php manquant ou mal ortographié !!
mails il revient à (mais avec des numéros différents):

( ! ) Warning: require(../securite.php): failed to open stream: No such file or directory in D:\fichier-de-depart.php on line 1
Call Stack
# Time Memory Function Location
1 0.0001 406432 {main}( ) ...\fichier-de-depart.php:0
2 0.0072 464008 include( 'D:\fichier-de-depart.php' ) ...\fichier-de-depart.php:94

( ! ) Fatal error: require(): Failed opening required '../security.php' (include_path='.;C:\php\pear') in D:\membres\fichier-de-destination.php on line 1
Call Stack
# Time Memory Function Location
1 0.0001 406432 {main}( ) ...\fichier-de-depart.php:0
2 0.0072 464008 include( 'D:\membres\fichier-de-destination.php' ) ...\fichier-de-depart.php:94

Mystère!

JH
Messages postés
31089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 193 >
Messages postés
12
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
19 janvier 2021

peux-tu me montrer le code complet de tes différents fichiers en précisant pour chacun d'eux, le nom et leur emplacement sur ton ordi.

j'espère également, que tu as bien copié collé les codes que je t'ai donné, j'ai l'impression que tu as essayé de les réécrire à ta sauce ... Ce n'est pas ce que je t'ai demandé... Et on ne va pas s'en sortir si tu le fais comme ça...
Messages postés
31089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 193
On recommence ..

( avant tout.. si une instruction ne te parle pas... google est ton ami .. il te suffit de chercher, par exemple PHP __DIR__ pour voir ç quoi ça sert )

Donc

<?php 
// ceci est le  Fichier connexionBDD.php

/******************Config***********************/
$v_editor_name = "aaaaa";
$v_editor_email = "bbbbbb";
$url = "cccccc";
$v_web_name = "dddd";
/**********************************************/

$PARAM_hote = 'localhost';
$PARAM_port = '3306';
$PARAM_nom_bd = 'nomdemabase';
$PARAM_utilisateur = 'root';
$PARAM_mot_passe = '';

try {
   $connexion =new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bd .';charset=utf8',$PARAM_utilisateur, $PARAM_mot_passe);
  // Activation des erreurs PDO
  $connexion ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $connexion ->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (Exception $e) {
    echo 'Erreur : ' . $e->getMessage() . '<br />';
    echo 'N° : ' . $e->getCode();
}
?> 


<?php
// Fichier D:\fichier-de-depart.php

// pour tester.. on va regarder si le fichier existe
$fileSecurite = __DIR __ . '/securite.php';
if(!file_eixsts($fileSecurite)){
  echo " Fichier " . $fileSecurite . " manquant ou mal ortographié !!";
  exit;
}

require_once  __DIR __ . '/securite.php';

// Puis le reste du code de cette page




<?php  
// Fichier D:\membres\fichier-de-destination.php

require_once __DIR__ "/../securite.php";


// puis le reste du code ...



Tu n'as que des copier/coller à faire .... rien de plus.. rien de moins...



Messages postés
31089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 193
Il serait pas mal .. de nous faire une capture écran de ton explorateur windows ouvert sur la liste de tes fichiers...
histoire qu'on puisse vérifier leur nom exact ...


NB: Pense à afficher l'extension des fichiers dans ton explorateur
Messages postés
12
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
19 janvier 2021

Bonjour,

Ah, merci vivement, il ne m'était pas venu à l'idée que dans __DIR __ . '/securite.php', __DIR __ était une constante magique (je cherchais une manière d'écrire un directory= dossier en Anglais!).
J'ai tout repris intégralement, et là:

avec, dans fichier-de-depart.php, à la ligne 29 (après le test d'existence)

require_once __DIR __ . "/securite.php";

j'ai

Parse error: syntax error, unexpected '__' (T_STRING) in D:\fichier-de-depart.php on line 29

donc sauf misinterprétation de ma part il confirme bien que securite.php existe dans le dossier racine, puis il teste le require_once et là le message d'erreur je ne le situe pas (d'après Google et CCM il y aurait un souci d'échappement ou de guillemets ou un manque de ' ; ' à la fin de la ligne précédente.
J'ai vérifié 10 fois mais ce n'est pas le cas pour ces 3 erreurs.

Ce qui m'étonne c'est l'ajout du code require_once __DIR __ . "/securite.php"; car d'après mon modèle l'appel de securite.php ne concerne que le fichier de destination dans l'espace membre et pas fichier-de-depart.php.

Bon si je commente cette ligne dans fichier-de-depart.php:
//require_once __DIR __ . "/securite.php";

alors je reviens à une erreur pour la ligne 1 dans fichier-de-destination.php (attention ce n'est plus fichier-de-depart.php, il a sauté directement de fichier-de-depart.php à fichier-de-destination.php!):

Parse error: syntax error, unexpected '"/../securite.php"' (T_CONSTANT_ENCAPSED_STRING) in D:\membres\fichier-de-destination.php on line 1

et dans ce fichier-de-destination.php du dossier membre la ligne 1 est maintenant:
<?php require_once __DIR__ "/../securite.php";?>
et avant c'était à la place: <?php require ("../securite.php");?>

j'ai cherché dans Google (et CCM) et l'erreur T_CONSTANT_ENCAPSED_STRING semble concerner les lignes avant sauf que là c'est la ligne 1! ou bien un souci de guillemet simple ou double (là ils sont tous les deux doubles, mais j'ai aussi essayé avec les deux en simple).

Voilà,

A+

cordialement
jh_kd

PS:
voici le code ajouté dans fichier de départ pour éviter tout malentendu, de la ligne 22 à 29 incluse:

// Fichier D:\fichier-de-depart.php

// pour tester.. on va regarder si le fichier existe
$fileSecurite = "securite.php";
if(!file_exists($fileSecurite)){
  echo ' Fichier ' . $fileSecurite . ' manquant ou mal orthographié !!';
  exit;}
//require_once __DIR __ . "/securite.php";


et bien sûr dans l'explorateur il n'y a pas d'erreur tu peux me faire confiance... pas de boulette de ce type! (mais je peux faire un jpg avec les suffixes si tu insistes... je comprend que cela rende perplexe)
Messages postés
31089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 193
il y a un point qui a sauté
<?php require_once __DIR__ "/../securite.php";?>


à corriger par
<?php require_once __DIR__  . "/../securite.php";?>
Messages postés
12
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
19 janvier 2021

Là il y a quelque chose qui s'affiche. Progrès! Merci.
En effet quand je clique sur fichier-de-depart.php dans localhost, immédiatement c'est le fichier d'échec login_failed.php qui s'affiche.

Donc c'est pour cela (à tort) que j'avais mis le fil dans mysql car j'avais l'impression que la BDD n'était pas accrochée.
En fait il semble que "il fait comme si il contournait" l'étape de saisie de ID et PW ou celle de l'inscription nouvelle pour dire tout de suite "pas bons ID ou PW" ou pas bon "inscription" (etc.), ce que normalement securite.php (code déjà cité entièrement plus haut dans ce fil) et la suite de fichier-de-depart.php (voir le code ci-après) sont censés vérifier.

Si je clique directement sur securite.php dans localhost, immédiatement c'est le fichier d'échec login_failed.php qui s'affiche aussi (pareil).

Si je clique directement sur check_user.php (le 1er vérifié dans le code -copié plus loin ici- de fichier-de-depart.php, aussi dans le dossier racine) dans localhost, là j'ai le message d'erreur suivant:

( ! ) Notice: Undefined index: user in D:\check_user.php on line 4
Call Stack
# Time Memory Function Location
1 0.0078 409344 {main}( ) ...\check_user.php:0

( ! ) Notice: Undefined variable: pdo in D:\check_user.php on line 5
Call Stack
# Time Memory Function Location
1 0.0078 409344 {main}( ) ...\check_user.php:0

( ! ) Fatal error: Uncaught Error: Call to a member function query() on null in D:\check_user.php on line 5
( ! ) Error: Call to a member function query() on null in D:\check_user.php on line 5
Call Stack
# Time Memory Function Location
1 0.0078 409344 {main}( ) ...\check_user.php:0

Et les codes des lignes 4 et 5 de check_user.php sont:
$sql = "SELECT * FROM membersbase WHERE user LIKE '".trim($_POST['user'])."' AND active = '1'";
$row = $pdo->query($sql)->fetch(PDO::FETCH_ASSOC);


Peut-être y-a-t'il là un problème PDO???

J'aurai tendance à le penser car pour un autre fichier validation_inscription.php plus loin dans le code de fichier-de-depart.php j'ai aussi des erreurs du même type pour le code:
$sql = "SELECT COUNT(1) FROM membersbase WHERE email_regis LIKE '".strtolower($_SESSION['registration']['email_regis'])."'";
$number = $pdo->query($sql)->fetchColumn();


et idem pour renew_password.php:
$sql = "SELECT * FROM membersbase WHERE email_corresp LIKE '".$email_user."' AND active = '1'";
$row = $pdo->query($sql)->fetch();


Donc pour la suite de fichier-de-depart.php voici le code:
//le fichier suivant ne contient que du html
require('headermysql.php');

/************************************************************************/
if (isset($_SESSION['action'])) {
	$_POST['action'] = $_SESSION['action'];
	unset($_SESSION['action']);
}
/************************************************************************/
if (isset($_POST['action'])) {
	switch ($_POST['action']) {

		case "Login":
			require('check_user.php');
			break;

		case "Registration":
			require('form_registration.php');
			break;

		case "Validation":
			require('validation_inscription.php');
			if (isset($_SESSION['message'])) {
				// Redirect
				$_SESSION['action'] = "Registration";
				header("Location: ".$_SERVER['PHP_SELF']);
				exit;
			} else {

				// Success
			}
			break;

		case "Password_forgotten":
			echo "<form method='post'>";
			echo "Email: <input type='text' name='email' /><br />";
			echo "<input type='submit' name='action' value='Renew_password' /><br />";
			echo "</form>";
			break;

		case "Renew_password":
			require('renew_password.php');
			break;

		default:
			// Print & delete messages
			if (isset($_SESSION['message'])) {
				echo $_SESSION['message']."<br />";
				unset($_SESSION['message']);
			}

			break;
	}
}

/********************************************************************************************************/
if (isset($_SESSION['user']['user'])) {

	// Authorized visitor
	//include('member/page_authorized_visitor.php');
	include("membre/fichier-de-destination.php");
	
} else {

	// Unauthorized visitor
	require('login.php');
	//include('page_unauthorized_visitor.php');
	include('login_failed.php');

}

//le fichier suivant ne contient que du html	
require('footermysql.php');
?>


J'espère que cela peut aider.
Si tu vois quelque chose qui cloche... à part mes supputations???

Merci
Bien cordialement
jh_kd
Messages postés
31089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 193
nous coller quelques lignes de code prises dans les fichiers par-ci par-là ne nous permet pas de nous rendre compte de leur imbrication ni de voir d'éventuelles autres erreurs...
Je te le redemande, il faut que tu nous postes le code complet de chaque fichier en précisant bien de quel fichier il s'agit à chaque fois....
Messages postés
12
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
19 janvier 2021

Bonjour,

C'est vraiment sympa de regarder le code des pages concernées !
Et je vais les poster sans aucun problème...

Mais avant pour ma pédagogie, j'ai 2 questions, stp:

1- j'ai essayé de voir/corriger les (petites) erreurs de requête sql dans mon (nouveau) PHPmyadmin (5.0.2) car je viens de changer d'ordi (Windows10).
Un exemple:
$sql = "SELECT * FROM membersbase WHERE user LIKE '".trim($_POST['user'])."' AND active = '1'";
$row = $pdo->query($sql)->fetch(PDO::FETCH_ASSOC);


Je teste différentes corrections dans Phpmyadmin et la suivante marche
SELECT * FROM membersbase WHERE user LIKE '.trim($_POST["user"]).' AND active = '1'


mais la réponse est:
MySQL a retourné un résultat vide (c'est à dire aucune ligne). (traitement en 0,0014 seconde(s).)

Est-ce que c'est parce qu'il ne peut pas trouver ($_POST["user"]) qui est une variable de session ou bien parce que le code suivant de PDO n'est pas bon :
$row = $pdo->query($sql)->fetch(PDO::FETCH_ASSOC);


2- je n'ai un appel (connexion) à la base de données que dans 2 fichiers (fichier-de-depart.php et fichier-de-destination.php) par dans le premier:

/******************Config***********************/
$v_editor_name = "aaaaa";
$v_editor_email = "bbbbbb";
$url = "cccccc";
$v_web_name = "dddd";
/**********************************************/

$PARAM_hote = 'localhost';
$PARAM_port = '3306';
$PARAM_nom_bd = 'nomdemabase';
$PARAM_utilisateur = 'root';
$PARAM_mot_passe = '';

try {
   $connexion =new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bd .';charset=utf8',$PARAM_utilisateur, $PARAM_mot_passe);
  // Activation des erreurs PDO
  $connexion ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $connexion ->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (Exception $e) {
    echo 'Erreur : ' . $e->getMessage() . '<br />';
    echo 'N° : ' . $e->getCode();
}


aurais-je dû mettre aussi ce code en tête dans les autres qui sont liés à fichier-de-depart.php par le processus de login/inscription/PW oublié???

Merci (pas obligé de répondre si cela prend du temps... je pense poster tous les codes concernés dans 2 ou 3 heures)


Bien cordialement,

jh_kd
Messages postés
31089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 193
oula....
Visiblement il y a pleins de choses qui ne sont pas claires pour toi ...
Déjà ..
$_POST .. ce n'est pas une variable de session... mais une variable générée lors de l'envoi ( du "submit") d'un formulaire
Les variables de session.. c'est $_SESSION

Ensuite, dans une requête SQL, si tu cherches une valeur exacte .. ce n'est pas avec un LIKE mais avec le symbole égale =
Si tu veux faire une recherche "partielle", dans ce cas le LIKE s'utilisera avec des caractères JOKER ( des % )
Exemple
Je cherche jordane dans le where
$sql = "SELECT * FROM membersbase WHERE user ='jordane"

Je cherche les personnes dont le "user" commence par jo
$sql = "SELECT * FROM membersbase WHERE user LIKE 'jo%'


Ensuite, je t'ai donné un lien pour bien écrire/gérer les éventuels souci dans les requêtes via PDO
(je te le redonne...)
https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
Il faudrait l'appliquer !!

Pour le reste, j'attendrais d'avoir la liste de tes fichiers, leurs noms, leurs emplacement .. et leurs contenus pour essayer de dépatouiller tout ça...
Car ton code semble bien bordélique....
Messages postés
12
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
19 janvier 2021

Rebonjour,

Eh oui on ne peut rien te cacher, mais je fais de mon mieux poiur adapter scrupuleusement et je travaille dur!

Les fichiers concernés sont les suivants (tous dans le dossier racine... je n'ai pas repris fichier-de-destination.php qui est la page d'accueil des membres dans le sous-dossier 'membre' commençant par <?php require_once __DIR__ ."/../security.php";?>
//before <?php require ("../security.php");?>)

Comme promis voici les codes complets des fichiers (cela fait beaucoup mais c'est un projet complet).
fichier-de-depart.php
renew_password.php
reset_password.php
save_new_email.php
save_new_password.php
securite.php
validation_inscription.php
check_user.php
compliance.php
form_registration.php

Juste quelques remarques préalables:
- le code de form_registration.php est partiel : il ne reprend que le code de son début, le reste est la suite du formulaire qui marche avec accès à la BDD
- le code login.php n'est que du html5 (explication du processus), non repris
- le code form_conditions.php n'est que du html5 (règles d'éthiques), non repris

Les codes fichier par fichier dans le même ordre sont:

fichier-de-depart.php
<?php
/******************Config***********************/
$v_editor_name = "aaaaa";
$v_editor_email = "bbbbbb";
$url = "cccccc";
$v_web_name = "dddd";
/**********************************************/

$PARAM_hote = 'localhost';
$PARAM_port = '3306';
$PARAM_nom_bd = 'nomdemabase';
$PARAM_utilisateur = 'root';
$PARAM_mot_passe = '';

try {
  $connexion = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
   // Activation des erreurs PDO
  $connexion ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
 $connexion ->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (Exception $e) {
    echo 'Erreur : ' . $e->getMessage() . '<br />';
    echo 'N° : ' . $e->getCode();
}
// Fichier D:\fichier-de-depart.php

// pour tester.. on va regarder si le fichier existe
$fileSecurite = "securite.php";
if(!file_exists($fileSecurite)){
  echo ' Fichier ' . $fileSecurite . ' manquant ou mal ortographié !!';
  exit;}
//require_once __DIR __ . "/securite.php";

//le fichier suivant est codé Html5
require('headermysql.php');

/************************************************************************/
if (isset($_SESSION['action'])) {
	$_POST['action'] = $_SESSION['action'];
	unset($_SESSION['action']);
}
/************************************************************************/
if (isset($_POST['action'])) {
	switch ($_POST['action']) {

		case "Login":
			require('check_user.php');
			break;
			
//added new
	case "Logout":
		unset($_SESSION['user']);
		header("Location: ".$_SERVER['PHP_SELF']);
		exit;

	case "Save_new_email":
		require('save_new_email.php');
		break;

	case "Save_new_password":
		require('save_new_password.php');
		break;	
//added end

		case "Registration":
			require('form_registration.php');
			break;

		case "Validation":
			require('validation_inscription.php');
			if (isset($_SESSION['message'])) {
				// Redirect
				$_SESSION['action'] = "Registration";
				header("Location: ".$_SERVER['PHP_SELF']);
				exit;
			} else {

				// Success
			}
			break;

		case "Password_forgotten":
			echo "<form method='post'>";
			echo "Email: <input type='text' name='email' /><br />";
			echo "<input type='submit' name='action' value='Renew_password' /><br />";
			echo "</form>";
			break;

		case "Renew_password":
			require('renew_password.php');
			break;

		default:
			// Print & delete messages
			if (isset($_SESSION['message'])) {
				echo $_SESSION['message']."<br />";
				unset($_SESSION['message']);
			}

			break;
	}
}

/********************************************************************************************************/
if (isset($_SESSION['user']['user'])) {

	// Authorized visitor
	//include('page_authorized_visitor.php');
	include("membre/fichier-de-destination.php");
	
} else {

	// Unauthorized visitor
	require('login.php');
	//include('page_unauthorized_visitor.php');
	include('login_failed.php');

}

//le fichier suivant n'est que du html5
	
require('footermysql.php');
?>


renew_password.php
<?php	
// Search email
$email_user = trim(strtolower($_POST['email']));

$sql = "SELECT * FROM membersbase WHERE email_corresp LIKE '".$email_user."' AND active = '1'";
$row = $pdo->query($sql)->fetch();
if ($row) {

	// Create & save code
	$code = uniqid();
	$sql = "UPDATE membersbase SET code = '".$code."' WHERE Rk_members = '".$row['Rk_members']."'";
	$save = $pdo->query($sql);

	// Email for reset password
	$from = $v_editor_name." <".$v_editor_email.">";
	$subject = "Reset password";
	$url_reset_password = $v_url."/reset_password.php?code=".$code;

	$headers = "Mime-Version: 1.0\r\n";
	$headers .= "Content-type: text/html; charset=UTF-8\r\n";
	$headers .= "Content-Transfer-Encoding: 7bit\r\n";
	$headers .= "From: ".$from;

	$text = "Hello ".$row['first_name']." ".$row['last_name']."<br><br>";
	$text .= "To reset your password, you must click on following link, thank you.<br><br>";
	$text .= "<a href='".$url_reset_password."'>Reset password</a><br><br>";
	$text .= "Best regards<br>";
	$text .= $from;

	mail($email_user, $subject, $text, $headers);

	echo "Sent Email to $email_user";

	// Redirect
	//header("Location: ".$_SERVER['PHP_SELF']);
	//exit;

} else {

	// Email not exists
	echo "Email $email_user does not exist or is not active";

	// Redirect
	//header("Location: ".$_SERVER['PHP_SELF']);
	//exit;

}
?>


reset_password.php
<?php

// Start session
// Receive request from to reset password
// Receive GET code
session_start();
	error_reporting(E_ALL);
    $PARAM_hote = 'localhost';
	$PARAM_port = '3306';
	$PARAM_nom_bd = 'nomdemabase';
	$PARAM_utilisateur = 'root';
	$PARAM_mot_passe = '';
	// Start session
    try {
        $connexion = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe, array(
	PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    } catch (Exception $e) {
        echo 'Erreur : ' . $e->getMessage() . '<br />';
        echo 'N° : ' . $e->getCode();
    }
	// Header seulemnt html5
	require('headermysql.php');

if ($_POST['action'] == "validation") {

	if (strlen($_POST['new_password']) < 7 || strlen($_POST['new_password'] > 16)) {
		echo "<p>Invalid length password (7-16)</p>";

	} else {

		// New password is valid
		$new_password = password_hash(trim($_POST['new_password']), PASSWORD_DEFAULT);
		$sql = "UPDATE membersbase SET password = '".$new_password."', code = '' WHERE code = '".$_POST['code']."'";
		$pdo->query($sql);

		$_SESSION['message'] = "<p>Success! Password changed</p>";
		// erreur probable due à $v_url qu'il faudrait changer en "localhost" ou "killidatamysql" à header("Location: ".$v_url);
		header("Location: ".$v_url);
		exit;
		
	}


} else {

	$sql = "SELECT * FROM membersbase WHERE code = '".$_GET['code']."'";
	//erreur code pour $row = $pdo->query($sql)->fetch();
	$row = $pdo->query($sql)->fetch();

	if ($row) {

		// Exists code
		//probable error for if ($row['active'] == 1) {
		if ($row['active'] == 2) {

			// Active
			?>
			<form method="post">

			<input type="hidden" name="code" value="<?php echo $_GET['code']; ?>">

			<div class="input-group">
				<div class="input-group-prepend">
		    		<span class="input-group-text">New Password</span>
				</div>
				<input type="text" placeholder="8-12 Characters" class="form-control col-4" name="new_password">
			</div>

			<br>
			<button type="submit" name="action" value="validation" class="btn btn-primary centro">Submit</button>
			<br>

			</form>
			<?php

		} else {
			
			// Not active
			echo "<p>Member not active</p>";

		}

	} else {

		// Incorrect code
		echo "<p>Incorrect code received</p>";

	}

}

// Footer
//require('footermysql.php');
?>



save_new_email.php
<?php
$new_email = strtolower(trim($_POST['new_email']));

// Check if e-mail is valid
if (filter_var($new_email, FILTER_VALIDATE_EMAIL)) {

	// Check not repeated
	$sql = "SELECT COUNT(1) FROM membersbase WHERE email_corresp = '".$new_email."'";
	$number = $pdo->query($sql)->fetchColumn();

	if ($number < 1) {

		$sql = "UPDATE membersbase SET email_corresp = '".$new_email."' WHERE Rk_members = '".$_SESSION['user']['Rk_members']."'";
		$pdo->query($sql);

		echo "New email ".$new_email." recorded";

	} else {

		echo "Email ".$new_email." Email already used";

	}

} else {

	echo "Email ".$new_email." invalid";

}
?>


save_new_password.php
<?php
$new_password = trim($_POST['new_password']);

// Check length
if (strlen($new_password) >= 7 && strlen($new_password) <= 16) {

	$new_password = password_hash($new_password, PASSWORD_DEFAULT);

	$sql = "UPDATE membersbase SET password = '".$new_password."' WHERE Rk_members = '".$_SESSION['user']['Rk_members']."'";
	$pdo->query($sql);

	echo "New password recorded";

} else {

	echo "New password is invalid. Its length must be between 7 and 16 characters";

}
?>


securite.php
<?php
//***********Configuration*****************/
// Log navigation for authorized_visitor
$file_log_navigation = "log_authorized_visitor.txt";

// Page for unauthorized_visitor
//$page_no_login = "page_unauthorized_visitor.php";
$page_no_login = "login_failed.php";

/* On all pages only for authorized_visitor in subdirectory membre:
<?php require("securite.php"); ?>
*/

//*****************************************/
//session_start();

if (isset($_SESSION['member'])) {

	// Navigation log

	// 2020-12-31 23:59:59	217.56.78.123	Internet Explorer	127	Manuel López (Spain)	xxxx_yyyy.php
	
	$register = $date('Y-m-d H:m:s')."\t";
	$register .= $_SERVER['REMOTE_ADDR']."\t";
	$register .= $_SERVER['HTTP_USER_AGENT']."\t";
	$register .= $_SESSION['user']['Rk_members']."\t";
	$register .= $_SESSION['user']['first_name']." ";
	$register .= $_SESSION['user']['last_name']." (";
	$register .= $_SESSION['user']['country'].")\t";
	$register .= __FILE__;
	
	file_put_contents($file_log_navigation, $register, FILE_APPEND);

} else {
	
	// No login
	// header('Location: '$page_no_login);
	header('Location: '.$page_no_login);
	exit;
}

session_destroy();
?>


validation_inscription.php
<?php

// Trim all values and save in session
foreach ($_POST['registration'] as $variable => $value) {
	$_SESSION['registration'][$variable] = trim($value);
}

// First Name
if (strlen($_SESSION['registration']['first_name']) < 2) {
	$_SESSION['message'] = "First Name too short<br>";
}

// Last Name
if (strlen($_SESSION['registration']['last_name']) < 2) {
	$_SESSION['message'] .= "Last Name too short<br>";
}

// check E-mail for registration
if (!filter_var($_SESSION['registration']['email_regis'], FILTER_VALIDATE_EMAIL)) {
	$_SESSION['message'] .= "Invalid registration e-mail<br>";
}

// E-mail for registration already used
$sql = "SELECT COUNT(1) FROM membersbase WHERE email_regis LIKE '".strtolower($_SESSION['registration']['email_regis'])."'";
$number = $pdo->query($sql)->fetchColumn();
if ($number == 1) {
	$_SESSION['message'] .= "E-mail registration already used<br>";
}

// check E-mail for corespondence
if (!filter_var($_SESSION['registration']['email_corresp'], FILTER_VALIDATE_EMAIL)) {
	$_SESSION['message'] .= "Invalid correspondence e-mail<br>";
}

// E-mail for correspondence already used
$sql = "SELECT COUNT(1) FROM membersbase WHERE email_corresp LIKE '".strtolower($_SESSION['registration']['email_corresp'])."'";
$number = $pdo->query($sql)->fetchColumn();
if ($number == 1) {
	$_SESSION['message'] .= "E-mail for correspondence already used<br>";
}

// Username = ID
if (strlen($_SESSION['registration']['user']) < 5 || strlen($_SESSION['registration']['user'] > 20)) {
	$_SESSION['message'] .= "Invalid length user (5-20)<br>";
}

// Username (ID) already used
$sql = "SELECT COUNT(1) FROM membersbase WHERE user LIKE '".$_SESSION['registration']['user']."'";
$number = $pdo->query($sql)->fetchColumn();
if ($number == 1) {
	$_SESSION['message'] .= "Username (ID) already selected, please choose another ID<br>";
}

// check if useful to harmonize min-max lengths of ID and PW like Invalid length for password (7 characters or more, up to 15 characters)
if (strlen($_SESSION['registration']['password']) < 7 || strlen($_SESSION['registration']['password'] > 16)) {
	$_SESSION['message'] .= "Invalid length for password (7 characters or more, up to 15 characters)<br>";
}

if ($_SESSION['registration']['day_birthday'] == "--"
	|| $_SESSION['registration']['month_birthday'] == "--"
	|| $_SESSION['registration']['year_birthday'] == "--" ) {
		$_SESSION['message'] .= "Invalid Date of Birthday<br>";
}

if ($_SESSION['registration']['country'] == "--") {
	$_SESSION['message'] .= "Country not selected<br>";
}

if (strlen($_SESSION['registration']['address']) < 20) {
	$_SESSION['message'] .= "Postal Address too short<br>";
}

if (strlen($_SESSION['registration']['profile']) < 20) {
	$_SESSION['message'] .= "Profile too short<br>";
}

if (strlen($_SESSION['registration']['motivations']) < 5) {
	$_SESSION['message'] .= "Motivations too short<br>";
}

// new item; publicized profile or not
if ($_SESSION['registration']['confirmation'] == "--") {
	$_SESSION['message'] .= "Online presentation of profile not selected<br>";
}

// if ($_SESSION['registration']['type_of_activity'] == "--") {
if ($_SESSION['registration']['type_of_activity'] == "--") {
	$_SESSION['message'] .= "Type of activity not selected<br>";
}

if (!isset($_SESSION['message'])) {

	//$_SESSION['registration']['code'] = uniqid();
	$password = password_hash($_SESSION['registration']['password'], PASSWORD_DEFAULT);
	$birthday = $_SESSION['registration']['year_birthday']."-".$_SESSION['registration']['month_birthday']."-".$_SESSION['registration']['day_birthday'];

// check if active is 0 or 1 by default
	$sql = "INSERT INTO membersbase SET
				active = '1',
				first_name = '".$_SESSION['registration']['first_name']."',
				last_name = '".$_SESSION['registration']['last_name']."',
				email_regis = '".strtolower($_SESSION['registration']['email_regis'])."',
				email_corresp = '".strtolower($_SESSION['registration']['email_corresp'])."',
				user = '".$_SESSION['registration']['user']."',
				password = '".$password."',
				birthday_date = '".$birthday."',
				country = '".$_SESSION['registration']['country']."',
				full_present_postal_address = '".$_SESSION['registration']['address']."',
				profile = '".$_SESSION['registration']['profile']."',
				motivations = '".$_SESSION['registration']['motivations']."',
				confirmation = '".$_SESSION['registration']['news']."',
				type_of_activity = '".$_SESSION['registration']['activity']."',
				type = 'standard',
				datetime_registration = NOW(),
				ip_registration = '".$_SERVER['REMOTE_ADDR']."'";
	$pdo->query($sql);

	// Message OK
	echo "<p>You have been pre-registered.<br>";
	echo "We shall send you an acceptance or non-acceptance e-mail to ".strtolower($_SESSION['registration']['email_corresp'])."<br>";
	echo "If within a few days you do not receive that e-mail, check your spam folder.</p>";

	// Send email to admin team
	$from = $v_editor_name." <".$v_editor_email.">";
	$subject = "New Inscription in ".$v_web_name;
	$to = $v_editor_name." <".$v_editor_email.">";
	
	$headers = "Mime-Version: 1.0\r\n";
	$headers .= "Content-type: text/html; charset=UTF-8\r\n";
	$headers .= "Content-Transfer-Encoding: 7bit\r\n";
	$headers .= "From: ".$from."\r\n";

	$text = "First name: ".$_SESSION['registration']['first_name']."<br>";
	$text .= "Last name: ".$_SESSION['registration']['last_name']."<br>";
	$text .= "Email regis: ".strtolower($_SESSION['registration']['email_regis'])."<br>";	
	$text .= "Email corresp: ".strtolower($_SESSION['registration']['email_corresp'])."<br>";
	$text .= "User: ".$_SESSION['registration']['user']."<br>";
	$text .= "Password: ".$_SESSION['registration']['password']."<br>";
	$text .= "Birthday: ".$birthday."<br>";
	$text .= "Country: ".$_SESSION['registration']['country']."<br>";
	$text .= "Postal_address: ".$_SESSION['registration']['address']."<br>";
	$text .= "Profile: ".$_SESSION['registration']['address']."<br>";	
	$text .= "Motivations: ".$_SESSION['registration']['motivations']."<br>";
	$text .= "Confirmation: ".$_SESSION['registration']['news']."<br>";
	$text .= "Type of activity: ".$_SESSION['registration']['activity']."<br>";

	mail($to, $subject, $text, $headers);

	// Delete data users
	unset($_SESSION['registration']);
	unset($_SESSION['message']);
	
}
?>


check_user.php
<?php

// Check user & password
$sql = "SELECT * FROM membersbase WHERE user LIKE '".trim($_POST['user'])."' AND active = '1'";
$row = $pdo->query($sql)->fetch(PDO::FETCH_ASSOC);
if ($row) {

	// Exists user and is active (1)
	// Check password
	if (password_verify($_POST['password'], $row['password'])) {

		// Password correct -> // Store data in session
		foreach ($row as $col => $value) {
			$_SESSION['user'][$col] = $value;
		}

		// Access log
		$file_log_access = "log_authorized_visitor.txt";

		// 2020-12-31 23:59:59	217.56.78.123	Internet Explorer	127	Manuel López (Spain)

		$register = date('Y-m-d H:m:s')."\t";
		$register .= $_SERVER['REMOTE_ADDR']."\t";
		$register .= $_SERVER['HTTP_USER_AGENT']."\t";
		$register .= $_SESSION['user']['Rk_members']."\t";
		$register .= $_SESSION['user']['first_name']." ";
		$register .= $_SESSION['user']['last_name']." (";
		$register .= $_SESSION['user']['country'].")";

		file_put_contents($file_log_access, $register, FILE_APPEND);

		header("Location: ".$_SERVER['PHP_SELF']);		
		exit;	

	} else {

		// User and password incorrect
		echo "Password is incorrect";

	}

}else{

	// User & password incorrect
	echo "User does not exists or user is not active";

}
?>


compliance.php
<?php

// Start session
// Receive request to accept conditions
// Receive GET code
session_start();
	error_reporting(E_ALL);
$PARAM_hote = 'localhost';
$PARAM_port = '3306';
$PARAM_nom_bd = 'nomdemabase';
$PARAM_utilisateur = 'root';
$PARAM_mot_passe = '';
	// Start session
    try {
        $connexion = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe, array(
	PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    } catch (Exception $e) {
        echo 'Erreur : ' . $e->getMessage() . '<br />';
        echo 'N° : ' . $e->getCode();
    }
	// Header, slt html5
	require('headermysql.php');

if ($_POST['accept'] == "Sign") {

	if ($_POST['condition1'] == '1' && $_POST['condition2'] == '1' && $_POST['condition3'] == '1') {

		$sql = "UPDATE membersbase SET active = '1', code = '' WHERE code = '".$_POST['code']."'";
		$pdo->query($sql);

		$_SESSION['message'] = "<p>Your application for membership is complete. We will reply shortly</p>";
		header("Location: ".$v_url);
		exit;

	} else {

		// Not accepted all conditions
		echo "<p>You have not accepted all required conditions</p>";

	}

} else {

	// Enter first

	$sql = "SELECT * FROM membersbase WHERE code = '".$_GET['code']."'";
	//erreur code pour $row = $pdo->query($sql)->fetch(PDO::FETCH_ASSOC);
	$row = $pdo->query($sql)->fetch(PDO::FETCH_ASSOC);

	if ($row) {

		switch ($row['active']) {

			case '1':
				// is not it '0'?
				// Already active wait confirm
				echo "<p>User waiting for admin staff confirmation… Welcome. You will be an active new member, once security issues are solved by admin staff… if you do not receive an e-mail with warning of a possible problem, it usually takes less than 24 hours to activate your account (please try to enter with ID and PW after that, of if not successful, be more patient !</p>";
				break;

			case '2':
				// is not it '1'?
				// Already active
				echo "<p>User active</p>";
				break;				
			
			default:
				require('form_conditions.php');
				break;
		}

	} else {

		// Incorrect code
		echo "<p>Invalid code received</p>";

	}

}

// le fichier suivant est seulement html5
//require('footermysql.php');
?>


form_registration.php
<?php

session_start();

// Delete action
unset($_SESSION['action']);

// Asign values
if(!isset($_SESSION['registration']['first_name'])) $_SESSION['registration']['first_name'] = ""; 
if(!isset($_SESSION['registration']['last_name'])) $_SESSION['registration']['last_name'] = ""; 
if(!isset($_SESSION['registration']['email_regis'])) $_SESSION['registration']['email_regis'] = ""; 
if(!isset($_SESSION['registration']['email_corresp'])) $_SESSION['registration']['email_corresp'] = ""; 
if(!isset($_SESSION['registration']['user'])) $_SESSION['registration']['user'] = ""; 
if(!isset($_SESSION['registration']['password'])) $_SESSION['registration']['password'] = ""; 
if(!isset($_SESSION['registration']['day_birthday'])) $_SESSION['registration']['day_birthday'] = "";
if(!isset($_SESSION['registration']['month_birthday'])) $_SESSION['registration']['month_birthday'] = "";
if(!isset($_SESSION['registration']['year_birthday'])) $_SESSION['registration']['year_birthday'] = "";
if(!isset($_SESSION['registration']['country'])) $_SESSION['registration']['country'] = "";
if(!isset($_SESSION['registration']['full_present_postal_address'])) $_SESSION['registration']['full_present_postal_address'] = "";
if(!isset($_SESSION['registration']['profile'])) $_SESSION['registration']['profile'] = "";
if(!isset($_SESSION['registration']['motivations'])) $_SESSION['registration']['motivations'] = "";
if(!isset($_SESSION['registration']['activity'])) $_SESSION['registration']['activity'] = "";

// Print messages
if (isset($_SESSION['message'])) {
	echo "<p>".$_SESSION['message']."</p>";
	unset($_SESSION['message']);
}
?>

<form method="post">

<br>
<h3>Registration Form</h3>

	<div class="input-group">
		<div class="input-group-prepend">
    		<span class="input-group-text">First name (only usual name in daily practice) (if suitable or important, please state full list afterwards between brackets)</span>
		</div>
		<input type="text" placeholder="Minimum 2 characters" class="form-control col-4" name="registration[first_name]" value="<?php echo $_SESSION['registration']['first_name'] ?>">
	</div>

	<div class="input-group">		
		<div class="input-group-prepend">
    		<span class="input-group-text">Last name (only usual name in daily practice) (if suitable or important, please state full list afterwards between brackets)</span>
		</div>
		<input type="text" placeholder="Minimum 2 characters" class="form-control col-4" name="registration[last_name]" value="<?php echo $_SESSION['registration']['last_name'] ?>">
	</div>

	<div class="input-group">
		<div class="input-group-prepend">
    		<span class="input-group-text">E-mail for registration (preferably with name included in it, and, for professionals, it must be your official institutional address)</span>
		</div>
		<input type="text" placeholder="Email address" class="form-control col-4" name="registration[email_regis]" value="<?php echo $_SESSION['registration']['email_regis'] ?>">
	</div>
	
	<div class="input-group">
		<div class="input-group-prepend">
    		<span class="input-group-text">E-mail for correspondence (notably for professionals, if distinct from institutional), otherwise just copy herein Email for registration</span>
		</div>
		<input type="text" placeholder="Email address" class="form-control col-4" name="registration[email_corresp]" value="<?php echo $_SESSION['registration']['email_corresp'] ?>">
	</div>

	<div class="input-group">
		<div class="input-group-prepend">
    		<span class="input-group-text">Username (=ID) (a username with name then possibly initials is preferred, but not compulsory… beware, this cannot be changed afterwards)</span>
		</div>
		<input type="text" placeholder="5-20 Letters" class="form-control col-4" name="registration[user]" value="<?php echo $_SESSION['registration']['user'] ?>">
	</div>

	<div class="input-group">
		<div class="input-group-prepend">
    		<span class="input-group-text">Password (=PW) (upper and lower case are different) (this can be changed afterwards, any time, if 7 characters or more)</span>
		</div>
		<input type="password" placeholder="7-16 Characters" class="form-control col-4" name="registration[password]" value="<?php echo $_SESSION['registration']['password'] ?>">
	</div>

	<div class="input-group">
		<div class="input-group-prepend">
    		<span class="input-group-text">Date of birth (if confidential, mark only the actual year, plus month as 'January' and day as '01', then in practice it will become 1989-01-01)</span>
		</div>
		<select class="form-control col-2" name="registration[day_birthday]">
			<option value="--">--Day--</option>
			<?php for ($i=1; $i<=31; $i++) {
					echo '<option value="'.$i.'" ';
					if ($_SESSION['registration']['day_birthday'] == $i) echo 'selected';
					echo '>'.$i.'</option>';
			} ?>
		</select>
		<select class="form-control col-2" name="registration[month_birthday]">
			<?php $array_months = array('','January','February','March','April','May','June','July','August','September','October','November','December'); ?>
			<option value="--">--Month--</option>
			<?php for ($i=1; $i<=12; $i++) {
					echo '<option value="'.$i.'" ';
					if ($_SESSION['registration']['month_birthday'] == $i) echo 'selected';
					echo '>'.$array_months[$i].'</option>';
			} ?>
		</select>
		<select class="form-control col-2" name="registration[year_birthday]">
			<option value="--">--Year--</option>
			<?php for ($i=1920; $i<=date('Y'); $i++) {
					echo '<option value="'.$i.'" ';
					if ($_SESSION['registration']['year_birthday'] == $i) echo 'selected';
					echo '>'.$i.'</option>';
			} ?>
		</select>
	</div>

	<div class="input-group">
		<div class="input-group-prepend">
    		<span class="input-group-text">Country of Origin (NOT Country of Residence) (name in English)</span>
		</div>
		<select class="form-control col-5" name="registration[country]">
			<option value="--">--Country--</option>
			<?php
				//$sql = "SELECT country_full_english FROM countryform WHERE active = 1 ORDER BY country_full_english";
				$sql = "SELECT country_full_english FROM countryform ORDER BY country_full_english";
				$rows = $pdo->query($sql);
				foreach ($rows as $row) {
					echo '<option value="'.$row['country_full_english'].'" ';
					if ($_SESSION['registration']['country'] == $row['country_full_english']) echo 'selected';
					echo '>'.$row['country_full_english'].'</option>';
				}
			?>
		</select>
	</div>
	
	
// etc.

	<br>
	<h6 class="text-center bg-warning text-dark">All fields are required</h6>
	<button type="submit" name="action" value="Validation" class="btn btn-primary centro">Submit</button>
	<br>
</form>



Voilà

Encore merci!

Bien cordialement

jh_kd
Messages postés
31089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 193
Bon..

Je ne vais pas tout coder...
Mais dans le principe :

Tu créés un fichier cnxBdd.php (qui sert à faire la connexion en PDO et que tu pourras inclure dans les pages qui en ont besoin )

<?php
/*
 * Fichier cnxBdd.php
 * Permet la connexion à la bdd.
 * Fichie à inclure ( require_once) dans les pages devant effectuer des requêtes SQL PDO.
 */

$PARAM_hote = 'localhost';
$PARAM_port = '3306';
$PARAM_nom_bd = 'nomdemabase';
$PARAM_utilisateur = 'root';
$PARAM_mot_passe = '';

try {
  $connexion = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bd . ';charset=utf8', $PARAM_utilisateur, $PARAM_mot_passe);
  // Activation des erreurs PDO
  $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
  $connexion->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (Exception $e) {
  echo 'Erreur : ' . $e->getMessage() . '<br />';
  echo 'N° : ' . $e->getCode();
}
?> 


Ensuite, plutôt que de placer ton code php dans pleins de fichiers .. autant juste en faire des fonctions... même mieux ... une CLASS contenant les différentes fonctionnalités

Par exemple, un fichier user.class.php contenant
<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of user
 *
 * @author jreynet
 */
class user {

  //put your code here
  private $bdd = null;

  function __construct($connexion) {
    $this->bdd = $connexion;
  }

  public function getUserByMail($email_user) {
    $sql = "SELECT * FROM membersbase WHERE email_corresp = :email_user AND active = '1'";
    $datas = [':email_user' => $email_user];

    //Execution de la requete
    try {
      $requete = $this->bdd->prepare($sql);
      $requete->execute($datas);
      return $requete->fetch();
    } catch (Exception $e) {
      // en cas d'erreur :
      echo " Erreur ! " . $e->getMessage();
      echo " Les datas : ";
      print_r($datas);
    }
  }
  
  
  public function getUserByCode($code){
    $sql = "SELECT * FROM membersbase WHERE code = :code";
	$datas = [':code'=>$code];
     //Execution de la requete
    try {
      $requete = $this->bdd->prepare($sql);
      $requete->execute($datas);
      return $requete->fetch();
    } catch (Exception $e) {
      // en cas d'erreur :
      echo " Erreur ! " . $e->getMessage();
      echo " Les datas : ";
      print_r($datas);
    }
  }

  public function setUserCode($Rk_members, $code) {
    $sql = "UPDATE membersbase SET code = :code WHERE Rk_members = :Rk_members";
    $datas = [':code' => $code, ':Rk_members' => $Rk_members];
    //Execution de la requete
    try {
      $requete = $this->bdd->prepare($sql);
      $requete->execute($datas);
    } catch (Exception $e) {
      // en cas d'erreur :
      echo " Erreur ! " . $e->getMessage();
      echo " Les datas : ";
      print_r($datas);
    }
  }

  public function reset_password($password, $code) {
    if (!empty($code)) {
      $min = 7;
      $max = 16;
      return strlen($password) < 7 || strlen($password) > 16 ? "<p>Invalid length password (" . $min . " - " . $max . ")</p>" : false;

      $new_password = password_hash(trim($password), PASSWORD_DEFAULT);
      $sql = "UPDATE membersbase SET password = :new_password, code = '' WHERE code = :code";
      $datas = [':new_password' => $new_password, ':code' => $code];

      //Execution de la requete
      try {
        $requete = $this->bdd->prepare($sql);
        $requete->execute($datas);
      } catch (Exception $e) {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " Les datas : ";
        print_r($datas);
      }
    }
  }

  public function renew_password($email_user) {
    /******************Config***********************/
    $v_editor_name = "aaaaa";
    $v_editor_email = "bbbbbb";
    $v_url = "cccccc";
   
    $user = $this->getUserByMail($email_user);
    if (!empty($user)) {

      $Rk_members = $user['Rk_members'];
      $code = uniqid();
      //on met à jour le code
      $this->setUserCode($Rk_members, $code);

      // Email for reset password
      $from = $v_editor_name . " <" . $v_editor_email . ">";
      $subject = "Reset password";
      $url_reset_password = $v_url . "/reset_password.php?code=" . $code;

      $headers = "Mime-Version: 1.0\r\n";
      $headers .= "Content-type: text/html; charset=UTF-8\r\n";
      $headers .= "Content-Transfer-Encoding: 7bit\r\n";
      $headers .= "From: " . $from;

      $text = "Hello " . $user['first_name'] . " " . $user['last_name'] . "<br><br>";
      $text .= "To reset your password, you must click on following link, thank you.<br><br>";
      $text .= "<a href='" . $url_reset_password . "'>Reset password</a><br><br>";
      $text .= "Best regards<br>";
      $text .= $from;

      if(!mail($email_user, $subject, $text, $headers)){
        return " Erreur lors de l'envoi du mail !! ";
      }

      return  "Sent Email to $email_user";
    }else{
      return "Email $email_user does not exist or is not active";
    }
  }
  
  
  public function save_new_email($Rk_members,$new_email){
    $sql = "UPDATE membersbase 
            SET email_corresp = :new_email
           WHERE Rk_members = :Rk_members";
    
	$datas = [':new_email' => $new_email, ':Rk_members' => $Rk_members];

      //Execution de la requete
      try {
        $requete = $this->bdd->prepare($sql);
        $requete->execute($datas);
      } catch (Exception $e) {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " Les datas : ";
        print_r($datas);
      }	
  }
  
  
  public function getUserByUserName($userName){
     $sql = "SELECT * 
       FROM membersbase 
       WHERE user = :userName 
       AND active = '1'";
     
	$datas = [':userName'=>$userName];
     //Execution de la requete
    try {
      $requete = $this->bdd->prepare($sql);
      $requete->execute($datas);
      return $requete->fetch();
    } catch (Exception $e) {
      // en cas d'erreur :
      echo " Erreur ! " . $e->getMessage();
      echo " Les datas : ";
      print_r($datas);
    }
  }


  public function login($userName,$password){
    $user = $this->getUserByUserName($userName);
    if(!empty($user)){
      $pass = $user['password'];
      if(!password_verify($password, $pass)){
        return "Password is incorrect";
      }else{
        return $user;
      }
    }else{
      return "User does not exists or user is not active";
    }
    
  }

  // FIN DE LA CLASS
}



Pour l'utiliser, par exemple dans ton fichier reset_password.php
<<?php
//Démarrage des sessions
session_start();

//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//on inclus le fichier de connexion à la bdd et la class user
require_once "cnxBdd.php";
require_once "user.class.php";
//on instancie la class user, avec, en paramètre, la variable de connexion à la bdd
$oUser = new user($connexion);



//On traite le formulaire si il a été submit
if ($_POST['action'] == "validation") {
  //Récupération PROPRE des variables AVANT de les utiliser
  $post_password = !empty($_POST['password']) ? trim($_POST['password']) : NULL;
  $code = !empty($_POST['code']) ? $_POST['code'] : NULL;

  $oUser->reset_password($post_password, $post_code);
} else {

//Récupération PROPRE des variables AVANT de les utiliser
  $code = !empty($_GET['code']) ? trim($_GET['code']) : NULL;
}
//On récupère le user en fonction du code
$row = $oUser->getUserByCode($code);

// Header seulemnt html5
require_once 'headermysql.php';


if ($row) {

  // Exists code
  //probable error for if ($row['active'] == 1) {
  if ($row['active'] == 2) {

    // Active
    ?>
    <form method="post" action="">
      <input type="hidden" name="code" value="<?php echo $code; ?>">
      <div class="input-group">
        <div class="input-group-prepend">
          <span class="input-group-text">New Password</span>
        </div>
        <input type="text" placeholder="8-12 Characters" class="form-control col-4" name="new_password" value="<?php echo $post_password; ?>">
      </div>
      <br>
      <button type="submit" name="action" value="validation" class="btn btn-primary centro">Submit</button>
      <br>

    </form>
    <?php
  } else {
    // Not active
    echo "<p>Member not active</p>";
  }
} else {
// Incorrect code
  echo "<p>Incorrect code received</p>";
}


Autre exemple, ta page check_user.php
<?php


//--------------------------------------------------------------------------------------------------//
//
// TOUTE LA PARTIE session_start,  require_once ...  new user() ..
// n'est pas necessaire si cette page est incluse (require..) depuis ta page depart
// Par contre, si c'est bien une page à part ouverte, par exemple par : http://tonsite.fr/check_user.php  ... il faut le mettre
//
//--------------------------------------------------------------------------------------------------//
//Démarrage des sessions
session_start();

//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//on inclus le fichier de connexion à la bdd et la class user
require_once "cnxBdd.php";
require_once "user.class.php";
//on instancie la class user, avec, en paramètre, la variable de connexion à la bdd
$oUser = new user($connexion);

//--------------------------------------------------------------------------------------------------//

//Récupération PROPRE des variables AVANT de les utiliser
$userName = !empty($_POST['user']) ? $_POST['user'] : NULL;
$password = !empty($_POST['password']) ? $_POST['password'] : NULL;

$row = $oUser->login($userName, $password);

//si la connexion n'est pas bonne.. affichage du message d'erreur
if (is_string($row)) {
  echo $user;
} else {
  //ici on créé les variables de session
  // Password correct -> // Store data in session
  foreach ($row as $col => $value) {
    $_SESSION['user'][$col] = $value;
  }

  // Access log
  $file_log_access = "log_authorized_visitor.txt";

  // 2020-12-31 23:59:59	217.56.78.123	Internet Explorer	127	Manuel López (Spain)

  $register = date('Y-m-d H:m:s') . "\t";
  $register .= $_SERVER['REMOTE_ADDR'] . "\t";
  $register .= $_SERVER['HTTP_USER_AGENT'] . "\t";
  $register .= $_SESSION['user']['Rk_members'] . "\t";
  $register .= $_SESSION['user']['first_name'] . " ";
  $register .= $_SESSION['user']['last_name'] . " (";
  $register .= $_SESSION['user']['country'] . ")";

  file_put_contents($file_log_access, $register, FILE_APPEND);

  header("Location: " . $_SERVER['PHP_SELF']);
  exit;
}




bref, avec un découpage comme ça.. et l'écriture PROPRE des requpetes et des variables.. ça devrait faciliter la création de ton site et le debogage des éventuelles erreurs...


Messages postés
12
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
19 janvier 2021

Bonjour,

Et merci de ces conseils qui me seront utiles lorsque le ou les bugs seront identifiés et corrigés, notamment sur la page-de-depart.php qui conditionne tout le reste.
Comme en cliquant sur ce fichier dans localhost je suis transféré directement à la page de 'failed access' sans message d'erreur, je pense que le problème vient d'abord de page-de-depart.php

En tous cas les codes de tous mes fichiers sont ici ouverts aux experts qui seraient tentés de les pointer.

Un point mineur: j'ai déjà expliqué ce qu'était le fichier connexionBDD.php et donc dans les codes je l'ai mis sous la forme directe sans require:
$PARAM_hote = 'localhost';
$PARAM_port = '3306';
$PARAM_nom_bd = 'nomdemabase';
$PARAM_utilisateur = 'root';
$PARAM_mot_passe = '';

à la place de:
require ("connexionBDD");

mais quand j'utilise localhost bien sûr c'est le codage avec require qui est utilisé.

Je ne sais pas et je ne sais plus aller plus loin.

A nouveau, merci et bonne continuation,

bien cordialement,

jh_kd

PS: dans le message il est écrit pour check_user.php

<<<Par contre, si c'est bien une page à part ouverte, par exemple par : http://tonsite.fr ... il faut le mettre>>>

et c'est bien le cas : j'ai bien indiqué que toutes les pages citées étaient accessibles de façon indépendante (notamment via localhost... ce qui m'a permis de détecter certaines erreurs au début dans l'adaptation du modèle (pas les erreurs qui impliquent d'autres pages du processus login-inscription-PWchange avec post ou get)
Messages postés
31089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 193

Comme en cliquant sur ce fichier dans localhost je suis transféré directement à la page de 'failed access' sans message d'erreur, je pense que le problème vient d'abord de page-de-depart.php

Ben.. la redirection est due à ton fichier securite.php ....
Regarde.. dans le else ...

D'où l'importance de correctement réorganiser/écrire ton code.. pour t'y retrouver

et c'est bien le cas : j'ai bien indiqué que toutes les pages citées étaient accessibles de façon indépendante (notamment via localhost... ce qui m'a permis de détecter certaines erreurs au début dans l'adaptation du modèle (pas les erreurs qui impliquent d'autres pages du processus login-inscription-PWchange avec post ou get)

Sauf, que dans le fonctionnement de ton code... tu ne les appelle pas depuis l"url ... mais via des require dans ton fichier de départ ...
Donc .. si utilisées dans un require ( ou un include.. )... = pas "indépendantes"
Messages postés
12
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
19 janvier 2021

Bonjour,

Merci de ton aide.

Je vois. Tu as raison!
Comme sur mon modèle de securite.php j'ai la même chose, je suis démuni.
J'ai pensé que le point était de trop à:
header('Location: '.$page_no_login);
Voire l'apostrophe mal placée (en lisant un fil sur stackoverflow à propos de header location)
J'ai testé
header("Location: '$page_no_login'");
header("Location : login_failed.php");
header("Location:$page_no_login");

Le 1er: il faut enlever les guillemets simples, sinon erreur, si oui le résultat est le même qu'avec 2 et 3, ou qu'avec le point et la formule originale.
Le 2ème et le 3ème donnent le même résultat depuis platform-members.php...

Si je clique sur platform-members.php dans localhost, la page ne s'affiche pas (comme toujours) et elle passe tout de suite (comme toujours) sur:
login_failed.php

Pourquoi n'affiche-t-il jamais la page platform-members.php?

Le problème semble ailleurs qu'après le else de securite.php

Cordialement,

jh_kd

PS: pour check_user.php mon fichier est identique au modèle y compris pour la requête:
$sql = "SELECT * FROM membersbase WHERE user LIKE '".trim($_POST['user'])."' AND active = '1'";
suite à test dans phpmyadmin j'ai corrigé en:
$sql = "SELECT * FROM membersbase WHERE user LIKE '.trim($_POST["user"]).' AND active = '1'";
mais c'est pareil pour l'affichage de la page platform-members.php comme indiqué plus haut

PPS: dans plaform-members.php il y a aussi un else qui, lui, manque d'info pour case "Validation"::
Mais si j'ajoute, après //success, le code:
soit,
require('index.php');
soit,
echo 'congratulations';
c'est pareil!
Messages postés
31089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 193
Déjà... faudrait que tu saches comment on concatène des variables en php ... c'est le minimum à connaitre quand on commence à apprendre un langage !!

Donc :

header('Location: '.$page_no_login);
header("Location : login_failed.php");
header("Location: $page_no_login");

Ces trois écritures sont correctes....
La première... fait de la concaténation
La seconde .. ce n'est qu'une string que tu envois dans la fonction header
La troisième... utilise le fait que les variables php sont interprétées lorsqu'elles sont entre simple quotes...

Pour comprendre :
$toto = "jh_kd";
echo "Bonjour jh_kd";  // Affichera Bonjour jh_kd
echo "Bonjour $toto"; // Affichera Bonjour jh_kd
echo 'Bonjour ' . $toto; // Affichera Bonjour jh_kd
echo 'Bonjour $toto'; // Affichera Bonjour $toto


Ensuite, en ce qui concerne ta redirection...
.... Si dans le premier fichier que tu ouvres... tu vérifies que la variable de session existe ... et qu'elle n'existe pas.... tu es redirigés vers ta page no_login ...
if (isset($_SESSION['member'])) {

} else {
	// Si l'utilisateur n'est pas connecté... il est redirigé  vers la page  No login
	header('Location: '.$page_no_login);
	exit;
}


Donc.. tant que tu n'es pas authentifié... tu seras toujours redirigé vers cette page ...
Aucun bug au niveau du code.. il fait bien ce que tu lui as demandé ...
Mais à mon avis.. c'est une erreur de ta part .. car cette vérification ne devrait pas se faire dès ta première page...
A moins que ta page no_login soit celle qui permette de se loguer ??

Comme je le disais..tu as surtout un gros souci d'organisation de ton code ( en plus d'une mauvaise .. très mauvaise.. connaissance du langage ... )
Je t'invite donc à
- Apprendre à programmer en PHP ( en suivant des tutoriels un peu plus à ton niveau )
- A revoir l'organisation de ton code

Pour ma part je m'arrête là, le souci initiale étant traité.






Messages postés
12
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
19 janvier 2021

Bonjour,

Pas de problème.
C'est un forum donc si d'autres contributeurs veulent dire leur avis ils sont les bienvenus, mais y-en-a-t'il?
Juste un point, le souci ne concerne pas la 1ère page, mais la page de destination et cela indirectement (et cette page-de-destination commence maintenant par : <?php require_once __DIR__ ."/../security.php";?> et plus par: <?php require_once ("../security.php");?>)

Quand je clique dans localhost sur page-de-depart, il va chercher d'emblée la page-de-destination (seul endroit où il y a l'appel à la page securite.php dans le dossier racine) et arrivé à la fin du code securite.php, il n'a pas d'autre option que de passer à no_login.

C'est là qu'est le souci. C'est un souci de code, pas d'organisation, ou de connaissance de base du php (que je n'ai pas, c'est évident, mais je l'ai écrit dès le début).
Et là tu aurais pu vraiment aider, c'est ce que j'attendais ici, mais je peux m'être trompé de forum.

Bonne continuation, et encore merci de tout ce suivi régulier et assidu.
jh_kd
Messages postés
31089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 193

connaissance de base du php (que je n'ai pas, c'est évident, mais je l'ai écrit dès le début).

Non. au début tu nous as parlé de Mysql .... et tu avais, d'ailleurs posté ta question dans le mauvais forum...



Quand je clique dans localhost sur page-de-depart, il va chercher d'emblée la page-de-destination (seul endroit où il y a l'appel à la page securite.php dans le dossier racine) et arrivé à la fin du code securite.php, il n'a pas d'autre option que de passer à no_login.


Je vais essayer de reformuler autrement ... vu qu'il semble qu'on ne se comprenne pas....

Tu arrives sur ta page de départ ...
Comme tu le dis,.. d'emblée.. tu inclus la page page-de-destination ... page qui .. elle même .. inclus la page securité.
Page sécurité qui contient le code que j'ai mentionné juste avant ...

Donc....
A quel moment ... as tu authentifié ton utilisateur ? ( renseigné les variables de session ???? )
Par ce que... TANT que la variable de session $_SESSION['member'] n'est pas créée .... tu seras TOUJOURS redirigé vers la page no_login ...



Je te rappelle également que ta question de départ... concernait des messages d'erreurs pour l'inclusion de fichiers ....
Chose qui devrait être résolu désormais...
Si tu as encore des messages d'erreur.. il va falloir les donner .. n'ayant pas encore le dont de divination...

Et dernière chose... si si .. j'insiste .. ton code est foutrement bordélique...
Et tant que tu ne l'auras pas un peu revu en t'appuyant sur ce que je t'ai déjà donné... il sera compliqué d'avancer.
Messages postés
12
Date d'inscription
lundi 11 janvier 2021
Statut
Membre
Dernière intervention
19 janvier 2021

Bonjour,

Merci des explications.
Puis-je commencer par une parenthèse humoristique pour mieux éclairer (pas d'ironie, pas de sarcasme!)?

Comme je l'ai dit, mes connaissances en php sont limitées. Le codage a été réalisé bénévolement par un professionnel (quelqu'un qui est payé pour des sites clé en main et leur hébergement), mon grain de sel ne concerne que du html et des codages simples en php et les tests sur mon phpmyadmin des requêtes ou sur localhost.
Ton opinion sur son codage ne lui parviendra pas car il ne parle pas le Français et il habite très loin!
Autre culture, autre codage.
Il m'avait mis son projet sur son serveur Internet à l'époque et il fonctionnait selon lui... le seul souci (me semblait-il) était le langage des requêtes en sqli, pas en PDO et donc il a essayé d'adapter... d'où ma 1ère inquiétude (fausse) sur un problème Mysql dans ce fil.
Fin de parenthèse.

Il y avait une erreur (sûr?) avec dans le fichier-de-destination avec initialement (ligne 1)
<?php require ("../security.php");?> ou <?php require_once ("../security.php");?>
que tu as corrigé (?) par
<?php require_once __DIR__ ."/../security.php";?>
En tout cas il n'y a plus de message d'erreur mais le fichier-de-destination passe direct à login_failed.
C'est bien là le problème car cela ne nous aide pas sauf à des hypothèses ("devinations").
Comme je fais ce que je peux (cad peu) et que le codeur ne peut aider, c'est bien difficile.
En tout cas je n'ai pas finassé.
J'ai mis tout le codage que j'ai reçu. Il ne manque rien.
Si ce codage produisait des erreurs, tu pourrais avancer (moi aussi).
Mais non.
Tu écrit: TANT que la variable de session $_SESSION['member'] n'est pas créée...
J'ai regardé (modestement) et je vois :
/************************************************************************/
if (isset($_SESSION['action'])) {
 $_POST['action'] = $_SESSION['action'];
 unset($_SESSION['action']);
}
/************************************************************************/
if (isset($_POST['action'])) {
 switch ($_POST['action']) {

  case


puis, plus loin:
default:
   // Print & delete messages
   if (isset($_SESSION['message'])) {
    echo $_SESSION['message']."<br />";
    unset($_SESSION['message']);
   }

   break;
 }
}

/********************************************************************************************************/
if (isset($_SESSION['user']['user'])) {


Chez le codeur (distant), cela marche, chez moi, non, et pour toi, c'est insuffisant (il manque $_SESSION['member']).

Un casse tête!

Voilà,

Bien cordialement (et re-modestement)

jh_kd
Messages postés
31089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
3 193
parmii les fichiers "include" .. il y en a un que tu ne nous as pas montré ... c'est le fichier login.php
je suppose que c'est celui-ci qui permet de faire la connexion...

Et donc, dans le fichier securite.php .. c'est vers ce fichier qu'il faudrait rediriger au lieu du no_login
(ou l'inclure dans le fichier no_login éventuellement )