selection dans une liste par rapport au login

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 : selection dans une liste par rapport au login

par martial » 12 avr. 2007, 10:30

J'ai suivi tes conseils et encore une fois tu avais raison Ryle tout cela n'était qu'une question de parenthéses, crochets, guillemets...Voici la bonne requête
$clause = "&& (coordonnees LIKE'$motclef%' OR nom LIKE'$motclef%' OR prenom LIKE'$motclef%')";....
...$pseudo = $row['pseudo'];....
....$sql = "SELECT id_contact,nom,prenom,coordonnees,id_cat FROM $T_contacts WHERE `comm` = '$pseudo' $clause ORDER BY $ordre LIMIT $nbr_line_min, $nbr_line_view"; ....
J'ai rajouté un champ nommé "comm" dans la table des clients et ce champ correspond au login du commercial :D !
Comme quoi "moi pas parler bien PHP/MYsql..mais moi apprendre beaucoup grace à visage pale qui donne eau de feu"

! Merci!

par Ryle » 10 avr. 2007, 10:21

Peux tu donner le message d'erreur complet ? :) On dirait une parse error.. problème de guillemets/apostrophes/accolades/parenthèse non équilibrés ? .. la ligne serait interessante...

Si $pseudo est une chaine de caractère, les apostrophes sont indispensables. Si ta requête tourne sous MySQL alors que tu n'as pas mis les apostrophes autour de ta chaine, c'est que tu ne testes pas la bonne requête :?
Ajoute un "or die(mysql_error())" lors de l'exécution de tes requêtes tu verras tout de suite qu'il y a une erreur de syntaxe s'il manque les apostrophes.. et peut être verras tu également d'autres erreurs sql (nom de champ incorrect, etc.)
$resultat = mysql_query($sql) or die (mysql_error()); 
Une remarque également dans le cas du critère ci-dessous :
$clause = "WHERE coordonnees LIKE'$motclef%' OR nom LIKE'$motclef%' OR prenom LIKE'$motclef%' AND id_cat LIKE $pseudo"; 
la condition AND est prioritaire sur le OR (comme la multiplication l'est sur l'addition. Si tu ne spécifies pas de parenthèses, ce critère retournera les enregistrements pour lesquels le prenom commence par $motclef ET id_cat est égal à '$pseudo' OU BIEN ceux dont coordonnees commence par $motclef (quel que soit l'id_cat), OU BIEN ceux dont nom commence par $motclef (quel que soit l'id_cat).
Je suppose que ce que tu souhaites c'est pour avoir l'un des trois pour un commercial donné :
$clause = "WHERE (coordonnees LIKE '".$motclef."%' OR nom LIKE '".$motclef."%' OR prenom LIKE '".$motclef."%') AND id_cat = '".$pseudo."'"; 
A noter par ailleurs que si tu fais une recherche exacte (genre id_cat = pseudo) il faut utiliser le "=" et pas le LIKE :)


Enfin, il y a quelque chose d'illogique ici (outre l'absence d'apostrophes) :
if($view_cat != 0) 
     $clause = "WHERE id_cat=$view_cat AND id_cat LIKE $pseudo";
Comment id_cat peut être égale à $view_cat et ressemble à $pseudo ? tu testes $view_cat!=0 ? ce serait donc un nombre ? qu'en est-il de id_cat ? et pseudo du coup ? .. comprend plus moi :-s

par martial » 10 avr. 2007, 09:47

Les requetes fonctionnent sous PHPMYADMIN!
mais dans lister.php avec ou sans apostrophes le programme plante quand je rajoute la condition

Code : Tout sélectionner

...AND id_cat LIKE '$pseudo'
ou

Code : Tout sélectionner

...AND id_cat LIKE $pseudo
j'ai le message "...T unexpected on ligne...". Correspondant aux lignes
$max = mysql_num_rows($resultat); 
while($contact = mysql_fetch_row($resultat)) 
Pourtant la variable $pseudo est prise en compte dans la page
car j'affiche le login dans l'en tête avec la ligne
<table width="100%" border="0" cellspacing="5" cellpadding="10"> 
  <tr> 
    <td align="center"><p> 
    CLIENTS DE <?php user('pseudo'); ?><br> 
Quant au login, il est unique, c'est moi qui le saisi en tant qu'administrateur. Le commercial peut simplement changer le mot de passe à son ouverture de session!
Enfin dans la table MySql enregistrant les clients, j'ai la colonne "id_cat" qui enregistre le pseudo du commercial. Donc le client id_cat correspond toujours au commercial pseudo

par Ryle » 09 avr. 2007, 23:31

