Probléme d'éxécution

Eléphant du PHP | 259 Messages

01 mars 2007, 12:11

Bonjour,

J'ai enfin réussi a créer un code qui permet de monter ou decendre des questions. Par exemple :
Question 1 priorite = 3 (priorite correspond a la position de la question)
Question 2 priorite = 4

si je monte la question 2, sa priorite sera de 3, et la question 1 sa priorite sera de 4.

Le problème c'est que je dois cliquer deux fois pour monter pour que ça marche et pareil pour descendre ! mais je ne comprend pas trop pourquoi !! je vous met mon code :
<?
//Page de connexion
include('connexion.php');  // Appelle la page connexion

//Connexion 
$cn = mysql_connect($host,$user,$pass);
if (!$cn) echo mysql_error();

mysql_select_db($bdd); 

// Je récupére l'id du sondage choisi
if(isset($_GET['id2']))      		$id_sondage=$_GET['id2'];
else      $id_sondage="";

//Récupére l'action
if(isset($_GET['action']))      		$action=$_GET['action'];
else      $action="";

mysql_select_db($bdd); 

//Requete pour compter le nombre de questions suivant le sondage choisi
$requete2 = "SELECT count(id_question) FROM question WHERE id_sondage = '$id_sondage'";	
$resultat2 = mysql_query($requete2) or die ('Erreur SQL : impossible d\'effectuer la requête : <br />'.$requete2);
$total = mysql_num_rows($resultat2);
if ($total) 
{
	while($val= mysql_fetch_array($resultat2)) 
	{
	$nb_question = $val['count(id_question)'];
	}


//Afficher la liste des questions
$sql = "SELECT * FROM question WHERE id_sondage = '$id_sondage' ORDER BY priorite ASC ";	

$req = mysql_query($sql); 

$total = mysql_num_rows($req);

if ($total == 0)
	{
	echo'<u><p>Il n\'y a aucune question</p></u>';
	}
	elseif ($total > 0)
		{
		echo '<table border=0 ALIGN="CENTER"  CELLPADDING="0" CELLSPACING="1" class="admtable" >';

		//Affiche les titres des colonnes
		echo "<tr><th>ID</th><th>Titre</th><th>Modifier</th><th>Position</th></tr>";
		// on recupere le resultat sous forme d'un tableau
			while($valeur = mysql_fetch_array($req))
			{
			
			$id_question= $valeur['id_question'];
			$titre_question= $valeur['titre_question'];
			$priorite= $valeur['priorite'];		
			
			//Affiche les données sous forme de tableau
			echo'<tr><td width="150" align="center" class="fondgris">'.$id_question.'</td>
			<td width="150" align="center" class="fondgris">'.$titre_question.'</td>
			<td class="fondblanc"><a href="'.$_SERVER['PHP_SELF'].'?id='.$id_question.'&id2='.$id_sondage.'&position='.$priorite.'&action=plus">Monter</a> <a href="'.$_SERVER['PHP_SELF'].'?id='.$id_question.'&id2='.$id_sondage.'&position='.$priorite.'&action=moins">Descendre</a></td><td align ="center"class="fondblanc">'.$priorite.'</a></td></tr>';
			}
		}
			
//si l'action est de monter		
	if ($action == 'plus') 
	{
	//on récupére la position, et l'id du sondage et de la question
	if(isset($_GET['position']))      		$position=$_GET['position'];
	else      $position="";

	if(isset($_GET['id2']))      		$id_sondage=$_GET['id2'];
	else      $id_sondage="";

	if(isset($_GET['id']))      		$id_question=$_GET['id'];
	else      $id_question="";

		if ($position > 1 )
		{
		$position_moins = $position - 1;
		//Met a jour la table question donc - 1 a la priorite
		$sql3 = "UPDATE question SET priorite = '$position_moins' WHERE id_question = '$id_question' AND id_sondage = '$id_sondage'";

		//Récupére l'id de la question ou on fait + 1
		$requete2 = "SELECT * FROM question WHERE id_sondage = '$id_sondage' AND priorite = '$position_moins'";	
		$resultat2 = mysql_query($requete2) or die ('Erreur SQL : impossible d\'effectuer la requête : <br />'.$requete2);

		while($row = mysql_fetch_array($resultat2)) 
			{
			$id = $row[0];
			}


	 $sql4 = "UPDATE question SET priorite = '$position' WHERE id_question = '$id' AND id_sondage = '$id_sondage'";
	//Exécute les requête
	$req4 = mysql_query($sql4); 
	$req3 = mysql_query($sql3);
		}
			//sinon affiche message
			else
			{
			echo'<p></p>';
			echo '<table><tr></tr><tr><TD align ="left" valign="center"><u>La question est au maximum</td></u></tr></table>';
			}
		
	}	
	
	//Pareil pour moins
	if ($action == 'moins') 
	{

	if(isset($_GET['position']))      		$position=$_GET['position'];
	else      $position="";

	if(isset($_GET['id2']))      		$id_sondage=$_GET['id2'];
	else      $id_sondage="";

	if(isset($_GET['id']))      		$id_question=$_GET['id'];
	else      $id_question="";

		if ($position < $nb_question )
		{
		$position_plus = $position + 1;
		
		$sql3 = "UPDATE question SET priorite = '$position_plus' WHERE id_question = '$id_question' AND id_sondage = '$id_sondage'";

		$requete2 = "SELECT * FROM question WHERE id_sondage = '$id_sondage' AND priorite = '$position_plus'";	
		$resultat2 = mysql_query($requete2) or die ('Erreur SQL : impossible d\'effectuer la requête : <br />'.$requete2);

		while($row = mysql_fetch_array($resultat2)) 
			{
			$id = $row[0];
			}

		$sql4 = "UPDATE question SET priorite = '$position' WHERE id_question = '$id' AND id_sondage = '$id_sondage'";

		$req4 = mysql_query($sql4); 
		$req3 = mysql_query($sql3);
		}
			else
			{
			echo'<p></p>';
			echo '<table><tr></tr><tr><TD align ="left" valign="center"><u>La question est au minimum</td></u></tr></table>';
			}

	}
	
}	

?>    


Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

01 mars 2007, 13:11

Salut,

Tu effectue les opération de modification de position après l'affichage des données.
Inverse les deux blocs "affichage", "traitement action"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 259 Messages

01 mars 2007, 15:13

Merci beaucoup, c'était bien ça... :wink:
je met le post en résolu !