Page 1 sur 1

Liste déroulante + affichage page par page

Posté : 16 janv. 2006, 10:57
par resistenz76
Bonjour à tous et à toutes !
Apres avoir utilisé avec succès le tutorial sur l'affichage page par page, j'essaie de créer une page récuperant la liste des disciplines d'une table pour m'en servir comme liste déroulante renvoyant sur ma "page par page" mais j'aurai besoin d'un dernier coup de main pour terminer le site...
<select>
<? 
$db = mysql_connect('****', '****', '******'); 
mysql_select_db('****',$db); 
$sql = "SELECT DISTINCT sport FROM sports WHERE departement='Haute-Corse' ORDER BY sport ASC"; 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($sport = mysql_fetch_assoc($req))
    {
    echo '<option value="discipline2b.php?sport='.$sport['sport'].'">'.$sport['sport'].'</option>';
    }
// on ferme la connexion &agrave; mysql 
mysql_close(); 
?>
</select>
<input type="submit" value="ok">
je souhaiterai que cette page avec une liste déroulante renvoie sur une page où j'utilise (avec succès ! merci ;-)) l'affichage page par page :
<?php
/**
Commençons par fixer les paramètres :
*/
/* Paramètres de connexion */
$admin_bd   = "****";              /* Le pseudonyme permettant à l'administrateur de se connecter */
$mdp_bd     = "******";                  /* Le mot d passe de l'administrateur de base de données */
$serveur_bd = "****";         /* L'adresse du serveur de base de données */
$base_bd    = "****";           /* La base de données où sont enregistrées les informations */

/* Paramètres de pagination */
$nb_nouv_par_page = 10;             /* Nombre de nouvelles qui seront affichées sur chaque page */
$url = "./discipline2b.php?page=";

/* On détermine quelle est la page qui est actuellement affichée */
$page_en_cours    = isset($_GET['page']) ? $_GET['page'] : 0;
$page_affichee    = ($page_en_cours + 1);

/* Connexion au serveur de base de données */
$connexion = mysql_pconnect($serveur_bd, $admin_bd, $mdp_bd);
mysql_select_db($base_bd);


/* Requête pour compter les nouvelles présentes dans notre base de données */
$sql_nb = "SELECT COUNT(*) FROM `sports` WHERE sport='".$sport."' AND departement='Haute-Corse'";

/* Exécution de la requête et récupération du résultat */
$resultat_1 = mysql_query($sql_nb);
$nb_nouvelles = mysql_result($resultat_1, 0);

/* Calcul du nombre total de pages : on arrondit à l'entier supérieur (ceil() ) */
$nb_pages = ceil($nb_nouvelles / $nb_nouv_par_page);

