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

Fermé
jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024 - 11 janv. 2021 à 12:34
jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024 - 28 janv. 2021 à 12:58
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

31 réponses

jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024
25 janv. 2021 à 12:19
Bonjour,

Il y a des gros progrès, merci [et mea culpa... je ne vais pas philosopher sur la compréhension, écueil entre tous, d'abord si les humains se comprenaient mieux il n'y aurait plus de guerre et les poules auraient des dents... je viens de revoir "Chicken Run"!].
J'ai encore des undefined index ce qui m'empêche de vérifier si les pages fonctionnent vraiment.

J'ai essayé comme dans CCM d'ajouter : $truc = !empty($_POST['truc']) ? $_POST['truc'] : NULL; mais l'application pratique n'est pas facile (pour moi) surtout si la variable est déjà déclarée à la ligne concernée.
J'ai aussi essayé de comprendre le manuel PHP à https://www.php.net/manual/fr/errorfunc.configuration.php qui dit que c'est possible de ne pas afficher ces petites erreurs en modifiant le php.ini... incompréhensible de savoir comment (pour moi), et il n'y a aucun exemple!

Donc dans mes 11 fichiers impactés par tes corrections, je n'ai plus d'erreurs fatales et je n'ai plus que quelques erreurs mineures du type undefined variable ou undefined index, assez semblables les unes les autres mais sans requête sql, surtout pour validation_inscription.php, dont pour une même ligne, 3 erreurs...
bon avant d'aller plus loin sauf à modifier php.ini il faut donc corriger les undefined variable et undefined index (j'ai essayé, mais échoué pour les suivants)...
ci-après texte de l'erreur mineure puis ligne de code concernée:

Undefined index: code in D:\wamp64\compliance.php on line 53:
$sql = "SELECT * FROM membersbase WHERE code = '".$_GET['code']."'";

Undefined index: new_password in D:\wamp64\save_new_password.php on line 4:
$new_password = trim($_POST['new_password']);

Undefined index: new_email in D:\wamp64\save_new_email.php on line 4:
$new_email = strtolower(trim($_POST['new_email']));

Undefined index: email in D:\wamp64\renew_password.php on line 5:
$email_user = trim(strtolower($_POST['email']));

Undefined index: code in D:\wamp64\form_conditions.php on line 19:
<input type="hidden" name="code" value="<?php echo $_GET['code']; ?>">

ET, pour un seul fichier, validation_inscription.php:

