[RESOLU] Htaccess, page profile.php

Eléphant du PHP | 386 Messages

01 mars 2013, 00:07

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:

Avatar du membre
Mammouth du PHP | 1564 Messages

01 mars 2013, 03:50

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

Eléphant du PHP | 386 Messages

01 mars 2013, 15:09

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 :)
Modifié en dernier par nico44530 le 01 mars 2013, 18:17, modifié 1 fois.

Avatar du membre
Mammouth du PHP | 1564 Messages

01 mars 2013, 18:00

tu te complique la vie, c'est seulement pour un accès à son espace membre ?

Eléphant du PHP | 386 Messages

01 mars 2013, 18:18

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 :(

Eléphant du PHP | 386 Messages

01 mars 2013, 18:33

J'ai trouvé la réponse par moi même, honte sur moi de ne pas avoir trouvé cette erreur avant :shock:

Avatar du membre
Mammouth du PHP | 1564 Messages

01 mars 2013, 19:17

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

Eléphant du PHP | 386 Messages

01 mars 2013, 20:20

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 :)

Avatar du membre
Mammouth du PHP | 1564 Messages

01 mars 2013, 20:44

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

Eléphant du PHP | 386 Messages

01 mars 2013, 20:56

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:
Modifié en dernier par nico44530 le 01 mars 2013, 21:19, modifié 1 fois.

Eléphant du PHP | 386 Messages

01 mars 2013, 21:00

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

Avatar du membre
Mammouth du PHP | 1564 Messages

01 mars 2013, 21:48

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 ??

Eléphant du PHP | 386 Messages

01 mars 2013, 22:05

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

Avatar du membre
Mammouth du PHP | 1564 Messages

01 mars 2013, 23:09

un de mes tout premier espace membre :D

Eléphant du PHP | 386 Messages

06 mars 2013, 14:57

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 :)