Comment s'y prendre?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comment s'y prendre?

Re: Comment s'y prendre?

par Fre3z69 » 13 mars 2012, 11:17

Eu oui c'est vrai

Voici le résultat

Pour cat_down
	$query = $cnx->prepare('SELECT COUNT(cat_id) AS NbCat FROM t_cat');
	$query->bindValue(':cat_id',(int) $_GET['catid'],PDO::PARAM_INT);
	$query->execute()or die(print_r($query->errorInfo()));
	$data0 = $query->fetch();
	$query->CloseCursor();
	$NbCat=$data0['NbCat'];
	// si $cat_down est égale au nombre de catégorie, on renvoie en arrier sans rien faire
	if ($cat_down>$NbCat){
		header('Location: '.SITE_ADRESSE.'admin/index.php?r=forum');
	}
	else{
        }
Pour cat up
	if ($cat_up<1){
		header('Location: '.SITE_ADRESSE.'admin/index.php?r=forum');
	}
	else{
        }
même principe pour les forum ;-)

Merci de ton aide, je pense ce sujet est résolut.

Cordialement

Re: Comment s'y prendre?

par xTG » 13 mars 2012, 11:08

Tu ferrai mieux de faire une requête de vérification. (c'était le but que j'indiquais en parlant d'array avec tous les enregistrements)
Car là il suffit d'appeler deux fois le script sur l'avant dernier élément pour foutre le bordel dans la base de données. ;)

Re: Comment s'y prendre?

par Fre3z69 » 13 mars 2012, 10:34

J'ai réussir à faire cela grâce à vos conseils.

