Débutant connection

Fermé
pedro - 10 mai 2009 à 09:57
 pedro - 14 mai 2009 à 09:38
Bonjour,

Je suis débutant pour tout ce qui est php, connection, etc. J'ai beau essayer "d'apprendre" le langage php sur les sites Internet mais je n'y comprends vraiment vraiment rien. Je dispose d'un code de connexion pour UN (seul) administrateur, il faudrait que j'arrive à comprendre ce code pour l'adapter à la connexion pour une autre page et concernant plusieurs membres. Je laisse le code, si quelqu'un avait la grande gentillesse de m'expliquer simplement et pas-à-pas chaque ligne (j'ai bien les instructions grâce aux "petites phrases vertes" qui sont précédées du double slash, mais je voudrais vraiment comprendre tout ce qui est session, mysql_query, mysql_num_rows , mysql_fetch_array, etc...) ce serait très gentil si quelqu'un pouvait venir à mon aidre... Bon dimanche.

<?php
// Inclusion et execution du fichier db.php
require('db.php');

if(empty($_POST["login"]) || empty($_POST["password"]))
{ // === Cas ou login et password sont vides
//$error = invalid; // Erreur password invalide
$msgErrreur = 'PLogin/mot de passe non saisis';
}
// On va maintenant aller chercher en BD les login et mdp Administrateur . Pour simplifier l algo, on peut considérer qu il y a un seul Administrateur
else
{
// Recherche des personnes qui sont administrateur.
$req = mysql_query("Select Pseudo,Pwd from user WHERE Profil='admin'") or die ("Erreur requete: ".mysql_error());

if( mysql_num_rows($req) == 0 )
{ $msgErrreur = 'Problème sur la BD : aucun adminstrateur defini';
header('location: index.htm');
}
else
{ $i = 0;
$trouve =0;

while ( ( $i<mysql_num_rows($req) ) && ($trouve ==0) )
{
$donnee = mysql_fetch_array($req);
if ( ($donnee['Pseudo']==$_POST["login"]) && ( $donnee['Pwd']==$_POST["password"] ))
{ $trouve =1;
$_SESSION["statut"] = 'admin';
$_SESSION["login"] = $_POST["login"];
$_SESSION["region"] = "";
}
$i=$i+1;

}
if( $trouve == 0)
{ header('location: index.php');
}
}
}
@mysql_close();
header('location: index.php'); // Redirection vers la page index.php
?>
A voir également:

7 réponses

PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
10 mai 2009 à 10:38
Bjr

Ton exemple est beaucoup trop "compliqué" si tu es débutant car il fait intervenir beaucoup trop de notions en même temps : tableaux superglobaux, inclusion via require, redirection via header, mysql, SQL, les sessions ... STOP !

Commence par des choses simples : tu es intéressé par MySQL soit mais sais-tu déjà géré une base de données ?
Càd sais-tu créér une base, des tables, des index, connais-tu la langage SQL ?
Si oui alors tu peux écrire un petit script PHP qui se contente de se connecter au serveur MySQL , puis à une base de données précise.
Ensuite tu exécutes une requête sur une table de ta base.
Ensuite tu traites le résultat de ta requête.

Ex pour se connecter à MySQL et ouvrir une base de données

<html>
<body>
<?php

$serveur = "localhost"; // Nom du serveur ou adresse IP
$nom_utilisateur = "root"; // Nom d'utilateur possèdant le droit d'ouvir une connexion sur le serveur
$mot_de_passe = "mysql";   // Mot de passe de l'utilisateur
$base_de_donnees = "new"; // Nom de la base de données à sélectionner

// Essai d'ouvrir une connexion sur le serveur MySQL pour l'utilisateur spécifié ou arrêter le script en cas d'erreur
$connexion = mysql_connect($serveur,$nom_utilisateur,$mot_de_passe) or die("Impossible de se connecter sur le serveur ".$serveur." : " . mysql_error());

// A partir d'ici la connexion est ouverte
echo "La connexion sur le serveur ".$serveur." pour l'utilisateur ".$nom_utilisateur." a réussi ;-)<br />";