/**
Nous disposons maintenant de suffisament d'éléments pour créer notre barre de navigation.
Première chose à vérifier : avons-nous plusieurs pages, et au moins une ?
*/
if($nb_pages > 0)
{
    /* On définit une variable qui contiendra les données de navigation */
    $barre_nav = "";
    /* Nous avons au moins une page : avons nous besoin d'une barre de navigation ? */
    if($nb_pages > 1)
    {
        /**
        Nous avons plusieurs pages: nous allons afficher successivement les liens vers
        les pages précédentes s'il y en a, la page en cours et les liens vers les pages
        suivantes. Nous aurons une barre sous la forme : 1 | 2 | 3 etc.. en liens clicables
        sauf pour la page en cours dont nous mettrons le chiffre en gras
         */
        if($page_en_cours > 0)
        {
            for($i = 0; $i < $page_en_cours; $i++)
            {
                $p = $i + 1;
                $barre_nav .= "<a href=\"". $url . $i ."\" title=\"page ". $p ."\">". $p ."</a> | ";
            }
        }
        /**
        On affiche la page en cours : notez le (+ 1) : pour les calculs, nous partons d'une
        page 0 mais pour l'internaute, il est préférable de commencer à la page 1, donc on incrémente
         */
        $barre_nav .= "<strong>". $page_affichee ."</strong>";
        /* Enfin on affiche (s'il y a lieu) les liens vers les pages suivantes */
        if(($page_affichee) < $nb_pages)
        {
            /* Il reste encore d'autres pages à afficher */
            $nb_suivantes = $nb_pages - ($page_affichee);
            for($j = ($page_affichee); $j < $nb_pages; $j++)
            {
                $p = $j + 1;
                $barre_nav .= " | <a href=\"". $url . $j ."\" title=\"page ". $p ."\">". $p ."</a>";
            }
        }
        
        /* On peut définir en plus la situation dans une autre variable à afficher ailleurs */
        $page_affichee = "Page ". $page_affichee ." sur ". $nb_pages ."";
    }
    else
    {
        /* Nous n'avons qu'une seule page, on peut se contenter d'afficher juste page 1/1 */
        $barre_nav .= "page 1/1";
    }
    /**
    On peut maintenant afficher notre page. On va commencer par récupérer les informations
    On doit définir à partir de quelle nouvelle on doit récupérer les données dans la clause LIMIT.
     */
    $debut = $page_en_cours * $nb_nouv_par_page;
    $sql_n = "SELECT denomination, nom, adresse FROM sports WHERE sport='".$sport."' AND departement='Haute-Corse' LIMIT ". $debut .", ". $nb_nouv_par_page .";";
    $nouvelles = mysql_query($sql_n);
?>
<?php echo($page_affichee); ?>
<?php
    while($nouv = mysql_fetch_assoc($nouvelles))
    {
?>
<p>
<?php echo($nouv['denomination']); ?>
<br/>
<?php echo($nouv['nom']); ?></h3>
<br/>
<?php echo(nl2br($nouv['adresse'])); ?>
<?php
    }
    /* on libère la mémoire */
    mysql_free_result($resultat_1);
    mysql_free_result($nouvelles);
    /* On peut fermer la connexion à MySQL */
    mysql_close($connexion);
    /* On affiche maintenant la barre de navigation */
?>
<p>
<?php echo($barre_nav); ?>
<?php
}
else
{
    /**
    Nous n'avons aucune page, on peut alors afficher un message autre
    sans devoir nous préoccuper de la navigation
     */
?>
Aucune nouvelle n'a encore été publiée à ce jour
<hr />
<?php
}
?>
je n'arrive pas à combiner les deux pages liste déroulante PUIS affichage page par page en récuperant la variable "discipline". Je pense que l'erreur est forcement là :
    {
    echo '<option value="discipline2b.php?sport='.$sport['sport'].'">'.$sport['sport'].'</option>';
    }
et au niveau du submit puisque ma liste déroulante ne renvoie sur aucune page. :roll:

N'oubliez pas qu'il n'y a pas de questions stupides... merci d'avance :wink:

Posté : 16 janv. 2006, 11:52
par Tictac
deja ta première partie ne peux pas fonctionner car tu dois avoir le form pour faire un submit

ce qui donne en gros =>
<form action="discipline2b.php" method="GET">
<select name="sport" onchange="submit();"> 
<? 
$db = mysql_connect('****', '****', '******'); 
mysql_select_db('****',$db); 
$sql = "SELECT DISTINCT sport FROM sports WHERE departement='Haute-Corse' ORDER BY sport ASC"; 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

while($sport = mysql_fetch_assoc($req)) 
    { 
    echo "<option value=\"".$sport['sport']."\">".$sport['sport']."</option>"; 
    } 
// on ferme la connexion &agrave; mysql 
mysql_close(); 
?> 
</select> 
</form>
voilà ! tu recupére maintenant sur la page "discipline2b.php" les variables =>

$_GET['sport'] // qui sera egale à $sport['sport'] !

J'ai ajouté le onchange ! comme ça quand tu change dans ton select , tu es directment dirgigé vers la page discipline2b.php

Si tu as pas tout compris , demande ;)

