8791 sujets

Développement web côté serveur, CMS

Bonjour,


Sur le site sur lequel je travaille, je voudrais faire l'activation des membres en fonction d'un tableau... Chaque ligne représente un membre en attente et il y a une case à la fin de chaque ligne. Ensuite, on décide d'accepter ou refuser grâce à un Select.

C'est un peu comme la gestion des mails sur hotmail ou encore sur certains forums.

Le problème est que j'ai l'impression que la requête fonctionne mais l'action ne se fait pas. J'ai fait un echo "$req"; et j'obtiens ce que je désire et pourtant...

Voici un exemple après avoir coché sur l'id 52 et l'id 65 :

http://www.pixenli.com/images/mini/1239020907095328300.jpg
Voir l'image en grand

La variable user_valide de l'id_user 52 et 65 devraient passer à 1 et donc au raffraichissement, ces 2 lignes ne devraient plus apparaître dans le tableau... Mais ce n'est pas le cas.

Voici mon code :


[code]<?php 

// Titre de la page affichée
$page_title = 'Administration ';

// Tableau contenant les fichiers css à inclure sur la page
//$css = array('accueil.css');

// Header de la page
include ROOT.'common/header.php';


?>
<?php





if(isset($_GET['p']) && is_numeric($_GET['p']))
	$p = $_GET['p'];
else
	$p = 1;

$pagination = 10;

$limit_start = ($p - 1) * $pagination;

$sql = "SELECT * FROM utilisateur WHERE user_valide=0 LIMIT $limit_start, $pagination";

$reponse = mysql_query($sql);



?>

<div id="page">

<h3 style="text-align:center">Acceptation des membres</h3>

<table class="table_acceptation_membre">

<thead>
	<tr style="width:940px; border:2px solid #b5bab3; text-align:center;">
		<th>Inscription</th>
		<th>Pseudo</th>
		<th>Nom</th>
		<th>Prénom</th>
		<th>E-Mail</th>
		<th>Reg. National</th>
		<th>Grade</th>
		<th>Choix</th>
	</tr>
</thead>

<?php

$n = mysql_num_rows($reponse);


for ($i=0; $i<$n; $i++)
{ 

$ligne = mysql_fetch_assoc($reponse);
$ligne['user_date_inscr']= substr($ligne['user_date_inscr'],0,10);

// Pour l'acceptation ou la supression des membres




?>

	<tr>
		<td><?php echo show($ligne['user_date_inscr'])?></td>
		<td><?php echo show($ligne['user_login'])?></td>
		<td><?php echo show($ligne['user_nom']) ?></td>
		<td><?php echo show($ligne['user_prenom']) ?></td>
		<td><?php echo show($ligne['user_email'])?></td>
		<td><?php echo show($ligne['user_rn']) ?></td>
		<td><?php echo show($ligne['user_grade']) ?></td>
			<form method="post" action="index.php?page=acceptation">
		<td><input type="checkbox" name="choix_membre[]" value="<?php echo show($ligne['user_id'])?>"/><?php echo show($ligne['user_id'])?>
			<input type="hidden" value="<?php echo show($ligne['user_id']); ?>" name="id"/></td>
	</tr>
	
<?php
}


?>
</table>

<?php

$nb_total = mysql_query('SELECT COUNT(*) AS nb_total FROM utilisateur WHERE user_valide=0');
$nb_total = mysql_fetch_array($nb_total);
$nb_total = $nb_total['nb_total'];

$nb_pages = ceil($nb_total / $pagination);

echo '<p style="text-align:center; font-size:xx-small;">[ Page :';
for($i = 1 ; $i <= $nb_pages; $i++) {
	if($i == $p)
		echo "$i";
	else
		echo "<a href=\"?page=acceptation&p=$i\">$i</a>";
}
echo ']</p>';
	
?>
	
	<p style="text-align:center;">Action :
	<select name="action_membre">
		<option selected label></option>
		<option value="accepter" >Accepter</option>		
		<option value="supprimer" >Supprimer</option>	
	</select>
	<input type="submit" name="membre_submit" value="OK"></input>
    </p>
	
<?php



if(isset($_POST['membre_submit']))
{
	
	if($_POST['action_membre'] == "accepter")
	{
		$req = 'UPDATE utilisateur SET user_valide=1 WHERE ';
		$choix_membre = $_POST['choix_membre'];
		for($i=0;$i<COUNT($choix_membre)-1;$i++)
			$req = $req . "user_id=$choix_membre[$i] AND ";
		$req = $req . "user_id=$choix_membre[$i]";
		
		echo "$req";

	}
}

?>
</form>
</div>



Merci Smiley smile
Modifié par BassT4ken (06 Apr 2009 - 15:43)
Tu fais ton SELECT avant le UPDATE dans ta page, alors forcément tu récupère les informations avant modifications, même si elles sont bien modifiées (mais en fin de script).
Passe ton UPDATE avant le SELECT et tout devrait fonctionner.
D'après l'echo qui se trouve sur la capture d'écran tu as en plus :

tu dois employer un OR dans ta requête et non un AND car il est impossible de satisfaire simultanément les 2 conditions ;
traduis en français ta requête donne pour mysql : "met à jour le champ xxx=1 pour l'utilisateur qui a pour id=72 et id=95"... impossible ;
alors que "met à jour le champ xxx=1 pour un utilisateur qui a comme id=72 ou id=58" est possible
Smiley biggrin
Modifié par PiR2 (06 Apr 2009 - 15:00)
C'est vrai que j'avais même pas regardé plus loin que l'ordre des requêtes ^^'

L'idéal quand on travaille sur SQL c'est d'essayer de faire ses requêtes à la main sur une base/table de test. Avec phpMyAdmin par exemple, ou même directement en ligne de commande. Comme ça on sait tout de suite si la requête fait ce qu'on veut.
Hmm, j'ai essayé en OR ou AND, en mettant le SELECT après le UPDATE mais j'ai toujours le même problème.

Il écrit toujours bien la requête, ou en tout cas, j'ai l'impression :

UPDATE utilisateur SET user_valide=1 WHERE user_id=62 OR user_id=65
UPDATE utilisateur SET user_valide=1 WHERE user_id=62 AND user_id=65
DROP utilisateur WHERE user_id=62 OR user_id=65
DROP utilisateur WHERE user_id=62 AND user_id=65

Voici les 4 indications possibles d'après mes 2 select, mais l'action ne se fait toujours pas.

Je me demande si c'est pas un problème dans la requête en elle-même.

En résumé, cette partie là :


$req = 'UPDATE utilisateur SET user_valide=1 WHERE ';

$choix_membre = $_POST['choix_membre'];

for($i=0;$i<COUNT($choix_membre)-1;$i++)
   $req = $req . "user_id=$choix_membre[$i] AND ";
$req = $req . "user_id=$choix_membre[$i]";
		
echo "$req";

Modifié par BassT4ken (06 Apr 2009 - 15:24)
J'ai trouvé !!!

J'ose même pas écrire le pourquoi ça ne marchait pas...

J'ai revérifié tout le code et il manque le mysql_query alors effectivement, il écrit la bonne requête mais l'action ne se fait pas ^^ C'était tout con, la fatigue vous dîtes ?

Smiley sweatdrop


Mais merci pour avoir consacré un peu de votre temps ^^