// Essai de sélectionner une base de donnée en utilisant le connexion ouverte précédemment
mysql_select_db($base_de_donnees, $connexion) or die("Impossible de se sélectionner la base de données ".$base_de_donnees." : " . mysql_error());

echo "La base de données ".$base_de_donnees." a été sélectionnée avec succès ;-)<br />";

// Fermer proprement la connexion
if (mysql_close($connexion) == TRUE) {
	echo "La connexion a été fermée correctement<br />";
}
else
{
	// Normalement ce cas de figure n'arrive jamis heureusement ;-)
	echo "Oups ! La connexion n'a été fermée correctement !!!!<br />";
}	
?>
</body>
</html>


2
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
12 mai 2009 à 22:51
Bon alors voilà pour les explications T'Oh !


<?php 
// Inclusion et execution du fichier db.php 
// Donc PHP commence par interpréter le code contenu dans db.php
// Entre autre il ouvre un connexion avec le serveur MySQL 
// pour l'utilisateur root et ensuite sélectionne la base
// bdlivredor
// Mais surtout il démarre ou restore la session précédente si elle existe
// c'est ce que fait l'instruction session_start
// Elle recréé le tableau superglobal $_SESSION et y recharge toutes
// les variables qui y avaient été stockées au préalable
require('db.php'); 


