Premiere interface d'administration

nano855
Invité n'ayant pas de compte PHPfrance

06 mars 2012, 17:56

Bonjour à tous,

Voici ma première interface d'administration.
Image
j'aimerai que lorsque je clique sur down de la première image, elle se place en deuxième position.

Avec mon script, tout marche bien mais au bout de 4 ou 5 click sur up et down ... cela fait n'importe quoi.
le click lance une popup avec dedans mon fichier php( plus bas )
je me demande si cela a quelque chose à voir avec le navigateur?
Avez vous une idée d'ou viens le problème ou une autre idée que la popup pour faire mon administration ?

Voici mon fichier popup_up.php
<?php
include("db_connect.php");

$ma_connexion=mysqli_connect(HOST,USER,PWD,DB);
$requete="select * FROM  photos WHERE id=".$_GET["id"];
$resultat=mysqli_query($ma_connexion,$requete);
$ligne=mysqli_fetch_assoc($resultat);
$categorie = $ligne['categorie'];

$myId = $_GET['id'];
$ma_connection=mysqli_connect(HOST,USER,PWD,DB);
$requetUp = "select id FROM photos WHERE categorie='".$categorie."' ORDER by id DESC";
if($result = mysqli_query($ma_connection, $requetUp)) {
					while($ligne = mysqli_fetch_assoc($result)) {	
						$idArray []= $ligne["id"];
					}
}
$position = array_search($myId, $idArray);
$position_moin_un = $position -1;

	// on decalle la ligne sur une id de stockage
		$reception = "UPDATE photos set id='2' WHERE id='".$idArray[$position_moin_un]."'";
	// on place notre id a la place de l'id que l'on vien de décaller
		$place = "UPDATE photos set id='".$idArray[$position_moin_un]."' WHERE id='".$myId."'";
	// on ramene de l'id de reception a la ligne de mon id de base
		$replace = "UPDATE photos set id='".$myId."' WHERE id='2'";
	// on execute les actions ci-dessus.
		if($action = mysqli_query($ma_connection,$reception)){
			if($action2 = mysqli_query($ma_connection,$place)){
				if($action3 = mysqli_query($ma_connection,$replace)){
				
		?>
			<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
			<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
			<head>
			  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
			  <title>Formulaire de contact</title>
			  <link rel="stylesheet" media="screen" type="text/css" href="../style/style.css" />
			  <script type="text/javascript">
					window.opener.location.href="index.php?<?php print microtime();?>"; // reviens sur la page index et empeche la mise en cache pour un rafraichissement de la page.
					window.close();
				</script>
			</head>
			<body>
			</body>
			</html>
		<?php 
				}
			}
		}
?>

ViPHP
xTG
ViPHP | 7331 Messages

06 mars 2012, 18:07

Tu effectues une soustraction sans même vérifier qu'il existe bien un élément en dessous. ;)
De plus cela posera aussi problème s'il y a un trou dans les IDs : 1, 2, 4, 5
Plutôt qu'une soustraction fais un échange de position entre deux éléments.

nano855
Invité n'ayant pas de compte PHPfrance

07 mars 2012, 11:47

De plus cela posera aussi problème s'il y a un trou dans les IDs : 1, 2, 4, 5
à priori il ne peux pas y avoir de trou car je récupère toute mes ids via un requete select mysql et je les stock dans un array. puis je fait appel à la position précédante dans l'array.

donc si je recupere les IDs suivantes: 1,2,3,6,251,500 via mysl et que je fait array[5] et array[6] j'obtiens respectivement les id 251, 500. je me trompe?

Plutôt qu'une soustraction fais un échange de position entre deux éléments.
Je n'ai pas trouvé comment faire l'échange de position entre deux éléments lorsque que j'essaie de faire un UPDATE il me dis que l'id existe déjà et comme c'est une clé unique ...

ViPHP
xTG
ViPHP | 7331 Messages

07 mars 2012, 12:11

En fait plutôt que de modifier une clé primaire qui va foutre un bordel monstre dans l'indexation...
Tu ferrai mieux de gérer un champ position et d'appliquer ce que je te disais. ;)

Concernant ta première réponse... Et le cas de fin de tableau ? ^^

ViPHP
AB
ViPHP | 5818 Messages

07 mars 2012, 18:05

Tu ferais mieux de gérer un champ position ...
+1
D'ailleurs, c'est même pas un avis mais plutôt une "obligation". Chaque colonne de ta table doit être utilisée pour un usage UNIQUE. Si tu souhaites ordonner tes lignes, alors crée un champ "ordre", les champs id ne sont pas prévus pour ça.