Affiche les requêtes générées et testes les dans phpMyAdmin ou MySQL, ca aide souvent pour repérer les erreurs. Par exemple, si $pseudo est une chaine de caractère, il faut en sql la délimiter par des apostrophes (A noter qu'un identifiant invariable pour désigner chacun de tes commerciaux de manière unique serait plus adapté selon moi qu'un pseudo/login qui est susceptible de changer ou d'avoir des doublons)

Pense également à sortir tes variables php des chaines, ca rend le code 'achement plus lisible :)

selection dans une liste par rapport au login

par martial » 09 avr. 2007, 20:43

Bonjour
j'ai fait une base de données des clients des commerciaux de mon entreprise. j'ai donc écrit un programme en PHP pour qu'ils puissent l'alimenter.
Chaque commercial accéde à ce programme par un login et mot de passe perso, en effet les clients leur "appartiennent". mais quand le fichier "lister.php" est lancé, celui ci liste tous les clients!
Je n'arrive pas à introduire la condition

Code : Tout sélectionner

SELECT * from ....WHERE comm=(l'équivalent du login qui est la variable $pseudo)
dans mon code afin que les commerciaux ne puissent lister que leurs clients! En effet quand je rajoute cette condition dans les clauses, le programme me renvoit une erreur: Pourtant avec PHPMYAdmin ça marche
voici le code lister.php
<?php
include('user_verif.php');
user_verif("1", "user_login.php");

  include ("_var.inc.php");
  include ("_fonctions.inc.php");

  @$clause        = $_GET["clause"];
  @$ordre         = $_GET["ordre"];
  @$nbr_line_min  = $_GET["nbr_line_min"];
  @$view_cat      = $_GET["view_cat"];
  @$nbr_line_view = $_GET["nbr_line_view"];
  @$motclef       = $_GET["motclef"];
  @$dans          = $_GET["dans"];
    if($debugSQL) {
    if($lienDB = mysql_connect($DBserver,$DBlogin,$DBpass)) echo "Connexion au serveur MySQL : OK <br>\n";
    if(mysql_select_db($DB)) echo "Connexion à la base : OK <hr>\n\n";
  } else {
    $lienDB = @mysql_connect($DBserver,$DBlogin,$DBpass);
    @mysql_select_db($DB);
  }

  if(empty($nbr_line_view))
    $nbr_line_view = $nbr_line;
?>
<title>Lister</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="css/styles.css" rel="stylesheet" type="text/css">
<style type="text/css">
<!--
body {
	background-color: #DBE7F2;
}
-->
</style></head>


<table width="100%" border="0" cellspacing="5" cellpadding="10">
  <tr>
    <td align="center"><p>
	CLIENTS DE <?php user('pseudo'); ?><br>
	<a href="ajouter2.php"><img src="img/post-it.gif" alt="Ajouter un client" width="15" height="15" border="0">Ajouter </a>            
	<a href="javascript:window.print()"><img src="img/print.gif" alt="Imprimer la page" border="0">Imprimer</a>
	<a href="index.php"><img src="img/retour.gif" alt="Retour" width="16" height="16" border="0">Retour</a>
      <form action="lister.php" method="get">
        <img src="img/search.gif" alt="Rechercher un contact" width="15" height="15" border="0"> 
        <input name="nbr_line_view" type="hidden" value="<?php echo"$nbr_line_view"; ?>">
        <input name="motclef" type="text" value="<?php echo"$motclef"; ?>" size="10">
        Rechercher dans 
        <select name="dans" id="dans">
          <option value="tout" <?php if($dans == "tout") echo "selected"; ?>>Tout</option>
          <option value="nom" <?php if($dans == "nom") echo "selected"; ?>>Nom</option>
          <option value="prenom" <?php if($dans == "prenom") echo "selected"; ?>>Pr&eacute;nom</option>
          <option value="coordonnées" <?php if($dans == "coordonnées") echo "selected"; ?>>Coordonn&eacute;es</option>
        </select> <input type="submit" value="Chercher">
  </form>
  </tr>
<table width="100%" border="0" cellspacing="2" cellpadding="3">
  <tr> 
    <td width="24%" bgcolor="#000000"><a href="lister.php?<?php echo "nbr_line_view=$nbr_line_view&motclef=$motclef&dans=$dans&nbr_line_min=$nbr_line_min"; ?>"><font color="#FFFFFF"><strong>Nom</strong></font></a></td>
    <td width="24%" bgcolor="#000000"><a href="lister.php?ordre=prenom<?php echo "&nbr_line_view=$nbr_line_view&motclef=$motclef&dans=$dans&nbr_line_min=$nbr_line_min"; ?>"><font color="#FFFFFF"><strong>Pr&eacute;nom</strong></font></a></td>
    <td width="24%" bgcolor="#000000"><a href="lister.php?ordre=coordonnees<?php echo "&nbr_line_view=$nbr_line_view&motclef=$motclef&dans=$dans&nbr_line_min=$nbr_line_min"; ?>"><font color="#FFFFFF"><strong>Coordonn&eacute;es</strong></font></a></td>
    <td bgcolor="#000000" align="center"><strong><font color="#FFFFFF">Action</font></strong></td>
  </tr>
<?php
  if(empty($ordre)) $ordre = "nom";
  
// selection par mot clé
  if(!empty($motclef)) {
    if($dans == "tout")
      $clause = "WHERE coordonnees LIKE'$motclef%' OR nom LIKE'$motclef%' OR prenom LIKE'$motclef%' AND id_cat LIKE $pseudo";
    else
      $clause = "WHERE $dans LIKE'$motclef%' AND id_cat LIKE $pseudo";
  }
  
  if($view_cat != 0)
     $clause = "WHERE id_cat=$view_cat AND id_cat LIKE $pseudo";
  
  if(empty($nbr_line_min))
    $nbr_line_min = 0;
  else {
    if($nbr_line_min < 0) $nbr_line_min = 0;
  }
// Nombre d'enregistrement total  
  $sql = "SELECT * FROM $T_contacts $clause";
  $resultat = mysql_query($sql);
  $max = mysql_num_rows($resultat);
  
  $sql = "SELECT id_contact,nom,prenom,coordonnees,id_cat FROM $T_contacts $clause ORDER BY $ordre LIMIT $nbr_line_min, $nbr_line_view";
  $resultat = mysql_query($sql);
  mysql_close($lienDB);
  $color = true;
  $i = 0;
  if($debugSQL) echo '<img src="img/star.gif" alt="Debug MySQL" width="15" height="15" border="0"> Requete MySQL : <br><input type="text" name="debugSQL" value="'.$sql.'" size="150"><br><br>';

//  Boucle d'affichage du tableau avec les variables de la table
  while($contact = mysql_fetch_row($resultat)) {
    $i++;
    if($color) {
      $color_td = $color_1;
      $color = false;
    } else {
      $color_td = $color_2;
      $color = true;
    }
    echo "<tr bgcolor=\"#".$color_td."\">\n";
 // Nom et Prénom
    echo "<td>".$contact[1]."</td>\n"; // Nom
    echo "<td>".$contact[2]."</td>\n"; // Prénom
    echo "<td>".$contact[3]."</td>\n"; // coordonnees
	echo '<td><div align="center"><a href="detail.php?id='.$contact[0].'">D&eacute;tails</a></div></td>'."\n";
    echo "</tr>\n";
  }
  echo "</table>\n";
//  echo "<br>i : $i<br>nbr_line_min : $nbr_line_min<br>nbr_line_view : $nbr_line_view<br>";
  if($i == 0) 
    echo "<center><h1>Pas d'enregistrement</h1></center>\n";
  else
    echo "<br><center><strong>$i affich&eacute;s sur $max enregistrements trouv&eacute;s</strong></center><br>\n";

  if($nbr_line_min < $nbr_line_view)
    echo "<center>&laquo;&laquo; pr&eacute;c&eacute;dente ";
  else {
    $min = $nbr_line_min - $nbr_line_view;
	echo "<center><a href=\"lister.php?view_cat=$view_cat&ordre=$ordre&nbr_line_view=$nbr_line_view&motclef=$motclef&dans=$dans&nbr_line_min=$min\">&laquo;&laquo; pr&eacute;c&eacute;dente</a> ";
  }
  echo "<strong>|</strong> \n";
  $ii = 0;
  $x = ($max / $nbr_line_view) + 1;
//  echo "x=$x :: i=";
  if($x > 2) {
    for($i = 1; $i < $x; $i++) {
 	  echo "<a href=\"lister.php?view_cat=$view_cat&ordre=$ordre&nbr_line_view=$nbr_line_view&motclef=$motclef&dans=$dans&nbr_line_min=$ii\">$i</a>";
      echo " <strong>|</strong> \n";
	  $ii = $ii + $nbr_line_view;
    }
  }

  if(($nbr_line_min + $nbr_line_view) >= $max)
	echo "suivante &raquo;&raquo;</center>\n";
  else {
    $nbr_line_min = $nbr_line_min + $nbr_line_view;
	echo "<a href=\"lister.php?view_cat=$view_cat&ordre=$ordre&nbr_line_view=$nbr_line_view&motclef=$motclef&dans=$dans&nbr_line_min=$nbr_line_min\">suivante &raquo;&raquo;</a></center>\n";
  }
?>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td align="center" class="pied"><hr width="300"></td>
  </tr>
</table>