Probleme de array_unique dans une liste

HD
Mammouth du PHP | 1181 Messages

03 sept. 2005, 16:24

meme si j'ai pas tout compris de ta derniere question (essaie d'expliquer ce que fait ton code - chauqe partie - puis ce que tu veux - plus clairement - ) sauf si la reponse à ta question est de mettre au lieu de
$req2 ="SELECT nom,telephone,fax,commercial,portable FROM commandes_2005"; 
$req2.= " ORDER BY annonceur ASC"; 
mettre :
$req2 ="SELECT [color=blue]annonceur[/color], nom,telephone,fax,commercial,portable FROM commandes_2005"; 
$req2.= " ORDER BY annonceur ASC"; 
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Eléphant du PHP | 101 Messages

03 sept. 2005, 17:02

alors je vais essayer de t'expliquer mais avant je reviens sur le debut de ce post pour qu'on puisse mieux se comprendre.
Par apport au code que tu m'as donnée hier en fin d'apres midi qui etait de pouvoir inclure d'autre champs mais que ce soit que les champs annonceur et client qui soit avec
'SELECT DISTINCT 
tu m'avais proposé de mettre une requete suplementaire pour les autres champs soit:
$req = 'SELECT DISTINCT annonceur,client FROM commandes_2005 ORDER BY annonceur ASC'; 
$req2 = 'SELECT nom,telephone,fax,commercial,portable FROM commandes_2005
c'etait parfait mais le probleme etait que les champs annonceur et client etait DISTINCT mais "nom,telephone,fax,commercial,portable " eux ne l'etait pas ce qui faisait que les lignes ne correspondait plus donc tu m'as donné la solution qui etait:
$req2 = 'SELECT client,nom FROM commandes WHERE id='annonceur1' 
ceux qui marchait tres bien en changeant et en mettant "annonceur=$annonceur"
mais evidemment c'etait trop simple et j'avais oublié de te dire que j'avais une requete pour voir "tous" les annonceur et "tous" les clients, et quand dans mon moteur de recherche page precedente j'appelle "tous" quand j'arrive sur ma page "annonceur.php", la page sur laquelle ont essaie de trouver la solution, lui ne trouve rien puisque il cherche un annonceur qui corresponde à un annonceur, par contre ça marche tres bien quand dans mon formulaire de recherche je choisi un nom precis ex: toto là ça marche impeccable, le probleme vient de la fonction "annonceur=$annonceur" qui n'inclus pas le "tous".

En esperant avoir été comprehensible sur ce coup là...si ce n'etait pas le cas n'hesite pas à me demander des explications suplementaires, du genre qu'est ce que je veux faire exactement avec mon formulaire.

desolée de te donner autant de travail, encore merci hd pour ta disponibilté.
muriel

HD
Mammouth du PHP | 1181 Messages

03 sept. 2005, 17:10

il ne te donne rien car tu as defini
if ($annonceur!="tous") 
mais il te manque le else ( quand $annonceur="tous") :!: c'est ca alors ?

edit : non oublie, en relisant ton code je vois que ce n'est pas ca
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Eléphant du PHP | 101 Messages

03 sept. 2005, 17:37

mais si je ne mets pas annonceur=annonceur dans req2 le moteur de recherche avec "tous" marche impeccable c'est pour cela que je n'ai pas de else, alors ma question est si je mets un "else" ça ne changera rien puisque le probleme vient du fait que :
$req2 = 'SELECT nom,telephone,fax,commercial,portable FROM commandes_2005 
lui n'a pas de "SELECT DISTINCT"

je vais t'expliquer ce que je veux faire avec mon formulaire j'ai des clients qui font des commandes avec des intermediaires qui eux sont differents j'ai le numero de telephone des clients ainsi que des intermediaires et en plus avec des commandes differentes... j'espere que tu suis, lolll !!!
j'ai fait un tableau (avec ton aide) ou je n'ai pas de doublon dans les clients mais quand je fais appel à tous les clients je voudrait que leur N° de telephone correspondent et ce n'est pas le cas avec la formule :
$req2 = 'SELECT nom,telephone,fax,commercial,portable FROM commandes_2005 
car j'ai souvent le meme client pour des commandes differentes et le probleme est que quand il enleve les doublons donc il supprime des lignes dans la colonne client il ne les supprime pas dans la colonne "telephone" et donc ça ne correspond plus, et etant donné que je ne fait pas appel à l'id dans mon code le (telephone, fax,commercial etc...) ne se refere à rien et quand je mets "annonceur=annonceur" dans "req2" c'est genial mais je n'ai plus la possibilité de me servir de "tous"....

j'espere que j'ai reussi à te faire comprendre mon dilemne qui est je l'avoue un peu complexe.

