Récuperation d'informations dans ma base de données

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 : Récuperation d'informations dans ma base de données

par fred9999 » 07 déc. 2006, 12:16

Juste une petite modification ..... que j'avais mis :lol:

par muriel » 07 déc. 2006, 12:10

Je vous confirme messieurs que ça ne marche pas meme en enlevant lien_1 dans l'order by, je vous mets l'affichage que cela me fait dans la page:

Catégorie : Divers
Lien : http://www.phpfrance.com/forums/

Catégorie : Liens et sites utiles
Lien : http://www.phpfrance.com

alors que dans le code que je vous ai mis en dernier en vous disant que ça marchait parfaitement, cela s'afficher comme cela:
Catégorie : Divers
Lien : http://www.phpfrance.com/forums/
Lien : http://www.google.fr/
Lien : http://fr.yahoo.com/
etc...

Catégorie : Liens et sites utiles
Lien : http://www.phpfrance.com
Lien : http://www.orange.fr/
etc...

en esperant qu'on va y arriver,lol ?! en tout cas merci de votre acharnement à tous les deux.

@++

par fred9999 » 07 déc. 2006, 11:46

le problème doit venir de l'order by je pense,

enleve lien_1

par Ajoloca » 07 déc. 2006, 11:27

Re,

Je suis étonné que celui-ci ne fonctionne pas
<?php    
include("../_connexion.php");    
$req = 'SELECT categorie, liens_1 FROM lien GROUP BY categorie ORDER BY categorie, liens_1';    
$res = mysql_query($req) or die('ERR_SQL : ' . $req . '<br />' . mysql_error());
$lastCat = '';   
while ($nbl= mysql_fetch_assoc($res)){
   if($nbl['categorie'] != $lastCat){
      $lastCat = $nbl['categorie'];
      echo '<h3>Cat&eacute;gorie : ' . $lastCat . '</h3>';
   }
   echo 'Lien : ' . $nbl['liens_1'] . '<br />';
}
?> 

par muriel » 07 déc. 2006, 11:19

bonjour Ajoloca,

Mes données sont sur 1 seule table dont voici la structure, tres simple

-- Structure de la table `lien`
--

