select order by rand(nombre)

WRInaute discret
Bonsoir
Je fais une extraction aléatoire (qui sera paginée) avec un :
SELECT ... ORDER BY rand($rand)...
avec $rand calculé à partir de microtime, soit :
srand((float)microtime()*1000000);
$rand = rand();
$_SESSION['rand'] = $rand;

OK, pas de pb, ça marche, pas de doublon avec la pagination.

Maintenant, dans un formulaire permettant de choisir un tri, dont un tri aléatoire, je veux réactualiser la session avec un :
unset ($_SESSION['rand']);
afin de changer cet ordre aléatoire (qui est fixe en raison de la pagination pour éviter les doublons sur les différentes pages)

Je crée donc un fichier unset.php dans lequel j'ai simplement :
<?PHP if ($tri=="random") unset ($_SESSION['rand']); ?>
et dans mon formulaire je souhaite faire du genre mettre action=unset.php, soit :
echo "<form method='post' action='unset.php'>";
mais ça ne marche pas, bien sûr, ça bloque sur le unset.php

A moins que d'utiliser un onsubmit ?

Mes capacités sont ultra limitées, je bosse à partir de modèles tirés du web, et là j'ai atteint mes limites et ai besoin d'aide.
Comment faire ?

PS : voir ce script (sans unset) sur http://www.afleurdepau.com/1two-partenaires/fr/index.php (beaucoup de boulot pour de simples, mais utiles partenaires, mais ça me sert pour plus important ailleurs)
 
WRInaute occasionnel
C'est quoi qui bloque exactement sur ton unset.php ? l'écriture ou l'action du form qui ne renvoi rien ?
 
WRInaute discret
bonsoir

le fichier unset.php ne contient QUE la ligne indiquée
il y a bien 1 espace après <?PHP et 1 avant ?>
unset s'arrête après sa commande et il n'y a pas de retour vers la page principale, normal à priori et c'est là mon pb, comment revenir à la suite de la page principale, le FORM action unset n'est pas la bonne méthode

merci de vous pencher sur ce pb
 
WRInaute discret
Bonjour les lève-tôt ou couche-tard

Pas de pb, le session_start(); est la 1ère ligne de ma page principale
D'ailleurs ça marche si je mets le unset ailleurs dans la page principale, mais alors j'ai droit à des doublons avec la pagination des résultats, c'est pourquoi je dois le mettre uniquement sur commande et donc sur le submit.

Bonne journée
 
WRInaute discret
Bonjour
J'ai finalement trouvé, merci à ceux qui se sont investi dans ce problème.

LA SOLUTION ( pour les nuls, dans mon genre ! )

en début de page
session_start();
...


Extraction aléatoire (qui sera paginée et sans doublons) avec un :
...
SELECT ... ORDER BY rand($rand)...

avec $rand calculé à partir de microtime, soit :
srand((float)microtime()*1000000);
$rand = rand();
$_SESSION['rand'] = $rand;
...


Maintenant, le formulaire permettant de choisir un tri, dont le tri aléatoire, sachant que, par défaut, le tri de la sélection est aléatoire ( j'aime bien ce type de tri qui permet à chacun d'apparaître en début de liste quelque soit son titre, son URL, son classement au nombre de clics... ) :
...
echo "<form method='post' action=''>";
if ($tri=="random")
{
unset ($_SESSION['rand']);
echo "<input type='radio' name='tri' value='random' checked>Randomly (default)<br />";
}
else echo "<input type='radio' name='tri' value='random'>Randomly (default)<br />";
...

suivent les autres types de tri de la même façon, sans le unset ($_SESSION['rand']);
puis l'affichage par pages de n sites

Et voilà, un tri aléatoire paginé et sans doublons

PS : voir ce script sur http://www.afleurdepau.com/1two-partenaires/fr/index.php (c'est beaucoup de boulot pour de simples, mais utiles partenaires, mais ça me sert pour plus important ailleurs)
 
WRInaute occasionnel
Bravo a toi, c'est sur que c'est un peu mieux comme ca, en revanche attention a la premiere ligne

echo "<form method='post' action=''>";

Y'a quelque chose qui me choque :) Bon je pense que tu l'as deja corrigé mais bon ;)

Bonne journée !!
 
WRInaute discret
Tous mes problèmes sont réglés, je n'avais pas mis $tri en variable session
Je n'ai pas pu éditer mon message "LA SOLUTION", alors vous met l'ultime :

en début de page
session_start();
...
Extraction aléatoire (qui sera paginée et sans doublons) avec un :
SELECT ... ORDER BY rand($rand)...
avec $rand :
$rand = mt_rand();
$_SESSION['rand'] = $rand;

...
Maintenant, le formulaire permettant de choisir un tri, dont le tri aléatoire, sachant que, par défaut, le tri de la sélection sera aléatoire ( j'aime bien ce type de tri qui permet à chacun d'apparaître en début de liste quelque soit son titre, son URL, son classement au nombre de clics... ) :
echo "<form method='post' action=''>";
echo "<input type='radio' name='tri' value='random'>Au hasard(défaut)<br />";

suivent les autres types de tri de la même façon
puis des tests après le </form>
if (empty($_SESSION['tri'])) $_SESSION['tri']="random";
if (isset($_POST['tri'])) {
$_SESSION['tri']=$_POST['tri'];
unset ($_SESSION['rand']); }

...
puis l'affichage par pages de n sites

Et voilà, un tri aléatoire paginé et sans doublons

PS : voir ce script sur http://www.afleurdepau.com/1two-partenaires/fr/index.php (c'est beaucoup de boulot pour de simples, mais utiles partenaires, mais ça me sert pour plus important ailleurs)
 
Discussions similaires
Haut