besoin de conseil sur login et liste

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : besoin de conseil sur login et liste

par Cypher_PHP » 23 avr. 2008, 12:36

excuse j'étais absent pour raisons personnelles

merci à tout
j'ai pu résoudre le pb

encore merci

par steph29 » 17 avr. 2008, 16:06

$fonct = 'chef etablissement'; 
if ($fonct = 'chef etablissement') 
{
... test completement inutile... c'est tout le temps vrai... :?

tu as tester la requete que je t'ai donne plus haut?

tu n'essaie meme pas de comprendre ce que tu fait et ce que tu dois faire :shock:

par Cypher_PHP » 17 avr. 2008, 13:04

ah ca va mieux

ca marche mais je dois revérifier un truc
quand un chef d'établissement se loggue, tous SES agents s'affichent

mais là, je dois aller manger et revenir dans 1heure

merci steph29
à tout à l'heure
me revoila

il me reste à trouver tous les agents du même établissement du chef qui s'est loggué.
serait-il possible de remplacer 0941295X par $_post['rne']? ou quelquechose comme ça?
RNE est un numéro d'établissement.

je propose ci -dessous
<?
// login du chef
$login_ldap = $_POST['login_ldap']; // = assignation
$fonct = 'chef etablissement';
$rne = $_post['rne'];
if ($fonct = 'chef etablissement')
{

$req_agent = "SELECT table1.id AS id_agent,table1.nom AS nom_agent, table2.nom AS nom_etab, prenom, login_ldap, table1.tel AS tel_agent, etab, fonct, table1.mail AS mail_agent, table1.adresse AS adresse_agent, table1.ville AS ville_agent, table1.cp AS cp_agent, type_acces, id_type_client, os, av, date_prev,table1.date_dem AS dem, table2.ville AS ville_etab FROM $dbtable1 AS table1, $dbtable2 AS table2 WHERE table1.etab = table2.rne AND fonct != 'chef etablissement' AND rne = '0941295X' ORDER BY table1.nom ";
$result_agent = mysql_query($req_agent)or die(mysql_error());
?>

par steph29 » 17 avr. 2008, 12:38

on reprend depuis le debut : connait tu la fonction du $_POST['login_ldap'] au debut de ton fichier?

si oui ca commencera comme ca:
$login_ldap = $_POST['login_ldap']; // = assignation
$fonct=...;//a determiner comment tu la recupere...
if ($fonct == 'chef etablissement'){ // == test d'equivalence
sinon on utilise ma requete plus haut... :roll:

par Cypher_PHP » 17 avr. 2008, 12:18

suite aux différents propositions, je suis maintenant perdu.

alors j'ai refait et bidouillé un peu à ma façon. on va voir si vous êtes d'accord avec moi
je remets tout
je vous remercie bcp
pourriez vous me répondre rapidement?
voici le code PHP
 
<?php
$dbhost="************";
$dblogin="************";
$dbpass="************";
$dbbase="************";
$dbtable1="api";
$dbtable2="etab";

session_start();

//connexion au serveur de la base
mysql_connect($dbhost, $dblogin, $dbpass)
or die("erreur de connexion au serveur $dbhost");

//connexion à la base de données
mysql_select_db($dbbase) or die("erreur de connexion a la base de donnees");

// login du chef
if ($login_ldap = $_POST['login_ldap'] AND $fonct = 'chef etablissement')
{
$req_agent = "select  table1.nom AS nom_agent, table1.id AS id_agent from $dbtable1 AS table1 where fonct != 'chef etablissement'";
$result_agent = mysql_query($req_agent)or die(mysql_error());

// LISTE DES AGENTS selon login du chef
mysql_num_rows($result_agent);

// début du tableau
   		echo '<table bgcolor="#FFFFFF">'."\n";
        // première ligne on affiche les titres dans plusieurs colonnes
        echo '<tr><td colspan="6">Liste des demandeurs API : </td></tr>';
        echo '<tr><td bgcolor="#669999"><u>Nom de l\'agent</u></td>';
        echo '<td bgcolor="#669999"><u>ID</u></td>';
		echo '<td bgcolor="#669999"><u>Fonction</u></td>';
		echo '</tr>'."\n";

// lecture et affichage des résultats sur plusieurs colonnes, 1 résultat par ligne.
while($row = mysql_fetch_array($result_agent))
{
        echo '<tr>';
        echo '<td bgcolor="#CCCCCC" ><font size="1">'.$row['nom_agent'].'</font></td>';
		echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['id_agent'].'</font></td>';
		echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['fonct'].'</font></td>';
		echo '</tr>'."\n";
}
   		echo '</table>'."\n";

// fin du tableau.
}
else echo 'Désolé, vous n\'avez pas accès au tableau. Vous devez vous logguer en tant que chef d\'établissement';

// on libère le résultat
mysql_free_result($result_agent);
session_destroy();
?>
--
-- Structure de la table `api`
--

CREATE TABLE `api` (
`id` int(11) NOT NULL auto_increment,
`nom` varchar(30) NOT NULL default '',
`prenom` varchar(50) NOT NULL default '',
`login_ldap` varchar(50) NOT NULL default '',
`tel` varchar(30) NOT NULL default '',
`mail` varchar(50) NOT NULL default '',
`adresse` varchar(50) NOT NULL default '',
`cp` varchar(7) NOT NULL default '',
`ville` varchar(100) NOT NULL default '',
`etab` varchar(8) NOT NULL default 'Rectorat',
`fonct` varchar(50) NOT NULL default '',
`type_acces` enum('ADSL 2Mo','ADSL 512Ko','RNIS','RTC','Transpac','ADSL illimité') NOT NULL default 'ADSL 2Mo',
`date_prev` date NOT NULL default '2005-01-01',
`date_dem` date NOT NULL default '2005-01-01',
`id_type_client` int(11) NOT NULL default '0',
`equip` varchar(25) NOT NULL default 'PC Bureau Professionnel',
`os` varchar(11) NOT NULL default 'WinXP Pro',
`av` varchar(50) NOT NULL default '',
`osr` varchar(30) NOT NULL default '0',
`comm` varchar(200) NOT NULL default '',
`etat` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `login_ldap` (`login_ldap`)
) TYPE=MyISAM COMMENT='Table des clients API' AUTO_INCREMENT=385 ;
---------------------------------------------------------------------------------------------------------------------------------

-
-- Structure de la table `etab`
--

CREATE TABLE `etab` (
`id` int(11) NOT NULL auto_increment,
`rne` varchar(8) NOT NULL default '',
`type` varchar(10) NOT NULL default '',
`sec` varchar(10) NOT NULL default '',
`lib` varchar(50) NOT NULL default '',
`nom` varchar(50) NOT NULL default '',
`adresse` varchar(60) NOT NULL default '',
`cp` varchar(5) NOT NULL default '',
`ville` varchar(30) NOT NULL default '',
`tel` varchar(30) NOT NULL default '',
`fax` varchar(30) NOT NULL default '',
`mail` varchar(50) NOT NULL default '',
`date_dem` date NOT NULL default '0000-00-00',
`ddmaj` date NOT NULL default '0000-00-00',
`osr` varchar(50) NOT NULL default '',
`ce` varchar(60) NOT NULL default '',
`comm` varchar(210) NOT NULL default '',
`etat` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `rne` (`rne`)
) TYPE=MyISAM COMMENT='table des etablissements' AUTO_INCREMENT=183 ;

par steph29 » 17 avr. 2008, 10:41

qegr c'est bien le probleme de depart, on a pas l'id du user loggué puisque c'est un issu d'un annuaire ldap (on a que son login)...
si c'etait le cas le probleme aurait ete regle depuis le depart.... j'ai meme evoque les optimisations a faire sur les tables pour mieux gere tout ca.

et je n'ai pas de retour sur ma requete proposée plus haut...
j'ai essayé de donner les pistes pour avancer sur le probleme mais je pense que l'on attend plutot de donner la reponse toute faite, la il faudra passer voir quelqu'un d'autre :twisted:

par geqr » 16 avr. 2008, 21:29

Je manque de temps pour te répondre en totalité, j'éditerais mon post demain matin.



je ne comprend pas bien ci-dessous

Citation:tu as bien fait la récupération de l'id de l'utilisateur qui vient de se logger?
Quand un utilisateur va rentrer son loggin et son mot de passe, tu vas tester s'il se trouve dans la base, dans un cas positif, il va donc avoir
un identifiant : `id` int(11) NOT NULL auto_increment
une fonction : `fonct` varchar(50) NOT NULL default ''

donc il faut que tu récupere ces informations pour réaliser ensuite les tests sur cette fonction.

Citation:

alors fait un echo de ta requete et de ton résultat afin de voir si chacun est exact.
Pour tester si une requête est correcte, on affiche cette requete et son résultat.
Ensuite on peut tester la requete afficher dans sa base de données afin de vérifier de la validité de cette dernière.

*Je continue demain :)*

Bonne soirée

EDIT :
// lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.
while($row = mysql_fetch_array($res_affich_agent )) {
tu colle ma requête juste avant ces lignes...

j'ai été clair?

par Cypher_PHP » 16 avr. 2008, 10:06

je ne comprend pas bien ci-dessous
tu as bien fait la récupération de l'id de l'utilisateur qui vient de se logger?
alors fait un echo de ta requete et de ton résultat afin de voir si chacun est exact.
un echo de ma requete? c'est celui-là(ci dessous):
<?
// requete pour la fonction 'chef d'établissment"
$reqchef =  "SELECT table1.nom AS nom_agent, table2.nom AS nom_etab, prenom, login_ldap, table1.tel AS tel_agent, etab, fonct, table1.mail AS mail_agent, table1.adresse AS adresse_agent, table1.ville AS ville_agent, table1.cp AS cp_agent, type_acces, id_type_client, os, av, date_prev,table1.date_dem AS dem, table2.ville AS ville_etab FROM $dbtable1 AS table1, $dbtable2 AS table2 WHERE fonct ='chef etablissement' ORDER BY table1.nom AND table1.etab = table2.rne";
?>
quand à l'affichage j'avais omis la seconde requête à savoir:

PHP:
$rqt_affich_agent = "select * from api where fonct = 'agent'';
$res_affich_agent = mysql_query($rqt_affich_agent );

// lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.
while($row = mysql_fetch_array($res_affich_agent )) {
je la place où?

par geqr » 15 avr. 2008, 16:30

tu as bien fait la récupération de l'id de l'utilisateur qui vient de se logger?

vérifier bien les noms des tables et champs ..

si ce n'est pas cela et qu'il t'affiche 'Désolé, vous n\'avez pas accès au tableau. Vous devez vous logguer en tant que chef d\'établissement' alors fait un echo de ta requete et de ton résultat afin de voir si chacun est exact.

quand à l'affichage j'avais omis la seconde requête à savoir:
$rqt_affich_agent = "select * from api where fonct = 'agent'';
$res_affich_agent = mysql_query($rqt_affich_agent );

// lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne. 
while($row = mysql_fetch_array($res_affich_agent )) { 

par Cypher_PHP » 15 avr. 2008, 16:16

on est presque arrivé...
étant donné que je suis chef (je me suis amusé à être chef ;) ), après être loggué, le résulat est que je ne suis pas autorisé.
alors que c'est plutôt le contraire...
<?php
$rqt_fonction ="select fonct from api where id = '$id_recupéré'";
$res_fonction = mysql_query($rqt_fonction)or die(mysql_error());

// login du chef

if (mysql_result($res_fonction,0)=='chef etablissement'){
// début du tableau

    echo '<table bgcolor="#FFFFFF">'."\n";
        // première ligne on affiche les titres dans plusieurs colonnes
        echo '<tr><td colspan="6">Liste des demandeurs API : </td></tr>';
        echo '<tr><td bgcolor="#669999"><u>Nom de l\'agent</u></td>';
        echo '<td bgcolor="#669999"><u>Prénom</u></td>';
        echo '<td bgcolor="#669999"><u>Login</u></td>';
        echo '<td bgcolor="#669999"><u>Tel</u></td>';
        echo '<td bgcolor="#669999"><u>Etablissement RNE</u></td>';
        echo '<td bgcolor="#669999"><u>Fonction</u></td>';
		echo '<td bgcolor="#669999"><u>Email</u></td>';
		echo '<td bgcolor="#669999"><u>Résidence principale</u></td>';
        echo '<td bgcolor="#669999"><u>Code postal</u></td>';
        echo '<td bgcolor="#669999"><u>Ville</u></td>';
        echo '<td bgcolor="#669999"><u>Type d\'utilisation</u></td>';
        echo '<td bgcolor="#669999"><u>Type de machine</u></td>';
        echo '<td bgcolor="#669999"><u>Système d\'exploitation</u></td>';
        echo '<td bgcolor="#669999"><u>Anti-virus</u></td>';
        echo '<td bgcolor="#669999"><u>Typer d\'accès</u></td>';
        echo '<td bgcolor="#669999"><u>Date prévisionnelle d\'installation</u></td>';
        echo '<td bgcolor="#669999"><u>Date de la demande</u></td>';
        echo '</tr>'."\n";
    // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.
    while($row = mysql_fetch_array($res_fonction)) {
        echo '<tr>';
        echo '<td bgcolor="#CCCCCC" ><font size="1">'.$row['nom_agent'].'</font></td>';
        echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['prenom'].'</font></td>';
        echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['login_ldap'].'</font></td>';
        echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['tel_agent'].'</font></td>';
        echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['etab'].' - '.$row['nom_etab'].' - '.$row['ville_etab'].'</font></td>';
		echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['fonct'].'</font></td>';
		echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['mail_agent'].'</font></td>';
        echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['adresse_agent'].'</font></td>';
        echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['cp_agent'].'</font></td>';
        echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['ville_agent'].'</font></td>';
        echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['etab'].'</font></td>';
        echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['id_type_client'].'</font></td>';
        echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['os'].'</font></td>';
        echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['av'].'</font></td>';
        echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['type_acces'].'</font></td>';
        echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['date_prev'].'</font></td>';
        echo '<td bgcolor="#CCCCCC"><font size="1">'.$row['dem'].'</font></td>';
		echo '</tr>'."\n";
    }
    echo '</table>'."\n";
    // fin du tableau.
}
else echo 'Désolé, vous n\'avez pas accès au tableau. Vous devez vous logguer en tant que chef d\'établissement';

// on libère le résultat
mysql_free_result($res_fonction);
?>

par geqr » 15 avr. 2008, 15:47

bonjour,

il faut que tu récupère l'id de la personne qui se loggue, récupérer selon son id : sa fonction dans l'établissement puis tester si cette fonction == 'chef'. Et ensuite dans ce cas, tu affiche le tableau.
<?php

$rqt_fonction ="select fonct from api where id = '$id_recupéré';"
$res_fonction = mysql_query($rqt_fonction);

if (mysql_result($res_fonction,0)=='chef etablissement'){
// début du tableau 
    echo '<table bgcolor="#FFFFFF">'."\n"; 
        // première ligne on affiche les titres dans plusieurs colonnes 
        echo '<tr><td colspan="6">Liste des demandeurs API : </td></tr>'; 
        echo '<tr><td bgcolor="#669999"><u>Nom de l\'agent</u></td>'; 
        echo '<td bgcolor="#669999"><u>Prénom</u></td>'; 
        echo '<td bgcolor="#669999"><u>Login</u></td>'; 
        echo '<td bgcolor="#669999"><u>Tel</u></td>'; 
        echo '<td bgcolor="#669999"><u>Etablissement RNE</u></td>'; 
        echo '<td bgcolor="#669999"><u>Fonction</u></td>'; 
        echo '<td bgcolor="#669999"><u>Email</u></td>'; 
        echo '<td bgcolor="#669999"><u>Résidence principale</u></td>'; 
        echo '<td bgcolor="#669999"><u>Code postal</u></td>'; 
        echo '<td bgcolor="#669999"><u>Ville</u></td>'; 
        echo '<td bgcolor="#669999"><u>Type d\'utilisation</u></td>'; 
        echo '<td bgcolor="#669999"><u>Type de machine</u></td>'; 
        echo '<td bgcolor="#669999"><u>Système d\'exploitation</u></td>'; 
        echo '<td bgcolor="#669999"><u>Anti-virus</u></td>'; 
        echo '<td bgcolor="#669999"><u>Typer d\'accès</u></td>'; 
        echo '<td bgcolor="#669999"><u>Date prévisionnelle d\'installation</u></td>'; 
        echo '<td bgcolor="#669999"><u>Date de la demande</u></td>'; 
        echo '</tr>'."\n"; 
    // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne. 
    while($row = mysql_fetch_array($result1)) { 
        echo '<tr>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['nom_agent'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['prenom'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['login_ldap'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['tel_agent'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['etab'].' - '.$row['nom_etab'].' - '.$row['ville_etab'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['fonct'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['mail_agent'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['adresse_agent'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['cp_agent'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['ville_agent'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['etab'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['id_type_client'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['os'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['av'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['type_acces'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['date_prev'].'</td>'; 
        echo '<td bgcolor="#CCCCCC">'.$row['dem'].'</td>'; 
        echo '</tr>'."\n"; 
    } 
    echo '</table>'."\n"; 
    // fin du tableau. 
} 
else echo 'Pas d\'affichage'; 

// on libère le résultat 
mysql_free_result($result1); 
?>

c'est vite fait et à tester mais ca doit ressembler à ca.

par Cypher_PHP » 15 avr. 2008, 15:22

non, il n'y a pas d'id qui relie les deux tables . par contre, le champ "rne" de la table ETAB et le champ "etab" de la table API ont les mêmes données.

les renseignements sur les agents et chefs sont stockés dans la table API et ceux des établissements dans la table ETAB

je vais maintenant tester ta proposition...

par steph29 » 15 avr. 2008, 14:56

mouais je suppose que la jointure entre les deux tables est etab.rne=api.nom :S
on fait des jointure sur les id en general... [ex: etab.id=api.id_etab]
et il n'y a pas de champ dans la table etab pour designé le chef d'etablissement (un id api...)?

sinon on peut essayer de faire un truc du genre non testé et un peu trop capillotracté a mon gout:
$requete="SELECT 
table_agent.nom, 
table_agent.prenom, 
table_agent.logion_ldap, 
etc.

FROM etab
INNER JOIN api AS table_resp ON (etab.rne=table_resp.nom)

LEFT JOIN api AS table_agent ON (etab.rne=table_agent.nom AND table_agent.fonct!='chef etablissement')

WHERE table_resp.login_ldap='".$login_ldap."' AND table_resp.fonct='chef etablissement'
";

par Cypher_PHP » 15 avr. 2008, 14:38

voici les structures:

Code : Tout sélectionner

CREATE TABLE `api` ( `id` int(11) NOT NULL auto_increment, `nom` varchar(30) NOT NULL default '', `prenom` varchar(50) NOT NULL default '', `login_ldap` varchar(50) NOT NULL default '', `tel` varchar(30) NOT NULL default '', `mail` varchar(50) NOT NULL default '', `adresse` varchar(50) NOT NULL default '', `cp` varchar(7) NOT NULL default '', `ville` varchar(100) NOT NULL default '', `etab` varchar(8) NOT NULL default 'Rectorat', `fonct` varchar(50) NOT NULL default '', `type_acces` enum('ADSL 2Mo','ADSL 512Ko','RNIS','RTC','Transpac','ADSL illimité') NOT NULL default 'ADSL 2Mo', `date_prev` date NOT NULL default '2005-01-01', `date_dem` date NOT NULL default '2005-01-01', `id_type_client` int(11) NOT NULL default '0', `equip` varchar(25) NOT NULL default 'PC Bureau Professionnel', `os` varchar(11) NOT NULL default 'WinXP Pro', `av` varchar(50) NOT NULL default '', `osr` varchar(30) NOT NULL default '0', `comm` varchar(200) NOT NULL default '', `etat` int(11) NOT NULL default '0', PRIMARY KEY (`id`), UNIQUE KEY `login_ldap` (`login_ldap`) )

Code : Tout sélectionner

CREATE TABLE `etab` ( `id` int(11) NOT NULL auto_increment, `rne` varchar(8) NOT NULL default '', `type` varchar(10) NOT NULL default '', `sec` varchar(10) NOT NULL default '', `lib` varchar(50) NOT NULL default '', `nom` varchar(50) NOT NULL default '', `adresse` varchar(60) NOT NULL default '', `cp` varchar(5) NOT NULL default '', `ville` varchar(30) NOT NULL default '', `tel` varchar(30) NOT NULL default '', `fax` varchar(30) NOT NULL default '', `mail` varchar(50) NOT NULL default '', `date_dem` date NOT NULL default '0000-00-00', `ddmaj` date NOT NULL default '0000-00-00', `osr` varchar(50) NOT NULL default '', `ce` varchar(60) NOT NULL default '', `comm` varchar(210) NOT NULL default '', `etat` int(11) NOT NULL default '0', PRIMARY KEY (`id`), UNIQUE KEY `rne` (`rne`) )

par steph29 » 15 avr. 2008, 14:19

c'est juste pour t'aider dans ta requete... il faut bien une relation entres les agents et le login du chef d'etablissement...
la je vais pas l'inventer... ;) et toi non plus a priori...