Voici le résultat:
<?php
	// on séléction la catégorie principale (qui monte)
	$query = $cnx->prepare('SELECT cat_id, cat_name, cat_order FROM t_cat
	WHERE cat_id = :cat_id');
	$query->bindValue(':cat_id',(int) $_GET['catid'],PDO::PARAM_INT);
	$query->execute()or die(print_r($query->errorInfo()));
	$data = $query->fetch();
	$query->CloseCursor();
	
	// on définit $cat_up
	$cat_up=$data['cat_order']-1;
	
	// et on séléctionne aussi celle qui va la remplacer
	$query = $cnx->prepare('SELECT cat_id, cat_name, cat_order FROM t_cat
	WHERE cat_order = :cat_order');
	$query->bindValue(':cat_order',(int) $cat_up,PDO::PARAM_INT);
	$query->execute()or die(print_r($query->errorInfo()));
	$datai = $query->fetch();
	$query->CloseCursor();
	
	// on définit $cat_down
	$cat_down=$datai['cat_order']+1;
	
	// on prépare les requêtes qui permettront d'intervertir les deux champs
	$query=$cnx->prepare('UPDATE t_cat
	SET 
	 cat_order = :cat_order
	WHERE cat_id = :cat_id');
	$query->bindValue(':cat_id',(int) $data['cat_id'],PDO::PARAM_INT);
	$query->bindValue(':cat_order',(int) $cat_up,PDO::PARAM_INT);
	$query->execute();
	$query->CloseCursor();
	
	$query=$cnx->prepare('UPDATE t_cat
	SET 
	  cat_order = :cat_order
	WHERE cat_id = :cat_id');
	$query->bindValue(':cat_id',(int) $datai['cat_id'],PDO::PARAM_INT);
	$query->bindValue(':cat_order',(int) $cat_down,PDO::PARAM_INT);
	$query->execute();
	$query->CloseCursor();
	
	header('Location: '.SITE_ADRESSE.'admin/index.php?r=forum');
?>
Le script pour déscendre est exactement le même sauf que on définit en premier cat_down

Merci de votre aide, Cordialement

Re: Comment s'y prendre?

par Fre3z69 » 13 mars 2012, 09:48

Merci de votre aide, je vais m'y atteler.

C'est pas exactement order, c'est cat_order et forum_order ^^

Je vais tenter cela, je viens poster le résultat ici

Cordialement

Re: Comment s'y prendre?

par xTG » 13 mars 2012, 08:41

Un échange de variable :
$maVar1 = 1;
$maVar2 = 2;

$tmp = $maVar1;
$maVar1 = $maVar2;
$maVar2 = $tmp;

Re: Comment s'y prendre?

par moogli » 13 mars 2012, 07:57

Salut,

Le plus simple pour toi c'est de faire une procédure stockée sur le sgbd. Celle ci prend en paramètre ms l'id de la catégorie à modifier et le sens (que tu as dans l'url).
Dans cette procédure :
-mise à jour de la ligne précédente (ou suivante) avec un update + / - 1
-mise à jour de la ligne concernée avec la nouvelle position
Tu peu bien entendu y intégrer les contrôles des possibilités de changement de la catégorie.

Tu peux faire exactement la même chose en php avec deux appel ms au sgbd ;)

Pour info order est un mot réservé SQL c'est une très mauvaise idée en nom de champs (select ... order by order c'est moyen :mrgreen: )

@+

Re: Comment s'y prendre?

par Fre3z69 » 13 mars 2012, 07:50

Merci, mais je vais encore un peu t'embêter

A moins que je comprenne pas le terme exactement, je ne pense pas savoir faire un échange de variable.

Peux tu me définir comment faire cela STP?

Merci de votre aide

Cordialement

Re: Comment s'y prendre?

par xTG » 13 mars 2012, 07:40

Oui, en travaillant avec un tableau cela revient à un simple échange de variable.
Bon après pour garder à jour il faut rajouter les requêtes SQL, mais c'est pas grand chose.

Re: Comment s'y prendre?

par Fre3z69 » 12 mars 2012, 22:20

Pour les flèches c'est régler, le problème est résolut, mais oui sirakawa, je veux bien faire le changement de position par un simple clic sur une flèche.

J'ai comparer les ordres avec le nombre total de catégories (ou forums)

D'après ce que tu m'as dit xTG, dans mon url je fait par exemple:

index.php?catid=1&pos=desc

Et dans ma page de traitement j'inverse les deux catégories??

C'est cela le principe?

Merci de votre aide

Cordialement

Re: Comment s'y prendre?

par xTG » 12 mars 2012, 19:49

Tu récupères toutes tes catégories/forums dans un array.
Le premier de l'array a une flèche descendante mais pas montante.
Le dernier a une flèche montante mais pas descendante. ;)

Après il suffit de transmettre l'ID ou la position de l'élément concerné (avec l'ordre descente ou montante) dans l'url.
Puis grâce à l'array tu connais tout de suite les voisins et il suffit d'opérer les requêtes SQL de type UPDATE.

Re: Comment s'y prendre?

par sirakawa » 12 mars 2012, 19:21

Je suppose que tu veux que :
initialement les éléments soient toujours dans le même ordre,
le premier ait une flèche : descendre activable
le dernier ait une flèche: monter activable
les autres aient une flèche monter et une flèche descendre activables
le changement de position se fasse sur un simple clic sur une flèche.

Re: Comment s'y prendre?

par Fre3z69 » 12 mars 2012, 18:40

J'ai modifier l'affichage des flèches pour griser les impossibilités.

Image

maintenant, que me reste t'il à faire sur les flèches, et dans le traitement, pour faire fonctionner ce système??

Merci de votre aide

Re: Comment s'y prendre?

par Fre3z69 » 12 mars 2012, 17:51

Arf, j'ai mal compris, j'ai ce champ, il s'agit du champ Order, mais je ne comprend pas comment faire que les flèches montent et descendent l'ordre des forums ou cats, et de même comment faire pour griser la flèche en cas d'impossibilité de monter ou descendre (pour le premier et le dernier)

Merci

Cordialement

Re: Comment s'y prendre?

par xTG » 12 mars 2012, 17:50

Euh c'est à dire... C'est quelle partie qui te pose problème ?
Car bon c'est un système très simple, c'est similaire à un swap de valeur entre deux variables...

Re: Comment s'y prendre.

par Fre3z69 » 12 mars 2012, 17:48

Il faut que tu gères un champ position dans ta table.
Après il suffit d'échanger deux positions entre elles. ;)

Et l'affichage, un ORDER BY ce champ.
J'imagine bien, mais c'est ça que j'ai du mal a agencer.

Pourrais tu me montrer un exemple, que je comprenne le truc stp?

Merci
Cordialement