Undefined variable: _SESSION in D:\wamp64\validation_inscription.php on line 39:
if (strlen($_SESSION['registration']['first_name']) < 2) {

Undefined index: registration in D:\wamp64\validation_inscription.php on line 44:
if (strlen($_SESSION['registration']['last_name']) < 2) {

Undefined index: registration in D:\wamp64\validation_inscription.php on line 49:
if (!filter_var($_SESSION['registration']['email_regis'], FILTER_VALIDATE_EMAIL)) {

Undefined index: registration in D:\wamp64\validation_inscription.php on line 78:
if (!filter_var($_SESSION['registration']['email_corresp'], FILTER_VALIDATE_EMAIL)) {

Undefined index: registration in D:\wamp64\validation_inscription.php on line 106:
if (strlen($_SESSION['registration']['user']) < 5 || strlen($_SESSION['registration']['user'] > 20)) {

Undefined index: registration in D:\wamp64\validation_inscription.php on line 135:
if (strlen($_SESSION['registration']['password']) < 7 || strlen($_SESSION['registration']['password'] > 16)) {

Undefined index: registration in D:\wamp64\validation_inscription.php on line 139 (3 fois):
if ($_SESSION['registration']['day_birthday'] == "--" || $_SESSION['registration']['month_birthday'] == "--" || $_SESSION['registration']['year_birthday'] == "--" ) {$_SESSION['message'] .= "Invalid Date of Birthday<br>";

Undefined index: registration in D:\wamp64\validation_inscription.php on line 142:
if ($_SESSION['registration']['country'] == "--") {

Undefined index: registration in D:\wamp64\validation_inscription.php on line 146:
if (strlen($_SESSION['registration']['address']) < 20) {

Undefined index: registration in D:\wamp64\validation_inscription.php on line 150:
if (strlen($_SESSION['registration']['profile']) < 20) {

Undefined index: registration in D:\wamp64\validation_inscription.php on line 154:
if (strlen($_SESSION['registration']['motivations']) < 5) {

Undefined index: registration in D:\wamp64\validation_inscription.php on line 159:
if ($_SESSION['registration']['confirmation'] == "--") {

Undefined index: registration in D:\wamp64\validation_inscription.php on line 164:
if ($_SESSION['registration']['type_of_activity'] == "--") {

A+,

bien cordialement,

jh_kd
0
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
25 janv. 2021 à 14:29
Déjà
<blcok>
J'ai aussi essayé de comprendre le manuel PHP à https://www.php.net/manual/fr/errorfunc.configuration.php qui dit que c'est possible de ne pas afficher ces petites erreurs en modifiant le php.ini... incompréhensible de savoir comment (pour moi), et il n'y a aucun exemple!
</block>
Non.. il ne faut surtout pas les "masquer" .....
ça serait comme monter le son de ton auto-radio pour ne plus entendre les bruits étranges que ferait ta voiture .... sur le coup.. ok.. ça marcherait...mais tôt ou tard tu risquerais d'avoir de gros soucis... ben là.. c'est pareil.


Maintenant.. pour ce qui est de la mise en pratique des codes que je t'ai donné.
Par exemple... au lieu d'avoir
$sql = "SELECT * FROM membersbase WHERE code = '".$_GET['code']."'";


Tu devrais avoir
$code = !empty($_GET['code']) ? $_GET['code'] : NULL;
$sql = "SELECT * FROM membersbase WHERE code = '".$code."'";


qui, d'ailleurs, devrait même s'écrire comme ceci ( avec une requête paramétrée )
$code = !empty($_GET['code']) ? $_GET['code'] : NULL;
$sql = "SELECT * FROM membersbase WHERE code = :code ";
$datas = array(':code'=>$code);
try{
  $sth = $connexion->prepare($sql);
  $sth->execute($datas);
  $row = $sth->fetch();
}catch(Exception $e){
  echo "ERREUR dans la requête <br>".$sql;
  echo "<br> ". $e->getMessage();
}


et pour les autres erreurs... c'est du même acabit ...

Comme je te l'ai déjà indiqué, et comme c'est marqué dans les liens que je t'ai donné... il faut récupérer PROPREMENT les variables AVANT de les utiliser....

Exemple pour new_email, au lieu de
$new_email = strtolower(trim($_POST['new_email']));

Faire

$new_email = !empty($_POST['new_email']) ? strtolower(trim($_POST['new_email'])) : $_POST['new_email'];


Voila .... je te laisse faire les correction.

PS: Et pour les messages qui parles de la variable _SESSION ... c'est, je pense, la fait que tu n'as toujours pas mis un
 session_start();
au début de chaque fichier alors que je te l'avais déjà dit ...



0
jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024
25 janv. 2021 à 14:52
Bonjour,
Merci
Je vais travailler sur ton message mais juste un point.
Que je mette dans validation_inscription.php le code:
session_start();
ou pas (je l'avais mis)
les erreurs sont les mêmes seul le numéro de ligne change!
A+
jh_kd
0
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
25 janv. 2021 à 14:56
Traite un fichier par un fichier
Déjà.. ça évitera de t'embrouiller ... et de me coller 50 messages d'erreurs dans le chat...

Donc prend le premier fichier...
Fais en sorte qu'il fonctionne ... et si tu as des points de blocage... tu me colles le code modifié et les éventuels messages d'erreur.
0
jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024
25 janv. 2021 à 15:13
Re-bonjour,

OK, problème réglé (undefined index) pour compliance.php

pour save_new_email.php
J'applique ! (j'avais déjà essayé) mais mon ordi est borné...
tu dis au lieu de
$new_email = strtolower(trim($_POST['new_email']));
Faire (ligne 4 devenue 5)
$new_email = !empty($_POST['new_email']) ? strtolower(trim($_POST['new_email'])) : $_POST['new_email'];
et j'ai:
Notice: Undefined index: new_email in D:\wamp64\xxxx\save_new_email.php on line 5

Mystère!

Idem, si j'ajoute ou enlève:
session_start();

Et je parie que ce sera pareil pour save_new_password.php (qui est quasi-pareil).


A+, jh_kd
0
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
Modifié le 25 janv. 2021 à 15:45
Mauvais copier/coller de ma part
$new_email = !empty($_POST['new_email']) ? strtolower(trim($_POST['new_email'])) : NULL;


Si je te traduit cette ligne de code (histoire que tu comprennes...)
Dans la variable $new_email, SI la variable $_POST['new_email'] existe et n'est pas vide .. alors je stocke le contenu de $_POST['new_email'] .. sinon je lui défini la valeur NULL.

Autrement écrit en PHP on aurait pu faire
if(!empty($_POST['new_email'])) {
  $new_email  = trtolower(trim$_POST['new_email'])); // en minuscule et sans espace
}else{
  $new_email = NULL ;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024
26 janv. 2021 à 11:16
Bonjour,

Pas de souci! Merci de l'éclairage didactique sur $new_email

Donc, save_new_email.php Ok
Idem pour save_new_password.php, renew_password.php, form_conditions.php
Il ne reste que les erreurs de validation_inscription.php, là je ne suis pas sûr de savoir quelle est la variable, mais j'essaie et... enfin je n'ai plus d'erreur.

mais le suivant me semble vraiment hasardeux:

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

Je ne suis pas 100% sûr du:
// Username = ID
//if (strlen($_SESSION['registration']['user']) < 5 || strlen($_SESSION['registration']['user'] > 20)) {
$message5 = !empty($_SESSION['registration']['user']) ? strlen($_SESSION['registration']['user']) : NULL;
if (strlen($message5) < 5 || strlen($message5) >20) {
$_SESSION['message'] .= "Invalid length user (5-20)<br>";
}

Quant au suivant (triple erreur mineure), j'ai tenté le code suivant mais sans certitude (les 3 erreurs ont disparu!):
//if ($_SESSION['registration']['day_birthday'] == "--" || $_SESSION['registration']['month_birthday'] == "--" || $_SESSION['registration']['year_birthday'] == "--" ){
$message7 = !empty($_SESSION['registration']['day_birthday']) ? strlen($_SESSION['registration']['day_birthday']) : NULL;
if (strlen($message7) == "--") {
$_SESSION['message'] .= "Invalid Date of Birthday<br>";
}

Bon si je met les 14 fichiers tels que chez l'hébergeur sur Internet et que je tape www.xxx.org/page-de-depart.php, je n'ai pas d'erreur, puis si je clique sur sign up, j'ai divers soucis (de session, type session_start(): A session had already been started, de header) mais pour rester dans le présent sujet j'ai une nouvelle erreur mineure (ce que je n'avais pas en localhost):
Notice: Undefined variable: _SESSION in /homepages/1/d31515812/htdocs/form_registration.php on line 24 et la ligne 24 est:
unset($_SESSION['action']);


Voilà, je crois que j'approche du final pour la "propreté" du code. Merci de ta patience.

A+

jh_kd
0
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
26 janv. 2021 à 11:45
Merci de poster ton code en utilisant les balises de code.
0
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
26 janv. 2021 à 13:00
A la place de

// check E-mail for registration

$message3 = !empty($_SESSION['registration']['email_regis']) ? !filter_var($_SESSION['registration']['email_regis'], FILTER_VALIDATE_EMAIL) : NULL;
if (filter_var($message3)) {
$_SESSION['message'] .= "Invalid registration e-mail<br>";
}


Dans l'idéal, il faudrait même faire ce traitement en deux fois

$registration = !empty($_SESSION['registration']) ? $_SESSION['registration'] : NULL;
$email_regis =   !empty($registration ['email_regis ']) ? $registration ['email_regis '] : NULL;

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



</code>
0
jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024
27 janv. 2021 à 11:06
Bonjour,

Merci!
OK je comprend que je devais réutiliser la variable déjà testée $registration

, et je modifie pour juste être sûr de passer l'épreuve des erreurs mineures...

Je ne suis pas 100% sûr de la façon de traiter les variables déjà définies si elles sont assorties de get, post ou session dans la même page auparavant (béotien!), donc je fais cela... c'est bon?:
// $ registration est défini avant comme $registration = !empty($_POST['registration']) ? $_POST['registration'] : NULL;
// Username = ID
//if (strlen($_SESSION['registration']['user']) < 5 || strlen($_SESSION['registration']['user'] > 20)) {
$username = !empty($_SESSION['registration']['user']) ? strlen($_SESSION['registration']['user']) : NULL;
// ou (? ) je fais plus simple avec	
$username = !empty($registration ['user']) ? strlen($registration ['user']) : NULL;
if (strlen($username) < 5 || strlen($username) >20) {
	$_SESSION['message'] .= "Invalid length user (5-20)<br>";
}


Quant au suivant (triple erreur mineure), j'ai tenté le code suivant mais sans certitude (les 3 erreurs ont disparu!):
//if ($_SESSION['registration']['day_birthday'] == "--" || $_SESSION['registration']['month_birthday'] == "--" || $_SESSION['registration']['year_birthday'] == "--" ){
$message7 = !empty($_SESSION['registration']['day_birthday']) ? strlen($_SESSION['registration']['day_birthday']) : NULL;
if (strlen($message7) == "--") {
$_SESSION['message'] .= "Invalid Date of Birthday<br>";
}


Je règle le souci de
unset($_SESSION['action']);


par:
// Delete action
$action = !empty($_SESSION['action']) ? $_SESSION['action'] : NULL;
//unset($_SESSION['action']);
unset($action);



Maintenant je n'ai plus d'erreur undefined et je teste le fonctionnement proprement dit.
Attention je rappelle tes demandes : dans tous les fichiers du projet où il y a du php ou des requêtes sql (soit 11 fichiers, depuis fichier-de-depart.php compris, et securite.php compris aussi, tous dans le dossier racine), j'ai ajouté:

session_start();
error_reporting(E_ALL);
require_once ("connexionBDD.php");


Et dans le fichier-de-destination.php (accueil des membres, dans le sous-dossier 'membre'), je n'ai pas le code ci-dessus (ni quelque chose du genre : session_start(); if (!isset($_SESSION['login'])) {header ('location: index.php');exit();}), mais :
<?php require_once __DIR__ ."/../securite.php";?>


Et dans connexionBDD.php, j'ai:
<?php
$PARAM_hote = 'localhost';
$PARAM_port = '3306';
$PARAM_nom_bd = 'killidataphpmysql';
$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();
}
?>



Donc, je teste dans localhost et je clique sur fichier-de-depart.php, puis je tape mon ID/PW et j'ai les erreurs suivantes:
Notice: session_start(): A session had already been started - ignoring in D:\wamp64\xxxxx\securite.php on line 2, dont le code est:
session_start();

et: Warning: Cannot modify header information - headers already sent by (output started at D:\wamp64\xxxxx\securite.php:2) in D:\wamp64\www\xxxxx\securite.php on line 45, dont le code est:
header('Location: '.$page_login);


Voilà (mais si je regarde mes fichiers originaux du codeur "lointain", je n'avais pas de session_start dans tous les fichiers... seulement dans fichier-de-depart.php, compliance.php et reset_password.php, notamment il n'y en avait pas dans securite.php... mais si je l'enlève dans securite.php, alors il n'y a plus d'erreur et notamment celles ci-dessus dans fichier-de-depart.php mais si je clique sur sign in, sign up, ou reset_password, il ne se passe rien!)

Merci de ton aide!

Bien cordialement

jh_kd
0
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
27 janv. 2021 à 11:21
Encore une fois... il serait bien de traiter chaque fichier un par un .. au lieu de me faire un pavé avec 50 trucs différents dedans...

Mais bon...

Donc :
// $ registration est défini avant comme $registration = !empty($_POST['registration']) ? $_POST['registration'] : NULL;
// Username = ID
//if (strlen($_SESSION['registration']['user']) < 5 || strlen($_SESSION['registration']['user'] > 20)) {
$username = !empty($_SESSION['registration']['user']) ? strlen($_SESSION['registration']['user']) : NULL;
// ou (? ) je fais plus simple avec	
$username = !empty($registration ['user']) ? strlen($registration ['user']) : NULL;
if (strlen($username) < 5 || strlen($username) >20) {
	$_SESSION['message'] .= "Invalid length user (5-20)<br>";
}

Non . ce n'est pas bon....
$registration = !empty($_SESSION['registration']) ? $_SESSION['registration'] : NULL;
$username = !empty($registration ['user']) ? strlen($registration ['user']) : NULL;
if (strlen($username) < 5 || strlen($username) >20) {
	$_SESSION['message'] .= "Invalid length user (5-20)<br>";
}


// Delete action
$action = !empty($_SESSION['action']) ? $_SESSION['action'] : NULL;
//unset($_SESSION['action']);
unset($action);

Non, ce n'est pas bon... là tu ne supprimes pas la variable de session.. tu supprime la variable $action ... ce qui n'est pas la même chose.
Donc à remplacer par
if( isset($_SESSION['action']) ){
  unset($_SESSION['action']);
}


Pour le problème de session_start
Si tu utilises des include / require ... et que le session_start est déjà dans la première page... il ne faut pas le remettre.
(attention.. si tu ouvres tes pages directement sans passer par ta page de départ.. là il le faut..)
Donc, pour éviter les soucis,
Tu peux remplacer (partout)
session_start();

par
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
0
jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024
Modifié le 27 janv. 2021 à 18:22
Re-bonjour,

Merci de m'excuser, aucune incivilité, sincèrement... je pensais que la question des invalid variable et index était pliée, alors je suis passé au point suivant, en mentionnant juste ce que j'avais compris (et c'était faux!).

J'ai fait toutes les corrections et cette fois il n'y a plus aucun message d'erreur, mais cela ne marche toujours pas.
Si dans localhost je tape sur page-de-depart.php, je passe immédiatement sur la page login.php et là que ce soit pour sign in (mon ID et mon PW), sign up (nouveau membre à créer) ou reset PW, le fichier reste inactif, bloqué.

Je teste en ligne les fichiers téléchargés chez l'hébergeur:
Si je tape sur page-de-depart.php, je reste dessus, et si pour sign-in je tape mon ID/PW valides, j'ai une erreur:
Warning: Cannot modify header information - headers already sent by (output started at /homepages/1/d31515812/headermysql.php:1) in /homepages/1/d31515812/check_user.php on line 50, dont le code dans check_user.php est
header("Location: ".$_SERVER['PHP_SELF']);


Et si je reviens en arrière dans le navigateur, j'ai comme au début de ce fil,
Warning: require(../securite.php): failed to open stream: No such file or directory in /homepages/1/d31515812/membre/fichier-de-destination.php on line 1
Fatal error: require(): Failed opening required '../securite.php' (include_path='.:/usr/lib/php7.4') in /homepages/1/d31515812/d31515812/membre/fichier-de-destination.php on line 1

Et si je nettoie le cache du navigateur cela ne change rien, la page-de-depart.php ne s'affiche plus, je n'ai que les 2 erreurs précédentes.

A+

Bien cordialement,

jh_kd
0
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
27 janv. 2021 à 18:26
Avant ton instruction
header("Location: ".$_SERVER['PHP_SELF']);

As tu du code html ou des echo ou print en php ?
Si c'est le cas.. l'erreur vient de là
0
jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024
28 janv. 2021 à 08:45
Bonjour,

Non, sauf si on considère la recherche d'erreur PDO qui a été ajoutée [après catch(Exception $e)].

Voici tout le code avant la ligne incriminée:
<?php
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
error_reporting(E_ALL);
require_once ("connexionBDD.php");


$user = !empty($_POST['user']) ? $_POST['user'] : NULL;
$sql = "SELECT * FROM membersbase WHERE user LIKE '".trim($user)."' AND active = '1'";

try{
  $sth = $connexion->prepare($sql);
  $sth->execute();
  $row = $sth->fetch();
}catch(Exception $e){
  echo "ERREUR dans la requête <br>".$sql;
  echo "<br> ". $e->getMessage();
}
if ($row) {

	if (password_verify($_POST['password'], $row['password'])) {

		
		foreach ($row as $col => $value) {
			$_SESSION['user'][$col] = $value;
		}

		
		$file_log_access = "log_visitors.txt";

		

		$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 {


A+,

Bien cordialement

jh_kd
0
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
28 janv. 2021 à 08:49
ce fichier est en include dans un autre ou tu y accèdes directement via son url ?
(quelle url utilises tu pour y accéder ? )

De plus, je t'ai déjà indiqué que
$sql = "SELECT * FROM membersbase WHERE user LIKE '".trim($user)."' AND active = '1'";


revient à écrire
$sql = "SELECT * FROM membersbase WHERE user ='".trim($user)."' AND active = '1'";


et encore mieux
$sql = "SELECT * FROM membersbase WHERE user = :user AND active = '1'";
$datas = [':user'=>trim($user)];
try{
  $sth = $connexion->prepare($sql);
  $sth->execute($datas);
0
jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024
Modifié le 28 janv. 2021 à 12:02
Rebonjour,

Je ne teste plus les fichiers individuels, je teste depuis page-de-depart.php, en localhost ou directement sur Internet.
J'ai fait les corrections demandées.
Donc je recommence:
Si dans localhost je tape sur page-de-depart.php, je passe immédiatement sur la page login.php et là que ce soit pour sign in (mon ID et mon PW), sign up (nouveau membre à créer) ou reset PW, le fichier reste inactif, bloqué.

Si je teste en ligne les fichiers téléchargés chez l'hébergeur:
Si je tape sur page-de-depart.php, je reste dessus, et si pour sign-in je tape mon ID/PW valides, j'ai une erreur:
Warning: Cannot modify header information - headers already sent by (output started at /homepages/1/d31515812/headermysql.php:1) in /homepages/1/d31515812/check_user.php on line 18, dont le code dans check_user.php est
$datas = [':user'=>trim($user)];


Si je clique sur sign up, je passe au formulaire (form-registration.php) et si je ne remplis rien et que je clique à la fin quand même sur "submit":
J'ai l'erreur:
Warning: Cannot modify header information - headers already sent by (output started at /homepages/1/d31515812/headermysql.php:1) in /homepages/1/d31515812/page-de-depart.php on line 73 qui est dans page-de-depart.php:
header("Location: ".$_SERVER['PHP_SELF']);

Et pour répondre par avance à ta question, il n'y a pas de echo avant ce code autre que le contrôle d'erreur de PDO,
voici le code dans page-de-depart.php:

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
error_reporting(E_ALL);
require_once ("connexionBDD.php");

$fileSecurite = "securite.php";
if(!file_exists($fileSecurite)){
  echo ' Fichier ' . $fileSecurite . ' manquant ou mal ortographié !!';
  exit;}

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 {



Maintenant si je recommence les test de fichiers individuels avec tes nouvelles corrections, pour check_user.php en localhost j'ai à nouveau:
Notice: Undefined variable: user in D:\wamp64\check_user.php on line 18, qui est ci après
User does not exists or user is not active
$datas = [':user'=>trim($user)];


J'ai 2 commentaires, peut-être sans fondements, mais si cela peut aider, qui sait (pas moi).
1- J'avais compris que quand tu utilise $datas c'était un exemple et donc que je pouvais remplacer par (au hasard) $checkuser ou $message6
et si je fais
$sql = "SELECT * FROM membersbase WHERE user = :user AND active = '1'";
$checkuser = [':user'=>trim($user)];
try{
  $sth = $connexion->prepare($sql);
  $sth->execute($checkuser);

c'est pareil (note : dans validation_inscription.php comme j'avais plusieurs fois $datas dans tes corrections j'ai à chaque fois nommé la variable différemment cad $datas par $username, $checkcountry, etc. Ai-je eu tort? aurais-je dû gardé plusieurs fois $datas avec des définitions différentes?)

2- Je ne suis pas sûr qu'il accroche la BDD pour la table membersbase (que j'ai rempli manuellement avec les données actuelles mais sans le champ 'code') car si sur Internet je tape sur resetPW cette fois j'ai l'option nouvelle qui s'affiche (c'est normal) de taper son adresse email et si je tape la mienne, puis si je clique sur RenewPW, alors j'ai le texte qui apparaît:
Email does not exist or is not active

A+

Bien cordialement

jh_kd
0
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
28 janv. 2021 à 12:09
Je vais juste prendre le début de ton texte sans regarder la suite.. car je pense que c'est important que tu comprennes... et/ou que tu expliques bien...

Donc.. tu dis:
Si dans localhost je tape sur page-de-depart.php, je passe immédiatement sur la page login.php


Quand tu dis "passer" ... tu veux dire:
Etre redirigié vers la page ( donc l'url dans ton navigateur change )
Ou tu veux juste indiquer que tu charges ( via un include ou un require) le contenu de ce fichier ???

Si nouvelle URL .. cela veut dire que tu affiche bien la page "individuellement" ...
Si ... via include/require ... là .. la page n'est pas chargée "individuellement" mais au travers d'un autre fichier...

Comprends tu bien cette nuance ??


0
jh_kd Messages postés 41 Date d'inscription lundi 11 janvier 2021 Statut Membre Dernière intervention 2 mars 2024
Modifié le 28 janv. 2021 à 13:02
Oui, "je passe" veut dire que "je suis redirigé vers" (dans localhost)... c'est bien le nom du fichier qui change dans la navigateur (mais ce n'est pas le cas sur internet: le nom du fichier dans l'URL ne change pas).
Sur localhost, je part de la page de départ et je suis le processus en cliquant sur les liens sign in, sign up ou resetPW et sur Internet je fais pareil.
Les include et autre require, pour moi c'est dans le code des fichiers, donc je ne m'en occupe pas pour le test d'affichage.
J'espère être plus clair.

C'est ce que j'attend quand je teste.
Auparavant pour traquer les erreurs je testais les fichiers individuellement en cliquant dessus dans localhost (mon fichier index.php est modifié en _index.php pour permettre de voir l'arborescence de tous les fichiers) et sur Internet en tapant le nom du fichier comme http://www.xxxx.org/fichier-de-depart/php)
jh_kd
0