Page 1 sur 2

Faire de liens avec des variables

Posté : 04 janv. 2006, 17:39
par Grichka
Bonjours à tous!!
Je me suis mis au php y a vraiment pas longtemps pour faire mon site!
Je fait un site sur des chroniques de cds et j'aimerais avoir votre aide!

En fait je suis bloqué sur une partie du codage qui je suis sur est tous con.

Ce que je voudrais faire c'est un truc assez "classic":

Sur une page j'ai l'alphabet (donc de A à Z), quand je clique sur une lettre je voudrais avoir sur une autre page la liste des groupes commencant par cette lettre et ayant une ou des chroniques, et ensuite, quand je clique sur un groupe, avoir sur une autre page de nouveau, la liste des albums chroniqué du groupe selectionné.

Voila, c'est le genre de chose qu'on voit sur beaucoup de site donc je pense pas que ce soit super complexe à faire, mais je suis pas très doué!

Voici le nom de mes pages (qui changerons peut être après)

Alphabet : Chroniques.php
liste groupe : list_chro.php
liste album : list_chro2.php

Pour l'instant j'arrive à afficher l'alphabet et à faire en sorte que si je clique sur A, j'arrive sur une page ou je n'ai que les groupe commencant par A, seulement je n'arrive pas à faire la suite, c'est à dire, faire en sorte que quand je clic sur un groupe, j'arrive sur la liste des albums de ce groupe etc...