dis moi si tu as compris HD et ce que je veux faire car on y est presque arrivé, juste ce dernier petit soucis...
muriel

HD
Mammouth du PHP | 1181 Messages

03 sept. 2005, 18:28

la seule solution que je trouve c'est de mettre :
$req2 ="SELECT nom FROM commandes_2005"; 
$req2.= " ORDER BY annonceur ASC"; 
et puis :
while ($nbl!=$i) 
{ 
$req3 ="SELECT telephone,fax,commercial,portable FROM commandes_2005 WHERE nom='mysql_result($res2,$i,'nom')' "; 
$res3 = mysql_query($req3) or die; 
$nbl3 = mysql_num_rows($res3);   
...
...
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Eléphant du PHP | 101 Messages

03 sept. 2005, 19:46

Quand je mets le code que tu m'as donné ça me mets une magnifique page blanche sans erreur, sans rien juste une page blanche... lolll
je te mets mon code pour que tu puisses me dire ou j'ai fait une betise...
<?
include("_connexion.php");

$req = 'SELECT DISTINCT annonceur,client FROM commandes_2005';
if ($annonceur!="tous") 
   $req.= " AND annonceur ='".$annonceur."'"; 
   if ($client!="tous") 
      $req.= " AND client ='".$client."'"; 
   $req.= " ORDER BY annonceur ASC"; 
   $res = mysql_query($req) or die;
$nbl = mysql_num_rows($res); 

$req2 = 'SELECT nom FROM commandes_2005'; 
$req2.= " ORDER BY annonceur ASC"; 
$res2 = mysql_query($req2) or die; 
$nbl2 = mysql_num_rows($res2);  

$i=0; 
while ($nbl!=$i) 
{ 
$req3 ="SELECT telephone,fax,commercial,portable FROM commandes_2005 WHERE nom='mysql_result($res2,$i,'nom')' "; 
 $res3 = mysql_query($req3) or die; 
$nbl3 = mysql_num_rows($res3);    

$annonceur = mysql_result($res,$i,"annonceur");
$client = mysql_result($res,$i,"client"); 
$nom = mysql_result($res2,$i,"nom"); 
$telephone = mysql_result($res3,$i,"telephone"); 
$fax = mysql_result($res3,$i,"fax"); 
$commercial = mysql_result($res3,$i,"commercial"); 
$portable = mysql_result($res3,$i,"portable"); 
?>
        
          <td><?php echo($annonceur); ?></td>
		  <td><?php echo($client); ?></td>
		   <td><?php echo($nom); ?></td>
		   <td><?php echo($telephone); ?></td>
		   <td><?php echo($fax); ?></td>
		    <td><?php echo($commercial); ?></td>
          <td><?php echo($portable); ?></td>
<?
$i++; 
}
mysql_close(); 
?>
en esperant que se soit une erreur de ma part !!!

@++
muriel

HD
Mammouth du PHP | 1181 Messages

03 sept. 2005, 19:53

peut etre une erreur de syntaxe ici :
nom='mysql_result($res2,$i,'nom')' 
mais en tous cas cela aurait été netement +facile de te repondre si je testais tout cela chez moi
(enleve le resolu si tu veux que d'autres membres essaient de t'aider)
je suis sur que la solution est tellement evidente... qu'on ne la trouve pas :(
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

03 sept. 2005, 19:56

je me permet d'intervenir
tu utilise des balises <td> mais... est ce que tu ouvre un tableau quelque part avant ca ?!

par exemple avant le while du listage tu ouvre <table> et juste apres ta boucle tu le referme </table>
sans oublier les <tr> et </tr> ds ta boucle

Eléphant du PHP | 101 Messages

03 sept. 2005, 20:02

j'avais essayé avant tout les possibilité de syntaxe mais ça change rien, si tu veux je t'envoie ma BD, ainsi que mon moteur de recherche, pour que tu puisses le tester chez toi ??? cela ne me pose pas de probleme...
muriel

HD
Mammouth du PHP | 1181 Messages

03 sept. 2005, 20:04

si tu veux mais je ne garantis pas le resultat
met les sur ftp/http et donne le lien ici (accessible a tout le monde) ou par mp (privé)
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Eléphant du PHP | 101 Messages

03 sept. 2005, 20:18

bonjour truc,

sur mon code initiale j'ouvre bien une balise <table> mais je fais les test avec le code que j'ai envoyé precedemment juste j'ai laissé les <td> mais je fais les tests sur ce code là pas sur celui d'origine.

en esperant avoir repondu à la question...

merci d'etre venu nous donnez un coup de main truc...
muriel

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

03 sept. 2005, 21:28

mais de rien mais pour aider j'ai besoin d'un peu d'informatioons, j'ai bien lu tt le post mais y a des choses qui m'échappent:

1. est ce que tu as tjs ta liste <select> (si oui tu peut remettre le code tel qu'il est maintenant stp):?:

2.si <select> il y a ... y en a une pour les annonceurs et une pr les clients
ou tout ds la meme liste déroulante :?:

3.Apparemment tu fait la construction et le traitement du formulaire sur la meme page, OUI ?! mais je ne vois nullepart des $_POST['annonceur'] a la place des $annonceur et $client qui viennent de je ne sais d'ou :?

4. Tu as une seule et unique table contenant les annonceurs et clients :?:

5. tu as une drole de facon de lister les données de la requete (mais si ca marche c bien aussi :wink: )

merci pr les précissions (et excuse si tu l'a deja explique et que j'ai pas compris :wink: )

Eléphant du PHP | 101 Messages

04 sept. 2005, 10:20

bonjour truc,

bon alors je t'explique j'ai mon formulaire de recherche qui s'appelle index.php et j'ai 2 <select> 1 pour les annonceurs et 1 autre pour les clients, mais je ne fait pas le traitement du formulaire sur la meme page (du moins par pour le moment !!!! plus tard peut etre ???), J'ai une seule et unique table contenant les annonceurs et les clients et tout le reste.....
Je te mets le code ci dessous de ma page index.php:
<form action="recherche.php" method="post"> 
<? 
include("_connexion.php"); 
?>
<?
$req = "SELECT annonceur, client FROM commandes_2005";
$res = mysql_query($req) or die;
$nbl = mysql_num_rows($res);

$query = "SELECT DISTINCT annonceur FROM commandes_2005 ORDER BY annonceur ASC"; 
$result = mysql_query($query);
?>

<table width="600" border="0" cellspacing="2" cellpadding="4" align="center"></p>
  <tr> 
    <td width="100%"> <table width="153" border="1" bgcolor="#666666" cellpadding="0" cellspacing="0">
      <tr> 
        <td width="172"><strong><font color="#FFFFFF">Moteur de recherche</font></strong></td>
      </tr>
    </table>
      
        <table width="100%" height="22" border="1" cellpadding="2" cellspacing="0" class="body">
              <tr align="center" valign="middle" bordercolor="#999999" bgcolor="#cdd3fd"> 
                <td width="4%" class="bez"><font color="#000000">Annonceur </font></td>
                <td width="4%" bgcolor="#cdd3fd" class="bez"><form name="annonceur" method="post"
  action="<? echo $URL; ?>">
                          <select name="annonceur" size="1">
                            <option value="tous">Tous</option>
   <? while ($val = mysql_fetch_array($result)) { ?>
      <option><? echo $val["annonceur"]; ?></option>
   <? } ?>
   </select></td>
   
   
                <td width="4%" bgcolor="#cdd3fd" class="bez"><font color="#000000">Client</font></td>
                <td width="6%" bgcolor="#cdd3fd" class="bez"> <? $URL = $PHP_SELF;
$query = "SELECT DISTINCT client FROM commandes_2005 ORDER BY client ASC"; 
$result1 = mysql_query($query);
?>
                          <form name="client" method="post"
  action="<? echo $URL; ?>">
                            <select name="client" size="1">
                              <option value="tous">Tous</option>
   <? while ($val = mysql_fetch_array($result1)) { ?>
      <option><? echo $val["client"]; ?></option>
   <? } ?>
   </select>
</tr>

<? mysql_close(); ?></td>
            </table>
			
<table width="100%" border="0" cellpadding="0" cellspacing="0">
  
</table>
 
<table width="100%" border="0">
  <tr>
    <td><div align="right">
        <input type="submit" name="Submit" value="Envoyer">
      </div></td>
  </tr>
</table>
<form name="form1" method="post" action="">
</form>
et ensuite j'ai le fichier appelé par le formulaire de recherche qui s'appelle recherche.php et que je te mets avec le tableau et tous et tous.... et qui lui est composé de 7 colonnes ou figure les annonceurs, les clients ainsi que nom,telephone,fax,commercial,portable, je te mets le code ci dessous:
<?
include("_connexion.php");

$req = 'SELECT DISTINCT annonceur,client FROM commandes_2005  WHERE 1 = 1';
if ($annonceur!="tous") 
   $req.= " AND annonceur ='".$annonceur."'"; 
   if ($client!="tous") 
      $req.= " AND client ='".$client."'"; 
   $req.= " ORDER BY annonceur ASC"; 
   $res = mysql_query($req) or die;
$nbl = mysql_num_rows($res); 

$req2 ="SELECT nom,telephone,fax,commercial,portable FROM commandes_2005";
$req2.= " ORDER BY annonceur ASC"; 
$res2 = mysql_query($req2) or die; 
$nbl2 = mysql_num_rows($res2);  


  ?>
<table width="78%" border="0">
  <tr> 
    <td width="36%"><strong><a href="enregistrement.php?var=tous"> </a><u><a href="enregistrement.php?var=tous">Nombre 
      d'enregistrement dans la base:</a></u></strong></td>
    <td width='64%'><font color="#000000"><div align='left'><B><?php echo($nbl); ?></B></div></td>
  </tr>
</table>


<table width="100%" border="0" cellpadding="2" cellspacing="0" class="frame">
  <td width="30%" valign="top"> <table width="100%" height="22" border="1" cellpadding="2" cellspacing="0" class="body">
        <tr align="center" valign="middle" bordercolor="#999999" bgcolor="#666666"> 
          <td class="bez"><font color="#FFFFFF">Annonceur </font></td>
		  <td class="bez"><font color="#FFFFFF">Client</font></td>
          <td class="bez"><font color="#FFFFFF">Nom</font></td>
          <td bgcolor="#666666" class="bez"><font color="#FFFFFF">Telephone</font></td>
          <td class="bez"><font color="#FFFFFF">Fax</font></td>
          <td class="bez"><font color="#FFFFFF">Commercial</font></td>
          <td class="bez"><font color="#FFFFFF">Portable</font></td>
 </TR>
<?
$i=0; 
while ($nbl!=$i) 
{ 
$annonceur = mysql_result($res,$i,"annonceur"); 
$client = mysql_result($res,$i,"client"); 
$nom = mysql_result($res2,$i,"nom"); 
$telephone = mysql_result($res2,$i,"telephone"); 
$fax = mysql_result($res2,$i,"fax"); 
$commercial = mysql_result($res2,$i,"commercial"); 
$portable = mysql_result($res2,$i,"portable"); 
?>
        <tr align="center" valign="middle" bordercolor="#999999" bgcolor="cdd3fd">
          <td class="bez"><font color="#000000"><a href="annonceur.php"><?php echo($annonceur); ?></font></td>
		   <td class="bez"><font color="#000000"><?php echo($client); ?></font></td> 
		   <td class="bez"><font color="#000000"><?php echo($nom); ?></font></td>
		   <td class="bez"><font color="#000000"><?php echo($telephone); ?></font></td>
        <td class="bez"><font color="#000000"><?php echo ereg_replace(" ", "", $fax); ?></font></td>
		  <td class="bez"><font color="#000000"><?php echo($commercial); ?></font></td>
          <td class="bez"><font color="#000000"><?php echo ereg_replace(" ", "", $portable); ?></font></td>
      
	  
<?
$i++; 
}
echo "</table></TR>"; 

mysql_close(); 
?>
voilà je crois que tu as tous truc, je pense que tous mon code n'est pas trop academique mais il marche, maintenant si il y a des modifications à faire pour qu'il marche mieux n'hesite pas à me les transmettre se sera avec plaisir.
En esperant avoir repondu à toutes tes questions et si tu en as d'autres n'hesite surtout pas.
En tout cas merci beaucoup de t'interresser à mon probleme, en esperant qu'avec HD vous allez reussir à trouver comment faire pour que les annonceurs et les clients coincident avec les nom,telephone,fax,commercial,portable,.

@++
muriel

Mammouth du PHP | 19672 Messages

04 sept. 2005, 10:53

Salut,
je crois qu'avant d'aller plus loin, on va corriger la premiere partie: ton code comprend des formulaire imbriqué ce qui n'est absolument pas conforme et va poser des problèmes sérieux de fonctionnement.

J'ai essayé de suivre ce sujet pour arriver à comprendre quelque chose et j'avoue que je ne saisis pas. Alors pour avancer efficacement, il faudrait plusieurs choses:
  • La structure de ta base de données;
  • Un exemple de ce que tu veux obtenir : tel et tel champ selon telle ou telle clause;
  • Un jeu d'essai (quelques lignes de la base dans les différentes tables impliquées) serait bien qu'on puisse faire des essais en local
Ton script doit suivre une certaine logique. Tu veux chercher selon des paramètres variables: parfait, alors il faut commencer par le formulaire de recherche, ça, ça va, ensuite il faut traiter le formulaire, donc récupérer les choix qui ont été sélectionnés. Par la suite il faut générer dynamiquement les requêtes en fonction de ces choix et récupérer le résultat de l'exécution de cette requête.

Sinon, on est partis pour 5 pages à tourner en rond sans avancer vraiment.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1311 Messages

04 sept. 2005, 10:54

salut

pour depetrer tous ca je pense qu'il que tu mette ta base sur le forum
on pourrai peut etre mieux l'ordonnée