Page 1 sur 2

Problème sur des cases à cocher

Posté : 13 juil. 2006, 09:58
par lafieau
Bonjour à tous !
Comme le dit si bien le titre j'ai des soucis avec les cases à cocher.
J'ai 3 cases à cocher pour 3 départements distincts.
Mon problème c'est même quand je ne coche qu'une seule case il m'affiche un tableau de tous les départements.
Voici le code :
mysql_select_db($database_connexion, $connexion);
$query_Recordset1 = " SELECT decouvertes, descriptif, villedec, departementdec ";
$query_Recordset1.= " FROM tb_decouvertes ";
if(isSet($_POST['departement'])) {
  $listeDepartementCoches = "";
	foreach($_POST['departement'] as $departement){
	if($listeDepartementCoches != "")
	$listeDepartementCoches.= ",";
	$listeDepartementCoches.= "'" .$departement ."'";
	}
  $query_Recordset1.= " WHERE departementdec IN (".$listeDepartementCoches.")"; 
} 
$query_Recordset1.= " LIMIT ".$startRow_Recordset1.", ". $maxRows_Recordset1;
echo $query_Recordset1;
$Recordset1 = mysql_query($query_limit_Recordset1, $connexion) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
Merci d'avance !

Posté : 14 juil. 2006, 19:25
par moogli
salut,

peut tu nous montrer le formulaire ?

regarde le contenude de $_POST['departement'] ( var_dump ou print_r ).

affiche ta requete avant le query pour voir si elle est conforme a ce que tu attend ( montre nous ce résultat).


@+

Posté : 17 juil. 2006, 08:44
par lafieau
Bonjour !
Voici le formulaire :
<form action="casesacocherresultat1.php" method="post" name="formdepart" id="formdepart"> 
  <p> 
    Calvados <input name="departement[]" type="checkbox" id="calvadosdep" value="calvados"> 
    <br>Manche <input name="departement[]" type="checkbox" id="manchedep" value="manche"> 
    <br>Orne <input name="departement[]" type="checkbox" id="ornedep" value="orne"> 
  </p> 
  <p> 
    <input type="submit" name="Submit3" value="Envoyer"> 
  </p> 
</form>

Posté : 19 juil. 2006, 12:40
par lafieau
Salut à tous !
Même pas une p'tite idée sur le problème ? :(
Manque des éléments peut-être ?

Posté : 19 juil. 2006, 13:22
par Truc
Salut,

Tu peux simplifier le code aevc implode() à la place de ceci:
$listeDepartementCoches = "";
    foreach($_POST['departement'] as $departement){
    if($listeDepartementCoches != "")
    $listeDepartementCoches.= ",";
    $listeDepartementCoches.= "'" .$departement ."'";
    }
  $query_Recordset1.= " WHERE departementdec IN (".$listeDepartementCoches.")";
=>
$listeDepartementCoches=implode("','",$_POST['departement']);
$query_Recordset1.= " WHERE departementdec IN ('".$listeDepartementCoches."')";
Affiche la requête générée pour verifier qu'elle correspond aux attentes.

ensuite affiche le contenu de $_POST['departement'] avec:
echo "<pre>";
print_r($_POST['departement']);
echo "</pre>";
qui ne devrait contenir que ls cases cochées

Posté : 19 juil. 2006, 15:56
par lafieau
Salut Truc !
Bon j'ai essayé de faire les modifications comme tu m'as fait voir (j'suis pas très sûr d'avoir tout fait comme il faut ! :oops: )
Mais bon ça m'affiche ceci :
SELECT decouvertes, descriptif, villedec, departementdec FROM tb_decouvertes WHERE departementdec IN ('calvados') LIMIT 0, 10
Array
(
[0] => calvados
)
donc ça correspond bien à la case cochée, mais le problème persiste au niveau de mon tableau où il m'affiche l'ensemble des données pour tous les départements.

Posté : 19 juil. 2006, 16:31
par 2501gigi
Et si apres departement[] tu enleve les [] ca donne quoi?

Posté : 19 juil. 2006, 16:41
par Invité
A 2501gigi :
donc j'ai supprimé les [] et ça m'affiche ceci :
Warning: implode(): Bad arguments. in c:\program files\easyphp1-8\www\site\casesacocherresultat1.php on line 62
SELECT decouvertes, descriptif, villedec, departementdec FROM tb_decouvertes WHERE departementdec IN ('') LIMIT 0, 10
calvados

Posté : 19 juil. 2006, 16:48
par Ryle
La requête est correcte, ce qui est bizare c'est que les résultats récupérés ne tiennent pas compte du WHERE...

un doute massai (ouais, je sais, elle est nulle, mais y fait chaud ! ;p) c'est bien $row_Recordset1 que tu utilises ensuite pour afficher tes résultats ?

Tu devrais pas avoir un
while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)) {
 ... // affichage du tableau de résultats
}
:?: :)

Posté : 20 juil. 2006, 09:46
par Invité
Salut Ryle !
J'ai bien un $row_Recordset1 pour afficher mes résultats, mais si je remplace par ta proposition j'ai toujours le même message d'erreur, mais du coup dans le tableau y a plus rien ! :?
Pas facile tout ça !