Voici le code de la page "Chroniques.php" (l'alphabet) enfin une parti :

Code : Tout sélectionner

<span class="lettres"> <a href="list_chro.php?lettre=A">A</a></span> <a href="list_chro.php?lettre=B">B</a> <a href="list_chro.php?lettre=C">C</a> <a href="list_chro.php?lettre=D">D</a> <a href="list_chro.php?lettre=E">E</a> <a href="list_chro.php?lettre=F">F</a> <a href="list_chro.php?lettre=G">G</a> <a href="list_chro.php?lettre=H">H</a> <a href="list_chro.php?lettre=I">I</a> <a href="list_chro.php?lettre=J">J</a> <a href="list_chro.php?lettre=K">K</a> <a href="list_chro.php?lettre=L">L</a> <a href="list_chro.php?lettre=M">M</a> <a href="list_chro.php?lettre=N">N</a> <a href="list_chro.php?lettre=O">O</a> <a href="list_chro.php?lettre=P">P</a> <a href="list_chro.php?lettre=Q">Q</a> <a href="list_chro.php?lettre=R">R</a> <a href="list_chro.php?lettre=S">S</a> <a href="list_chro.php?lettre=T">T</a> <a href="list_chro.php?lettre=U">U</a> <a href="list_chro.php?lettre=V">V</a> <a href="list_chro.php?lettre=W">W</a> <a href="list_chro.php?lettre=X">X</a> <a href="list_chro.php?lettre=Y">Y</a> <a href="list_chro.php?lettre=Z">Z</a> </div>
et voici le code de la page "list_chro.php" (qui affiche les groupes) :
   <?php
mysql_connect("localhost", "root", "");
mysql_select_db("test");
?>

   <body>
   
   <div id="en_tete">
       </div>
   
   <div id="menu">
     <span class="accueil"><a href="accueil.php">Accueil</a></span>
	 <span class="news"><a href="news.php">News</a></span>
	 <span class="chroniques"><a href="chroniques.php">Chroniques</a></span>
	 <span class="live_reports"><a href="live-reports.php">Live Reports</a></span>
	 <span class="interviews"><a href="interviews.php">Interviews</a></span>
	 <span class="staff"><a href="staff.php">Staff</a></span>
	 <span class="liens"><a href="liens.php">Liens</a></span>
	 <span class="forum"><a href="forum.php">Forum</a></span>
    </div>
	
	<div id="list">
<?php
if(isset($_GET['lettre']))
{
   $lettre = htmlentities($_GET['lettre']);

   $search = mysql_query('SELECT DISTINCT groupe FROM chroniques');
   
   while($result = mysql_fetch_array($search))
   {
     if(preg_match('!^'.$lettre.'(.*)!isU', $result['groupe']))
     {
           $groupe[] = $result['groupe'];
     }
   }
   
     if(isset($groupe))
     {
        $nba = count($groupe);

        for($i = 1 ; $i <= $nba ; $i++)
        {
            echo '<h2>'.$groupe[($i-1)].'</h2>';
        }
     }
	 else
	 {
	 echo '<p>Il n\'y a aucun groupe commençant par la lettre '.$lettre.'.</p>';
	 }
}
?>
	</div>
	
	</body>
	</html>
Les chroniques sont posté via un formulaire et toutes les infos sur les groupes (albums, track list, pochette, discographie, chroniques etc..) sont envoyé sur une base "chroniques" de données dont voici les champs :

-id
-groupe
-album
-pseudo (du chroniqueur)
-contenu (chronique)
-line up
-track list
-discographie
-pochette
-note


Donc avec ca, ca m'affiche la liste des groupes commencant par tel lettre, mais le nom des groupes n'est pas cliquable pour accéder à leurs albums.

Quelqu'un pourrait me dire ce que je dois modifier dans le code de "list_chro.php" et ce que je dois mettre dans "list_chro2.php" s'il vous plait?


J'espère que je vous embètes pas et que j'ai bien expliqué!! :oops:

Merci! :wink:

Posté : 04 janv. 2006, 19:08
par Cyrano
Bon, on va commencer par simplifier un peu ce code, proposition :
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("test");
/* On récupère si elle existe la lettre sélectionée */
$lettre = (isset($_GET['lettre'])) ? htmlentities($_GET['lettre']) : null;
?>
   <body>
   <div id="en_tete"></div>
   <div id="menu">
     <span class="accueil"><a href="accueil.php">Accueil</a></span>
     <span class="news"><a href="news.php">News</a></span>
     <span class="chroniques"><a href="chroniques.php">Chroniques</a></span>
     <span class="live_reports"><a href="live-reports.php">Live Reports</a></span>
     <span class="interviews"><a href="interviews.php">Interviews</a></span>
     <span class="staff"><a href="staff.php">Staff</a></span>
     <span class="liens"><a href="liens.php">Liens</a></span>
     <span class="forum"><a href="forum.php">Forum</a></span>
    </div>
    <div id="list">
<?php
if(isset($lettre))
{
    $search = mysql_query("SELECT DISTINCT groupe FROM chroniques WHERE groupe LIKE '". $lettre ."%'");

    if(mysql_num_rows($search) > 0)
    {
        while($result = mysql_fetch_array($search))
        {
            echo '<h2>'. $result['groupe'] .'</h2>';
        }
    }
    else
    {
        echo '<p>Il n\'y a aucun groupe commençant par la lettre '.$lettre.'.</p>';
    }
}
?>
    </div>
    </body>
    </html>
On fait le tri directement au niveau de la requête SQL, c'est beaucoup plus rapide et ça évite ensuite de devoir bidouiller à coup d'expression régulières.

Posté : 04 janv. 2006, 19:54
par Grichka
Merci!

Alors j'ai réussi à transformer les noms des groupes en liens, mais quand je clic dessus, ca ne m'indique pas les noms des albums alors qu'il y en a!

Donc voila la page que j'ai modifier avec ton code, et la ou s'affiche le nom des groupes :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Bienvenue sur mon site !</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	   <link rel="stylesheet" media="screen" type="text/css" title="Design sombre" href="metaliquechronique.css" />
   </head>
   <?php
mysql_connect("localhost", "root", "");
mysql_select_db("test");
$lettre = (isset($_GET['lettre'])) ? htmlentities($_GET['lettre']) : null;
?>

   <body>
   
   <div id="en_tete">
       </div>
   
   <div id="menu">
     <span class="accueil"><a href="accueil.php">Accueil</a></span>
	 <span class="news"><a href="news.php">News</a></span>
	 <span class="chroniques"><a href="chroniques.php">Chroniques</a></span>
	 <span class="live_reports"><a href="live-reports.php">Live Reports</a></span>
	 <span class="interviews"><a href="interviews.php">Interviews</a></span>
	 <span class="staff"><a href="staff.php">Staff</a></span>
	 <span class="liens"><a href="liens.php">Liens</a></span>
	 <span class="forum"><a href="forum.php">Forum</a></span>
    </div>
	
	<div id="list">
<?php
if(isset($lettre))
{
    $search = mysql_query("SELECT DISTINCT groupe FROM chroniques WHERE groupe LIKE '". $lettre ."%'");

    if(mysql_num_rows($search) > 0)
    {
        while($result = mysql_fetch_array($search))
        {
           echo('<a href="list_chro2.php?groupe='.$result['groupe'].'">'.$result['groupe'].'</a>');
        }
    }
    else
    {
        echo '<p>Il n\'y a aucun groupe commençant par la lettre '.$lettre.'.</p>';
    }
}
?> 
	</div>
	
	</body>
	</html>
et voici le code ou devrait s'afficher les albums après avoir cliqué sur un groupe dans la page précédente (code du dessus) :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Bienvenue sur mon site !</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	   <link rel="stylesheet" media="screen" type="text/css" title="Design sombre" href="metaliquechronique.css" />
   </head>
   <?php
mysql_connect("localhost", "root", "");
mysql_select_db("test");
?>

   <body>
   
   <div id="en_tete">
       </div>
   
   <div id="menu">
     <span class="accueil"><a href="accueil.php">Accueil</a></span>
	 <span class="news"><a href="news.php">News</a></span>
	 <span class="chroniques"<a href="chroniques.php">Chroniques</a></span>
	 <span class="live_reports"<a href="live-reports.php">Live Reports</a></span>
	 <span class="interviews"<a href="interviews.php">Interviews</a></span>
	 <span class="staff"<a href="staff.php">Staff</a></span>
	 <span class="liens"<a href="liens.php">Liens</a></span>
	 <span class="forum"<a href="forum.php">Forum</a></span>
    </div>
	
	<div id="list">
	<?php

if(isset($_GET['groupe']))
{
   $groupe = htmlentities($_GET['groupe']);

   $search = mysql_query('SELECT DISTINCT album,pochette,note FROM chroniques WHERE groupe="'.$groupe.'"');
   
   while($result = mysql_fetch_array($search))
   {
     if(preg_match('!^'.$groupe.'(.*)!isU', $result['album']))
     {
           $album[] = $result['album'];
     }
   }


     if(isset($album))
     {

		echo('<a href="Chroniquesindiv.php?album='.$album.'">'.$album.'</a>');
      
     }
	
}
?>
	</div>
	
	</body>
	</html>
Pourquoi j'ai rien qui s'affiche?

Merci! :wink:

Posté : 04 janv. 2006, 20:04
par Cyrano
Fais afficher ta requête pour la tester ensuite directement dans phpMyAdmin : tu vérifiera comme ça ce qui est retourné : des données ou un message d'erreur.

Posté : 04 janv. 2006, 20:11
par Grichka
J'ai pas tout compris (en fait j'ai rien compris!^^ ).

