Page 1 sur 1

selectionner le suivant ???

Posté : 10 nov. 2005, 15:32
par Camomille
Bonjour,

un petit problème de débutant!!
Une première requete fait le tri et m'affiche les clients dans un tableau

Code : Tout sélectionner

$requete=mysql_db_query($sql_bdd,"select * from clients where Client_annee=1 AND EMPLACEMENT>0 ORDER BY Nom",$db_link) or die(mysql_error()); while($parcours = mysql_fetch_array($requete))
En cliquant sur un nom dans ce tableau, je vois la fiche complète du client.
J'aimerais insérer deux flèches (previous next) sur les fiches individuelles pour afficher le suivant ou le précédent plus aisément.
L'identificateur unique pour chaque client est "Client_num" et n'obéi à aucune logique mathématique. Le Client_num de Dupond peut être 186 alors que celui de Dupont peut être 4 !!

Comment feriez_vous pour déterminer le Client_num du nom suivant alphabétiquement celui qui est actuellement affiché?

Croyez bien que j'ai fait des recherches avant de vous poser cette question!

Bien amicalement

Camomille

Posté : 10 nov. 2005, 15:39
par pitt
Je ne suis pas sur que cela est correct au niveau programmation mais tu pourrais par exemple quand tu fais tout ton tableau en parcourant ta boucle remplir un tableau avec juste les client_num

$requete=mysql_db_query($sql_bdd,"select * from clients where Client_annee=1 AND EMPLACEMENT>0 ORDER BY Nom",$db_link) or die(mysql_error()); 
$tabclient=array();

while($parcours = mysql_fetch_array($requete)){
//construction ligne
...
$tab[]=$parcours['num_client'];

}
Mettre ce tableau en variable de session et lorsque on arrives sur une page de fiche individuelle et qu'on clique sur suivant ou précédent tu cherches lequel est-ce dans le tableau

Fais moi savoir si ca te convient

Posté : 10 nov. 2005, 16:04
par Truc
Salut, avec une séléction grace a une requete c'est plus rapide, lors de l'affichage de la fiche avec 2 boutons (précédent, suivant) tu fait appel au requetes suivantes:
$nom_fiche_courante="toto";

//requete pour les données de la fiche précédente
$sql="SELECT * FROM table WHERE nom < ".$nom_fiche_courante." ORDER BY nom DESC Limit 1";
	
//requete pour les données de la fiche suivante
$sql="SELECT * FROM table WHERE nom >  ".$nom_fiche_courante." ORDER BY nom  Limit 1";

Posté : 10 nov. 2005, 16:43
par Camomille
Merci les gars du Nord!!
Vos deux solutions me plaisent mais j'ai un petit penchant pour celle de Pitt qui me parait plus propre. Et j'ai déjà assez cafouillé dans mon projet actuel!!!!

@Pitt
J'ai quelques difficultés avec ton "$tab" Je vais faire quelques recherches sur "variable de session" et je devrais pouvoir exploiter ça!
Je n'ai pas honte de toujours me considérer comme débutant. Jusqu'à présent, je suis toujours parvenu à mes fins en prenant et recollant des portions de code. Le hic avec tout ça, c'est que j'ai négligé les bases du php!!

Je vous remercie encore.

A bientôt sur la côte belge :D :D :D

Bien amicalement

Camomille

Posté : 10 nov. 2005, 17:16
par sadeq
Et va pour celle de pitt,
Je viens de la développer si ça vous dit, elle marche bien.
Une requête + un stckage des n° dans la session + navigation séquentielle + affichage d'une fiche par n°
<?php
session_start();
//Remplir la liste des n° clients si ce n'est pas encore fait
if (!$_SESSION["clients"] || count($_SESSION["clients"])<=0){
	//$requete = @mysql_db_query("test","SELECT * FROM clients ORDER BY nom", mysql_connect("localhost","root","root")); 
	//if ($requete){
		//$clients = array(); 
		//while($un_client = mysql_fetch_array($requete)) {
			//$clients[]["n°"] = $un_client["num_client"];
			//$clients[]["actuel"] = false;
		//}
		//if ($clients[count($clients)-1]) $clients[$clients)-1]["actuel"] = true; //par défaut
		//$_SESSION["clients"] = $clients;
		
		//Pour le test : une base de données tableau
		$_SESSION["clients"] = array (
		array ("n°" => "1", "actuel" => false),
		array ("n°" => "2", "actuel" => false),
		array ("n°" => "3", "actuel" => true)
		);
	//}
}

