OVH Cloud OVH Cloud

Session et affichage de donnees 'newbie'

4 réponses
Avatar
Bonjour,
Newbie, je n'arrive pas à saisir pourquoi l page 1 n'affiche pas mes
variables (voir echo tout en bas)
Si je clic sur le lien tout n bas de page vers une autre page, la les
ariables récupérées s'affichent.

J'aimerai comprendre.
Merci de votre aide...

Voir www.imedia-creation.com/tutoriels (jeux test : Helene / Helene )

<?php
session_start();
$loginOK = false; //On part du principe que la connexion est fausse.

// On n'effectue les traitement qu'à la condition que
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['login'])) &&
(!empty($_POST['password'])) ) {

// on se connecte à MySQL
$db = mysql_connect('AZERTY', 'AZERTY', 'AZERTY');

// on sélectionne la base
mysql_select_db('AZERTY',$db);

extract($_POST);

// On va chercher le mot de passe afférent à ce login
$sql = "SELECT Pseudo, Password, Nom FROM TABLE WHERE Pseudo =
'".addslashes($login)."'";
$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);

// On vérifie que l'utilisateur existe bien
if (mysql_num_rows($req) > 0) {
$data = mysql_fetch_assoc($req);

// On vérifie que son mot de passe est correct
if ($password == $data['Password']) {
$loginOK = true;
}
}
}

// Si le login a été validé on met les données en sessions
if ($loginOK) {
$_SESSION['Nom'] = $data['Nom'];
$_SESSION['Pseudo'] = $data['Pseudo'];

echo ("$Nom");
echo ("$Pseudo");
}
else {
echo 'Une erreur est survenue, veuillez réessayer !';
}
?>

<br/><a href="PageAutreInfoSession.php">Autre page avec des infos de
session</a>
<br/><a href="LienVersLogout.php">Logout</a>

4 réponses

Avatar
Olivier Miakinen

Newbie, je n'arrive pas à saisir pourquoi l page 1 n'affiche pas mes
variables (voir echo tout en bas)
Si je clic sur le lien tout n bas de page vers une autre page, la les
ariables récupérées s'affichent.

J'aimerai comprendre.


1) Désactive register_globals. Ça devrait empêcher les variables de
s'afficher aussi bien la seconde fois que la première, ce qui est un
comportement un peu plus reproductible même si ce n'est pas ce que tu
cherches à terme.

2) Remplace *toute* utilisation de variable « remplie magiquement »
par sa version tirée d'un tableau super global : par exemple $login par
$_POST['login'], $Nom par $_SESSION['Nom'], et ainsi de suite. Là ton
script devrait fonctionner aussi bien la première fois que la seconde.

Si tu ne comprends pas ce qui se passe, commence par lire le manuel et
la FAQ, à commencer par :
http://fr2.php.net/manual/fr/language.variables.predefined.php
et :
http://faqfclphp.free.fr/#rub2.7

Si après ça tu ne comprends toujours pas, reviens demander ici.

Avatar
Re bonjour.

Désactive register_globals. = OFF Apparement, c'est déjà bon, puisque les
nouvelles configurations le mette à OFF

Remplace *toute* utilisation de variable « remplie magiquement » par sa
version tirée d'un tableau super global : par exemple $login par
$_POST['login'], $Nom par $_SESSION['Nom'], et ainsi de suite. Là ton script
devrait fonctionner aussi bien la première fois que la seconde.

La je comprend par la pratique de ce que je connais ...
Mais comment ça, " variable « remplie magiquement »" ??
Mon script est t'il correct d'après vous ?

Surement, mon problème d'affichage de session venait d'une cote, ou de
$login par $_POST['login'] mais il me semble qu'il y était déjà.
En tout cas, ca fonctionne super ! C'est beau :)

PAR CONTRE J'AI 3 QUESTIONS OU J'AI BESOIN DE PISTES.

Si je possède 2 tables pour identifier mes membres :
TABLEMEMBREMOINS50ANS et TABLEMEMBREPLUSDE50ANS lol
Par exemple ;-)
Est t'il contraignant ou dangeureux de doubler le code lors d'une
identification ...
SI PAS TROUVER DANS LA BASE UN, ON CHERCHE DANS LA BASE 2 ... ?

