Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/12/2006, 10h13   #1
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
Par défaut [SQL] Modification du "header" lors d'authentification sql

Bonjour, je suis en train de réaliser un site dans lequel j'ai mis une page d'authentification de l'utilisateur par une base de donnée sql. Cependant quand je teste pour voir si ça marche, j'ai le message suivant qui se charge :

Citation:
Notice: Undefined variable: identifiant in d:\en cours\html2007\version1\zone_membre\login.php3 on line 14

Warning: Cannot modify header information - headers already sent by (output started at d:\en cours\html2007\version1\zone_membre\login.php3:14) in d:\en cours\html2007\version1\zone_membre\login.php3 on line 20
Je travaille en local mais j'ai bien crée ma base avec EasyPhp. Sur un autre site que j'ai crée, j'ai le même code d'authentification et ça marche nickel. Est-ce que ce message est dû au fait que je travaille en local et qu'il ne peut pas réactualiser l'identifiant ainsi ? Merci d'avance.
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 11h48   #2
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Directeur technique
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
Peut etre qu'avec un petit bout de code ça aiderais un peu la recherche......Histoire de pas deviner des trucs faux
__________________
Pas de questions techniques en MP please

Mon site perso
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 11h50   #3
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Bonjour,

Tu as une erreur de varaible identifiant. Rien à voir avec le header.
Cependant, cette erreur provoque un affichage à l'écran, donc les en-têtes html ont déjà été envoyés.
Tu ne peux ainsi plus les envoyer en ligne 20 de ton script.

Peut-être devrais-tu gérer les headers avant même de travailler sur tes variables.
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 12h18   #4
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
Par défaut voici le fichier qui gère les identifiants

En fait je modifie l'identifiant d'origine pour que la connexion se fache sur un identifiant aléatoire mis à jour.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?
require("conf.php3");
 
/*-----------------------------------------------------------------*/
/*	PROGRAMME PRINCIPAL			*/
/*-----------------------------------------------------------------*/
 