// A priori le script s'attend à recevoir les variables "login" et "password" via HTTP POST 
// (variables envoyées par un formulaire le plus souvent) donc à ce quelles figurent
// dans le tableau superglobal $_POST[  ]   
// Ici on test si une des 2 variables n'existe pas ou est vide
if(empty($_POST["login"]) || empty($_POST["password"])) 
{ // === Cas ou login et password sont vides 
	//$error = invalid; // Erreur password invalide 
	$msgErrreur = 'PLogin/mot de passe non saisis'; 
} 
// On va maintenant aller chercher en BD les login et mdp Administrateur . Pour simplifier l algo, on peut considérer qu il y a un seul Administrateur 
else 
{ 
	// Recherche de tous les utilisateurs avec le profil admin dans la table user
	// Exécute la requête sql : Select Pseudo,Pwd from user WHERE Profil='admin'
	
	// mysql_query permet d'exécuter n'importe quelle requête
	// sur la base MySQL sélectionnée sur la connexion  par défaut 
	// La connexion par défaut ici est celle obtenue lors de l'exécution de mysql_connect()  
	// au préalable dans db.php
	// Nota : mysql_query attend en second paramètre normalement un identifiant (une ressouce) correspondant
	// à une connexion déjà ouverte sur le serveur MySQL
	// Si ce paramètre est omis alors l'identifiant par défaut utilisé correspond à celui généré 
	// automatiquement lors du dernier appel à mysql_connect 
	// Ici la connexion a été établie dans db.php
	// De même la base de données utilisée est celle sélectionnée lors de mysql_select_db
	
	// Après l'éxécution de la requête $req contient une ressource sur la résultat de la requête
	// ou false si une erreur s'est produite
	// Comme ici on interrompt le script PHP avec l'instruction die( ) en cas d'erreur on est sûr
	// qui si on franchit cette étape $req contient bien une ressource valide ;-)
	$req = mysql_query("Select Pseudo,Pwd from user WHERE Profil='admin'") or die ("Erreur requete: ".mysql_error()); 

	// mysql_num_rows() récupère le nombre lignes retournées par la requête précédente
	// Si le nombre de ligne est égal zéro alors la requête n'a retourné aucun enregistrement donc
	// il n'existe aucun administrateur dans la table user CQFD
	if( mysql_num_rows($req) == 0 ) 
	{ 	
		// Défini un message d'erreur : problème l'instruction header suivante entraîne une
		// redirection vers une autre page web nommée index.htm
		// Or lors de la redirection toutes les variables php déjà définies sont perdues : elles n'existent 
		// plus pour la page index.htm qui d'ailleurs n'est pas une page php
		// Comme $msgErreur n'est part ailleurs pas utilisée ensuite définir ici cette variable ne sert .... A RIEN !

		$msgErrreur = 'Problème sur la BD : aucun adminstrateur defini'; 
		// Redirection vers la page index.htm
		header('location: index.htm'); 
	} 
	else 
	{ 
		// Ici on est donc dans le cas ou au moins 1 administrateurs a été trouvé dans la table user
		
		// Définit 2 variables qu'on met à zéro ... soit ;-)
		// $i en général utilisée dans les boucles comme compteur
		$i = 0;  
		// $trouve en fonction de sa valeur on cherche à indiquer si oui on non on a trouvé
		// ce qu'on cherche
		// Utiliser une variable booléenne avec true/false aurait été préférable !
		$trouve =0; 

		// On lit chaque ligne contenue dans le résultat de la requête
		
		// Tant que $i est inférieur au nombre de lignes contenu dans le résultat de la requête 
		// et que $trouve est égal à zéro
		// Hum boucle mal conçue ..
		while ( ( $i<mysql_num_rows($req) ) && ($trouve ==0) ) 
		{ 
			// On lit une ligne du jeu d'enregistements grâce à mysql_fetch_array 
			// qui retourne tous les champs de l'enregistrement sous la forme d'un tableau associatif 
			// qu'on affecte à  variable $donnee
			
			// $req indique la ressource que l'on désire lire : ici le jeu d'enregistrements précédemment 
			// retourné par la requête SQL
			$donnee = mysql_fetch_array($req); 
			
			// Chaque ligne lu dans le jeu d'enregistrements correspond en fait à un administrateur
			// Ici on va tester si l'utilisateur qui s'est connecté est en fait un administrateur en
			// se basant sur  le  pseudo et le login qu'il a saisi pour se connecter
						
			// Si le pseudo et le mot de passe de l'administrateur lu depuis la table user correspondent
			// respectivement aux variables login et password passées en paramètre via POST
			// par l'utilisateur alors c'est notre homme lol 
			if ( ($donnee['Pseudo']==$_POST["login"]) && ( $donnee['Pwd']==$_POST["password"] )) 
			{ 
				// On passe la variable $trouve à 1 pour mettre fin à la boucle 
				$trouve =1; 
				// On créé 3 variables de session dans lesquelles on sauvegarde des valeurs qu'on
				// pourra réccupérer plus tard dans un autre script PHP		
				$_SESSION["statut"] = 'admin'; 
				$_SESSION["login"] = $_POST["login"]; 
				$_SESSION["region"] = ""; 
			} 
			// On incrémente $i qui sert de compteur et va permettre de sortir de la boucle
			// si on ne trouve pas le bon administrateur après avoir lu tous les enregistrements
			// retournés par la requête
			// Ici si $trouve vaut 1 parce qu'on vient juste de trouver le bon administrateur
			// alors l'incrémentation n'est pas vraiment nécessaire
			$i=$i+1; 
		} 
		// Si on a pas trouvé le bon administrateur $trouve est resté à 0   
		if( $trouve == 0) 
		{ 
			header('location: index.php'); 
		} 
	} 
} 
// On ferme la connexion sur le serveur  MySQL
@mysql_close(); 
// Hum nouvelle redirection alors qu'on a déjà peut être fait une redirection juste avant
// A éviter !!!!
header('location: index.php'); // Redirection vers la page index.php 
?>



1
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
13 mai 2009 à 13:56
Bjr

En PHP pour afficher quelque chose il faut le mettre sous la forme de code HTML dans la page qui sera retourné à ton navigateur ... donc tout ce que tu veux afficher doit forcément apparaîter entre <body > et </body>

Pour afficher un message d'erreur ou n'importe quoi d'autre en php il suffit d'utiliser la fonction echo ou printf qui te permet de mettre en forme


Mais... ça ne marche pas Qu'est ce qui ne fonctionne pas ? Soit plus préçis : as-tu un message d'erreur ? Ton script s'interrompt-il ?

Pourquoi fais-tu une redirection vers index.php plutôt qu'un include ?
Que contient index.php ?


