La Communauté Webmaster  forum rss


  Forum-webmaster
  Technique - programmation
  PHP / MySQL
(Modérateurs: Shain, Jey, erwinol, Lilian, lauryv, ToToMaStEr)
  pagination d'une requète sql aléatoir
« Précédent Suivant »
Pages: [1] Descendre
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
  Auteur  Sujet: pagination d'une requète sql aléatoir  (Lu 3296 fois)
pagination d'une requète sql aléatoir
« sur: le 26-11-2013 a 08:43:52 »
tom.dev
Membre récent
*

Hors-Ligne

Messages: 3





Voir le Profil
Répondre avec citation

Bonjour a tous ,
Je travail sur un projet en ce moment (pour m'entrainer , je débute).

J'ai donc réussi a créer une pagination automatique du résultat d'une requète sql en suivant un tuto sur internet dont voici mon code :
Code:

<?php
try
         {
         $bdd = new PDO('mysql:host=localhost;dbname=dechetterie_npdc' , 'root' , '' ) ;
         }
         catch (Exception $e)
         {
         die('Erreur :' .$e->getMessage());
         }


// --------------- Étape 1 -----------------
// Si un message est envoyé, on l'enregistre
// -----------------------------------------

if (isset($_POST['pseudo']) AND isset($_POST['message']))
{
    $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité
    $message = mysql_real_escape_string(htmlspecialchars($_POST['message'])); // De même pour le message
    $message = nl2br($message); // Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br />

    // On peut enfin enregistrer :o)
    mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "')");
}

// --------------- Étape 2 -----------------
// On écrit les liens vers chacune des pages
// -----------------------------------------

// On met dans une variable le nombre de messages qu'on veut par page
$nombreDeMessagesParPage = 4; // Essayez de changer ce nombre pour voir :o)
// On récupère le nombre total de messages
$retour = $bdd->query('SELECT COUNT(*) AS nb_messages FROM npdc');
$donnees = $retour->fetch();
$totalDesMessages = $donnees['nb_messages'];
// On calcule le nombre de pages à créer
$nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
// Puis on fait une boucle pour écrire les liens vers chacune des pages
echo 'Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
    echo '<a href="test3.php?page=' . $i . '">' . $i . '</a> ';
}
?>

</p>

<?php


// --------------- Étape 3 ---------------
// Maintenant, on va afficher les messages
// ---------------------------------------

if (isset($_GET['page']))
{
        $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4)
}
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{
        $page = 1; // On se met sur la page 1 (par défaut)
}

// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;

$reponse = $bdd->query('SELECT * FROM npdc ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);

while ($donnees = $reponse->fetch())
{
        echo '<p><strong>' . $donnees['adresse'] . '</strong> a écrit :<br />' . $donnees['ville'] . '</p>';
}


Je voudrais maintenant obtenir la meme chose mais avec une requete à tri aléatoir du type :
Code:
$reponse = $bdd->query('select * from (select * from npdc ) s order by rand()')


Je ne sais pas trop comment mis prendre , sur le code actuel , on fait une boucle et a chaque changement de page , on relance la requete en changeant les LIMIT ( enfin si j'ai bien compris);

Si vous avez une solution( un tuto , une idée de départ??) , j'ai pas mal chercher sur le web mais j'ai pas trouvé se que je voulais.

En vous remerciant.

Rapporter au modérateur  

Re:pagination d'une requète sql aléatoir
« Répondre #1 sur: le 26-11-2013 a 11:17:34 »
pppplus
Habitué
***

Hors-Ligne

Messages: 482



php / mysql

Voir le Profil    WWW
Répondre avec citation

Afficher de multiples pages d'après un ordre aléatoire... c'est pas top !

Ca voudrait dire qu'il faut stocker toutes les entrées de la table, les garder en mémoire pour le visiteur et ensuite gérer l'affichage des pages.

Imagine 150 pages ....
Et l'aléatoire doit-il être rechargé à chaque nouveau visiteur, à chaque nouvelle visite ?

Pourquoi te faut-il de l'aléatoire ? Car c'est lourd, très très lourd !

Rapporter au modérateur  

capsules rechargeables Dolce Gusto et Nespresso
jeux flash gratuits avec la plus grosse boutique cadeaux du net
Accessoires cuisine pratiques
Re:pagination d'une requète sql aléatoir
« Répondre #2 sur: le 26-11-2013 a 14:34:05 »
tom.dev
Membre récent
*

Hors-Ligne

Messages: 3





Voir le Profil
Répondre avec citation

OK ca fonctionne , j'ai donc utilisé " session_start() "

Je remet le code avec les modifications en couleur violet:
[CODE]
<?php
session_start();

if (!isset($_SESSION['key'])) {
    $_SESSION['key'] = rand(1, 1000);
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">



<?php
try
         {
         $bdd = new PDO('mysql:host=localhost;dbname=dechetterie_npdc' , 'root' , '' ) ;
         }
         catch (Exception $e)
         {
         die('Erreur :' .$e->getMessage());
         }



// --------------- Étape 2 -----------------
// On écrit les liens vers chacune des pages
// -----------------------------------------

// On met dans une variable le nombre de messages qu'on veut par page
$nombreDeMessagesParPage = 4; // Essayez de changer ce nombre pour voir )
// On récupère le nombre total de messages
$retour = $bdd->query('SELECT COUNT(*) AS nb_messages FROM npdc');
$donnees = $retour->fetch();
$totalDesMessages = $donnees['nb_messages'];
// On calcule le nombre de pages à créer
$nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
// Puis on fait une boucle pour écrire les liens vers chacune des pages
echo 'Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
    echo '<a href="test4.php?page=' . $i . '">' . $i . '</a> ';
}
?>

</p>

<?php


// --------------- Étape 3 ---------------
// Maintenant, on va afficher les messages
// ---------------------------------------

if (isset($_GET['page']))
{
        $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4)
}
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{
        $page = 1; // On se met sur la page 1 (par défaut)
}

// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;

$reponse = $bdd->query('SELECT * FROM npdc ORDER[COLOR="Purple"] BY RAND(' . $_SESSION['key'] . ')[/COLOR] LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);

while ($donnees = $reponse->fetch())
{
        echo '<p><strong>' . $donnees['adresse'] . '</strong> a écrit :<br />' . $donnees['ville'] . '</p>';
}

?>

</body>
</html>
[/CODE]

Voila ca fonctionne comme je veus , maintenant si vous voyer des erreurs ou d'autres facon de faire n'hésiter pas .
Merci

Rapporter au modérateur  
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
Pages: [1] Monter
« Précédent Suivant »
Sauter à: 

Votre statut : Invité
Vous devez être membre pour participer.
 
 
Let’s Encrypt : le certificat SSL gratuit
Tester votre site internet sur différents navigateurs
[WordPress] Des problèmes avec l’administration ?
Rappel : Mettez à jour vos CMS et vos sites E-commerce
Le .fr fête ses 25 années d’existence !
Mesurer votre audience en temps réel avec BubbleStat
Porter réclamation contre Google Panda ?
Zlio n’est plus …
 
 
 
 
 

Copyright (c) Devclic 2002 - 2026 - Tous droits réservés

creation site internet strasbourg