J'affiche ma requète dans phpmyadmin? je fais ca comment?

Posté : 04 janv. 2006, 20:29
par Truc
phpmyadmin se trouve la (normalement) http://localhost/mysql/

ensuite regarde ce lien, dans l'onglet SQL tu tape directement la requete du code et tu vois si tu as un résultat ou pas.

Pour la requete tape un echo sur la requete:
$sql="SELECT DISTINCT groupe FROM chroniques WHERE groupe LIKE '". $lettre;

echo $sql;// a l'affichage tu fait un copier et un coller dans la fentre SQL de phpmyadmin.

$search = mysql_query($sql);
de meme pour la 2eme requete sur l'autre page.

Posté : 04 janv. 2006, 20:40
par Grichka
alors pour ceci :
$sql="SELECT DISTINCT groupe FROM chroniques WHERE groupe LIKE '". $lettre;

echo $sql;// a l'affichage tu fait un copier et un coller dans la fentre SQL de phpmyadmin.

$search = mysql_query($sql);
ca ma répondu ca :
#1064 - Erreur de syntaxe pr�s de '$sql="SELECT DISTINCT groupe FROM chroniques WHERE groupe LIKE '' � la ligne 1

et pour la 2ème requète de l'autre page à savoir ceci :
$search = mysql_query('SELECT DISTINCT album,pochette,note FROM chroniques WHERE groupe="'.$groupe.'"');
echo $sql;// a l'affichage tu fait un copier et un coller dans la fentre SQL de phpmyadmin.
$search = mysql_query($sql);
ca ma répondu ca:
#1064 - Erreur de syntaxe pr�s de '$search = mysql_query('SELECT DISTINCT album,pochette,note FROM ' � la ligne 1

Posté : 04 janv. 2006, 21:18
par Truc
la tu as exécuté la requete avec le php...