Ex
<html>
<body>
<?php
$message="Voici un message de PHP";
echo $message;
?>
</body>
</html>



1
il n'y a aucun message d'erreur, il me redirige vers index mais la connexion ne s'est pas effectuer, mon index "change" d'informations selon si l'utilisateur est connecté ou pas. et j'utilise la fonction header simplement parce que je ne sais pas vraiment la différence avec un include et comme avec le code admin.php cela fonctionne comme ça alors...
je te passe le code de mon fichier index.ph (qui fonctionne correctement quand je me connecte en tant que administrateur)

<?php

//*******************************************
//*******************************************
// Livre d'or
// Page d'affichage des messages.
//*******************************************
//*******************************************

// Inclusion et execution d
// fichier db.php dans lequel se trouvent:
// le systeme de connexion à la base de donnée MySQL
// et le login/pass de l'admin.
require('db.php');

// --- Entete html ---
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="STYLESHEET" type="text/css" href="styles.css">
<title>Bienvenue dans l'espace d'échanges du Festival de musique Folklores du Monde de Saint Malo</title>
</head>
<body>

<h1>Bienvenue dans l'espace d'échanges du Festival de musique Folklores du Monde de Saint Malo</h1>
<a>Cette espace a été créé afin de recueillir vos impressions, avis et remarques concernant le festival de musique de Saint Malo.</a><br>



<?php

// Affichage different suivant que l on est ou pas connecte
//==========================================================
if ( (! empty ($_SESSION["StatutErreur"])) && ($_SESSION["StatutErreur"]!= '') )
echo '<br><a> Problème : ' .$_SESSION["StatutErreur"]. '</a><br>';

if ( (empty ($_SESSION["login"]) ) || ($_SESSION["login"] == "") ) // Pas d utilisateur connecte => Liens vers inscription ou connexion
{
echo '<a>Pour pouvoir laisser un message, il faut vous connecter à notre espace. </a><br>';
echo '<br><a>Vous souhaitez vous connecter ? </a><br>';

// Insertion du lien de connexion
//=========================================
echo '<a href="formulaireConnexion.htm" title="Se connecter">[Se connecter]</a><br>';



echo '<a>Vous n\'êtes pas encore inscrit ?</a><br>';
// Insertion du lien d inscription
//=========================================
echo '<a href="formulaireInscription.htm" title="S\'inscrire dans l\'espace">[S\'inscrire]</a><br>';

}
else // Un utilisateur connecte => Liens vers signature du livre d or
{
echo '<br><a>Vous êtes ' .$_SESSION["login"].'</a><br>';
echo '<a>de la region </a><br>';
echo '<a>inscrit en tant que ' .$_SESSION["statut"]. '</a><br>';

// Insertion du lien de deconnexion
//=========================================
echo '<a href="deconnection.php" title="Se deconnecter">[Se deconnecter]</a><br>';


echo '<br><a>Vous souhaitez laisser un message, donner vos impressions ou un avis?</a><br>';
echo '<a>N\'hésitez pas à nous laisser un message dans notre livre d\'or:</a><br>';

// Insertion du lien Laisser un message
//=========================================
echo '<a href="formulaireMessage.php" title="Laisser un message sur le livre d\'or '.$_SESSION["login"].'">[Signer le livre]</a><br>';
}
?>


<br>
<! Recherche et affichage du nombre de messages presents dans le livre d or (recherche en BD) >
<h1>Livre d'or (<?php echo mysql_num_rows(mysql_query("Select id FROM livredor")); ?> messages)</h1>
<?php
// --- Fin Entete html ---

// Requête pour recuperer l ensemble des messages
$req = mysql_query("Select id,pseudo,message,date_heure from livredor Order by id Desc") or die ("Erreur requete: ".mysql_error());

