Page 1 sur 1

Problème d'emploi de Isset

Posté : 25 févr. 2005, 14:38
par Aureusms
Bonjour,

Je début en php (j+2) et j'essaye de m'inspirer d'un livre que vous citiez dans vos colonnes : PHP 5 avancé. Maintenant, j'essaye de recopier bètement pour me familiariser avec le code et j'ai quelque soucis à comprendre un emploi d'ISSET donné par le bouquin (en clair cela ne fonctionne pas!)

je m'explique : (pour ceux qui ont le bouquin : page 243 & 244)
deux fichiers auth.php et verif.php.

Le 1er auth.php est une méthode POST pour envoyer en superglobale deux informations (pseudo et motdepasse) vers verif.php

code de auth.php :

Code : Tout sélectionner

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <meta name="generator" content="PSPad editor, www.pspad.com"> <title>Identification</title> </head> <body> <form method ="post" action="verif.php"> <p> <label for"nom">Pseudo :</label> <input type="text" name="pseudo"> </p> <p> <label for"motdepasse">Mot de Passe :</label> <input type="password" name="motdepasse"> </p> <p> <input type ="submit" value="s'identifier"> </p> </form> </body> </html>
code de verif.php

Code : Tout sélectionner

<?php //initialisation de la session session_start(); //si on a reçu toutes les données du formulaire if (isset ($_POST['pseudo']) and isset ($_POST['motdepasse'])) { //on les reprend $nom=$_POST['pseudo']; $motdepasse=$_POST['motdepasse']; //dans notre cas, tous les mots de passe sont valides //on sauvegarde donc son nom dans la session $_SESSION['nom']=$nom; $message ='Vous êtes correctement identifié'; //en cas de non identification - non utlisé //$message 'Mauvais mot de passe'; //$message .=<A href="auth.php">retour</A>'; } else { //un des champs n'est pas rempli $message ='le login ou le mot de passe est vide <BR>'; $message .='<A href="auth.php">retour</A>'; $message .='<BR> $nom'; } ?> <HTML> <HEAD><TITLE>Identification</TITLE></HEAD> <BODY> <P> <?php echo $message ?> </P></BODY> </HTML>
Voilà, maintenant le problème est que même si je rentre aucun pseudo ou mot de passe dans Auth.php, il me dis toujours que je suis bien identifié. en décodé, je pense que la requète if (isset['...) est mal écrite.

A propos, pour ceux qui ont le livre, je ne suis pas expert mais la ligne original était :
if (isset ($_POST['nom']) and isset ($_POST['motdepasse'])) {
au lieu de
if (isset ($_POST['pseudo']) and isset ($_POST['motdepasse'])) {
et c'est moi qui est changé 'nom' en 'pseudo'. Me suis-je trompé ou ai-je corrigé une coquille du livre. (et dans ce cas je me dirais que je débute bien !!!). Merci de votre aide.

Posté : 25 févr. 2005, 14:44
par Epeda
Il faut que tu utilises la méthode empty pour vérifier si les champs sont vides plutôt que isset. Je pense qu'il doit y avoir une autre solution mais moi je le ferais comme ca :wink:

Posté : 25 févr. 2005, 14:48
par Jerem'
Pour vérifier si elle existe et si elle est rempli :

Code : Tout sélectionner

if(isset($_POST['pseudo']) && $_POST['pseudo']!="")
:wink:

Posté : 25 févr. 2005, 15:06
par Aureusms
Pour vérifier si elle existe et si elle est rempli :

Code : Tout sélectionner

if(isset($_POST['pseudo']) && $_POST['pseudo']!="")
:wink:
Bien merci Jerem, le problem d'identification des lignes vides ou pas rempli est résolu. Mais maintenant un gros travers se produit :
j'ai cela :

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /tmp/disk/home/maison/Files/WWW/verif.php:1) in /tmp/disk/home/maison/Files/WWW/verif.php on line 4

et la ligne 4 c'est session_start (). Comme il m'informe que les Headers sont déjà envoyés ,j'ai du mal à comprendre car d'après mes lectures PHP ferme la session après l'exécution du code. (J+2 rappellez vous mdr)

Posté : 25 févr. 2005, 15:08
par Jerem'
Vérifie qu'il n'y a rien avant ta première balise PHP

(un retour à la ligne est suffisant pour faire buguer les session)

:wink:

Posté : 25 févr. 2005, 15:24
par Aureusms
Le gros blème est que dans verif.php il n'y a rien avant ma balise. Voici le haut du code :
<?php 
session_start(); 

//initialisation de la session 
//si on a reçu toutes les données du formulaire 
if(isset($_POST['pseudo']) && $_POST['pseudo']!="" 
                           && isset ($_POST['motdepasse'])&& $_POST['motdepasse']!="") 
tu peux remarquer que j'ai ajouté tes conseils - Mercie encore!!

Dans ce cas de figure là, le message d'erreur est :

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /tmp/disk/home/maison/Files/WWW/verif.php:1) in /tmp/disk/home/maison/Files/WWW/verif.php on line 2

en clair on est passé de la ligne 4 à 2 mdr

Posté : 25 févr. 2005, 15:25
par Xenon_54

Posté : 25 févr. 2005, 15:27
par Jerem'
Autre chose même si c'est pas la solution à ce problème :
method ="post"
Dans auth.php, attention à l'espace entre 'method' et le égal :wink:
method="post"

Posté : 25 févr. 2005, 16:16
par Aureusms
La cela devient compliqué !!! j'ai beau avoir fais attention dans verif.php de ne rien mettre devant <?, j'ai toujours le même message d'erreur.
Peut-il avoir un problème d'acceptation de session par le serveur ?

Posté : 26 févr. 2005, 14:02
par Flood
Hello,

Copie colle les 10 premières lignes de ton script entre des balise [ code ] et [/ code ] (sans les espaces) : ainsi on pourra vérifier qu'il n'existe effectivement aucune ligne blanche ou autre sortie vers le client avant l'appel à la fonction session_start().

On est aussi d'accord que le script verif.php n'est pas inclus dans un autre ?

/Flood

Posté : 08 mars 2005, 12:16
par Aureusms
Bonjour Tout le monde et merci à Flood par cette dernière intervention.

J'ai trouvé comment résoudre le problème et c'est Flood qui m'a guidé vers cette solution. Bien sûr le problème des Headers avait été donné par Xénon (et je n'oublie pas Jerem' pour la résolution d'ISSET). Alors maintenant tenez-vous bien (roulement de tambour) : le problème venait de l'éditeur php (je ne citerais que si cela interresse quelqu'un) qui m'ajoutais obligatoirement :?@ en début de la première ligne. Je l'ai donc ouvert avec notepad et vu cela !!!. Après avoir enlevé ces caractères indésirables, tout est redevenu parfait.

Merci encore pour votre aide à tous mais croyez-moi, comme j'débute y va en avoir d'autre... :wink:

Posté : 08 mars 2005, 12:19
par Jerem'
Pour éditer mes PHP je me sers de EditPlus, il est pas mal si jamais tu veux changer :)

Posté : 15 mars 2005, 02:16
par d1a3l0t1
ouais, editplus c dla balle, c comme notepad, avec des jolies couleurs