Lefounard

  • Signature
    I am singing in the rain , I am happy again !!
  • Site web
  • Nombre de sujets
    177
  • Nombre de messages
    785
  • Nombre de commentaires
    9
  • Nombre de news
    Aucune
  • Niveau en PHP
    Débutant

Ses derniers messages sur les forums

Lefounard
le 27/07/2007 à 10:54
Include PHP
J'ai deja fini :)
Merci quand meme, mais c'est le meme modèle que je me suis basé, par contre ce qui est lourd, c'est que j'ai du changer tous les liens retours des sous-pages vers administration.php
Ciao,
I am singing in the rain , I am happy again !!
Lefounard
le 27/07/2007 à 10:51
Unknown database ????
Vérifier les identifiants de connexions car ca veut simplement dire que la base de donnée est inconnu.
Ciao,
I am singing in the rain , I am happy again !!
Lefounard
le 26/07/2007 à 16:44
Connaitre les amis des amis
Systeme de Groupe :

Tables

membre
[login_membre]

table groupe
[nom_groupe, list(login_membre)]

table appartient_groupe
[login_membre,nom_groupe]

Probleme : on ne limite pas aux amis des amis, un groupe peut contenir toutes les membres du site dans un cas particulier

Inscription

Le membre n'appartient a aucun groupe au depart.


Ajout du premier ami

Lors de l'ajout du premier ami, le membre va se voir attribuer le groupe de la personne qu'il ajoute.
Sinon il peut creer un groupe ou il sera seul dedans. Il faut eviter ce cas de figure.
Dans le cas ou les deux amis n'ont pas de groupe, on invite le membre a creer un groupe.
Le membre peut creer son groupe.

Ajout d'un ami

Les amis s'echange les groupe auxquels il appartiennent, requete donc modere deux update et recuperation des groupes via un select dans table groupe


Affichage le l'entourage :
On affichage la liste des membres des groupe auquel le membre appartient

Le problème est de pouvoir limiter en terme de d'amis d'amis, c'est pour ca que dans ce cas de figure c'est surement le parcours d'un arborescence qui est peut-etre
le plus judicieux
I am singing in the rain , I am happy again !!
Lefounard
le 26/07/2007 à 16:23
Connaitre les amis des amis
Supposons la table amitie
[id_membre1;id_membre2]

Compléxité en mémoire

On stocke par exemple [1;2] mais la suite on ne stockera par [2;1] car c'est une relation reciproque.
Si nous avons n membres, la table amitie dans le pire des cas stockera n*(n-1) tuples,
c'est a dire qu'un membre peut avoir au max n-1 amis.
Donc en termes d'occupations memoire dans le pire des cas
n*(n-1)*(nombre de champs dans la table = 2)*taille d'un champs = int(8))

On peut gagner en memoire,
si au lieu de stocker id_membre1;id_membre2.
On stocke id_membre; list_damis,
list_damis de la forme (id1;id2;.......)
le traitement sera legerement allourdi par un implode et explode
On devra ajouter aussi pareil un controle :
Par exemple, j'ajoute l'ami 2 du membre 1,
Lors de l'ajout de 2, je verifie que 1 n'est pas deja dans la liste d'amis de 2.
Cela permettra d'eviter des doublons dans la table
Occupation memoire : n * (taille du champ id_membre + taille list_damis)
La normalement on gagne en terme de memoire.


Compléxité en requete :

Prenons notre cas ou on doit connaitre seulement les amis des amis.
Donc deja on va reprendre toute la partir precedente et au lieu de stocker les id, on stocke les logins,
on perd un peu en memoire mais on gagne en requete et on evite lors de l'affichage de la communauté
de faire des selections inutiles pour recuperer les logins a partir des ids.

Donc pour recuperer la communauté d'une personne, il faut recuperer ses amis directe , simple select et recuperation de la liste.
Pour chaque amis , on recupere leur liste d'amis.
Donc au total, si k amis direct, ca fait k+1 requetes.
Je ne vois pas comment faire autrement, je t'ai fais gagner en terme de memoire.