Posté : 20 juil. 2006, 10:31
par Truc
Quelle est donc la requête exécutée par mysql_query ?

Posté : 20 juil. 2006, 10:54
par lafieau
Salut Truc !
Comme je travaille avec dream et que celui-ci génère beaucoup de code et que je suis bien loin de tout comprendre, j'ai tout de même l'impression qu'il y a des choses inutiles dans mon code, voici le code :
<?php require_once('Connections/connexion.php'); ?>
<?php
$currentPage = $HTTP_SERVER_VARS["PHP_SELF"];

$maxRows_Recordset1 = 10;
$pageNum_Recordset1 = 0;
if (isset($HTTP_GET_VARS['pageNum_Recordset1'])) {
  $pageNum_Recordset1 = $HTTP_GET_VARS['pageNum_Recordset1'];
}
$startRow_Recordset1 = $pageNum_Recordset1 * $maxRows_Recordset1;

mysql_select_db($database_connexion, $connexion);
$query_Recordset1 = "SELECT * FROM tb_decouvertes ORDER BY decouvertes ASC";
$query_limit_Recordset1 = sprintf("%s LIMIT %d, %d", $query_Recordset1, $startRow_Recordset1, $maxRows_Recordset1);
$Recordset1 = mysql_query($query_limit_Recordset1, $connexion) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);

if (isset($HTTP_GET_VARS['totalRows_Recordset1'])) {
  $totalRows_Recordset1 = $HTTP_GET_VARS['totalRows_Recordset1'];
} else {
  $all_Recordset1 = mysql_query($query_Recordset1);
  $totalRows_Recordset1 = mysql_num_rows($all_Recordset1);
}
$totalPages_Recordset1 = ceil($totalRows_Recordset1/$maxRows_Recordset1)-1;

$queryString_Recordset1 = "";
if (!empty($HTTP_SERVER_VARS['QUERY_STRING'])) {
  $params = explode("&", $HTTP_SERVER_VARS['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_Recordset1") == false && 
        stristr($param, "totalRows_Recordset1") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_Recordset1 = "&" . implode("&", $newParams);
  }
}
$queryString_Recordset1 = sprintf("&totalRows_Recordset1=%d%s", $totalRows_Recordset1, $queryString_Recordset1);

$maxRows_Recordset1 = 10;
$pageNum_Recordset1 = 0;
if (isset($HTTP_GET_VARS['pageNum_Recordset1'])) {
  $pageNum_Recordset1 = $HTTP_GET_VARS['pageNum_Recordset1'];
}
$startRow_Recordset1 = $pageNum_Recordset1 * $maxRows_Recordset1;

mysql_select_db($database_connexion, $connexion);
$query_Recordset1 = " SELECT decouvertes, descriptif, villedec, departementdec ";
$query_Recordset1.= " FROM tb_decouvertes ";
if(isSet($_POST['departement'])) { 
} 
	
(".$listeDepartementCoches.")"; 
  $listeDepartementCoches=implode("','",$_POST['departement']); 
$query_Recordset1.= " WHERE departementdec IN ('".$listeDepartementCoches."')";

$query_Recordset1.= " LIMIT ".$startRow_Recordset1.", ". $maxRows_Recordset1;
echo $query_Recordset1;
echo "<pre>"; 
print_r($_POST['departement']); 
echo "</pre>";
$Recordset1 = mysql_query($query_limit_Recordset1, $connexion) or die(mysql_error());
//$row_Recordset1 = mysql_fetch_assoc($Recordset1);
while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)) { 

if (isset($HTTP_GET_VARS['totalRows_Recordset1'])) {
  $totalRows_Recordset1 = $HTTP_GET_VARS['totalRows_Recordset1'];
} else {
  $all_Recordset1 = mysql_query($query_Recordset1);
  $totalRows_Recordset1 = mysql_num_rows($all_Recordset1);
}
$totalPages_Recordset1 = ceil($totalRows_Recordset1/$maxRows_Recordset1)-1;
}
?>

Posté : 20 juil. 2006, 11:07
par Ryle
Il doit manquer un p'tit bout de code vu que toute la fin est considérée comme du texte, mais sinon le soucis vient de là :
$Recordset1 = mysql_query($query_limit_Recordset1, $connexion) or die(mysql_error()); 
Tu exécutes ta requête précédente ($query_limit_Recordset1) au lieu d'exécuter la nouvelle $query_Recordset1 :)

Posté : 20 juil. 2006, 11:34
par lafieau
Salut Ryle ! :lol:
Oui il doit certainement manquer un bout de code, désolée j'ai voulu enlever des choses et malencontreusement j'en ai trop viré.
Sinon comment je pourrais faire par rapport à ce que tu viens de me dire ?

Posté : 20 juil. 2006, 11:38
par Ryle
Tu as juste à changer à ce niveau là :
echo "<pre>"; 
print_r($_POST['departement']); 
echo "</pre>"; 
$Recordset1 = mysql_query($query_limit_Recordset1, $connexion) or die(mysql_error()); 
le $query_limit_Recordset1 par $query_Recordset1 qui contient la requête qu'on vient de construire :)