Page 1 sur 1

afficher en forme d'un tableau, en fonction d'une valeur dan

Posté : 22 juin 2009, 13:44
par waldner77
Bonjour,
au moment que je me connecte avec login et mot de passe, j'affiche en forme de tableau en php le contenu de ma table mysql et je veux afficher juste les données de la personne qui c'est connecter et non toute les donnée qui ne sont pas a lui mais il me dit que j'ai pas de donnée enregistré donc je voulais savoir si je n'ai pas fait une erreur. est ce que vous pouvez m'aidez?
merci encore
voici mon code
<?php
 $pseudo =$_COOKIE['monpseudo'];
$select2 = "SELECT nom,prenom FROM membre WHERE pseudo= '$pseudo' ";

								$result2 = mysql_query($select2,$db_link) or die ('Erreur : '.mysql_error() );

								while($Tab=mysql_fetch_array($result2))
								{

								$prenom = $Tab['prenom'];
								$nom = $Tab['nom'];
								$NP1 = $nom.' '.$prenom;
								}
								echo $NP1;
 $query="SELECT nom_pdf,destinataire,diffusee_par,email1,email2,date FROM a_verifier WHERE destinataire='$NP1'";
$resultat=mysql_query($query,$db_link) or die (mysql_error());;
$total=mysql_num_rows($resultat);//donne le nombre de ligne
// si on a récupéré un résultat on l'affiche.


if($total) {
//debut du tableau

echo'<table bgcolor="#FFFFFF">'."\n";
// première ligne on affiche les titres du tableau nomTA , pseudo , NRDVvalide ,
//NRDVenattente , NRDVannule dans 5 colones
echo '<tr>';
echo '<td bgcolor="#669999"><b><u>Nom_PDF</u></b></td>';
echo '<td bgcolor="#669999"><b><u>diffuser par</u></b></td>';
echo '<td bgcolor="#669999"><b><u>email du diffuseur</u></b></td>­';
echo '<td bgcolor="#669999"><b><u>destinateur</u></b></td&­gt;';
echo '<td bgcolor="#669999"><b><u>email du destinateur</u></b></td>­';
echo '<td bgcolor="#669999"><b><u>date</u></b></td>­';
echo '<td bgcolor="#669999"><b><u>état</u></b></td>­';
echo '</tr>'."\n";
// lecture et affichage des résultats sur 6 colonnes, 1 résultat par ligne.
while($row=mysql_fetch_array($resultat))
{
	
echo '<tr>';
echo '<td bgcolor="#CCCCCC"><a href="A_VERIFIER//'.$row["nom_pdf"].'">'.$row["nom_pdf"].'</a></td>'; 
//echo '<td bgcolor="#CCCCCC"><a href="test4.php">'.$row["nom_pdf"].'</a></td>';
echo '<td bgcolor="#CCCCCC">'.$row["diffusee_par"].'</td>';
echo '<td bgcolor="#CCCCCC">'.$row["email1"].'</td>';
echo '<td bgcolor="#CCCCCC">'.$row["destinataire"].'</td>';
echo '<td bgcolor="#CCCCCC">'.$row["email2"].'</td>';
echo '<td bgcolor="#CCCCCC">'.$row["date"].'</td>';?>
<td bgcolor="#CCCCCC"><SELECT name="reponse" onChange="alert('Index: ' + this.selectedIndex + '\nValeur: ' + 
  this.options[this.selectedIndex].value)">'
<option value="valider"> </option>  
<option value="valider">valider</option>
<option value="refuser">refuser</option>
</select>
</td>
<?php
echo '</tr>'."\n";
}
echo '</table>'."\n";
// fin du tableau.
}
else echo 'Pas d\'enregistrements dans cette table...';

// on libère le résultat
mysql_free_result($resultat);

?>
	<a href="<?php echo $url; ?>">Se d&eacute;loguer</a>
</body>
</html>
<?php
close(); 

?>	

Posté : 22 juin 2009, 13:51
par sadeq
Bonjour,

donnes-nous un exemple de l'affichage que tu as après l'exécution de ton programme et surtout ce que affiche la variable $NP1.

Posté : 22 juin 2009, 14:10
par charabia
Il y a quelque chose que j'ai du mal à comprendre.

Tu dis "au moment où JE me connecte" et "afficher les données de LA PERSONNE qui s'est connectée", ce n'est pas très clair...

Posté : 22 juin 2009, 14:14
par geoffroy
C'est vrai que c'est pas très clair...
On ne sait pas si le problème vient de la 1ère ou de la 2ème requête
Essaie

Code : Tout sélectionner

if($total!=0)
?

Posté : 22 juin 2009, 14:16
par waldner77
quand je me connecte avec mon login et le mot de passe.
$NP1 contient le nom et prénom de la personne .
avec le code que j'ai mit est un tableau en php avec les noms des pdf , le nom et prénom du destinataire, le diffiseur ,l'email du destinataire, l'email du diffiseur et la date.
au début j'avait fait un listage de tout se que j'avais dans ma table mais maintenant j'essaie d'afficher un tableau ma table mais avec le nom du destinataire qui est égale a la personne qui est destiné

