MONTER/DESCENDRE UN LIEN

Eléphant du PHP | 62 Messages

23 avr. 2012, 16:13

bonjour,
je suis entrain de réaliser un script qui permets de gerer, la priorité des liens, que j'ajoute via un formulaire.
c'est liens sont enregistré dans une table sql
CREATE TABLE IF NOT EXISTS `onglets` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `nom` varchar(60) NOT NULL,
  `contenu` mediumtext NOT NULL,
  PRIMARY KEY (`id`)
)
donc le concept que j'essay de mettre en place, est le suivant
<?php
require "../fonctions.php";
ConnectBase();
$id = $_GET['id'];
if ($_GET['action']=='monter'){

			  
				$sql1="UPDATE onglets SET id = $id - 1 WHERE id=$id";
				$sql2="UPDATE onglets SET id = $id + 1 WHERE id=$id - 1 ";
				$req1=mysql_query($sq1l) or die ('ErreurSQL !<br>'.$sql1.'<br>'.mysql_error());
				$req2=mysql_query($sq12) or die ('ErreurSQL !<br>'.$sql2.'<br>'.mysql_error());
                            }
			elseif ($_GET['action']=='descendre')
   {
	$sql1="UPDATE onglets SET id = $id + 1 WHERE id=$id";
    $sql2="UPDATE onglets SET id = $id - 1 WHERE id=$id + 1";
	$req1=mysql_query($sq1l) or die ('ErreurSQL !<br>'.$sql1.'<br>'.mysql_error());
	$req2=mysql_query($sq12) or die ('ErreurSQL !<br>'.$sql2.'<br>'.mysql_error());
	}
  
