Page 1 sur 1

decrementer les id

Posté : 07 avr. 2008, 15:36
par poeme
Bonjour,

Je ne suis même pas debutant en php, je n'ai jamais appris, je bidouille c'est tout.

J'utilise un livre d'or sur mon site pour que les visiteurs laissent leurs messages.
le probleme c'est que la page 1 devient 2 quand une nouvelle page est cree et ainsi de suite.

les pages sont donc en changement permanent, ce qui me gene pour le referencement, je voudrais les fixer, que la premiere cree s'appelle 1 et ainsi de suite.

J'ai essaye de modifier l'ordre SELECT DESC en ASC, le dernier message poster est bien alors sur la page avec le numero le plus eleve.... mais en bas de page au lieu d'en haut pour etre bien visible!

et l'autre probleme c'est que la page index : livre.php = toujours livre.php?poeme=1 donc la 1ere page cree
et il serait bien mieux si en arrivant sur le livre on voyait directement les derniers messages postes.

Comment faire? est il possible de creer une table qui decremente les id par exemple aulieu de les incrementer?

et je voudrais que cette page index dur livre

en esperant que des pros du php passent par là
merci

* j'ai mis un exemple du livre que j'essaye de bidouiller ici
http://pouemes.free.fr/livre.php

Posté : 07 avr. 2008, 20:40
par Aureusms
Quel est le format de ta table ?
De quel façon (sans codes) veux tu qu'on t'aide ?
Créé un petit bout de code, essaye le et si cela ne marche pas reviens nous voir ... (Pas 2 fois hein Laetitia !!! :D )

Posté : 07 avr. 2008, 21:30
par poeme
salut Aureusms

est ce ceci que tu veux?

CREATE TABLE IF NOT EXISTS `poemes` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`Nom` varchar(50) collate latin1_general_ci default NULL,
`Mail` varchar(100) collate latin1_general_ci default NULL,
`Web` varchar(200) collate latin1_general_ci default NULL,
`Ville` varchar(100) collate latin1_general_ci default NULL,
`Note` float default NULL,
`Message` text collate latin1_general_ci,
`Date` varchar(10) collate latin1_general_ci default NULL,
`IP` varchar(39) collate latin1_general_ci default NULL,
`Modifications` tinyint(3) NOT NULL default '0',
`Visible` char(1) collate latin1_general_ci default NULL,
`Reponse` text collate latin1_general_ci,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=5 ;

Posté : 08 avr. 2008, 09:58
par Aureusms
Ok ca c'est la structure de ta base. La partie PRIMARY KEY (`id`) t'indique que la "colonne" ID reste la seule colonne où les données doivent rester unique.

Ainsi, c'est vers elle que tu peux te tourner pour par exemple faire des tri.
De plus avec

Code : Tout sélectionner

`id` smallint(5) unsigned NOT NULL auto_increment
elle à l'air d'être autoincrémentée. (il est étrange de voir AUTO_INCREMENT=5, cela monte de 5 en 5 ?)
Pour finir avec cette ligne, la colonne id est

Code : Tout sélectionner

smallint(5) unsigned
ce qui te laisse 65535 position (tu as donc de la marge).