Posté : 22 juin 2009, 14:29
par charabia
Ta première requête sert à t'identifier (toi). Avec cette requête tu récupères le nom et prénom (les tiens).

Dans ta 2è requête, tu cherches dans a_verifier des éléments du destinataire NP1 qui n'est autre que toi.

C'est ça que j'ai du mal à saisir.

Posté : 22 juin 2009, 14:36
par waldner77
$pseudo=$_COOKIE['monpseudo']= moi (quand je me suis connecter)
après je vais récupère le nom et prénom qui est dans ma table membre grâce au pseudo
après je met le prénom et nom dans la variable $NP1
et après je voudrai récuperer dans ma table a_veriffiee les donnée mais juste les donnée de la personne $NP1

Posté : 22 juin 2009, 14:43
par charabia
Houla, reprenons avec le code :
$pseudo =$_COOKIE['monpseudo'];
$select2 = "SELECT nom,prenom FROM membre WHERE pseudo= '$pseudo' "
$pseudo = toi
donc la requête est : Sélectionner le nom et prénom dans la table membre de $pseudo = sélectionner ton nom/prénom.

donc $NP1 étant $nom.' '.$prenom, on a $NP1 = ton nom suivi de ton prénom.

Ta 2è requête :
SELECT nom_pdf,destinataire,diffusee_par,email1,email2,date FROM a_verifier WHERE destinataire='$NP1'
-> Sélectionner nom_pdf, destinataire, diffusee_par, email1, email2, date dans la table a_verifier où le destinataire est $NP1, en l'occurence toi.

Je ne vois donc nulle part où se trouve cette autre "personne".

Posté : 22 juin 2009, 15:10
par waldner77
quand j'ai vérifier mon code je doit avoir un problème avec ma requête:
'
SELECT nom_pdf,destinataire,diffusee_par,email1,email2,date FROM a_verifier WHERE destinataire='$NP1'
qui doit y avoir un problème.
je suis d'accord avec toi, mais normalement il me donne tout se qu'il y a dans ma table a_vérifier quand destinataire vaut $NP1 donc quand il y a par exemple toto toto dans ma table a_vérifier.

Posté : 22 juin 2009, 15:14
par charabia
En fait dans tout ton code, il n'y a pas de tiers personne. Tu fait tout en te basant sur ta propre connexion donc logiquement les résultats ne donneront que ce qui te concerne.

Maintenant à cause de ce mélange, je ne sais pas du tout ce que tu essayes de faire exactement.

Tu ne voudrais pas plutôt faire apparaître les données d'un membre qui vient de se connecter ?

