Page 1 sur 2

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

Posté : 30 oct. 2014, 10:26
par niconicochan
Bonjour,

***
Je vous précise que ce message est complètement différent de celui que j'ai posté hier.
J'ai donc bien deux problèmes qui n'ont rien à voir l'un avec l'autre.
Je le précise pour que vous sachiez bien qu'il ne s'agit pas de multipostage.
***

J'ai un formulaire dans une page à accès réservé.
Dans la page de traitement de formulaire, j'écris du code qui assure que tout est bien remplis,
sinon, une boîte modale indique que tous les champs ne sont pas remplis et renvoit
l'utilisateur sur le formulaire pour lui demander de compléter ce dernier.
Le code n'est pas lu. Si l'utilisateur ne remplis pas tous les champs obligatoires,
les données rentrent dans la bdd avec les informations manquantes comme si
ce n'était pas gênant.
J'ai écris un petit code de debug pour simplifier la donne:
<?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/index.php");
}
#fin partie php commune à toute session

#code debug.
$a = '1';
$b = '2';

if (empty($a) || empty($b) || empty($c)){
echo '<body onLoad="alert(\'no\')">';
echo '<meta http-equiv="refresh" content="0;URL=ma_page.php">';
}
Lorsque l'utilisateur envoit le formulaire tout ce passe comme si de rien n'était,
les données rentrent dans la bdd avec les informations manquantes.
Hors, vous voyez que dans mon code de debug la variable $c n'existe pas.
Une boîte modale devrait apparaître pour informer et réorienter l'utilisateur.
Mais rien ne se passe.

Je ne comprends pas pourquoi, d'autant plus que j'utilise ce genre de code ailleurs dans mon site,
à un endroit différent d'une session à accès réservé. Et à cet endroit là ça marche.
Serait-ce la session qui crée le problème?
Est-ce que quelqu'un pourrait m'aider à y voir clair?

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

Posté : 30 oct. 2014, 20:24
par Nestecha
Aucune raison pour laquelle le code rentrerait dans ton if, tout se passe comme prévu.

empty($a) = false, puisque $a = '1'.
empty($b) = false, puisque $b = '2'.
empty($c) = false, puisque $c n'existe pas.

empty ne renvoi true que quand la variable est null, false, une chaine vide, 0, 0.0...

http://php.net/manual/fr/function.empty.php

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

Posté : 31 oct. 2014, 13:57
par niconicochan
Merci Nestecha pour tes explications que j'ai parfaitement compris :D

Mais même quand j'écris
#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/index.php");
}
#fin partie php commune à toute session

#code debug.
$a = '1';
$b = '2';
$c = '';

if (empty($a) || empty($b) || empty($c)){
echo '<body onLoad="alert(\'no\')">';
echo '<meta http-equiv="refresh" content="0;URL=ma_page.php">';
}
le javascript et la réorientation devraient s'exécuter
car ma variable $c est maintenant empty
J'ai aussi essayé de remplacer $c = ''; par $c = '0';
mais ça ne fonctionne pas non plus.

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

Posté : 31 oct. 2014, 14:22
par xTG
1/ Après une redirection via header il faut un exit() ou un die() pour éviter que le reste du script ne soit évalué. (cela peut se produire suivant la configuration serveur)

2/ Ta balise body est-elle bien dans une balise html ?

3/ Une balise meta se doit d'être dans une balise head. Qui est une balise qui est placée avant une balise body.

Certains navigateurs sont permissifs mais de là à vouloir obtenir un résultat cohérent en faisant n'importe quoi il y a un fossé. :twisted:

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

Posté : 31 oct. 2014, 15:19
par toytoy
header('Refresh: $t; url=$cible);

où t est le temps en secondes, et $cible l'url cible

sinon le classique

header('location: monadresseurl');
exit();

comme l'as dit xTG

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

Posté : 31 oct. 2014, 16:43
par niconicochan
Oui, vous avez raison, le problème vient des balises comme l'a dit xTG.
Avec un simple header comme le recommande Toytoy tout fonctionne.

J'en ai aussi profité pour rajouter des exit(); derrière chaque header partout sur mon site. Merci :wink:

Mais voilà, je voudrais informer mes utilisateurs qu'il manque une ou plusieurs données au moyen d'une boîte de dialogue
modale javascript qui redirigera ces derniers vers la page de formulaire à compléter.
Le code que j'ai mis n'est pas fait directement par moi, je l'ai trouvé un jour par hasard en recommandation
sur un autre forum, en surfant par curiosité.
Tout ce que vous me dites sur les balises je trouve aussi que c'est étonnant, mais je me suis dis que si c'est
écrit sur un forum ça doit être bon, que si je trouve ça bizarre c'est qu'il y a sûrment des bottes secrètes que le débutant
que je suis ne connais pas encore.
Mais je crois qu'il faut effectivement que je modifie ce code.

Mais je risque d'avoir besoin de votre aide car je suis dans une page de traitement de formulaire écrite en php
et ma boîte de dialogue est à écrire en javascript, et la redirection est en SGML.
J'ai bien grosso modo tous les éléments pour écrire le code mais ce que je ne comprends pas c'est comment écrire
un langage dans un autre langage, comment accorder ensemble tous les langages qui rentrent
dans la composition d'un même programme.

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

Posté : 31 oct. 2014, 17:02
par xTG
Pour passer une variable PHP dans du javascript :
var maVariableJS = '<?php echo $maVariablePHP; ?>';
alert(maVariableJS);

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

Posté : 31 oct. 2014, 18:36
par niconicochan
Merci.
Mais en fait j'aurais bien aimé savoir l'inverse.
Je suis dans une page de traitement de formulaire écrite en php
et je souhaiterais mettre du javascript dans mon php
pour renvoyer sur une boîte de dialogue modale si tous les champs du formulaire n'ont pas été remplis.
La boîte renverra alors l'utilisateur sur le formulaire pour qu'il complète sa saisie.

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

Posté : 31 oct. 2014, 19:12
par niconicochan
Vloilà en gros ce que j'aimerais faire (si tu arrives à comprendre):
<?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/index.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="Location: http://localhost/mon_site/ma_page.php"
<script>
<?php
Comme $c est empty, l'utilisateur devrait voir apparaître une boîte de dialogue modale lui disant
qu'il doit saisir les données manquantes pour valider son formulaire, et un lien devrait le renvoyer sur
le formulaire pour qu'il complète le formulaire avant de le renvoyer.
Mais je n'arrive pas à obtenir ce résultat.

Je ne sais pas mettre du javascript dans ma feuille de traitement de formulaire en php.
J'ai voulu mettre les balises de début et de fin indiquant la portion de code écrite en javascript.
Pour cela, j'au dû fermer le passage écrit en php avec ?> juste avant le code javascript
et ouvrir un autre passage avec <?php juste après le code javascript.

Si quelqu'un peut m'aider à faire ça, ce serait sympa :D

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

Posté : 31 oct. 2014, 19:20
par xTG
Ce que tu fais est exactement ce qu'il faut faire. :)

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

Posté : 31 oct. 2014, 20:36
par toytoy
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

Posté : 31 oct. 2014, 23:47
par niconicochan
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

Posté : 01 nov. 2014, 16:32
par toytoy
<?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

Posté : 03 nov. 2014, 11:07
par niconicochan
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

Posté : 03 nov. 2014, 11:10
par niconicochan
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
}