CREATE TABLE `lien` (
`id` int(11) NOT NULL auto_increment,
`categorie` text NOT NULL,
`liens_1` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=25;

pour repondre à fred9999 là le code ne convient plus car il me mets 1 fois la categorie et en dessous qu'1 seul lien au lieu de 8 dans ma base... donc pour le moment le code qui marche parfaitement bien c'est celui que je vous ai posté precedement !?

@++

par fred9999 » 07 déc. 2006, 11:09

en fait non comme ça :
<?php        
include("../_connexion.php");        
$req = 'SELECT categorie,lien FROM lien GROUP BY categorie ORDER BY categorie, liens_1';        
$res = mysql_query($req) or die('ERR_SQL : ' . $req . '<br />' . mysql_error());      
$lastCat='';   
while ($nbl= mysql_fetch_array($res))   
{    
   if($nbl[0] != $lastCat)   
   {    
      $lastCat = $nbl[0];    
      echo '<h3>Cat&eacute;gorie : ' . $lastCat . '</h3><br>';   
      echo ''.$nbl[1].'<br>';  
   }  
   else 
    { 
    echo ''.$nbl[1].'<br>'; 
    } 
}    
?> 
pb de variables :lol:

par fred9999 » 07 déc. 2006, 11:07

en fait le code es pas du tout optimiser tu peut normalement le faire en une requete :


<?php       
include("../_connexion.php");       
$req = 'SELECT categorie,lien FROM lien GROUP BY categorie ORDER BY categorie, liens_1';       
$res = mysql_query($req) or die('ERR_SQL : ' . $req . '<br />' . mysql_error());     
$lastCat='';  
while ($nbl= mysql_fetch_array($res))  
{   
   if($nbl['categorie'] != $lastCat)  
   {   
      $lastCat = $nbl['categorie'];   
      echo '<h3>Cat&eacute;gorie : ' . $lastCat . '</h3><br>';  
	  echo ''.$nbl[0].'<br>'; 
   } 
   else
    {
	echo ''.$nbl[0].'<br>';
	}
}   
?>

par Ajoloca » 07 déc. 2006, 11:04

Bonjour,

Je ne comprends pas bien.
Tes données sont sur une seule table ou sur plusieurs ?
Poste la structure de la table (ou tables) qui contient (contiennent) les données à traiter avec un petit commentaire sur les colonnes concernées.

par muriel » 07 déc. 2006, 11:02

Bonjour fred9999,

Merci vraiment pout ton aide fred9999 tu as reussi à faire que ce code marche parfaitement bien, alors que mes explications de depart n'etait pas tres claires, désolée pour cette perte de temps !?
Je voudrais aussi remercié chaleureusement Ajoloca pour sa contribution tres importante à la reussite de celui ci et merci à tous les autres...

Ce forum est vraiment genial, et l'ambiance y est tres agreable,longue vie à phpfrance.

Et encore merci de votre aide.

Je mets le code ci-dessous avec qq petites rectifications pour ceux que cela peut interresser:
<?php      
include("../_connexion.php");      
$req = 'SELECT categorie FROM lien GROUP BY categorie ORDER BY categorie, liens_1';      
$res = mysql_query($req) or die('ERR_SQL : ' . $req . '<br />' . mysql_error());    
$lastCat=''; 
while ($nbl= mysql_fetch_array($res)) 
{  
   if($nbl['categorie'] != $lastCat) 
   {  
      $lastCat = $nbl['categorie'];  
      echo '<h3>Cat&eacute;gorie : ' . $lastCat . '</h3><br>';  
        $req2 = 'SELECT liens_1 FROM lien where categorie=\''.$lastCat.'\';';      
        $res2 = mysql_query($req2) or die('ERR_SQL : ' . $req2 . '<br />' . mysql_error());    
        while ($nbl2= mysql_fetch_array($res2)) 
        { 
         echo ''.$nbl2[0].'<br>' ;
        } 
   }  
}  
?> 
à tres bientot,

par fred9999 » 07 déc. 2006, 10:31

oui alors on avai pas compris ça du tout !!!!

en fai ttu as besoin d'une boucle imbriquée !! enfin si je comprend bien :lol:
<?php     
include("../_connexion.php");     
$req = 'SELECT categorie FROM lien GROUP BY categorie ORDER BY categorie, liens_1';     
$res = mysql_query($req) or die('ERR_SQL : ' . $req . '<br />' . mysql_error());   
$lastCat='';
while ($nbl= mysql_fetch_array($res))
{ 
   if($nbl['categorie'] != $lastCat)
   { 
      $lastCat = $nbl['categorie']; 
      echo '<h3>Cat&eacute;gorie : ' . $lastCat . '</h3><br>'; 
		$req2 = 'SELECT lien FROM lien where categorie=\''.$lastCat.'\';';     
		$res2 = mysql_query($req) or die('ERR_SQL : ' . $req2 . '<br />' . mysql_error());   
		while ($nbl2= mysql_fetch_array($res2))
		{
		 echo ''.$nbl2[0].'<br>'
		}
   } 
   echo 'Lien : ' . $nbl['liens_1'] . '<br />'; 
} 
?> 

par muriel » 07 déc. 2006, 10:14

Bonjour Ajoloca,

On y est presque, je crois que tu brules ça marche presque parfaitement pour les categories c'est parfait, seul hic c'est que maintenant il ne s'affiche plus qu'un lien qui ce met comme pour les categories alors que dans ma base de données j'ai plusieurs liens par categorie et le but c'est que tous les liens se mettent en dessous de chaque categorie.

vraiment merci Ajoloca pour le temps que tu me consacres et l'aide que tu m'apportes.

Pour tes conseils :
Ne jamais utiliser les "short_open_tag" (<?) toujours utiliser <?php
je le note et pour
Tester le retour de MySQL or die() avec des messages parlants (ne pas oublier la requête incriminée)
j'avais supprimé ma requete pour que le code soitl e plus clair possible.

à tres bientot,

par Ajoloca » 06 déc. 2006, 19:34

Re,
En premier lieu tu dois modifier ta requête pour regrouper tes liens par catégorie.
QQ chose du style
$req = 'SELECT id, categorie, liens_1 FROM lien GROUP BY categorie ORDER BY categorie, liens_1';
Ensuite dans la construction de page tu devras conserver la catégorie en cours et voir si la suivante change, si c'est le cas afficher la nouvelle catégorie

Un exemple
<?php    
include("../_connexion.php");    
$req = 'SELECT id, categorie, liens_1 FROM lien GROUP BY categorie ORDER BY categorie, liens_1';    
$res = mysql_query($req) or die('ERR_SQL : ' . $req . '<br />' . mysql_error());
$lastCat = '';   
while ($nbl= mysql_fetch_array($res)){
   if($nbl['categorie'] != $lastCat){
      $lastCat = $nbl['categorie'];
      echo '<h3>Cat&eacute;gorie : ' . $lastCat . '</h3>';
   }
   echo 'Lien : ' . $nbl['liens_1'] . '<br />';
}
?>
Quelques conseils :
Ne jamais utiliser les "short_open_tag" (<?) toujours utiliser <?php
Tester le retour de MySQL or die() avec des messages parlants (ne pas oublier la requête incriminée)

par muriel » 06 déc. 2006, 19:11

Bonsoir Ajoloca et fred9999,

tout d'abord merci Ajoloca et fred9999 de votre aide et pour toutes vos infos qui marchent parfaiement bien. Dans mes explications j'ai voulu faire simple et maintenant je ne m'en sors plus donc reviens vers vous pour de plus amples informations, je m'explique dans mon code j'ai des catégories mais aussi des liens et je voudrais afficher 1 seule fois la categorie et en dessous tous les liens qui correspondent à cette categorie et ainsi de suite, mais evidemment avec mon explications simplistes vous m'avez donné une réponse parfaite mais maintenant je sais afficher les categories et les liens mais je n'arrive pas à afficher le champs categorie qu'une seule fois, loll !? voici mon code:
<?    
include("../_connexion.php");    
$req = "SELECT id,categorie,liens_1 FROM lien";    
$res = mysql_query($req) or die;    
while ($nbl= mysql_fetch_row($res))     
{     
echo"  
<tr>     
    <td align=\"center\" valign=\"top\">".$nbl[1]."</td><br>   
  </tr>   
  <tr>     
    <td align=\"center\" valign=\"top\">".$nbl[2]."</td><br>   
  </tr> ";  
}

?>
et le probleme maintenant viens du code
<tr>     
    <td align=\"center\" valign=\"top\">".$nbl[1]."</td><br>   
  </tr>   
d'avance merci de votre aide,

par Ajoloca » 06 déc. 2006, 17:55

Re,
Attention, il y a une erreur ici
while ($nbl= mysql_fetch_rows($res))
c'est pas mysql_fetch_rows mais
while ($nbl= mysql_fetch_row($res))

par fred9999 » 06 déc. 2006, 14:46

autant pour moi j'ai pas corrigé cette erreur :
<?   
include("../_connexion.php");   
$req = "SELECT id,categorie FROM lien";   
$res = mysql_query($req) or die;   
while ($nbl= mysql_fetch_rows($res))    
{    
echo"  
  <tr>    
    <td align=\"center\" valign=\"top\">".$nbl[1]."</td>   
  </tr> "; 
}
voila maintenant ça devrai tourner :wink: