Page 1 sur 2

Htaccess, page profile.php

Posté : 01 mars 2013, 00:07
par nico44530
Bonjour,

J'utilise ce code pour rediriger la page profil du membre vers l'url avec son pseudo en paramètre :
Ce qui fait : "http://www.monsite.fr/pseudo"

La ligne concernée est en gras

Ça fonctionne, mais quand j'écris par exemple : "http://www.monsite.fr/apwoxsiflmz"
Autrement dit si j'écris n'importe quelle lettres après l'url racine, le profil s'affiche quand même. Normalement il devrait afficher une page 404.
Options -Indexes

RewriteEngine on

RewriteCond %{HTTP_HOST} ^web-astronomie.fr$
RewriteRule ^(.*) http://www.web-astronomie.fr/$1 [QSA,L,R=301]
RewriteRule ^index.php$ http://www.web-astronomie.fr/$1 [QSA,L,R=301]

RewriteCond %{REQUEST_URI} admin/(.*) [NC]
RewriteRule ^(.*) http://admin.web-astronomie.fr/%1 [QSA,L,R=301]

RewriteCond %{REQUEST_URI} m/(.*) [NC]
RewriteRule ^(.*) http://m.web-astronomie.fr/%1 [QSA,L,R=301]

RewriteRule ^register$ http://www.web-astronomie.fr/ajax/register.php$2 [L]
RewriteRule ^login$ http://www.web-astronomie.fr/ajax/login.php$2 [L]
RewriteRule ^messages/news$ http://www.web-astronomie.fr/messaging/composer.php$2 [L]
RewriteRule ^([a-z0-9\-]+)$ http://www.web-astronomie.fr/profile/in ... ?pseudo=$1 [L]
Voici la page profile.php :
<?php
session_start();
require('include/functions.inc.php');

if (!isset($_SESSION['pseudo'])) {
	header('Location: ../index.php');
	exit();
}

if(isset($_GET['pseudo'])) {

$sql = connect_sql();
$pseudo_membre = $_SESSION['pseudo'];
$query = mysql_query("SELECT * FROM wa_communaute WHERE pseudo='".$pseudo_membre."'");
if(mysql_num_rows($query)>0) {
$result = mysql_fetch_array ($query);

$id = $result['id'];
$pseudo = $result['pseudo'];
$mail = $result['mail'];
$nom = $result['nom'];
$prenom = $result['prenom'];
$sexe = $result['sexe'];
$temps = $result['temps'];
$Mois = array("","Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");
$adresse_image = $sexe ==1 ? ''.$url_site.'/img/upload/homme.png' : ''.$url_site.'/img/upload/femme.png';
$filename = ''.$_SERVER["DOCUMENT_ROOT"].'/img/upload/'.$id.'-mini.png';
?>
<!DOCTYPE html>
<html lang="fr">
<head>
	<meta charset="utf-8">
	<title><?php echo htmlentities(ucfirst($prenom)); ?> <?php echo htmlentities(ucfirst($nom)); ?></title>
	<meta name="description" content="Web Astronomie vous permet de publier vos articles, photos... avec vos amis et les internautes du site. Inscrivez-vous dès maintenant !" />
	<meta name="keywords" content="Web Astronomie, Web-astronomie, Astronomie, Web-astro, Webastro, Web, Communauté, Réseau, Social" />
	<meta name="google-site-verification" content="MuLDj47hIOGv8WGogFlITztArNdmoZTsgQd1NUpMz7g" />
	<base href="http://www.web-astronomie.fr">
	<link rel="shortcut icon" href="img/favicon.ico" />
	<link rel="stylesheet" href="css/global.css" />
	<link rel="stylesheet" href="css/slider/default.css" type="text/css" media="screen" />
	<link rel="stylesheet" href="css/slider/slider.css" type="text/css" media="screen" />
	<script type="text/javascript" src="js/jquery.js"></script>
	<script type="text/javascript" src="js/cookie.js"></script>
	<script type="text/javascript" src="js/script.js"></script>
	<script type="text/javascript" src="js/global.js"></script>
	<script type="text/javascript" src="js/slider.js"></script>
</head>
<body>
	<div id="header" class="fixed">
		<div class="container">
<?php include('include/header.inc.php'); ?>

		</div>
	</div>
	<div id="content">
		<div class="container">
			<div id="server-500"></div>
			<?php if (isset($_COOKIE['alert-cookie'])) { ?>
			<?php } else { ?>
				<div class="alert-info">
					<p>Des perturbations sont en cours sur le site : Mise à jour Version 2.0 | <a href="">En savoir plus</a></p>
					<a class="close-alert tooltip" onclick="return false" href="">x
					<span class="tooltip"><span class="arrow"></span><span class="tip mini">Fermer</span></span></a>
				</div>
			<?php } ?>
			<noscript>
				<div class="alert-error">
					<p>Javascript est désactivé : Certaines fonctionnalités ne pourraient pas fonctionner, activez-le dans votre navigateur</p>
				</div>
			</noscript>
			<div id="rightCol" class="float-r">
<?php include('include/sidebar-r.inc.php'); ?>

			</div>
			<div class="bloc-data" id="img-couverture">
				
			</div>
			<div id="leftCol" class="float-l">
				<div class="bloc-data">

				</div>
			</div>
			<div id="content-userArea" class="float-l">
				<div class="bloc-data">
						
				</div>
			</div>
		</div>
	</div>
</body>
</html>
<?php } } else { header('Location: index.php'); } ?>
Merci pour votre aide :roll:

