[RESOLU] Pas de vérification des champs dans pages à accès réservé.

ViPHP
xTG
ViPHP | 7331 Messages

03 nov. 2014, 14:25

J'ai tenté ce code en modifiant la condition de session pour faire son inverse.
Il y a un souci avec la définition du commentaire (en PHP c'est // et non #).
Après correction de cela j'ai la fenêtre modale ainsi que la redirection.

Eléphant du PHP | 290 Messages

03 nov. 2014, 15:36

Inverser la condition de session, est-ce que tu veux dire:
<?php
//partie php commune à toute session => ici récupération de $_SESSION['id_user']
session_start();
if (!isset($_SESSION['id_user']) || !isset($_SESSION['login'])){
header("Location: http://localhost/mon_site/ma_page.php");
exit();
} else {
} 
//fin partie php commune à toute session

//code debug.
$a = '1';
$b = '2';
$c = '';
if (empty($a) || empty($b) || empty($c)){
?>
<script type="text/javascript">
alert('Veuillez saisir les données manquantes');
document.location.href="http://localhost/mon_site/ma_page.php"
</script>
<?php
Ca ne marche toujours pas chez moi.
Mais le problème, c'est que je ne comprends pas pourquoi mon code d'origine sur la condition
de session peut poser problème.
J'aimerais bien savoir quel raisonnement t'as fait dire qu'il faut retravailler cette condition là.
Quel rapport y-at'il entre la condition de session et mon code de debug?

Pour le dièse, j'ai lu dans PHP et MySQL pour les nuls (page 42):
Les lignes qui commencent par des dièses (#) sont des commentaires, qui sont ignorés.
A y voir de plus près, c'est vrai que l'auteur n'utilise jamais les dièses dans ses exemples.
Mais le # semble fonctionner aussi (l'éditeur donne d'ailleurs aux lignes concernées la couleur attribuée aux commentaires).

Eléphant du PHP | 113 Messages

03 nov. 2014, 16:23

à mon avis tes champ session existent mais ils sont vident, donc soit tu les initialisent par défaut ou tu le vides au lieu de les supprimer lors de la déconnexion. Essaies avec empty à la place de isset

Eléphant du PHP | 290 Messages

03 nov. 2014, 17:26

J'ai mis des var_dump dans mon code:
<?php
//partie php commune à toute session => ici récupération de $_SESSION['id_user']
session_start();
if (!empty($_SESSION['id_user']) && !empty($_SESSION['login'])){
} else {
header("Location: http://localhost/mon_site/ma_page.php");
exit();
} 
//fin partie php commune à toute session

var_dump($_SESSION['id_user']);
var_dump($_SESSION['login']);
Le navigateur me renvoit int(1) string(9) "motsecret"
Dans ma table id_user, j'ai bien 1 pour la seule personne qui a un mot de passe.
Pensez-vous que le navigateur doit renvoyer int(1)"1" string(9) "motsecret" si l'id_user est bien pris en compte?
C'e'st-à-dire que int(1) fait en fait référence à une variable vide, le 0, qui est compté pour (1)?

Eléphant du PHP | 290 Messages

03 nov. 2014, 17:28

Dans ma table id_user, j'ai bien 1 pour la seule personne qui a un id_user.
Pardon, je ne voulais pas dire un mot de passe.

ViPHP
xTG
ViPHP | 7331 Messages

03 nov. 2014, 17:29

Non j'ai juste bidouillé la condition pour permettre l'exécution du script... Vu que je n'ai pas ton système de login... :roll:

Si tu as l'affichage de ton var_dump c'est que tu as l'exécution du javascript...
Vu que je l'ai eu sans avoir à modifier le code en question.

Concernant l'existence ou non de l'utilisateur c'est pas le but de ce script...
On sait juste que la session PHP est remplie, ce qui suffit.

Eléphant du PHP | 290 Messages

03 nov. 2014, 18:57

J'ai compris, il faut que je remplace tous mes # par des // :D
Je trouve ça fort d'avoir trouvé ça!!
Car comme je vous l'ai dit # indique bien des commentaires en php,
mais sûrement qu'il faut mieux éviter de l'utiliser car ça pose effectivement problème.
Je me demande donc à quoi sert le # précisément en début de ligne en php.

Mais il y avait autre chose, il fallait rajouter un exit(); comme ceci:
//code debug.
$a = '1';
$b = '2';
$c = '';
if (empty($a) || empty($b) || empty($c)){
?>
<script type="text/javascript">
alert('Veuillez saisir les données manquantes');
document.location.href="http://localhost/mon_site/ma_page.php"
</script>
<?php
exit();
}
Vous m'avez appris à mettre un exit derrière tous mes header en php, et j'ai du coup compris
qu'il en est de même avec mes redirections javascript.
Celui-ci je le mets pour éviter que la table se remplisse malgré la redirection.

A propos, j'obtiens bien 1 en faisant:
echo $_SESSION['id_user'];
ce qui signifie que la variable n'est pas vide.

Merci Nestecha, xTG et toytoy :D

ViPHP
xTG
ViPHP | 7331 Messages

03 nov. 2014, 20:17

Car comme je vous l'ai dit # indique bien des commentaires en php,
mais sûrement qu'il faut mieux éviter de l'utiliser car ça pose effectivement problème.
Je me demande donc à quoi sert le # précisément en début de ligne en php.
J'allais te linker la doc PHP pour dire que le # était un commentaire SQL et non PHP...
Sauf que la doc parle bien du #. :lol:

Cela fonctionne sur mon serveur local (PHP 5.4.16).
Il doit y avoir des versions qui ne l'acceptent pas (notamment celle que j'avais utilisé pour faire le test de ton code).

Eléphant du PHP | 290 Messages

03 nov. 2014, 23:58

Merci pour la précision, c'est bon à savoir!
Et du coup je comprends mieux pourquoi mon bouquin
sur PHP et MySQL parlent de # comme d''un commentaire,
puisque effectivement ils ne disent pas qu'il s'agit de PHP.
Mais ça aurait été moins brouillon qu'ils précisent qu'il s'agit de SQL.

Et autre chose instructive:
du code sans queue ni tête à un endroit d'une page web peut perturber
une autre portion de code sans rapport apparent dans cette même page.
Je crois donc que c'est un bon exemple de l'importance de la propreté!