Autre chose, à part TRIM, ADDLASH et HTMLENTITIES , que dois je encore
appliquer pour sécuriser mon PHP correctement, lors de passages de
variables?
Merci de vos avis.

Enfin, comment interdir l'accès à la page2.php si la page veriflogin.php a
refusé le Couple Login/password.

Bonne journée à tous. Bientot les fetes ... Lachez vous !
Avatar
Olivier Miakinen

Désactive register_globals. = OFF Apparement, c'est déjà bon, puisque les
nouvelles configurations le mette à OFF


Pourtant, après avoir testé $_POST['login'] tu utilises $login, ce qui
ne semble pas gêner ton script le moins du monde. Idem pour $password.
De même, après avoir stocké une valeur dans $_SESSION['Nom'] tu affiches
$Nom, ce qui ne fonctionne évidemment pas lors du premier appel du
script, et je pensais que seul register_globals=ON permettait de
l'expliquer lors des appels suivants.

Finalement, en relisant la doc, ce pourrait être dû à un bug :
http://fr2.php.net/manual/fr/ref.session.php#ini.session.bug-compat-42
http://fr2.php.net/manual/fr/ref.session.php#ini.session.bug-compat-warn

Remplace *toute* utilisation de variable « remplie magiquement » par sa
version tirée d'un tableau super global : par exemple $login par
$_POST['login'], $Nom par $_SESSION['Nom'], et ainsi de suite. Là ton script
devrait fonctionner aussi bien la première fois que la seconde.


Hé ! Ce n'est pas toi qui écrivais ça, c'était moi.

Si tu ne sais pas comment il est recommandé de citer, voir
<http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html>.
Si tu le sais mais que tu n'y arrives pas avec Outlook Express,
voir <http://www.aminautes.org/forums/configurer/oe/QF_doc.html>
ou le groupe <news:fr.comp.usenet.lecteurs-de-news>.

La je comprend par la pratique de ce que je connais ...
Mais comment ça, " variable « remplie magiquement »" ??


$Nom qui contient la valeur que tu avais mise dans $_SESSION['Nom']
lors du précédent appel.

Mon script est-il correct d'après vous ?


Non.

[ autres questions ]


Je ne suis pas vraiment compétent pour y répondre, je laisse d'autres le
faire.

Avatar
Bruno Baguette

Si je possède 2 tables pour identifier mes membres :
TABLEMEMBREMOINS50ANS et TABLEMEMBREPLUSDE50ANS lol
Par exemple ;-)
Est t'il contraignant ou dangeureux de doubler le code lors d'une
identification ...
SI PAS TROUVER DANS LA BASE UN, ON CHERCHE DANS LA BASE 2 ... ?


Attention, vous allez vous compliquer la vie...

Vous devriez mettre tous vos membres dans une table, dans laquelle vous
ajoutez leur date de naissance. Sur cette base, vous serez capable de
faire la disctinction entre les moins de 50 ans et ceux qui ont 50 ans
et plus.

Autre chose, à part TRIM, ADDLASH et HTMLENTITIES , que dois je encore
appliquer pour sécuriser mon PHP correctement, lors de passages de
variables?
Merci de vos avis.


N'utilisez pas addslashes() ! (cf. plus bas)

htmlentities() peut être pratique, sauf si vous aviez en tête de stocker
cela dans la base de données. Réservez cette fonction pour de
l'affichage pur et dur (ou de la génération de code HTML).

Le trim() est par contre une bonne habitude !

1) Faites un test sur get_magic_quotes_gpc(), si ca vous retourne 1
faites un stripslashes de toutes les variables chaine recues sur $_GET
et $_POST (en fonction de la méthode utilisée)

2) Ensuite, au lieu d'addslashes, utilisez plutôt les fonctions faites
pour ca, en fonction de votre SGBD (ex. pg_escape_string,
mysql_real_escape_string())...

En espérant que ca aide,

--
Bruno BAGUETTE -