Problème sur des cases à cocher

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème sur des cases à cocher

par Ryle » 20 juil. 2006, 13:00

je pense que le implode doit générer cette erreur quand aucune case n'est cochée, tu dois pouvoir l'éviter en testant que $_POST['departement'] est bien défini.

Comme il manque un bout de code on voit pas bien, mais la création de ta requête devrait ressembler à ceci maintenant :
$query_Recordset1 = " SELECT decouvertes, descriptif, villedec, departementdec "; 
$query_Recordset1.= " FROM tb_decouvertes "; 
if(isSet($_POST['departement'])) { 
  $listeDepartementCoches=implode("','",$_POST['departement']); 
  $query_Recordset1.= " WHERE departementdec IN ('".$listeDepartementCoches."')"; 
} 
$query_Recordset1.= " LIMIT ".$startRow_Recordset1.", ". $maxRows_Recordset1; 
(pis si c'est pas le cas, ben tu sais ce qu'il te reste à faire ;))

par Invité » 20 juil. 2006, 12:41

J'ai bien fait la modif mais j'ai toujours ce message d'erreur :
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
et il m'affiche toujours rien dans le tableau ! :cry:

par Ryle » 20 juil. 2006, 11:38

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 :)

par lafieau » 20 juil. 2006, 11:34

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 ?

par Ryle » 20 juil. 2006, 11:07

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 :)

par lafieau » 20 juil. 2006, 10:54

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;
}
?>

par Truc » 20 juil. 2006, 10:31

Quelle est donc la requête exécutée par mysql_query ?

par Invité » 20 juil. 2006, 09:46

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 !

par Ryle » 19 juil. 2006, 16:48

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
}
:?: :)

par Invité » 19 juil. 2006, 16:41

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

par 2501gigi » 19 juil. 2006, 16:31

Et si apres departement[] tu enleve les [] ca donne quoi?

par lafieau » 19 juil. 2006, 15:56

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.

par Truc » 19 juil. 2006, 13:22

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

par lafieau » 19 juil. 2006, 12:40

Salut à tous !
Même pas une p'tite idée sur le problème ? :(
Manque des éléments peut-être ?

par lafieau » 17 juil. 2006, 08:44

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>