Re: Htaccess, page profile.php

Posté : 01 mars 2013, 03:50
par two3d
Salut, jolie site (web astronomie)

j'ai regardé un peu ton code et c'est normal qu'il n'affiche pas 404 car la regex htaccess autorise les lettres minuscule, donc ton exemple est autorisé, ce qu'il te faut c'est vérifier si ce pseudo existe dans ta base de données, sinon: tu affiche pas la page ou un msg.


Pour ton code PHP:

pas de header en bas de page, c'est illogique ! de plus, ça générera une erreur php, les header sont à placer avant même le premier caractère HTML pour pas que ça génère d'erreur ou pour que ça fonctionne parfaitement aussi.

donc pour mettre ton header location du bas, en haut, fait une condition négative en premier:

au lieu de
if(isset($_GET['pseudo'])) {
tu met: (rajout d'un ! avant isset pour dire si pas défini)
if(!isset($_GET['pseudo'])) {
pareille ensuite avec ton mysql_num_rows:
if(mysql_num_rows($query)>0) {
tu à juste à demander si 0 résultat est retourné:
if(mysql_num_rows($query) == 0) {
à cette condition, tu peut afficher un message qui indique au visiteur que son pseudo n'a pas été trouvé sans oublier de couper l’exécution du reste du script avec la fonction exit de PHP

Re: Htaccess, page profile.php

Posté : 01 mars 2013, 15:09
par nico44530
Merci beaucoup pour t'a réponse :)
Cela ne fonctionne pas :(
J'ai un autre petit problème pourtant facile :

Variable utilisée : $_GET['pseudo'];

Je n'utilise pas la bonne requête pour afficher les infos d'un autre membre que le membre connecté :
Par exemple, si on veut que le titre de la page devienne le prénom et le nom du membre qu'on visite :
<?php if($_SESSION['pseudo'] == $_GET['pseudo']) { ?>
		<title><?php echo htmlentities(ucfirst($prenom)); ?> <?php echo htmlentities(ucfirst($nom)); ?></title>
	<?php }
		else {
		$sql = connect_sql();
		$id = intval($_GET['id']); // A enlever si j'utilise $_GET['pseudo']; ??
		$pseudo_membre = $_SESSION['pseudo'];
		$requete =  mysql_query('SELECT * FROM wa_communaute WHERE pseudo="'.$pseudo.'"');
		if(mysql_num_rows($requete)>0) {
		$result = mysql_fetch_array ($requete);
		$nom = $result['nom'];
		$prenom = $result['prenom']; ?>
                <title><?php echo htmlentities(ucfirst($prenom)); ?> <?php echo htmlentities(ucfirst($nom)); ?></title>
	<?php } mysql_close(); } ?>
Merci d'avance :)

Re: Htaccess, page profile.php

Posté : 01 mars 2013, 18:00
par two3d
tu te complique la vie, c'est seulement pour un accès à son espace membre ?

Re: Htaccess, page profile.php

Posté : 01 mars 2013, 18:18
par nico44530
Non c'est pour visiter son profil et le profil d'un autre membre avec la variable Get pseudo
Pour justement dans le htaccess, utiliser ce pseudo pour avoir l'url du profil rewritée
Pour visiter son accès membre, j'utilise les sessions.
Et ton exemple ne fonctionne pas :(

Re: [RESOLU] Htaccess, page profile.php

Posté : 01 mars 2013, 18:33
par nico44530
J'ai trouvé la réponse par moi même, honte sur moi de ne pas avoir trouvé cette erreur avant :shock:

Re: [RESOLU] Htaccess, page profile.php

Posté : 01 mars 2013, 19:17
par two3d
quand tu trouve la solution, pose la, elle peut être utile pour les autres :wink:

si tu veux faire via htaccess, tu peux mais garde bien en mémoire que dès l'inscription, il ne faut pas que tu accepte certain caractère pour le pseudo, sinon l’URL risque d'être erronée.

PS: si tu veux que le profil peut être visible par tous, il ne faut pas que tu mette if SESSION pseudo == GET pseudo

Re: [RESOLU] Htaccess, page profile.php

Posté : 01 mars 2013, 20:20
par nico44530
Voici le code ci-dessous, il fonctionne mais il est très lourd, et j'utilise le "if SESSION pseudo == GET pseudo" :?

A chaque fois que je veux une infos d'un membre, je suis obligé de faire cette requête :
(Par exemple pour avoir le nom et prénom du profil visité)

Il y a quelque chose de bizarre :shock: : Le titre de la page n'a pas besoin de la requête ci-dessous pour changé et prendre le nom et prénom du membre visité
Pourtant je ferme la connexion mysql à chaque requête dans les includes

<?php 
if($_SESSION['pseudo'] == $_GET['pseudo']) { ?>
	<?php echo htmlentities(ucfirst($prenom)); ?> <?php echo htmlentities(ucfirst($nom)); ?>
<?php } else {
	$sql = connect_sql();
	$pseudo = ($_GET['pseudo']);
	$requete =  mysql_query('SELECT * FROM wa_communaute WHERE pseudo="'.$pseudo.'"');
	if(mysql_num_rows($requete)>0) {
	$result = mysql_fetch_array ($requete);
	$nom = $result['nom'];
	$prenom = $result['prenom']; ?>
	<?php echo htmlentities(ucfirst($prenom)); ?> <?php echo htmlentities(ucfirst($nom)); } }?>
Voici le code en entier :
<?php
session_start();
require('../include/functions.inc.php');

if (!isset($_SESSION['pseudo'])) {
	header('Location: ../index.php');
	exit();
}

$sql = connect_sql();
$pseudo = ($_GET['pseudo']);
$query = mysql_query("SELECT * FROM wa_communaute WHERE pseudo='".$pseudo."'");
if(mysql_num_rows($query)==0) {
	echo 'Erreur 404 : La page demandée est introuvable !';
	exit();
} else {
$result = mysql_fetch_array ($query);

$id = $result['id'];
$mail = $result['mail'];
$nom = $result['nom'];
$prenom = $result['prenom'];
$sexe = $result['sexe'];
$temps = $result['temps'];
$Mois = array("","Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");
$adresse_image = $sexe ==1 ? ''.$url_site.'/img/upload/homme.png' : ''.$url_site.'/img/upload/femme.png';
$filename = ''.$_SERVER["DOCUMENT_ROOT"].'/img/upload/'.$id.'-mini.png';

?>
<!DOCTYPE html>
<html lang="fr">
<head>
	<meta charset="utf-8">
	<title><?php echo htmlentities(ucfirst($prenom)); ?> <?php echo htmlentities(ucfirst($nom)); ?></title>
	<meta name="description" content="Web Astronomie vous permet de publier vos articles, photos... avec vos amis et les internautes du site. Inscrivez-vous dès maintenant !" />
	<meta name="keywords" content="Web Astronomie, Web-astronomie, Astronomie, Web-astro, Webastro, Web, Communauté, Réseau, Social" />
	<meta name="google-site-verification" content="MuLDj47hIOGv8WGogFlITztArNdmoZTsgQd1NUpMz7g" />
	<base href="http://www.web-astronomie.fr">
	<link rel="shortcut icon" href="img/favicon.ico" />
	<link rel="stylesheet" href="css/global.css" />
	<link rel="stylesheet" href="css/slider/default.css" type="text/css" media="screen" />
	<link rel="stylesheet" href="css/slider/slider.css" type="text/css" media="screen" />
	<script type="text/javascript" src="js/jquery.js"></script>
	<script type="text/javascript" src="js/cookie.js"></script>
	<script type="text/javascript" src="js/script.js"></script>
	<script type="text/javascript" src="js/global.js"></script>
	<script type="text/javascript" src="js/slider.js"></script>
</head>
<body>
	<div id="header" class="fixed">
		<div class="container">
<?php include('../include/header.inc.php'); ?>
		</div>
	</div>
	<div id="content">
		<div class="container">
			<div id="server-500"></div>
			<?php if (isset($_COOKIE['alert-cookie'])) { ?>
			<?php } else { ?>
				<div class="alert-info">
					<p>Des perturbations sont en cours sur le site : Mise à jour Version 2.0 | <a href="">En savoir plus</a></p>
					<a class="close-alert tooltip" onclick="return false" href="">x
					<span class="tooltip"><span class="arrow"></span><span class="tip mini">Fermer</span></span></a>
				</div>
			<?php } ?>
			<noscript>
				<div class="alert-error">
					<p>Javascript est désactivé : Certaines fonctionnalités ne pourraient pas fonctionner, activez-le dans votre navigateur</p>
				</div>
			</noscript>
			<div id="rightCol" class="float-r">
<?php include('../include/sidebar-r.inc.php'); ?>

			</div>
			<div id="cover">
				<div class="bloc-data" id="img-couverture">
				
				</div>
			</div>
			<div id="leftCol" class="float-l">
				<div class="bloc-data">
					<?php 
					if($_SESSION['pseudo'] == $_GET['pseudo']) { ?>
						<?php echo htmlentities(ucfirst($prenom)); ?> <?php echo htmlentities(ucfirst($nom)); ?>
					<?php } else {
					$sql = connect_sql();
					$pseudo = ($_GET['pseudo']);
					$requete =  mysql_query('SELECT * FROM wa_communaute WHERE pseudo="'.$pseudo.'"');
					if(mysql_num_rows($requete)>0) {
					$result = mysql_fetch_array ($requete);
					$nom = $result['nom'];
					$prenom = $result['prenom']; ?>
					<?php echo htmlentities(ucfirst($prenom)); ?> <?php echo htmlentities(ucfirst($nom)); } }?>
				</div>
			</div>
			<div id="content-userArea" class="float-l">
				<div class="bloc-data">
					
				</div>
			</div>
		</div>
	</div>
</body>
</html>
<?php } ?>
Pour l'inscription, c'est noté, merci :)

Merci pour ton aide :)

Re: Htaccess, page profile.php

Posté : 01 mars 2013, 20:44
par two3d
ok, nikel

par contre, ton code est sujet aux injections SQL:
$pseudo = ($_GET['pseudo']);
$query = mysql_query("SELECT * FROM wa_communaute WHERE pseudo='".$pseudo."'");
il te faut sécurisé la variable GET['pseudo'] car tu ne sais jamais ce que le visiteur peut inséré dans pseudo=ici

pour cela, il te faut d'abord vérifier si GET pseudo est défini, comme ceci:
if(isset($_GET['pseudo'])) {
   // ok,, le pseudo est dans l'url (peut être vide mais il est défini)
} else {
  // le pseudo n'est pas dans l'url, on ne peut donc pas chercher dans la BDD si ce pseudo existe vue qu'il n'est pas défini
}
pour sécurisé la variable psudo, fait tout simplement un:
htmlentities($_GET['pseudo'], ENT_QUOTES)

Pour cette ligne:
<?php if (isset($_COOKIE['alert-cookie'])) { ?>
<?php } else { ?>
si tu met rien quand le cookie alert-cookie, fait directement une condition négative avec le point d'exclamation:
<?php if (!isset($_COOKIE['alert-cookie'])) { ?>
ça te permet d'alléger ton code en enlevant:
<?php } else { ?>
à+, bon courage pour la suite

Re: Htaccess, page profile.php

Posté : 01 mars 2013, 20:56
par nico44530
Merci beaucoup :)
Je vais finalement utilisé toutes les astuces que tu ma donné, mon code n'est pas très sécurisé :)

J'ai utilisé : mysql_real_escape_string($pseudo)

Voici la solution à mon problème cité au tout début du post :

Lorsqu'on veut afficher le nom du membre qu'on visite, l'erreur était d'afficher la variable comme ceci :
<?php echo $nom; ?>
Alors que selon la requête (dans mon exemple : )
$sql = connect_sql();
$pseudo = ($_GET['pseudo']);
$requete =  mysql_query('SELECT * FROM wa_communaute WHERE pseudo="'.$pseudo.'"');
if(mysql_num_rows($requete)>0) {
$result = mysql_fetch_array ($requete);
mysql_close();
on affiche la variable comme ceci :
<?php echo $result['nom']; ?>
Une erreur pfff :wink:

Re: Htaccess, page profile.php

Posté : 01 mars 2013, 21:00
par nico44530
if(isset($_GET['pseudo'])) {
   // ok,, le pseudo est dans l'url (peut être vide mais il est défini)
} else {
  // le pseudo n'est pas dans l'url, on ne peut donc pas chercher dans la BDD si ce pseudo existe vue qu'il n'est pas défini
}
Tu n'aurais pas oublié le ! dans le if ?

Et le code suivant redirige si un pseudo est vide ou est incorrect :
if(mysql_num_rows($query)==0) {
	header('Location: ../index.php');
	exit();
}

Re: Htaccess, page profile.php

Posté : 01 mars 2013, 21:48
par two3d
tu peut faire l'inverse oui, c'est plus logique :wink:

ensuite, après avoir vérifi" si get pseudo été défini, tu peut vérifier si get pseudo n'est pas vide avec empty:
if(empty($_GET['pseudo'])) {
  // pseudo vide
} else {
   // execution du code
}
$sql = connect_sql();
mysql_close($sql); // on ferme la connexion $sql, perso, j ne met pas de mysql_close() à mes script car le script le fait tout seul

à part tout ça, tu n'aurai pas pris la fonction connect_sql() d'un script d'espace membre à tout hasard ??

Re: Htaccess, page profile.php

Posté : 01 mars 2013, 22:05
par nico44530
Oui mon espace membre est basé sur un script qui est téléchargeable sur http://scripts.toocharger.com/fiches/sc ... e/3317.htm

Je lui ai ajouté beaucoup de fonctionnalité :wink:
Mais j'ai encore besoin d'aide pour les faire fonctionner ^^ notamment sur les forum

Re: Htaccess, page profile.php

Posté : 01 mars 2013, 23:09
par two3d
un de mes tout premier espace membre :D

Re: Htaccess, page profile.php

Posté : 06 mars 2013, 14:57
par nico44530
J'ai encore besoin d'aide :

J'aimerais que la page profil soit accessible même si on est pas connecté.
Et que certaines des infos du membre s'affiches (comme sur Facebook)
Je cacherais les infos avec "booléen" : True on affiche, et false on cache et c'est le membre qui choisira :)

Mais comment je fais pour faire ça ? Voici ma page profil.php
<?php
session_start();
require('../include/functions.inc.php');

if (!isset($_SESSION['pseudo'])) {
	header('Location: ../index.php');
	exit();
}
if (!isset($_GET['pseudo'])) {
	header('Location: ../index.php');
	exit();
}

if(empty($_GET['pseudo'])) {
	echo('Erreur : Pseudo non reconnu');
	exit();
} else {

$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();

$id = $result['id'];
$mail = $result['mail'];
$nom = $result['nom'];
$prenom = $result['prenom'];
$sexe = $result['sexe'];
$temps = $result['temps'];
$Mois = array("","Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");
?>
<!DOCTYPE html>
<html lang="fr">
<head>
	<meta charset="utf-8">
	<title><?php echo htmlentities(ucfirst($prenom)); ?> <?php echo htmlentities(ucfirst($nom)); ?></title>
	<meta name="description" content="Web Astronomie vous permet de publier vos articles, photos... avec vos amis et les internautes du site. Inscrivez-vous dès maintenant !" />
	<meta name="keywords" content="Web Astronomie, Web-astronomie, Astronomie, Web-astro, Webastro, Web, Communauté, Réseau, Social" />
	<meta name="google-site-verification" content="MuLDj47hIOGv8WGogFlITztArNdmoZTsgQd1NUpMz7g" />
	<base href="http://www.web-astronomie.fr">
	<link rel="shortcut icon" href="img/favicon.ico" />
	<link rel="stylesheet" href="css/global.css" />
	<script type="text/javascript" src="js/mootools.js"></script>
	<script type="text/javascript" src="js/jquery.js"></script>
	<script type="text/javascript" src="js/cookie.js"></script>
	<script type="text/javascript" src="js/script.js"></script>
	<script type="text/javascript" src="js/global.js"></script>
</head>
<body>
	<div id="header" class="fixed">
		<div class="container">
<?php include('../include/header.inc.php'); ?>
		</div>
	</div>
	<div id="content">
		<div class="container">
			<div id="server-500"></div>
			<?php if (isset($_COOKIE['alert-cookie'])) { ?>
			<?php } else { ?>
				<div class="alert-info">
					<p>Des perturbations sont en cours sur le site : Mise à jour Version 2.0 | <a href="">En savoir plus</a></p>
					<a class="close-alert tooltip" onclick="return false" href="">x
					<span class="tooltip"><span class="arrow"></span><span class="tip mini">Fermer</span></span></a>
				</div>
			<?php } ?>
			<noscript>
				<div class="alert-error">
					<p>Javascript est désactivé : Certaines fonctionnalités ne pourraient pas fonctionner, activez-le dans votre navigateur</p>
				</div>
			</noscript>
			<div id="rightCol" class="float-r">
<?php include('../include/sidebar-r.inc.php'); ?>

			</div>
			<div id="cover">
				<div class="bloc-data" id="img-couverture">
				
				</div>
			</div>
			<div id="leftCol" class="float-l">
				<div class="bloc-data">
					
				</div>
			</div>
			<div id="content-userArea" class="float-l">
				<div class="bloc-data">
					
				</div>
			</div>
		</div>
	</div>
</body>
</html>
<?php } } } ?>
Merci de votre aide :)