C'est alors que je me rend compte qu'il sera preferable de perdre en memoire et gagner en requete.
Pour cela ajouter les amis des amis ta liste d'amis d'un membre.
Ca tombera a une seule requete a l'affichage, mais a l'insertion d'un amis, il faudra faire un update de chaque amis de la liste.
Si 500 dans l'entourage ca fait 500 UPDATE. Compliqué ton truc.

Sinon une idée, tu definie tes communauté par un nom, tu fais du hierarchique comme dans le routage.
C'est peut-etre le plus simple et le plus optimiser.
I am singing in the rain , I am happy again !!
Lefounard
le 26/07/2007 à 09:58
Limiter le nombre de connexion d'un même utilisateur
Il faut combiner plusieurs pour l'identifier et encore cela ne fonctionnera pas forcement a 100%. Car sur l'internet il y a toujours moyen d'ursuper son identité :
Voila differentes methodes a combiner
- cookies
- sessions
- stocker son adresse IP (ne pas oublier de la vider apres la visite, sinon un visiteur pourrait se retrouver interdit d'acces car il a la meme IP)
-
stocker son navigateur (inconvénient : l'internaute devra commencer et finir sa navigation internet sur le meme navigateur).
Sinon il doit existe d'autres controles en php mais cela font partie des plus connu.
Ciao,
I am singing in the rain , I am happy again !!
Lefounard
le 25/07/2007 à 16:26
PHP Sessions Securiser
Bonjour,
Voila je voudrais sécuriser ma partie administration du site avec les sessions php, donc j'ai trouvé quelques exemples sur le net. Et j'ai realiser ca :

login.php
<?php
session_regenerate_id();
$_SESSION['initiated'] = true;
$_SESSION['level'] = 'admin';
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);

/* Creation de la fingerprint cote serveur */
$string = $_SERVER['HTTP_USER_AGENT'];
$string .= 'N0S3s510nH4cK1NG';
$fingerprint = md5($string);

/* redirection sur l'accueil administration */
echo '<a href="index.php?n='.$fingerprint.'">Entrer Admin</a><br />';
?>


Bon on définie, une fingerprint qui sera transmit par GET entre les pages securise.

pagesec.php
<?php
/* Anti attaque par SESSION ID -----------------------------------------------------------------------------*/

if (!isset($_SESSION['initiated']))
{
echo 'Session non initialisé<br />';
echo 'Pour des raisons de sécurité, nous vous demander de vous connecter<br />';
echo '<a href="login_admin.php">connexion</a>';

/* Formulaire de connexion */

/* a Mettre dans la connexion */
/*session_regenerate_id();
$_SESSION['initiated'] = true;*/
}

echo '<br /><br />------------------------------------------------------------------<br /><br />';

/* Securiser PHP SESSIONS contre SID Attack */
/* Si la variable de session du navigateur est definie */
if(isset($_SESSION['HTTP_USER_AGENT'])){

/* Creation de la fingerprint cote serveur */
$string = $_SERVER['HTTP_USER_AGENT'];
$string .= 'N0S3s510nH4cK1NG';
$fingerprint = md5($string);

/* Si la fingerprint a deja été definie */
if(isset($_GET['n'])){
/* Si la fingerprint du client correspond a celle cote serveur, peu de risque de detournement de SID */
if(trim($_GET['n']==$fingerprint)){
echo 'Authentification correcte';
}
else {
echo 'Fingerprint non correspondante<br />';
echo 'Pour des raisons de sécurité, nous vous demander de vous connecter<br />';
echo '<a href="login_admin.php">connexion</a>';

/* Formulaire de connexion */

}
}
else {
echo 'Fingerprint non définie.<br />';
echo 'Pour des raisons de sécurité, nous vous demander de vous connecter<br />';
echo '<a href="login_admin.php">connexion</a>';
/* Formulaire de connexion */
}
}
else
{
echo 'Variable de sessions http user agent non définie.<br />';
echo 'Pour des raisons de sécurité, nous vous demander de vous connecter<br />';
echo '<a href="login_admin.php">connexion</a>';

/* Formulaire de connexion */

/*echo 'user agent NON defini';
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);*/
}

/*----------------------------------------------------------------------------------------------------------------------------*/
?>


Et ca, c'est le controle en debut de page.
En fait cela permet d'eviter une attaque par fixation de session (pagesec.php?PHPSESSID=numero) et aussi une attague par detournement de session, quelqu'un se fait passer par quelqu'un d'autres, d'ou l'interet de la fingerprint base sur le md5 du useragent et le md5 d'une chaine de caractere pris au pif.
Pouvez vous me conseiller sur la sécurité des sessions, et pensez vous qu'il y a mieux ou plus simples ?
Merci de vos conseils,
Ciao,
I am singing in the rain , I am happy again !!
Lefounard
le 25/07/2007 à 16:14
Connaitre les amis des amis
Si tu veux alleger en requete, tu vas perdre en memoire.
Il faut que tu trouve un compromis.
Si tu veux pousser ton programme, tu fais un graphe de ta communauté, ensuite si tu veux trouver les amis des amis du membre A, tu calcule l'arbre recouvrant de racine A et de chemin de longueur max 2 (ce qui correspond aux amis de tes amis).
L'implémentation n'est pas trop dur niveau mémoiré, tu peux faire ca sous forme de matrice, mais ca peut-etre lourd, si 10 000 membres.
On prends 1 bit pour dire (0 non ami, 1 ami), sur 10 000 inscrits, ca fait 10 000 ^2 bits, ca reste encore raisonnable.
Sinon, tu peux stocker sous liste d'adjacence.
Alors si a chaque fois que tu dois afficher les amis des amis, ca doit faire si ton algo doit se refaire.
Donc a la limite, tu lance l'algo juste quand quelqu'un modifie un ami, et apres tu stocke ton arbre d'amis dans un fichier xml ou bdd.
Ca parait plutot lourd tout ce que je raconte, c'est une posibilité.
Il y a surement des possibilité plus simples.
Ciao,
I am singing in the rain , I am happy again !!
Lefounard
le 24/07/2007 à 18:22
Bug d'inscription MySQL
Pour la constante LINK
<?php
$base=mysql_connect('localhost','root','');
mysql_select_db('membres',$base);

define ("LINK", $base);


/*---------------a utiliser avant une requete --------------*/
if(!is_resource(LINK))
{
header( 'Location: '.ROOT.ADMIN.'erreur.php');
}

?>

A toi de tester le retour de mysql_connect et aussi
I am singing in the rain , I am happy again !!
Lefounard
le 24/07/2007 à 18:17
Bug d'inscription MySQL
Je te conseille de faire tes insertions comme c'est indiqué sur le manuel :
<?php
if(get_magic_quotes_gpc()) {
$login = stripslashes($_POST['login']);
$password = stripslashes($_POST['password']);
}
else {
$login = $_POST['login'];
$password = $_POST['password'];
}

$req=sprintf("INSERT INTO `clients` (`id_client`, `login`, `password`) VALUES ('%d', '%s', '%s')",
"",
mysql_real_escape_string($login, LINK),
mysql_real_escape_string($password, LINK));

$result=mysql_query($req,LINK);
if(!$result){
/* Ton traitement d'erreur */
}

?>

Ciao ;)
I am singing in the rain , I am happy again !!
Lefounard
le 24/07/2007 à 11:41
ajouter un champ MySQL...
En sql :
ALTER TABLE `table` ADD `nom_champ` VARCHAR( 20 ) NOT NULL AFTER `champs_precedant` ;

Evidement, tu mets le type que tu souhaites a la place de VARCHAR, et aussi la taille de ton champs a la place de 20.
Il y a d'autres elements que tu spécifies pour l'ajout d'un champs, mattes le manuel de SQL.
Ciao,
I am singing in the rain , I am happy again !!
LoadingChargement en cours