le "echo" affiche la requete générée sur la page et c'est elle qu'il faut copier et non celle du code (qui n'est pas terminée, en fonction de la variable "lettre")

Et pour le 2eme cas regarde bien la différence entre mon exemple et ce que tu as fait. Il faut décomposer la requete et l'exécution mysql_query().

Posté : 04 janv. 2006, 23:47
par Invité
Je comprend rien du tout de ce qui faut faire! :?

Je dois taper quoi EXACTEMENT dans phpmyadmin?

Posté : 04 janv. 2006, 23:48
par Grichka
Désolé, j'ai oublié de m'indentifier! :roll:

Posté : 04 janv. 2006, 23:52
par Cyrano
Dans ton code, ajoute une ligne avec
echo($sql);
Où $sql est la variable qui contient ta requête.

Affiche ta page pour faire afficher la requête dans ton navigateur.

Copie cette requête affichée.

Bascule dans phpMyAdmin et colle cette requête dans la fenêtre de saisie SQL et exécute-là

Et reviens-nous avec le résultat.

Posté : 05 janv. 2006, 00:12
par Grichka
Je suis pas sur d'avoir plus compris!

voila ce que j'ai mis dans mon code :
$search = mysql_query("SELECT DISTINCT groupe FROM chroniques WHERE groupe LIKE '". $lettre ."%'");
    echo ($search);
En affichant ma page, j'ai strictement rien qui s'affiche dans mon navigateur!

J'ai ensuite essayé ceci:
$search = mysql_query("SELECT DISTINCT groupe FROM chroniques WHERE groupe LIKE '". $lettre ."%'");
    echo ($lettre);
mais toujours rien qui s'affiche!
Je suppose que je fais pas ce qu'il faut....


Voila mon code php de ma première page :
<?php
if(isset($lettre))
{
    $search = mysql_query("SELECT DISTINCT groupe FROM chroniques WHERE groupe LIKE '". $lettre ."%'");

    if(mysql_num_rows($search) > 0)
    {
        while($result = mysql_fetch_array($search))
        {
           echo('<a href="list_chro2.php?groupe='.$result['groupe'].'">'.$result['groupe'].'</a>');
        }
    }
    else
    {
        echo '<p>Il n\'y a aucun groupe commençant par la lettre '.$lettre.'.</p>';
    }
}
?> 
Vous voulez pas me dire mots pour mots ce que je dois écrire dans mon code pour faire afficher la requète dans le navigateur?
Je suis désolé, mais je pige vraiment que dalle! :(

Posté : 05 janv. 2006, 00:39
par Truc
En affichant ma page, j'ai strictement rien qui s'affiche dans mon navigateur!
c'est étonnant meme pas les liens ?

voila reprend ce code:
$sql="SELECT DISTINCT groupe FROM chroniques WHERE groupe LIKE '". $lettre ."%'";

echo "la requete doit s'afficher sous ce commentaire: <br /><br />".$sql."<br /><br /> fin de l'affichage de la requete.";

$search = mysql_query($sql);
a la place de:
$search = mysql_query("SELECT DISTINCT groupe FROM chroniques WHERE groupe LIKE '". $lettre ."%'");
    echo ($search);
la tu fait un copier/coller de ce qui est entre les 2 commentaires
Vous voulez pas me dire mots pour mots ce que je dois écrire dans mon code pour faire afficher la requète dans le navigateur?
c'est ce qu'on a fait :wink:
avec un echo de la chaine de caractère correspondant à la requete et non son exécution (donc PAS apres son passage dans mysql_query() !! )

Posté : 05 janv. 2006, 00:48
par Grichka
je dois être nul c'est pas possible!

Voila mon code en entier (avec la modife que tu m'as dit) :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Bienvenue sur mon site !</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	   <link rel="stylesheet" media="screen" type="text/css" title="Design sombre" href="metaliquechronique.css" />
   </head>
   <?php
mysql_connect("localhost", "root", "");
mysql_select_db("test");
$lettre = (isset($_GET['lettre'])) ? htmlentities($_GET['lettre']) : null;
?>

   <body>
   
   <div id="en_tete">
       </div>
   
   <div id="menu">
     <span class="accueil"><a href="accueil.php">Accueil</a></span>
	 <span class="news"><a href="news.php">News</a></span>
	 <span class="chroniques"><a href="chroniques.php">Chroniques</a></span>
	 <span class="live_reports"><a href="live-reports.php">Live Reports</a></span>
	 <span class="interviews"><a href="interviews.php">Interviews</a></span>
	 <span class="staff"><a href="staff.php">Staff</a></span>
	 <span class="liens"><a href="liens.php">Liens</a></span>
	 <span class="forum"><a href="forum.php">Forum</a></span>
    </div>
	
	<div id="list">
<?php
if(isset($lettre))
{
    $sql="SELECT DISTINCT groupe FROM chroniques WHERE groupe LIKE '". $lettre ."%'";

echo "la requete doit s'afficher sous ce commentaire: <br /><br />".$sql."<br /><br /> fin de l'affichage de la requete.";

$search = mysql_query($sql);

    if(mysql_num_rows($search) > 0)
    {
        while($result = mysql_fetch_array($search))
        {
           echo('<a href="list_chro2.php?groupe='.$result['groupe'].'">'.$result['groupe'].'</a>');
        }
    }
    else
    {
        echo '<p>Il n\'y a aucun groupe commençant par la lettre '.$lettre.'.</p>';
    }
}
?> 
	</div>
	
	</body>
	</html>
J'ai bien placé le code non?

J'enregistre, et via easyphp, j'ouvre cette page!

Mais je n'ai qu'une page vide! j'ai quand meme le header, menu, fond etc...mais pas de texte!! :cry:

Posté : 05 janv. 2006, 00:55
par Truc
le test :
if(isset($lettre))
verifis si la variable $lettre existe ou est égal a null !!

Il faut donc que tu arrives sur cette page en ayant cliqué sur un des liens de l'alphabet:
<a href="list_chro.php?lettre=A">A</a></span>
<a href="list_chro.php?lettre=B">B</a> 
sinon effectivement tu n'auras aucun affichage :wink: