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

Répondre


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

  Étendre la vue Revue du sujet : [RESOLU] Pas de vérification des champs dans pages à accès réservé.

Re: [RESOLU] Pas de vérification des champs dans pages à acc

par niconicochan » 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é!

Re: [RESOLU] Pas de vérification des champs dans pages à acc

par xTG » 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).

Re: Pas de vérification des champs dans pages à accès réserv

par niconicochan » 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

Re: Pas de vérification des champs dans pages à accès réserv

par xTG » 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.

Re: Pas de vérification des champs dans pages à accès réserv

par niconicochan » 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.

Re: Pas de vérification des champs dans pages à accès réserv

par niconicochan » 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)?

Re: Pas de vérification des champs dans pages à accès réserv

par toytoy » 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

Re: Pas de vérification des champs dans pages à accès réserv

par niconicochan » 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).

Re: Pas de vérification des champs dans pages à accès réserv

par xTG » 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.

Re: Pas de vérification des champs dans pages à accès réserv

par niconicochan » 03 nov. 2014, 11:10

J'ai oublié de reprendre la première ligne avec <?php ce qui donc donc:
<?php
#partie php commune à toute session => ici récupération de $_SESSION['id_user']
 session_start();
 if (isset($_SESSION['id_user']) && isset($_SESSION['login'])){
 } else {
 header("Location: http://localhost/mon_site/ma_page.php");
 exit();
 }
 #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
}

Re: Pas de vérification des champs dans pages à accès réserv

par niconicochan » 03 nov. 2014, 11:07

Le code suivant ne fonctionne malheureusement pas :(
#partie php commune à toute session => ici récupération de $_SESSION['id_user']
session_start();
if (isset($_SESSION['id_user']) && isset($_SESSION['login'])){
} else {
header("Location: http://localhost/mon_site/ma_page.php");
exit();
}
#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
}
$c étant empty je devrais en tant qu'utilisateur voir la boîte de dialogue modale
apparaître mais tout se passe comme si ma condition n'existait pas.
Le javascript est bien activé sur mon navigateur, j'ai vérifié :D

Re: Pas de vérification des champs dans pages à accès réserv

par toytoy » 01 nov. 2014, 16:32

<?php
if (empty($a) || empty($b) || empty($c)){
?>
<script type="text/javascript">
alert('Veuillez saisir les données manquantes');
document.location.href="Location: http://localhost/mon_site/ma_page.php"
<script>
<?php
balise <script> non fermante, et la syntaxe de document.location.href est :

document.location.href = "http://localhost/mon_site/ma_page.php"

de plus si ton utilisateur désactive js, il faut aussi que tu penses à vérifier avant l'insertion de ta bdd que tes valeurs ne sont pas vides

Pour ce qui est de html5, sa commence à se généraliser, mais comme j, sa peut être déactivé

Re: Pas de vérification des champs dans pages à accès réserv

par niconicochan » 31 oct. 2014, 23:47

Je suis content de savoir que c'est ce qu'il faut faire, je ne suis donc peut-être pas si neuneu
que je croyais... mais n'empêche que ça ne marche pas.
Les données sont enregistrées avec les infos manquantes comme avant.
Mais je me demande si ma ligne qui commence par document ne devrait
pas se terminer par un point virgule.
La question est de savoir si cette ligne de code est à considérer ou non comme
une instruction. A priori je dirais oui.
Voyez-vous un autre problème ailleurs dans le code?

Pour ce qui est de html5 je vais plutôt rester sur des choses plus classiques.
Apprendre déjà les bases.
Et je ne suis pas sûr que le html5 soit encore bien compris des navigateurs.

Re: Pas de vérification des champs dans pages à accès réserv

par toytoy » 31 oct. 2014, 20:36

Sinon tu as l'attribut required en html5 qui est pratique, au moment de la validation, si un champ n'est pas compléter tu auras une infobulle sur le champ manquant, demandant à l'utilisateur de le remplir. Si le champ n'est pas remplie alors le formulaire n'est pas valider et tu restes sur la même page

Re: Pas de vérification des champs dans pages à accès réserv

par xTG » 31 oct. 2014, 19:20

Ce que tu fais est exactement ce qu'il faut faire. :)