[RESOLU] Faire suivre l'Username

mdpubs
Invité n'ayant pas de compte PHPfrance

19 mars 2017, 15:10

Bonjour,

Un petit soucis en php. Je suis un bidouilleur sans connaissances ni formation, juste en autodidacte.
Je n'arrive pas à trouver de solution, qui est surement très facile pour un bon utilisateur de PHP. Je précise que mon code fonctionnait parfaitement bien. Et puis je ne sais pas pourquoi, il s'est mis à ne plus marcher ? Peut-être les changement de version PHP ?

Voilà, j'ai mis une session start en haut de page pour récupérer l'Username d'une page de connexion et donc récupérer l'Username pour des opérations sur la page connectée :

----------------------------------------------------------
<?php
session_start();
if (!isset($_SESSION['username'])) {
header ('Location: connection.php');
exit();
}
?>
-----------------------------------------------------------

Ensuite j'effectue une connexion à ma base de données pour récupérer les infos de la base de données :

--------------------------------------------------------------
<?php
include ("settings_sql.php");

// Connexion au serveur
$mysql_link = mysql_connect($CONF['sql_host'], $CONF['sql_username'], $CONF['sql_password']);
mysql_select_db($CONF['sql_database']);

$sql = ("SELECT username,logo, photo1, photo2, photo3, photo4, photo5, departements FROM {$CONF['sql_prefix']}_sites WHERE username = '$username'");
$result = mysql_query($sql, $mysql_link) or die($sql.'<br/>'.mysql_error());
$resultat = mysql_fetch_assoc($result);
--------------------------------------------------------------
Mais voilà, l'username ne semble plus suivre alors qu'avant ça marchait ? Si je change '$username' par un username (un membre), ça marche. Donc la connexion et le code sont ok. C'est juste que $username ne récupère pas l'username de la connexion malgré la start session ?

Si quelqu'un à une idée pour que je modifie mon code pour que ma page connectée récupère bien l'username de connection (accès membre)

Merci :)

Mammouth du PHP | 834 Messages

19 mars 2017, 15:57

qu'est ce que cela affiche ?
echo $sql;
après avoir créé cette variable.

mdpubs
Invité n'ayant pas de compte PHPfrance

19 mars 2017, 18:51

Merci Or pour ta réponse :)
La page s'affiche sans erreur sql, mais l'Username ne suit plus, alors qu'avant toutes les informations de l'username apparaissaient. Là aucune information n'est affichées, car l'username n'est pas reconnu, alors que mon code marchait avant ???

ViPHP
ViPHP | 1980 Messages

20 mars 2017, 00:18

Attention les fonctions mysql sont devenues obsolètes. Quelle version de php utilises-tu ? Il faudra penser à utiliser mysqli ou pdo.

Que t'affiches :
echo "SELECT username,logo, photo1, photo2, photo3, photo4, photo5, departements FROM {$CONF['sql_prefix']}_sites WHERE username = '$username'";
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Mammouth du PHP | 1238 Messages

20 mars 2017, 09:40

Ca m'a tout l'air d'être un register globals qui est passé à off

tente de modifier ton début de code comme ceci
<?php
session_start();
if (!isset($_SESSION['username'])) {
header ('Location: connection.php');
exit();
}
$username = $_SESSION['username'];
?>
Si ca marche, c'est que j'ai raison. Le register global est un paramètre de php qui permet de passer automatiquement les variable globale SESSION, POST, GET, ... en variable dans ton code donc si $_SESSION['username'] existe, $username aura automatiquement la même valeur sans avoir besoin de faire $username = $_SESSION['username'];
Cela peut sembler très pratique, mais cela pose aussi des problème de sécurité. un utilisateur peux insérer des variables à sa guise en utilisant la globale GET par exemple.
C'est pourquoi ce paramètre est désormais à OFF par défaut. et je conseille de le laisser à off et de s'occuper soi même de créer les variable dans le code comme $username par exemple.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8755 Messages

20 mars 2017, 10:35

yop

juste pour info
register globals
obsolète depuis php 5.3.0 : 29 juin 2009

et supprimé depuis php 5.4.0 1er mars 2012

je pense que 5 ans après on peu dire que register globals est supprimé de php :-)
donc équivalent de off pour rétro compatibilité.

idem pour les fonctions mysql supprimées de php 7.

donc la solution de Spols est correcte même si ma préférence va à l'utilisation de $_SESSION['username'] directement.

cela dépend de la taille de ton fichier et du nombre de fois que cette variable est utilisée ;)

tu auras aussi le même problème, avec toutes les variables de session, issue de formulaire ou d'url ($_POST / $_GET), bref avec toutes celles qui devrait des super globales ($_SESSION, $_COOKIE, $_POST,$_GET, $_SERVER ...) et qui ne le font pas ;)

@+
Il en faut peu pour être heureux ......

mdpubs
Invité n'ayant pas de compte PHPfrance

21 mars 2017, 11:03

Hello les amis,

Merci de vos réponses, c'est vraiment sympa :) Vos commentaires confirment ce que je pensais, à savoir qu'une fonction est devenu obsolète. Je vais essayer la solution de Aureusms. Par contre Moogly, peux-tu me donner ta soluce avec $SESSION ? Merci beaucoup

mdpubs
Invité n'ayant pas de compte PHPfrance

21 mars 2017, 11:06

D'ailleurs si quelqu'un peut convertir mon code proposé dans une version compatible PHP, ce serait super :)

mdpubs
Invité n'ayant pas de compte PHPfrance

21 mars 2017, 11:19

Voilà je viens d'essayer la solution de Spols. Et ça re-marche :) Merci :wink: Bon ben je pourrai en profiter pour passer aux dernières version de PHP, bien que je suis un bidouilleur et que je m'y connais très peu. Donc ça tient toujours, si quelqu'un peut me donner la version de mon ancien code en nouveau code :) Merci les amis, c'est super précieux ce que vous faites quand vous aidez les autres. Perso j'ai tout appris comme ça ! Vous êtes extra :)

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8755 Messages

21 mars 2017, 12:26

si tu veux passer à php7 y a un peu de taff mais pas beaucoup
pour l'extension mysql supprimé, Ryle à fait un tuto de compète : faq-tutoriels/passer-mysql-mysqli-pdo-t276282.html
c'est très, (très, très ?) complet ;)

pour le reste faut globalement utiliser les super globales (conseillé depuis php 4.4 il y a plus de 10ans ;) ) la liste : http://php.net/manual/fr/reserved.variables.php
et un bout de doc sur le sujet (doc de php) http://php.net/manual/fr/language.varia ... ternal.php

bonne lecture

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 1 Messages

22 mars 2017, 18:35

Merci Moogli :)