// On range l'ensemble des valeurs renvoyees par la BD suite a l appel de la requete dans un tableau fetch_array
// Puis on parcourt l ensemble des elements du tableau grace a une boucle while
if( mysql_num_rows($req) <1)
{
echo 'Il n\'y a aucun message sur le livre d\'or';
}
else
{ while( $donnee = mysql_fetch_array($req) )
{
// Sortie du résultat : pseudo, date et message ?>

<table width="350">
<tr>
<td bgcolor="#E1E1E1">Posté par <?php echo $donnee['pseudo']; ?> le <?php echo $donnee['date_heure']; ?></td>
</tr>
<tr>
<td><?php echo nl2br($donnee['message']); ?></td>
<!Rq :NL2BR Retourne une chaine dans laquelle les changements de ligne ont été convertis en balises HTML >
</tr>
</table>

<?php if(isset($_SESSION["statut"]))
{ if($_SESSION["statut"] == 'admin')
{ echo '<a href="suppressionMessage.php?id='.$donnee['id'].'" title="Effacer ce message">[Effacer]</a>';
}
}
?>
<hr>
<?php
// Fermeture de la connexion à MySQL
@mysql_close();
} // Fin while
}//Fin else

// Affichage du lien hypertexte d acces a l espace Administrateur
if ( empty($_SESSION["statut"]) || ($_SESSION["statut"] != "admin") )
{ echo ' <div align="right"><a href="formulaireAdmin.htm" title="Espace réservé à l\'administrateur">[Accès Administrateur]</a></div><br>';
}
?>
</body>
</html>
0
je te remercie beaucoup pour ta réponse et il est vrai que ça à l'air bien compliqué pour un débutant comme moi, même si je me rend compte en lisant le forum que je ne suis pas si débutant que ça car je sais gérer ma base de données, j'avais meme réussit à comprendre un fichier à part qui comprenait la connection au serveur (que toi tu as joint à l'interieur du fichier de connection si j'ai bien tout compris), je connais aussi le langage SQL, etc... mais bon il y a pas mal de choses dans mon "projet" que j'ai du mal à comprendre dont ce code que j'ai joint dans mon premier message qui comprends les posts, les sessions, les "chiffres"... seulement voilà ce "projet" c'est pour mon examen de juin et même si on ne s'est pas éttendue sur le php en cours il faut que j'arrive à comprendre par moi même ce code. C'est pour cela que si j'arrive à faire "ma page" comme l'exemple que j'ai, ce sera encore mieux ! Mais bon si déjà j'arrive à me débrouiller avec ton explication j'en serai bien content !! Pour aujourd'hui je n'ai pas vraiment le temps de m'y pencher sérieusement, mais si quelqu'un passant par là et qui à la patience pour m'expliquer pas-à-pas le code de mon premier message ce serait très gentil =p. Ceci dit je te remercie beaucoup "PhP", et désolée de ne pas avoir pu répondre plus tôt, puis il me tarde d'avoir un petit instant pour vraiment me plonger dans ton code qui en effet me semble beaucoup plus simple que mon exemple ^^ ... A bientôt =)
0
Ca y est je me suis penché sur ton code mais je n'arrive pas à le faire fonctionner... en fait, pour ma connection, de nombreux membres peuvent se connecter (et donc pas qu'une seule personne), je crois qu'il me faudrait une requête SQL dans le code pour vérifier si le pseudo existe et si le mot de passe est valide...


Sachant que j'ai déjà un fichier qui concerne seulement la connexion au serveur (qui s'appelle db.php), et que lorsque j'en ai besoin dans un nouveau fichier je fais: require('db.php');

<?php
session_start();

$sql_host = 'localhost';
$sql_user = 'root';
$sql_pass = '';
$sql_base = 'bddlivredor';

$db = mysql_connect($sql_host,$sql_user,$sql_pass) or die ("Erreur de connexion: ".mysql_error());

mysql_select_db($sql_base,$db) or die ("Erreur de connexion à la base: ".mysql_error());
?>


Voilà, je suis vraiment en galère, si quelqu'un pourrait m'aider à créer ma page pour la connection, enfin surtout m'expliquer.... merci d'avance et bonne fin de journée à tous.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
12 mai 2009 à 20:44
Bsr

Quelles sont les lignes/ les instructions que tu ne comprends pas ?