++

Posté : 16 janv. 2006, 16:16
par resistenz76
Merci pour ton aide ! :D

je pense avoir compris mais pour remplacer
WHERE sport='".$sport."'
j'ai essayé
sport=$_GET['sport']
sport="$_GET['sport']"
sport='"$_GET['sport']"'
$_GET['sport']
mais j'obtiens ce message :
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/users2/c/discipline2b.php on line 39
:roll: quelqu'un aurait-il une :idea:
WHERE sport=".$_GET['sport']."
de cette façon j'obtiens un message différent :
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/users2/c/crij/www/Guide_loisirs/discipline2b.php on line 43
Aucune nouvelle n'a encore été publiée à ce jour

Posté : 16 janv. 2006, 16:29
par Cyrano
Essaye :
"WHERE sport = '". $_GET['sport'] ."'
L'alternance des apostrophes/guillemets demande parfois de la gymnastique dans les concaténations... Donc une autre option consisterait à définir une variable AVANT la requête:
$sport = $_GET['sport'];
//... début de requête;
"WHERE sport = '". $sport ."'";

Posté : 16 janv. 2006, 16:51
par resistenz76
Merci ça fonctionne avec
WHERE sport = '". $_GET['sport'] ."'
je sais pas vous mais quand ça fonctionne des fois j'ai envie de pleuré tellement c beau :cry:

Merci ! :wink:

Posté : 16 janv. 2006, 17:56
par resistenz76
... je viens de me rendre compte que de cette façon l'affichage marche pour le "page par page", il m'affiche bien le nombre de resultats, la barre de naviguation mais lorsque je clique sur page2 page 3 etc. j'ai le même message "aucune nouvelle n'a été publié à ce jour".
La variable "sport" qui est bien recupéré pour l'affichage des premiers resultats semble être éffacé ou perdue lorsque je clique sur les pages suivantes...

Si le coeur vous en dit ou si la modification n'est pas trop compliqué.
Bonne soirée à tous !
:wink:

Posté : 16 janv. 2006, 17:59
par Cyrano
Rajoute ta variable "sport" dans un champ caché du formulaire qui contient ta liste déroulante.

Posté : 16 janv. 2006, 18:55
par VaN
je sais pas vous mais quand ça fonctionne des fois j'ai envie de pleuré tellement c beau :cry:
/agree
Les joies des débuts en PHP : )

(à vaincre sans péril, on triomphe sans gloire)

Posté : 17 janv. 2006, 09:45
par resistenz76
Rajoute ta variable "sport" dans un champ caché du formulaire qui contient ta liste déroulante.
:roll:
Le formulaire est constitué seulement par cette liste déroulante avec les disciplines sportives. Qu'entendez-vous par champ caché svp ?

Posté : 17 janv. 2006, 09:52
par Cyrano
<input type="hidden" name="sport" id="sport" value="<?php echo($_POST['sport']) ?>" />

Posté : 17 janv. 2006, 10:22
par resistenz76
Merci mais lorsque je rajoute ce champ à ma liste déroulante, j'obtiens un message "aucune nouvelle publiée à ce jour". Je vais laisser de côté le "page par page" pour l'instant...

:wink:
Merci pour votre aide

Posté : 17 janv. 2006, 19:19
par Tictac
petite regle simple pour tes problemes variables dans tes requetes mysql !!

=>

"SELECT ... WHERE id='$variabale' '' (" pour ouviri la requete et la fermer);

si ta variable est du genre => $_POST['email']

"SELECT ... WHERE id='$_POST[email]' '' il te suffit d'enlever les ' entre []

c'est assez simple comme ça et pas besoin de se casser la tete avec les concaténations !

autre petit astuces pour les codes du style <? php echo "salut" ?>

ceci suffit => <?="salut"?> (le = remplace le echo , mais attention , il doit etre collé au ?)

Voilà , des syntaxes simples et plus courtes !! le temps est precieux !! la clareté aussi lol