8797 sujets

Développement web côté serveur, CMS

Salut à tous pour commencer , et encore merci pour votre superbe site d'entraide que je connais depuis un petit temps.

J'ai 2 "petites" questions à vous poser.

1 : Elle concerne les variables url pour afficher le contenu de mon site avec quelques include() tournant autours d'une seule page, à savoir mon index.php.
Oui mais seulement je n'ai appris qu'a le faire d'une manière type rub ou index.php?cat=1 , cat=2 etc.
Ce que j'aimerais pouvoir faire (et comme je l'ais déjà vu sur pas mal de site) c'est transformer mon index.php?cat=1 en index.php?p=accueil ou même index.php?cat=accueil etc.
De façon à ne pas avoir des fichiers dans mon dossier includes/ du style rub1.php, rub2.php...

Pour le moment je fait passer la variable avec ces lignes de codes au dessus du doctype:
<?php 
	$lacat = 1; 
	if (isset ($_GET["rub"])) {
		$lacat = $_GET["rub"];
	}
?>


Et dans mon div contenu celles-ci :
  <? include("rub".$lacat.".php"); ?>


Cela fonctionne plutôt bien , mais imaginez vous le boulot pour retrouver votre fichier accueil au milieu de tout ce fouillis quand il y a une bonne dizaines de sections sur son site !
Beaucoup plus simple quand son fichier s'appelle de la même manière que la section créé (logique).

Voila pour ma première question , passons donc à la deuxième, la sécu de mon admin :

2 : Voila j'ai ma partie admin pour gérer mon site, protégé par mot de passe et login , oui mais passe non encrypter, j'aurais voulus le faire en md5 ou autre mais je ne gère pas cette fonction (du moins pas encore). Voici mon admin qui apparemment n'est pas fort sécurisée.
<?php
session_start();
// je regarde si le formulaire a été envoyé
if (isset($_POST["t_login"]) || isset($_POST["t_pass"])) {

//on inclus la connection au serveur mysql
include ('../connec.php');
	
// je vais faire ma requête sql
$requete_verification = "SELECT t_login, t_pass FROM t_admin WHERE t_login ='".$_POST["t_login"]."' AND t_pass='".$_POST["t_pass"]."'";
$resultat_verif = mysql_query($requete_verification);
$nombre = mysql_num_rows($resultat_verif);

	if ($nombre>0) {
		// on va rediriger vers index2.php
		$_SESSION["login"] = $_POST["t_login"];
		header("Location:index2.php");
		
	}
	else {
		// on affiche un message d'erreur
		$erreur = true;

	}


}
?> 


Ça marche aussi mais bon je pense que niveau sécu' , il y a quand même moyen de faire beaucoup mieux.


Merci d'avance et bon développement à tous !
Modifié par Rastahigh (04 Jun 2009 - 02:27)
Hello Rastahigh et bienvenue, Smiley smile

1) c'est vrai qu'un identifiant numérique est plutôt utilisé lorsque les infos sur la page à inclure sont stockées dans une table mysql. Cela peut aussi correspondre à la clé d'un array :
<?php
$rub = isset($_GET['rub']) ? intval($_GET['rub']) : 0;
$rubs = array('accueil', 'quiz', 'mavie', 'monoeuvre');
if($rub >= count($rubs)) $rub = 0;
include($rubs[$rub].".php");
?>
Pour ce que tu demandes... ben c'est pareil. Il faut juste rajouter un petit test pour n'autoriser que les lettres et les chiffres :
<?php
$rub = isset($_GET['rub']) ? strtolower($_GET['rub']) : 'accueil';
$pattern = '/[^a-z0-9]/';
if(preg_match($pattern ,$rub)) {
	$rub = 'accueil';
}
$page = 'include/pages/'.$rub.'.php';
if (file_exists($page)) {
    include($page);
} else {
    echo "Erreur.";
}
?>
A noter qu'avec un peu d'urlrewriting c'est encore mieux : voir ce post.

2) déjà il y a une petite erreur puisque tu testes la présence de $_POST["t_login"] OU de $_POST["t_pass"] avec || alors que c'est seulement si les 2 existent qu'il faut faire la requête (avec && donc).