Par ex dp.php c'est de toi ou tu l'as recopié ailleurs ?
0
ce fichier faisait partie des documents de bases, mais je l'ai rapidement compris, si tu veux une autre explication peut être un peu plus claire c'est moi qui est posté en tant que "galérien" le sujet "long problème connexion", mais pour répondre à ta question, ce que je ne comprends pas c'est comment vérifier qu'il s'agit du bon couple "login et mot de passe", puis dans le code de l'admin tout ce qui est mysql_query, mysql_num_rows, mysql_fetch_arrey, avec ces "0" et "1", $i et $trouve ...
je te remercie beaucoup de ta patience xD
0
Olala merci beaucoup pour cette longue explication ^^
maintenant il me suffit d'adapter "ma compréhension" à ma page de connexion, voilà ce que j'en sors (sachant que dans mon formulaire de connexion pour les membres, la zone de texte pour le pseudo prend le nom de pseudo et pour le mot de passe c'est pwd):

<?php
// Inclusion et execution du fichier db.php
require('db.php');

if(empty($_POST["pseudo"]) || empty($_POST["pwd"]))
{ // === Cas ou login et password sont vides
//$error = invalid; // Erreur password invalide
$msgErrreur = 'PLogin/mot de passe non saisis';
}

else
{
// ici je selectionne les pseudo et mot de passe de la base de données pour les comparés plus tard
// et également selection du profil et de la region pour les mettres plus bas dans les sessions
$req = mysql_query("Select Pseudo,Pwd, profil, region from user") or die ("Erreur requete: ".mysql_error());

if( mysql_num_rows($req) == 0 )
{ $msgErrreur = 'Problème sur la BD : aucun adminstrateur defini';
header('location: index.htm');
}
else
{ $i = 0;
$trouve =0;

while ( ( $i<mysql_num_rows($req) ) && ($trouve ==0) )
{
$donnee = mysql_fetch_array($req);
// ici je voudrai dire si resultat de la requete correspond au couple entrée par l'utilisateur
if ( ($donnee['Pseudo']==$_POST["pseudo"]) && ( $donnee['Pwd']==$_POST["pwd"] ))
{ $trouve =1;
$_SESSION["profil"] = $donnee['profil'];
$_SESSION["pseudo"] = $_POST["pseudo"];
$_SESSION["region"] = $donnee['region'];
}
$i=$i+1;
}
if( $trouve == 0)
{ header('location: index.php');
}
}
}
@mysql_close();
header('location: index.php'); // Redirection vers la page index.php
?>


Mais... ça ne marche pas =( est ce que tu penses savoir d'où peut provenir l'erreur? parce qu'il me semble que mon code est cohérent... aussi si je peux t'embêter encore un petit peu ^^ j'ai d'autres petites questions à te demander, ceci dit pas très importantes tant que je n'ai pas réussi cette connexion:
- quel est le code php pour faire apparaitre un petit message d'erreur ?
- et dans ma page index (qui se modifie selon si l'utilisateur est connecté ou non), j'y retrace certaines de ses informations, j'imagine que j'ai besoin d'y joindre une requette sql pour rechercher selon le pseudo l'information correspondante, mais dans un texte (echo) quel petit code je dois y insérer pour y faire afficher le résultat de ma requête ?
- dans mes formulaires, j'ai deux boutons: annuler ou valider. Je crois qu'il me faudrait faire en sorte que quand je clique sur annuler les informations s'effacent (et revenir à la page précédente qui est l'index), parce que quand je clique sur annuler, la connexion se fait quand même (??)

Tu as le droit d'abandonner ton aide, au vu de mon cas désespérant xD je te remercie vraiment une nouvelle fois pour le temps que tu m'accordes !
0
ça y est ça marche !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
en fait le bug venait je pense que les noms que je donnais aux valeurs entrées par l'utilisateur était les mêmes que les noms des champs de ma table.
Voilà je suis vraiment très content et je te remercie vraiment beaucoup "PhP" !! Qui sait peut être qu'un jour c'est moi qui te filerai un coup de main... oui "un jour" l'espoir fait vivre lol Encore merci de ton aide et de ta patience xD Bonne journée et bon développement =D
0