Donc rapidement, essaye de chercher sur internet des pistes sur les mot clés (que j'ai mis entre les les signe || : ne pas les mettre dans une requète) selon la phrase suivante :

Code : Tout sélectionner

||SELECT ||colonne_que_tu_veux_1, colonne_que_tu_veux_2, colonne_que_tu_veux_3 ||FROM|| poemes ||ORDER BY|| id ||DESC|| ||LIMIT|| 0,5
Cette phrase (aussi appelé requête) te permet de sélectionner parmi les 3 colonnes indiquées (mais il peut en avoir plus ou moins), 5 résultats à partir de la position 0 (si on aurait écris LIMIT 10,10 : il retournerait les 10 résultats à partir de la dixième position triée dans le sens inverse des entrées (DESC)).

Ce que tu demandes n'est pas compliqué, un peu long mais pas compliqué. Reviens avec un bout de code, nous serons heureux de t'aider.

Va sur des sites comme http://www.siteduzero.com/ cela t'aidera

Posté : 08 avr. 2008, 22:32
par poeme
bonsoir Aureusms



merci pour ta reponse

non ca monte d'1

en fait pour l'instant je me sers d'alex guestbook pour que les gens llaissent leur messages, mais ca a l'air complique a modifier, en plus du probleme que je qsoumet, les urls sont superlongues avec alexguestbook.
j'ai trouve un autre script qui me semble pas mal et sans doute plus simple a modifier

voici des bouts de code qui doivent entrer dans ce que je cherche à faire (sinon, la table du message au dessus est pour ce script)
	// Affichage des messages
	//
	function poeme_afficher_messages($id = NULL, $html = 1) {
		if(empty($id)) {
			$trancheMessages = $this->poeme_trancheMessages($this->config['Page courante']);
			$messages = $this->sql_fetch('SELECT * FROM '.$this->config['SQL']['Table'].' '.$this->config['SQL']['WHERE'].' ORDER BY '.$this->config['SQL']['ORDER'].' LIMIT '.$trancheMessages['Debut'].', '.$this->config['Divers']['Messages par page'], 1);
			$this->prochainMessage = $this->sql_fetch('SELECT id FROM '.$this->config['SQL']['Table'].' '.$this->config['SQL']['WHERE'].' ORDER BY '.$this->config['SQL']['ORDER'].' LIMIT '.($trancheMessages['Debut'] + $this->config['Divers']['Messages par page']).', 1', 3);
		} else { // EditLive
			$where = (empty($this->config['SQL']['WHERE'])) ? 'WHERE id='.$id : $this->config['SQL']['WHERE'].' AND id='.$id;
			$messages = $this->sql_fetch('SELECT * FROM '.$this->config['SQL']['Table'].' '.$where.' LIMIT 1', 1);

			$chevron = (eregi('DESC', $this->config['SQL']['ORDER'])) ? '<' : '>';
			$where = (empty($this->config['SQL']['WHERE'])) ? 'WHERE id'.$chevron.$id : $this->config['SQL']['WHERE'].' AND id='.$id;
			$this->prochainMessage = $this->sql_fetch('SELECT id FROM '.$this->config['SQL']['Table'].' '.$where.' ORDER BY '.$this->config['SQL']['ORDER'].' LIMIT 1', 3);
		}

un peu plus loin ......

		$this->config['Activer les retours'] = 1;
		$this->config['Format Mail'] = 1;
		$this->config['Tronqueur'] = 'mots';
		$this->config['Page courante'] = 1;
		$this->config['SQL']['ORDER'] = 'id ASC';   A l'origine c'etait DESC)
		$this->config['SQL']['WHERE'] = NULL;
 		$this->page = $this->config['Divers']['Nom de la page'].((ereg('\?', $this->config['Divers']['Nom de la page'])) ? '&' : '?');


.................
			// Les numéros de page
			$numeros_de_pages = $this->poeme_generate_navigation(((is_null($chemin)) ? $this->page : $chemin).'poeme=', $this->config['Page courante'], $this->config['Divers']['Messages par page']);
			$tpl_barreinfo = str_replace('[ELEMENT:NUMEROSDEPAGES /]', (($numeros_de_pages == 1) ? NULL : $numeros_de_pages), $tpl_barreinfo);

			// Le numéro de la page
			if($numeros_de_pages == 1)
				$tpl_barreinfo = str_replace(Array('<PAGENO>', '<PAGE>'), Array($this->langue['Page unique'], NULL), $tpl_barreinfo);
			else
				$tpl_barreinfo = str_replace(Array('<PAGENO>', '<PAGE>'), Array($this->langue['Page numero'], $this->config['Page courante']), $tpl_barreinfo);


..............

 	function poeme_trancheMessages($pagecourante) {
		$nbmessages = $this->poeme_calcul_messages();
		$nbpages = ceil($nbmessages / $this->config['Divers']['Messages par page']);
		$tranche['Fin'] = ($pagecourante != $nbpages) ? $this->config['Divers']['Messages par page'] * $pagecourante : $nbmessages;
		$tranche['Debut'] = ($pagecourante != $nbpages) ? $tranche['Fin'] - $this->config['Divers']['Messages par page'] : $this->config['Divers']['Messages par page'] * $pagecourante - $this->config['Divers']['Messages par page'];
		return $tranche;
	}
bon sinon je vais faire des recherches sur ce que tu m'indiques

Posté : 09 avr. 2008, 11:32
par Ryle
Modération :
poeme, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