[RESOLU] Htaccess, page profile.php

Avatar du membre
Mammouth du PHP | 1564 Messages

06 mars 2013, 16:04

re

pour que tu veuille que d'autre personne puisse accéder à cette page, il te faut enlever la condition du "si t'es pas connecté, tu est rediriger vers ../index.php", soit cette partie:
if (!isset($_SESSION['pseudo'])) {
        header('Location: ../index.php');
        exit();
}
ensuite, je comprend ceci: (deux foix la même requête)
$sql = connect_sql();
$pseudo = htmlentities($_GET['pseudo'], ENT_QUOTES);
$query = mysql_query("SELECT * FROM wa_communaute WHERE pseudo='".mysql_real_escape_string($pseudo)."'");
$result = mysql_fetch_array ($query);
mysql_close();

if(mysql_num_rows($query)==0) {
        header('Location: ../index.php');
        exit();
} else {

$sql = connect_sql();
$pseudo = htmlentities($_GET['pseudo'], ENT_QUOTES);
$requete =  mysql_query('SELECT * FROM wa_communaute WHERE pseudo="'.mysql_real_escape_string($pseudo).'"');
if(mysql_num_rows($requete)>0) {
$result = mysql_fetch_array ($requete);
mysql_close();
tu n'a pas besoin de refaire une requête vue que tu en a faite une auparavant, tu aura juste besoin de faire un mysql_fetch_assoc() après le mysql_num_rows() (si ya plus de 0 résultat, si ya 0 c'est que le membre n'a pas été trouvé donc pas besoin de traiter mysql_fetch_assoc())

PS: utiliser mysql_fetch_assoc() à la place de mysql_fetch_array() est plus rapide (array sert à avoir les résultat via des chiffres à la places des vrais nom, exemple: $result['nom'] pourrait être disponible via $result[0] également mais comme presque jamais ont utilise les chiffres, c'est pourquoi je conseil l'utilisation de assoc)


Pour l'affichage de certaines informations du membre, ou pas:

tu à juste à ajouter des nouvelles colonnes dans la base de données (dans la table des membres) type: afficher_info_nom (En TINYINT ça suffira vue que ce champ comporte seulement 0 ou 1, par défaut, tu lui assigne 0 quand tu l'ajoute à la )table)

ensuite, tu fait un formulaire de modification membre où le membre pourra modifier cette valeur par lui même avec comme choix "oui" ou "non" (soit: 1 ou 0)


Pour afficher ou non la valeur, tu fera une condition en ternaire (plus simple et un poil plus rapide):
echo $result['afficher_info_nom'] == 1 ? "Nom: ".$result['nom'] : "";
Plus d'info sur la condition ternaire: http://php.net/manual/fr/language.opera ... on.ternary

Eléphant du PHP | 386 Messages

07 mars 2013, 02:43

Merci pour ton message !

Il faut obligatoirement créer une colonne par infos qu'on souhaite cacher ?
Parce que je vais permettre au membre de cacher :

Son prénom, nom, age, email, ville, date de naissance ...

On pourrait juste créer 2 colonnes :

- active (Les infos sont visibles)
- noactive (Le contraire)

Sinon j'ai plutôt redirigé les internautes non connectés qui visitent le profil d'un membre vers la page de connexion, j'ai pas le temps de modifier la page profil (peut-être un jour).
Ensuite j'ai supprimé une des 2 requêtes et j'ai fais les modifs avec mysql_fetch_assoc pour alléger le serveur :wink:

Je sais pas ce que je ferais sans toi :priere: lol

Avatar du membre
Mammouth du PHP | 1564 Messages

07 mars 2013, 04:14

si tu veux cacher ou modifier un champ en particulier, tu peu faire avec une seule colonne et récupérer les valeurs via un explode en PHP, genre:

Code : Tout sélectionner

0:0:1:0:1:1:1:0:
le séparateur serait en fait le deux points (:) et les 1 ou 0 correspondrait à oui ou non je veux afficher certaines valeur.

je pense que le plus simple est de faire un champ pour chaque valeur sauf si tu "oui ou non" je souhaite afficher mes infos, pour cela, une colonne suffira et comme valeur elle aura 0 (pour ne pa afficher) et 1 (pour les afficher)

Eléphant du PHP | 386 Messages

08 mars 2013, 03:49

Aurais tu un exemple, je n'ai pas trop compris comment faire :?
Il faut que je mets quoi comme colonne, et quelle requête faire en php

Avatar du membre
Mammouth du PHP | 1564 Messages

08 mars 2013, 05:10

dans ta table membres tu ajoute un champ que tu nomme "afficher_infos", tu le met en TINYINT => valeur par défaut: 0

tu ira ensuite cherche cette valeur et si le contenu et 0, tu n'affiche pas les infos, si la valeur est 1, tu affiche les infos.

as tu compris ?

Eléphant du PHP | 386 Messages

08 mars 2013, 05:38

J'ai crée la colonne.

Un exemple avec l'email :

Dans la page profil.php, l'email est affiché : [email protected]

A coté de l'email, j'afficherais si le membre veut l'afficher ou non au public.
J'utilise un select pour savoir qui peut voir mes infos (Comme sur Facebook) :

- Public → Valeur 1
- Mes amis → Valeur 2
- Moi uniquement → Valeur 0

Ensuite créer la requête et comment afficher la valeur avec ou sans la fonction caché, je ne saurais pas comment faire :cry:

Bien sur ce n'est qu'un exemple pour comprendre, je ne copie pas sur Facebook :wink:

Merci de ton aide

Avatar du membre
Mammouth du PHP | 1564 Messages

08 mars 2013, 07:18

fait comme ceci:

on suppose que la colonne (colonne/champ, pareille pour moi) qui dit "oui ou non je souhaite afficher mes infos" s'appelle "afficher_infos" et le non de ta table mysql où sont inscrits tes membres s'appelle "membres"

donc, on récupère la valeur de afficher_infos comme ceci:
<?php
$Req = mysql_query("SELECT * FROM membres WHERE pseudo = '".htmlentities($_GET['pseudo'], ENT_QUOTES)."'");
// on vérifie si ce membre existe (si il est inscrit dans la table mysql):
if(mysq_num_rows($Req) == 0) { // on part du principe que un seul pseudo preille peut être créé, il ne peut y avoir de doublon (donc si = non trouvé, elese, (1) = trouvé, on affiche donc ses infos (si il le souhaite bien entendu))
	echo "Membre non inscrits";
} else {
	// on récupére les infos:
	$InfosDuMembre = mysql_fetch_assoc($Req);
	// maintenant on récupère notre fameuse valeur "afficher_infos":
	if($InfosDuMembre['afficher_infos'] == 0) { // si 0, soit "non, je souhaite pas afficher mes infos"
		echo "Ce membre ne souhaite pas afficher ces informations personnelles.";
	} else { // si 1, soit "oui, je souhaite afficher mes infos"
		// on affiche les infos du membre:
		?>
		<ul>
			<li>Pseudo: <?php echo htmlentities($_GET['pseudo'], ENT_QUOTES); ?></li>
			<li>Nom: <?php echo $InfosDuMembre['nom'] ; ?></li>
			<li>Prénom: <?php echo $InfosDuMembre['prenom'] ; ?></li>
			<li>etc...</li>
		</ul>
		<?php
	}
}
en espérant que ce code t'aidera à comprendre la façon de procéder (parmi d'autre bien sur)

Eléphant du PHP | 386 Messages

08 mars 2013, 15:36

Merci j'ai bien compris cette partie.
Ensuite la dernière chose, c'est le formulaire en php du select pour modifier la valeur du champ.
Je fais une requête update pour mettre à jour la valeur ? Comment dois-je procéder ?

Ce sera le dernier problème ^^ tu dois en avoir marre de me donner des solutions ^^ lol :roll:

Avatar du membre
Mammouth du PHP | 1564 Messages

08 mars 2013, 19:06

Ce sera le dernier problème ^^ tu dois en avoir marre de me donner des solutions ^^ lol :roll:
si je te répond c'est que j'en ai pas marre

pour faire une mise à jour du champ afficher_infos, c'est simple (on dit tjrs ça quand ont sais ^^)

la partie HTML:
<form action="tapagedemodif.php" method="post">
	<select name="choix">
		<option value="1"<?php echo $InfosDuMembre['afficher_infos'] == 1 ? ' selected="selected"' : ''; ?>>Je souhaite afficher mes infos au public</option>
		<option value="0"<?php echo $InfosDuMembre['afficher_infos'] == 0 ? ' selected="selected"' : ''; ?>>Je ne souhaite pas afficher mes infos au public</option>
	</select>
	<br />
	<input type="submit" value="Modifier" />
</form>
la partie:

Code : Tout sélectionner

<?php echo $InfosDuMembre['afficher_infos'] == 1 ? ' selected="selected"' : ''; ?>
permet de mettre automatiquement le sélecteur sur l'ancien choix du membre

et la partie PHP:
<?php
if(isset($_POST['choix'])) {
	// on vérifie les données séléctionnées:
	if(!preg_match("#^(1|0)$#",$_POST['choix'])) { // si le visiteur à séléctionné soit oui, soit non (ne jamais faire confiance en ce que l'utilisateur peut entré dans un formulaire, c'est la règle de base !)
		// notre preg_match demande simplement si le choix est de 1 ou 0, si c'est autre chose, on affiche un message qui dit que le choix est incorrect:
		echo "<p>Choix incorrect.</p>";
	} else {
		// si le choix est correct, on met à jour ce choix dans la BDD comme ceci:
		if(mysql_query("UPDATE membres SET afficher_infos = ".." WHERE pseudo = '".htmlentities($_GET['pseudo'], ENT_QUOTES)."'")) {
			echo "Votre choix à été sauvegardé !";
		} else {
			echo "Une erreur s'est produite. Choix non sauvegardé.";
			// possibilité d'afficher pourquoi il y a eu une erreur mais c'est toutes déconseiller de l'afficher au membre
			// mais plutôt d'envoyer un mail à l'admin avec à l'intérieur l'erreur
			
			// donc on peut l'afficher comme ceci:
			echo "Erreur retournée: ".mysql_error();
		}
	}
}

Eléphant du PHP | 386 Messages

09 mars 2013, 03:44

Merci beaucoup,

Dans le cas où il y a un choix dans le select "Amis" avec comme valeur 2 (visible juste par les amis)
Je n'ai pas crée de système d'amis, mais peux-tu m'expliquer comment faire pour que les infos soit visible juste par les amis du membre ?

Ça sera 70 % du site fonctionnel :)

A partir d'une table mysql : "amis" avec :

id
id_du_membre
id_de_amis

ou autre colonnes, je sais pas :?

Avatar du membre
Mammouth du PHP | 1564 Messages

09 mars 2013, 05:11

id
id_du_membre
id_de_amis
oui c'est déjà une bonne base, ensuite tu va voir (comme tu le fait pour le pseudo) si l'id du pseudo est dans la table "amis", si il y est, tu vérifiensuite si l'id du visiteur (qui doit être connecté) est inséré dans la table amis) :wink:

Eléphant du PHP | 386 Messages

10 mars 2013, 00:35

J'installe tout (système d'amis compris) et j'te redis par MP quand j'ai terminé, et on verra après pour afficher les infos du membre seulement aux amis
Merci beaucoup :)