if(!isset($_GET['action'])) {
            $sql = 'SELECT * FROM onglets ORDER BY id';
            $req = mysql_query($sql) or die("Balise 1".mysql_error());
			echo '<div id="tableau" align="center">';
            echo '<TABLE BORDER="1">
                    <CAPTION><h3><u> La liste des onglets du site:</u></h3></CAPTION>
                    <TR>
                      <TH> nom d\'onglet  </TH>
                      <TH> editer</TH>
					  <TH>Supprimer</TH>
					  <TH>Monter</TH>
					  <TH>Descendre</TH>
					  
                    </TR>';
            while($data = mysql_fetch_assoc($req))
            {
              echo '<TR>
                       <td>'.$data['nom'].'</td>
                       <td><a href="gest_onglet.php?action=editer&id='.$data['id'].'"><img src="edit.png" alt="editer" align="middle" border="0"></a></td>
					   <td><a href="gest_onglet.php?action=supprimer&id='.$data['id'].'"><img src="delete.png" alt="supprimer" align="middle" border="0" height="48" widht="48"></a></td>
					   <td><a href="gest_onglet.php?action=monter&id='.$data['id'].'"><img src="up.png" alt="monter" align="middle" border="0" height="48" widht="48"></a></td>
					   <td><a href="gest_onglet.php?action=descendre&id='.$data['id'].'"><img src="down.png" alt="descendre" align="middle" border="0" height="48" widht="48"></a></td>
					   </TR>';
            }
?>
j'essaye en fonction de l'option que je choisi d'incrementer ou de le decrementer, mais malheureusement ça na marche pas :(
quelqu'un peut m'aider svp???
je vous remercie d'avance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 avr. 2012, 19:03

Salut,

Une clef primaire c'est pas fait pour être modifiée.

Ajouté un champ rang de type int (ou tinyint si tu veux) et fait te calcule la dessus.
Couplé à une autre table tu pourra utiliser ça sur plusieurs catégorie.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 62 Messages

23 avr. 2012, 22:20

bonsoir, donc la j'ai ajouté un champ à ma table onglets nomé "priorite"
et dans le formulaire qui me permets d'ajouter des liens(une insertion des lien dans la table "onglets", j'ai fait cette modification
<?php 
require "../fonctions.php";
		ConnectBase(); 


$elem=$_POST['elem'];

 
if(isset($_POST['valider'])){
        
 if(isset($elem) and !empty($elem)) 
{ 
        $sql = 'SELECT COUNT(*)FROM onglets ';
        $res = mysql_query($sql) or die("Balise 3".mysql_error());
		$data = mysql_fetch_array($res);
		$prio=$data['cpt']+1;
$ok=mysql_db_query("paris","INSERT INTO onglets (id,nom,contenu,priorite) VALUES 
('','$elem','','$prio')"); 

header("Location: ok.html");
} 
else
{
header("Location: echec.html");
}
}
?> 
<!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">
	<head>
		<title>ajout d'onglet</title>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
		<link rel="stylesheet"type="text/css"href="ajout.css"/>
	</head>
	<body>
	</br>
	</br>
	</br>
	</br>


<div id="menu">
<fieldset >
<legend><img src="ajout.png" height="80"></legend>
<form action="ajout.php" method="post">
<div class='container'>
             
			<label>Entrer le nom d'onglet à ajouter:</label>  			
			<input type="text" name="elem"/>
</div>
</br>
<div class='container'>
		     <input type="submit" name="valider" value="ajouter"/ >
</div>	
</form> 
</fieldset>
<br>
</div>

</body>
</html>
donc je commence par compter les lignes de ma tables, et je lui ajoute 1, c'est à dite que si j'ai O enregistrement, il va mettre le champ prio à 1
sauf que la, il met toujours le champ priorité à 1, méme si j'ajoute un deuxiéme lien dans ma table
d'ou ça peut venir???

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 avr. 2012, 09:03

$prio=$data['cpt']+1;

cpt n'existe pas y a pas d'alias dans ta requete sql.

j'ai pas regardé le reste ^^

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 62 Messages

24 avr. 2012, 11:02

oui vous avez tout a fait raison, donc la j'ai modifier mon script et ça marche nickel
 $sql = 'SELECT COUNT(*)FROM onglets ';
        $res = mysql_query($sql) or die("Balise 3".mysql_error());
		$data = mysql_result($res,"onglets");
		$prio=$data+1;
$ok=mysql_db_query("paris","INSERT INTO onglets (id,nom,contenu,priorite) VALUES 
('','$elem','','$prio')"); 
donc la on voulant gérer les priorité ça ne marche pas , voici le code que j'ai mit
<?php
require "../fonctions.php";
ConnectBase();
$id = $_GET['id'];
if ($_GET['action']=='monter'){

			  
				$sql1="UPDATE onglets SET priorite = priorite - 1 WHERE id=$id";
				$sql2="UPDATE onglets SET priorite = priorite + 1 WHERE id=$id - 1 ";
				$req1=mysql_query($sq1l) or die ('ErreurSQL !<br>'.$sql1.'<br>'.mysql_error());
				$req2=mysql_query($sq12) or die ('ErreurSQL !<br>'.$sql2.'<br>'.mysql_error());
                            }
			elseif ($_GET['action']=='descendre')
   {
	$sql1="UPDATE onglets SET priorite = priorite + 1 WHERE id=$id";
    $sql2="UPDATE onglets SET priorite = priorite - 1 WHERE id=$id + 1";
	$req1=mysql_query($sq1l) or die ('ErreurSQL !<br>'.$sql1.'<br>'.mysql_error());
	$req2=mysql_query($sq12) or die ('ErreurSQL !<br>'.$sql2.'<br>'.mysql_error());
	}	
?>
ile me sort un errreur de ce genre
ErreurSQL !
UPDATE onglets SET priorite = priorite + 1 WHERE id=75
Query was empty
il ne recupere pas la bonne valeur de "priorite"

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 avr. 2012, 12:11

regarde bien tes nom de variables du mélange $sql1 et $sq1l

je te conseil de ne pas utiliser des noms comme ça, utilise un nom clair et explicite

par exemple updateOngletmoins, updateOngletPlus etc etc

Affiche aussi les erreurs parce que la php devrait te crier dessus pour te dire que les variables n'existe pas.

pour cela : error_reporting(E_ALL|E_STRCIT); en 1ère du script.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 62 Messages

24 avr. 2012, 16:06

merci pour le conseil effectivement la je viens de faire des modif et ça marche à marveille; je mets les codes pour faire profiter les collégues
<?php
require "../fonctions.php";
ConnectBase();
if($_GET['action']=='monter' && isset($_GET['id']))
		{	$id=$_GET['id'];
			$pos=$_GET['pos'];
			$posprecedent=$pos-1;

			$maj1="UPDATE onglets SET priorite=".$pos." WHERE priorite=".$posprecedent.";";
			$update1=mysql_query($maj1) or die (mysql_error());	
			
			$maj2="UPDATE onglets SET priorite=".$posprecedent." WHERE id=".$id.";";
			$update2=mysql_query($maj2) or die (mysql_error());
		}
		elseif($_GET['action']=='descendre' && isset($_GET['id']))
		{	
			$id=$_GET['id'];
			$pos=$_GET['pos'];
			$possuivant=$pos+1;

			$maj1="UPDATE onglets SET priorite=".$pos." WHERE priorite=".$possuivant.";";
			$update1=mysql_query($maj1) or die (mysql_error());

			$maj2="UPDATE onglets SET priorite=".$possuivant." WHERE id=".$id.";";
			$update2=mysql_query($maj2) or die (mysql_error());
		}
?>		
la je veut mettre en place un systéme de photo png de fléches, qui me permets de monter ou descendre les liens,
sauf que je veux quand que lien à la priorité à 1, il aura que la photo de la fléché pour descendre, et que quand la priorité et au max, il aura que le droit de monter.
pour la priorité max je la calcul en faisant un count de mes enregistrement de cette table, et je dit que quand la priorité est égal au résultat du count, j'affiche que la fléche pour monter. mais encore une fois ça ne marche pas, il m'affiche que la fléche pour descendre par defaut.
voici mon script
 <?php
        //require "../fonctions.php";
		//ConnectBase();

        if(!isset($_GET['action'])) {
            $sql = 'SELECT * FROM onglets ORDER BY priorite';
            $req = mysql_query($sql) or die("Balise 1".mysql_error());
			echo '<div id="tableau" align="center">';
            echo '<TABLE BORDER="1">
                    <CAPTION><h3><u> La liste des onglets du site:</u></h3></CAPTION>
                    <TR>
                      <TH> nom d\'onglet  </TH>
                      <TH> editer</TH>
					  <TH>Supprimer</TH>
					  <TH>Monter/Descendre</TH>
					
					  
                    </TR>';
					   $requette = 'SELECT COUNT(*)FROM onglets ';
                       $res = mysql_query($requette) or die("Balise 3".mysql_error());
		               $nb = mysql_result($res,"onglets");
					   echo $nb;
            while($data = mysql_fetch_assoc($req))
            {
              echo '<TR>
                       <td>'.$data['nom'].'</td>
                       <td><a href="gest_onglet.php?action=editer&id='.$data['id'].'"><img src="edit.png" alt="editer" align="middle" border="0"></a></td>
					   <td><a href="gest_onglet.php?action=supprimer&id='.$data['id'].'"><img src="delete.png" alt="supprimer" align="middle" border="0" height="48" widht="48"></a></td>';
					   if($data['priorite']=1)
						{
						echo '<td><a href="gest_onglet.php?action=descendre&id='.$data['id'].'&pos='.$data['priorite'].'"><img src="down.png" alt="descendre" align="middle" border="0" height="48" widht="48"></a></td>';
						}
						elseif($data['priorite']=$nb)
						{
						echo '<td><a href="gest_onglet.php?action=monter&id='.$data['id'].'&pos='.$data['priorite'].'"><img src="up.png" alt="monter" align="middle" border="0" height="48" widht="48"></a></td>';
						}
						else
						{
						echo 
						'<td><a href="gest_onglet.php?action=monter&id='.$data['id'].'&pos='.$data['priorite'].'"><img src="up.png" alt="monter" align="middle" border="0" height="48" widht="48"></a>
						<a href="gest_onglet.php?action=descendre&id='.$data['id'].'&pos='.$data['priorite'].'"><img src="down.png" alt="descendre" align="middle" border="0" height="48" widht="48"></a></td>
						';
						}
		
					   echo '</TR>';
            }
            echo '</TABLE>'; ?>
je veux aussi que quand je monte ou descend, qui actualise sur la méme page pas qu'il me renvoie vers une page blanche comme le cas que j'ai actuellement
merci d'avance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 avr. 2012, 18:09

Pour rester sur la même page il suffit de laisser vide l'attribut action de la balise form (action="")

Pour le reste tu aun order by priorité dans la requête SQL et tu a déjà le nombre de tuple retourné (avec $nb)
Si priorité == 1 tu n'affiche pas la flèche "monter"
Si priorité == $nb tu n'affiche pas la flèche "descendre"

Il s'agit de deux couples if / else dans le. Hile a l'emplacement où tu souhaite l'affichage.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 62 Messages

24 avr. 2012, 18:34

désolé la je n'est pas bien compris :D pour l'hstoire de fléche, en gros je doit changer quoi au niveau de mon code??? :D :D :D

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 avr. 2012, 07:57

Les conditions des if dans le while pour l'affichage des flèches

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 62 Messages

26 avr. 2012, 11:53

merci ça marche parfaitement,
mais juste pour le faite de mettre la balise form à "", pouractualiser sur la méme page, moi sur mon script je n'est pas de balise form???

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 avr. 2012, 12:20

il me semblait que tu utilisais des boutons ^^

ben avec les liens, même chose faut pointer sur la page courante.

si tu met href="?truc=machin" tu reste sur la même page.

donc virer gest_onglet.php et mettre le traitement sur la page qui affiche le tout.


Après faut que tu regarde du coté d'ajax.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 62 Messages

26 avr. 2012, 12:35

j'ai essayer le href="?truc=machin" et ça ne donne rien.
je suis toujour rederiger vers une page blanche. :( :( :(