Ensuite il est déconseillé de stocker les mots de passe en clair. Ils sont donc hashés (par exemple à l'aide de md5.

Et enfin, toutes les interactions avec la base devraient se faire par l'intermédiaire de mysql_real_escape_string pour se prémunir contre les injections SQL.

Au final cela pourrait donner (en supposant que les mots de passe soient déjà hashés dans la base) :
<?php
session_start();

// je regarde si le formulaire a été envoyé
if (!empty($_POST["t_login"]) && !empty($_POST["t_pass"])) {
	//on inclut la connexion au serveur mysql
	include ('../connec.php');
	
	// je vais faire ma requête sql
	$requete_verification = sprintf("SELECT t_login FROM t_admin WHERE t_login = '%s' AND t_pass = '%s'",
		mysql_real_escape_string($_POST["t_login"]),
		mysql_real_escape_string(md5($_POST["t_pass"])));
	
	$resultat_verif = mysql_query($requete_verification);
	
	if(mysql_num_rows($resultat_verif) > 0) {
		// on va rediriger vers index2.php
		$_SESSION["login"] = $_POST["t_login"];
		header("Location:index2.php");
	} else {
		// on affiche un message d'erreur
		$erreur = true;
	}
}
?> 
merci pour ces réponses très futiles.

Voila pour la sécurité du site je testerais demain , je viens de tester ton script pour mes variables url. Mais un petit problème persiste.

Je lance ma page comme ceci index.php?rub=accueil , la effectivement , mon contenu apparait bien.
Mais en haut de page , problème d'include apparemment.


Warning: include(accueil.php) [function.include]: failed to open stream: No such file or directory in C:\Program Files\EasyPHP 2.0b1\www\evo3\index.php on line 9

Warning: include() [function.include]: Failed opening 'accueil.php' for inclusion (include_path='.;C:\PROGRA~1\EASYPH~1.0B1\\php5\pear\') in C:\Program Files\EasyPHP 2.0b1\www\evo3\index.php on line 9

La ligne 9 de mon fichier index.php correspond à celle-ci :
include($rubs[$rub].".php");



PS : J'ai mis mon fichier accueil.php dans le dossier include/pages/ comme cité dans ton code.


Merci encore mille fois et sans doute à demain.


Peace Rasta'
Modifié par Rastahigh (03 Jun 2009 - 03:06)
Rastahigh a écrit :
merci pour ces réponses très futiles.
Je ne pensais pas avoir été futile ! Smiley biggol Smiley langue

Pour ton problème c'est normal puisque tu as mélangé le premier exemple avec array dans lequel il n'y a rien qui indique un répertoire et le second où (je ne sais pas ce qui m'a pris !) j'ai parlé d'include/pages/
Futile , j'ai dis futile ? oups... Smiley confused je voulais taper futées mais les heures sont la. Smiley langue lol

Autant pour moi je regarderais mes posts (sur ce forum) et mes lignes de codes de plus près demain , je penses que ça vaut mieux héhé.

Encore merci pour cette aide précieuse. Smiley lol

Bonne fin de nuit à toi Heyoan. On se "revoit" demain , la j'vais faire dodo c'est sûr. Smiley biggrin
Modifié par Rastahigh (03 Jun 2009 - 03:31)
Resalut !

Voila j'ai mis ton script php dans mon div "contenu".
<?php

$rub = isset($_GET['rub']) ? intval($_GET['rub']) : 0;

$rubs = array('accueil', 'news', 'media', 'disco');

if($rub >= count($rubs)) $rub = 0;

include($rubs[$rub].".php");

?>


Oui mais voila , quand j'entre dans mon url (avec a la racine un fichier news.php, et accueil.php) la variable de type index.php?rub=accueil , mon accueil s'affiche bien.
Par contre , quand je met index.php?rub=news et bien la rien du tout , ça m'affiche toujours le contenu de mon accueil.

Une petite idée ??

Encore merci Smiley cligne
Re',

Rastahigh a écrit :
Une petite idée ??
Bon... visiblement je n'ai pas été clair ! Smiley smile

Le premier exemple (avec array) correspond à une variable numérique (rub=0, rub=1, etc.) d'où le intval.

Le second exemple lui correspond bien à une variable alphanumérique (rub=accueil, rub=news, etc.) d'où le preg_match. Smiley cligne
Effectivement la fonctionne beaucoup mieux !
Encore merci pour les infos , je vais maintenant tester la sécu de mon admin Smiley cligne

Je te tiens au courant.


Peace , Rasta'
Je viens de tester le script pour la sécu' de l'admin , marche impeccablement bien quand notre pass est en md5.

Mais dans la page ou je met mon script de session comme ceci :
<?php
session_start();
if (!isset($_SESSION["t_login"])) {
	header("Location:index.php?error=1");
}
?>


Il m'affiche ceci quand on s'est logué :
Notice: A session had already been started - ignoring session_start() in C:\Program Files\EasyPHP 2.0b1\www\evo3\admin\include\pages\accueil2.php on line 2


Si j'enlève le session_start() , tout refonctionne bien , mais je ne pense pas que ça sois bon niveau sécurité.


Bref , un peu dans le flou comme d'hab Smiley langue


Peace Rasta' Smiley cligne
Modifié par Rastahigh (04 Jun 2009 - 00:25)
Ben je suppose que tu fais un include de ce code dans une page qui commence déjà par session_start(); Smiley cligne

Sinon Google connaît tous les messages d'erreurs PHP...

Get up ! Stand up for your rights ! Smiley rasta
Modifié par Heyoan (04 Jun 2009 - 00:40)
Ouep désolé j'avais trouver un fouinant sur google aussi.

Mes problèmes sont résolus merci mille fois.