// CONNEXION A LA BASE DE DONNEE
$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);
if(!$db_link) {echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier conf.php3"; exit;}
 
// ON SELECTIONNE L'ENREGISTREMENT CONTENANT 
// LE LOGIN SAISIS A LA PAGE LOGIN.HTM
$requete=mysql_db_query($sql_bdd,"select nom,passe,lien from ret where nom=\"$identifiant\"",$db_link) or die(mysql_error());
 
// SI AUCUN ENREGISTREMENT NE CORRESPOND
if(mysql_num_rows($requete)==0)
	{
	// REDIRECTION VERS LA PAGE ERREUR
	header("Location:$url_erreur");exit;
	}
 
// SI LE LOGIN ET MOT DE PASSE SONT EXACTES	
else
	$destination=mysql_result($requete,$i,"lien");
	{
	// CREATION D'UN IDENTIFIANT ALEATOIRE
	$taille = 20;
	$lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
	srand(time());
	for ($i=0;$i<$taille;$i++)
		{
		$id.=substr($lettres,(rand()%(strlen($lettres))),1);
		}
 
	// MISE A JOUR DE L'IDENTIFIANT DANS LA TABLE 
	$requete=mysql_db_query($sql_bdd,"update ret set id=\"$id\" where nom=\"$identifiant\"",$db_link) or die(mysql_error());
 
	// REDIRECTION VERS UNE PAGE PROTEGEE AVEC L'IDENTIFIANT SERVANT DE CLE
	header("Location:$destination?id=$id");
	}	
 
// DECONNEXION MYSQL
mysql_close($db_link);
?>
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 12h37   #5
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
C'est pas un peu abuser des redirections ?
Il est vrai que cela dépend des goûts et des couleurs.
Personnellement, à la place de redirections, j'aurais tout simplement fait des require_once pour insérer le bon code.

--- edit ---
Et surtout déplacer la gestion de bdd dans un fichier à part, du genre "include/bdd.php" pour ne pas surcharger
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 14h15   #6
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
Le problème c'est que je débute pas mal dans ce domaine de redirection par base de donnée donc je me base sur des exemples que je trouve sur le net, et de ceux que j'ai testé c'est le seul que j'ai réussi à utiliser, et surtout comprendre ... un peu. Alors c'est pour ça que je m'en sors pas trop. Quant à la bd normalement elle est gérée directement chez le FAI, sur phpMyAdmin ...
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 14h22   #7
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Bon alors, dans l'ordre, il faut d'abord que tu résolves ton problème d'identifiant.
C'est vrai qu'il n'est pas alimenté, ni même défini avant la création de la requête.

D'où boum !
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 14h48   #8
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
Logiquement, cet "identifiant" là correspond au nom que l'utilisateur à employer sur la page précédente; je m'explique : sur ma page j'ai

Code :
1
2
3
4
5
6
<form method="post" action="zone_membre/login.php3"><br />
        <input name="identifiant" type="text" size="20">
        <br /> 			    
        <br />
        <input type="submit" name="Submit" value="S'identifier">
</form>
donc là l'utilisateur tape son identifiant, qui est donc la valeur qui est utilisée dans la requete pour aller chercher les infos suivantes dans la BD. Donc il me semble que l'identifiant est bien définit pourtant.
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 14h50   #9
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Et bien il faudrait au moins faire un petit
Code :
$identifiant = $_POST['identifiant'];
Pour récupérer la valeur.
Voire même mettre un ou deux tests avant de lancer la requête pour ne pas se jeter dans le mur.
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 14h54   #10
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
--- Edit ---

normalement le "post" ci dessus récupère la valeur de l'identifiant justement il me semble
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 15h31   #11
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Quel post ?
Pas celui du formulaire en tous cas. Il ne fait qu'indiquer la méthode de transmission des données à la page cible.
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 15h39   #12
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
autant pour moi j'ai toujours cru ça, j'ai une version du site en ligne qui fonctionne avec ce code, alors comment il me garde la valeur de l'identifiant ? Et cette partie de code je la mets dans un script en début de page ?
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 15h53   #13
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Quelquechose dans ce genre (je n'ai pas les moyens de tester au taff)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?
require("conf.php3");
 
/*-----------------------------------------------------------------*/
/*	PROGRAMME PRINCIPAL			*/
/*-----------------------------------------------------------------*/
 
// CONNEXION A LA BASE DE DONNEE
$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);
if(!$db_link) {echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier conf.php3"; exit;}
 
// ON SELECTIONNE L'ENREGISTREMENT CONTENANT 
// LE LOGIN SAISIS A LA PAGE LOGIN.HTM
$identifiant = $_POST['identifiant'];
if ($identifiant) $requete=mysql_db_query($sql_bdd,"select nom,passe,lien from ret where nom=\"$identifiant\"",$db_link) or die(mysql_error());
 
// SI AUCUN ENREGISTREMENT NE CORRESPOND
if(!$identifiant OR mysql_num_rows($requete)==0)
	{
	// REDIRECTION VERS LA PAGE ERREUR
	header("Location:$url_erreur");exit;
	}
 
// SI LE LOGIN ET MOT DE PASSE SONT EXACTES	
else
	$destination=mysql_result($requete,$i,"lien");
	{
	// CREATION D'UN IDENTIFIANT ALEATOIRE
	$taille = 20;
	$lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
	srand(time());
	for ($i=0;$i<$taille;$i++)
		{
		$id.=substr($lettres,(rand()%(strlen($lettres))),1);
		}
 
	// MISE A JOUR DE L'IDENTIFIANT DANS LA TABLE 
	$requete=mysql_db_query($sql_bdd,"update ret set id=\"$id\" where nom=\"$identifiant\"",$db_link) or die(mysql_error());
 
	// REDIRECTION VERS UNE PAGE PROTEGEE AVEC L'IDENTIFIANT SERVANT DE CLE
	header("Location:$destination?id=$id");
	}	
 
// DECONNEXION MYSQL
mysql_close($db_link);
?>
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 16h11   #14
Membre régulier
 
Inscription : décembre 2006
Messages : 493
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 493
Points : 90
Points : 90
alors je viens de tester et ça ne marche pas non plus, ça me mets le meme message d'erreur + une ligne d'erreur par rapport à celle que je viens de rajouter !
nicolas2603 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h02.


 
 
 
 
Partenaires

Hébergement Web