Posté : 22 juin 2009, 15:20
par waldner77
j'ai regardé mon problème attentivement et j'ai modifier une ligne:
j'ai mis
if($total!=0) {
au lien de
if($total=0) {
et j'ai fait j'ai mis directement toto toto comme nom dans la requête:
$query="SELECT nom_pdf,destinataire,diffusee_par,email1,email2,date FROM a_verifier WHERE destinataire= 'toto   toto' ";
et j'ai remarqué qu'il y a un problème avec les espaces dans ma table.
donc ma table il a enregistré toto toto avec trois espace au lieu au lieu d'un seul donc maintenant il faut que je regarde sa

Posté : 22 juin 2009, 15:22
par charabia
Je n'ai toujours pas tout compris, mais au lieu de faire la clause WHERE sur un nom/prénom concaténés, pourquoi ne pas le faire sur un ID unique ?

Et attention, il faut mettre 2 = dans un IF

Posté : 22 juin 2009, 15:34
par waldner77
j'ai regarder et sa ne marche pas avec == sa marche avec !=
la je ne comprend pas?

Posté : 22 juin 2009, 16:00
par charabia
!= signifie différent. Donc si différent de 0 alors afficher. Donc logique qu'il n'y ait aucun enregistrement avec ==.

Posté : 23 juin 2009, 12:03
par sadeq
Bonjour, bon voila, j'ai lu vos interventions et j'ai délimité le problème.

En fait, le souci est que le contenu du champ destinataire de la base de données diffère du contenu $NP1 car il se peut que le nombre d'espaces entre le nom et le prénom ne soit pas le même. C'est pour cela qu'il vaudrait mieux utiliser une expression régulière dans la requête SQL qui permet d'ignorer le trop d'espaces non significatif et ainsi faire une bonne comparaison.

Voici comment :
L'expression régulière qui permet d'ignorer les espaces non significatifs entre 2 mots est de la forme suivante:
trim(champ) REGEXP '^Dupont[[:blank:]]+Jean$'
où :
^ et $ désignent le début et la fin du texte recherché
et [[:blank:]]+ désignent une ou plusieurs occurrences (+) possibles de l'espace ([[:blank:]])
Le TRIM permet d'éliminer les espaces inutiles qui peuvent exister avant et après le texte.

Cette expression retourne VRAI ou 1 dans le cas où le contenu du champ correspond à la syntaxe du texte recherché (on l'appelle : le filtre de l'expression régulière)

Donc dans ton cas, il faut mettre les variables $nom et $prenom à leurs emplacements dans cette expression régulière et mettre le tout dans la requête SQL. Ce qui donne le code suivant:
  $prenom = trim($Tab['prenom']); // trim : enlève les espaces inutiles autour du mot
  $nom = trim($Tab['nom']);
  // expression régulière pour chercher un nom et prénom quelque soit le nbre d'espaces les séparant
  $regexp = '^' . $nom . '[[:blank:]]+' . $prenom . '$'; // expression comme : '^Dupont\s*Jean$'

  $query = "SELECT nom_pdf,destinataire,diffusee_par,email1,email2,date FROM a_verifier WHERE TRIM(destinataire) REGEXP '$regexp'";
Et voici, le programme général corrigé:

[NOTA] J'ai aussi re-structuré le bloc de la seconde requête et mis $total >0 (plus logique que == et !=)
<?php
$pseudo = $_COOKIE['monpseudo'];
$select2 = "SELECT nom,prenom FROM membre WHERE pseudo= '$pseudo' ";

$result2 = mysql_query($select2,$db_link) or die ('Erreur : '.mysql_error() );
$total = 0;

if ($Tab=mysql_fetch_array($result2))
{

  $prenom = trim($Tab['prenom']);
  $nom = trim($Tab['nom']);
  // expression régulière pour chercher un nom et prénom quelque soit le nbre d'espaces les séparant
  $regexp = '^' . $nom . '[[:blank:]]+' . $prenom . '$'; // expression comme : '^Dupont[[:blank:]]+Jean$'

  $query = "SELECT nom_pdf,destinataire,diffusee_par,email1,email2,date FROM a_verifier WHERE TRIM(destinataire) REGEXP '$regexp'";
  $resultat = mysql_query($query,$db_link) or die (mysql_error());;
  $total = mysql_num_rows($resultat);//donne le nombre de ligne
}

// si on a récupéré un résultat on l'affiche.

if($total >0) {
//debut du tableau

echo'<table bgcolor="#FFFFFF">'."\n";
// première ligne on affiche les titres du tableau nomTA , pseudo , NRDVvalide ,
//NRDVenattente , NRDVannule dans 5 colones
echo '<tr>';
echo '<td bgcolor="#669999"><b><u>Nom_PDF</u></b></td>';
echo '<td bgcolor="#669999"><b><u>diffuser par</u></b></td>';
echo '<td bgcolor="#669999"><b><u>email du diffuseur</u></b></td>­';
echo '<td bgcolor="#669999"><b><u>destinateur</u></b></td&­gt;';
echo '<td bgcolor="#669999"><b><u>email du destinateur</u></b></td>­';
echo '<td bgcolor="#669999"><b><u>date</u></b></td>­';
echo '<td bgcolor="#669999"><b><u>état</u></b></td>­';
echo '</tr>'."\n";

// lecture et affichage des résultats sur 6 colonnes, 1 résultat par ligne.
while($row=mysql_fetch_array($resultat))
{
echo '<tr>';
echo '<td bgcolor="#CCCCCC"><a href="A_VERIFIER//'.$row["nom_pdf"].'">'.$row["nom_pdf"].'</a></td>'; 
//echo '<td bgcolor="#CCCCCC"><a href="test4.php">'.$row["nom_pdf"].'</a></td>';
echo '<td bgcolor="#CCCCCC">'.$row["diffusee_par"].'</td>';
echo '<td bgcolor="#CCCCCC">'.$row["email1"].'</td>';
echo '<td bgcolor="#CCCCCC">'.$row["destinataire"].'</td>';
echo '<td bgcolor="#CCCCCC">'.$row["email2"].'</td>';
echo '<td bgcolor="#CCCCCC">'.$row["date"].'</td>';?>
<td bgcolor="#CCCCCC"><SELECT name="reponse" onChange="alert('Index: ' + this.selectedIndex + '\nValeur: ' + 
  this.options[this.selectedIndex].value)">'
<option value="valider"> </option>  
<option value="valider">valider</option>
<option value="refuser">refuser</option>
</select>
</td>
<?php
echo '</tr>'."\n";
}
echo '</table>'."\n";
// fin du tableau.
}
else echo 'Pas d\'enregistrements dans cette table...';

// on libère le résultat
mysql_free_result($resultat);

?>

<a href="<?php echo $url; ?>">Se d&eacute;loguer</a>
</body>
</html>
<?php
close(); 
?> 
C'est vrai que les expressions régulières sont très pratiques pour effectuer des recherches dans le texte, mais elles sont à consommer avec modération :lol: car elles consomment plus de ressources que les opérateurs de comparaison normaux.

Pour plus d'infos sur les Regexp de MySQL, voir : http://dev.mysql.com/doc/refman/5.0/fr/regexp.html