if ($_SESSION["clients"] && count($_SESSION["clients"])>0){
	//La liste des clients existe dans la session
	//Afficher le suivant
	$sens = isset($_GET["sens"])?$_GET["sens"]:"suivant"; //par défaut: le suivant
	$num_client_à_afficher = null; 
	switch (strtoupper($sens)) {
		case "PRECEDENT": //Afficher le precedent (avec roulement vers le dernier si dépassement du début)
						foreach($_SESSION["clients"] as $index => $client){
							if ($client["actuel"]==true){
								//L'actuel est trouvé => Trouver le précédent
								$index_precedent = ($index-1 < 0)?count($_SESSION["clients"])-1:$index-1;
								$num_client_à_afficher = $_SESSION["clients"][$index_precedent]["n°"];
								//Mettre à jour la session
								$_SESSION["clients"][$index]["actuel"] = false;
								$_SESSION["clients"][$index_precedent]["actuel"]= true;
								break;
							}
						}
		break;
		default: //Afficher le suivant (avec roulement vers le premier si dépassement de la fin)
						foreach($_SESSION["clients"] as $index => $client){
							if ($client["actuel"]==true){
								//L'actuel est trouvé => Trouver le suivant
								$index_suivant = ($index+1 >= count($_SESSION["clients"]))?0:$index+1;
								$num_client_à_afficher = $_SESSION["clients"][$index_suivant]["n°"];
								//Mettre à jour la session
								$_SESSION["clients"][$index]["actuel"] = false;
								$_SESSION["clients"][$index_suivant]["actuel"]=true;
								break;
							}
						}
	}
	
	//Afficher une fiche client
	//$requete = @mysql_db_query("test","SELECT * FROM clients WHERE num_client=$num_client_à_afficher", mysql_connect("localhost","root","root")); 
	//if ($requete && mysql_num_rows($requete)>0){ 
		//$un_client = mysql_fetch_array($requete) ;
		//echo "N°: ".$un_client["num_client"];
		//echo "Nom: ".$un_client["nom_client"];
		//...
	//}

	//Pour le test sans base de données
	echo "
		Affichage du client n°$num_client_à_afficher
		<form>
		<input type=submit name=sens value=\"precedent\"> 
		<input type=submit name=sens value=\"suivant\">
		</form> 
	";
}
else echo "Aucun client!";
?>

Posté : 10 nov. 2005, 17:20
par Truc
celle de Pitt qui me parait plus propre
Oh ben non ... depuis quand une requete n'est pas propore ? :wink:

tu n'aurai en variable POST que le nom de la fiche courante et meme pas besoin de session.. mais bon si tu veut utiliser un tableau en session...

tu aurra a gérer un tableau multidimensionel:
$_SESSION['tab'][0] // 1er num client
$_SESSION['tab'][1] // 2eme num client
puis faire une recherche dans celui-ci pour savoir lequel afficher ou tu va passer de page en page l'index du tableau (ici le 0 ou 1 ) en GET ou POST, assez lourd a manipuler. Donc de toute façon tu retombera sur un systeme similaire que celui que je t'ai proposé :wink:

en cas de doute tu peut toujours changer :wink:

Posté : 11 nov. 2005, 12:32
par Camomille
Salut à tous et encore mille mercis pour vos bons conseils d'hier.

Je me suis pris la tête avec ça toute la soirée sans arriver à un résultat :cry:
Je me suis retrouvé avec des "parse errors" ou des pages désespérément blanches.
Je vais essayer de reprendre les choses en main aujourd'hui. J'ai toujours une préférence pour le "$tab[] " de Pitt. L'idéal serait de pouvoir trouver la même fonction inversée qui déterminerait la position du Clien-_num. Combinée avec le "$tab[]" qui me donne le Client_num du xième client de la liste, j'arriverai à mes fins.

Je vous remercie encore pour votre soutien.

Bien amicalement

Camomille