Sélection et renvoie à une autre page via checkbox

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 : Sélection et renvoie à une autre page via checkbox

par sadeq » 02 févr. 2006, 13:41

C'est très gentil, à ta santé :wink:

par Guiglette » 02 févr. 2006, 12:14

sadeq, JE T AIME !!! hehehe

Merci beaucoup c'est vraiment génial !! Depuis le temps que j'essayais de faire ça sans résultat...

Bon, j'aurai peut-être encore des problèmes mais là vous devriez quand même avoir la paix un moment ;)

En tout cas je sais pas comment vous remercier... Le jour où vous passerez en Suisse, n'hésitez pas à vous arrêter pour boire une bonne bière ;) hehe

@++

par sadeq » 02 févr. 2006, 10:58

T'as bien bossé le truc,
Alors maintenant y a pas de lézard! étant donnée que le tableau (checkbox) numero peut contenir plusieurs n° d'élèves et puisque t'as déjà prévu une requête SQL qui te récupère les infos élève : t'as qu'à parcourir le tableau numero par une boucle en incluant dans cette dernière la requête en ajoutant un WHERE sur le n° de l'élève.

Comme ça ta boucle récupère les infos et les affiche par élève sélectionné dans le tableau numero.

Un truc comme ça :
<?php 
//Connexion à la base de données
require_once('Connections/tests_bd.php'); 
mysql_select_db($database_tests_bd, $tests_bd); 

//Document HTML affiché
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Document sans titre</title> 
</head> 

<body> 
<form id="form1" name="form1" method="post" action=""> 
  <table width="100%" border="0" cellspacing="0" cellpadding="0"> 
    <tr> 
      <td><em><strong>N&deg;</strong></em></td> 
      <td><em><strong>Nom</strong></em></td> 
      <td><em><strong>Pr&eacute;nom</strong></em></td> 
      <td>&nbsp;</td> 
    </tr> 
<?php 
//Lignes détails des élèves sélectionnés
$numero = $_POST["numero"]; //Liste des élèves sélectionnés
if ($numero) 
 foreach ($numero as $numero_eleve) { 
        //Complèter les infos élève
       $query_Recordset1 = "SELECT numero, nom, prenom FROM eleves WHERE numero = '$numero_eleve' "; 

      $Recordset1 = mysql_query($query_Recordset1, $tests_bd) or die(mysql_error()); 
      
      $row_Recordset1 = mysql_fetch_assoc($Recordset1); 
?> 
      <tr> 
        <td><?php echo $row_Recordset1[numero]; ?></td> 
        <td><?php echo $row_Recordset1[nom]; ?></td> 
        <td><?php echo $row_Recordset1[prenom]; ?></td> 
      </tr> 
<?php 
 } //Fin de la boucle
?> 
    <tr> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
    </tr> 
  </table> 
</form> 
</body> 
</html> 
<?php 
mysql_free_result($Recordset1); 
?>

par guiglette » 27 janv. 2006, 16:29

Ok... j'ai essayé quelques trucs, et ça s'arrange petit à petit mais c'est encore pas fameux...

Je n'arrive en fait qu'à récupérer le numéro de chaque entrée, alors qu'il me faudrait aussi les nom et prénom...

Voici le code des deux pages... il est clair qu'il y a des erreurs.. mais je ne sais pas exactement où aller toucher pour que le résultat voulu s'affiche... Peut-être est-ce le value de la checkbox sur la première page qui ne me prend que le numéro et pas toute la ligne ?! aucune idée...

Première page -->
<?php require_once('Connections/tests_bd.php'); ?>
<?php
mysql_select_db($database_tests_bd, $tests_bd);
$query_Recordset1 = "SELECT eleves.numero, eleves.nom, eleves.prenom FROM eleves ORDER BY eleves.nom, eleves.prenom";
$Recordset1 = mysql_query($query_Recordset1, $tests_bd) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="modif.php">
  <table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td><em><strong>N&deg;</strong></em></td>
      <td><em><strong>Nom</strong></em></td>
      <td><em><strong>Pr&eacute;nom</strong></em></td>
      <td>&nbsp;</td>
    </tr>
<?php

while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)) {
?> 
      <tr>
        <td><?php echo $row_Recordset1['numero']; ?></td>
        <td><?php echo $row_Recordset1['nom']; ?></td>
        <td><?php echo $row_Recordset1['prenom']; ?></td>
        <td><input type="checkbox" name="numero[]" value="<?php echo $row_Recordset1['numero']; ?>"/></td>
      </tr>
<?php 
}
?>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td><input type="submit" name="Submit" value="Afficher" /></td>
    </tr>
  </table>
</form>
</body>
</html>
<?php
mysql_free_result($Recordset1);
?>
Page sur laquelle doivent s'afficher les personnes dont la case est cochée -->
<?php require_once('Connections/tests_bd.php'); ?>
<?php
mysql_select_db($database_tests_bd, $tests_bd);
$query_Recordset1 = "SELECT eleves.numero, eleves.nom, eleves.prenom FROM eleves ORDER BY eleves.nom, eleves.prenom";
$Recordset1 = mysql_query($query_Recordset1, $tests_bd) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
  <table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td><em><strong>N&deg;</strong></em></td>
      <td><em><strong>Nom</strong></em></td>
      <td><em><strong>Pr&eacute;nom</strong></em></td>
      <td>&nbsp;</td>
    </tr>
<?php

$numero = $_POST["numero"];

if ($numero)
	foreach ($numero as $result_numero) {
?>
      <tr>
        <td><?php echo $result_numero; ?></td>
        <td><?php echo $result_numero; ?></td>
        <td><?php echo $result_numero; ?></td>
      </tr>
<?php 
}
?>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
  </table>
</form>
</body>
</html>
<?php
mysql_free_result($Recordset1);
?>
Re-merci pour votre aide ! :love5:

par albat » 27 janv. 2006, 13:17

Ok je vais essayer tout ça dans la journée, je vous tiens au courant si j'arrive au résultat désiré ou pas ;)
Désolé pour la balise PHP tout à l'heure, je n'étais pas au courant mais j'y ferai attention la prochaine fois ;)
:pouce:

par guiglette » 27 janv. 2006, 11:41

Ok je vais essayer tout ça dans la journée, je vous tiens au courant si j'arrive au résultat désiré ou pas ;)

Désolé pour la balise PHP tout à l'heure, je n'étais pas au courant mais j'y ferai attention la prochaine fois ;)

A tout bientôt, merci ![/php]

par sadeq » 27 janv. 2006, 10:44

Tu peux faire ce que tu veux si tu respecte la méthode suivante:

1. il faut nommer le checkbox en tant que tableau et lui affecter des valeurs correctes (valeurs à transmettre en cas de choix)
Exemple :
Soit le formulaire HTML suivant:

Code : Tout sélectionner

<form id="form1" name="form1" method="post"> <input type="checkbox" name="t[]" value="valeur 1"> <input type="checkbox" name="t[]" value="valeur 2"> <input type="checkbox" name="t[]" value="valeur 3"> <input type="submit" name="envoyer" value="Envoyer"> </form>
2. quand ce formulaire est envoyé par le bouton submit, le code PHP peut recevoir donc les données envoyées dans le checkbox "t" en le traitant comme un tableau :
<?
   //Reception des valeurs du checkbox t
  $t = $_POST["t"];

  //Affichage des valeurs cochées de t (pour tester)
  if ($t) 
     foreach ($t as $valeur){
         echo "<p>$valeur";     
     }
?>
Remarque:
Un checkbox sous forme d'un tableau ne renvoi que les valeurs cochées.

Alors dans ton cas, voici une proposition de correction de ton code :
...
<form id="form1" name="form1" method="post" > 
  <table width="100%" border="0" cellspacing="0" cellpadding="0"> 
    <tr> 
      <td><em><strong>N&deg;</strong></em></td> 
      <td><em><strong>Nom</strong></em></td> 
      <td><em><strong>Pr&eacute;nom</strong></em></td> 
      <td>&nbsp;</td> 
    </tr> 
<?php  

//Vaut mieu utiliser un While et non un Do : 
//pour accèder à la première ligne du Recordset1
while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)) { 
?> 
      <tr> 
        <td><?php echo $row_Recordset1['numero']; ?></td> 
        <td><?php echo $row_Recordset1['nom']; ?></td> 
        <td><?php echo $row_Recordset1['prenom']; ?></td> 
        <td><input type="checkbox" name="numeros[]" value="<?php echo $row_Recordset1['numero']; ?>" 
<?php
//Pour cocher le checkbox s'il l'était déjà  au dernier affichage/postage
if ($_POST['numeros'] && in_array( $row_Recordset1['numero'] , $_POST['numeros'])) echo " CHECKED "; 
?>
/></td> 
      </tr> 
<?php 
}
?> 
    <tr> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td><input type="submit" name="Submit" value="Afficher" /></td> 
    </tr> 
  </table> 
</form>
...
<?php
//Récupèrer le postage
  $numeros = $_POST["numeros"];

//Affichage des numéros cochés  (pour tester)
if ($numeros) 
    foreach ($numeros as $valeur){
         echo "<p>$valeur";     
     }
?>
Remarque :
Le code supplémentaire :
<?php
//Pour cocher le checkbox s'il l'était déjà  au dernier affichage/postage
if ($_POST['numeros'] && in_array( $row_Recordset1['numero'] , $_POST['numeros'])) echo " CHECKED "; 
?>
Permet simplement de cocher un checkbox si ce dernier a été sélectionné lors du dernier submit effectué. C'est un rappel de valeur.
La fonction in_array(valeur, tableau) retourne vrai si la valeur se trouve dans le tableau

par albat » 27 janv. 2006, 10:20

Modération :
Merci d'utiliser la balise
 pour mettre en forme ton code.
Je le fais pour toi (mais pour cette fois seulement, hein !) :twisted: [/color]

par guiglette » 27 janv. 2006, 10:12

Re, merci pour la réponse rapide !

Voici le code de la page -->
<?php require_once('Connections/tests_bd.php'); ?>
<?php
mysql_select_db($database_tests_bd, $tests_bd);
$query_Recordset1 = "SELECT eleves.numero, eleves.nom, eleves.prenom FROM eleves ORDER BY eleves.nom, eleves.prenom";
$Recordset1 = mysql_query($query_Recordset1, $tests_bd) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
  <table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td><em><strong>N&deg;</strong></em></td>
      <td><em><strong>Nom</strong></em></td>
      <td><em><strong>Pr&eacute;nom</strong></em></td>
      <td>&nbsp;</td>
    </tr>
    <?php do { ?>
      <tr>
        <td><?php echo $row_Recordset1['numero']; ?></td>
        <td><?php echo $row_Recordset1['nom']; ?></td>
        <td><?php echo $row_Recordset1['prenom']; ?></td>
        <td><input type="checkbox" name="checkbox" value="checkbox" /></td>
      </tr>
      <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td><input type="submit" name="Submit" value="Afficher" /></td>
    </tr>
  </table>
</form>
</body>
</html>
<?php
mysql_free_result($Recordset1);
?>
Il faut bien sûr ajouter une incrémentation à la checkbox pour qu'ensuite, quand on presse sur le bouton afficher, une page identique s'affiche avec seulement les personnes dont la case était cochée préalablement..

Le code a été fait avec Dreamweaver, il ne doit donc normalement pas y avoir d'erreurs... par contre, je n'ai encore fais ni l'incrémentation ni l'action du bouton Afficher, car je ne voulais pas mettre le bordel dans le code, je suis plutôt doué pour ça ;)

En tout cas si vous pouvez m'aider ou me donner l'adresse d'un site qui explique mon problème, ce serait vraiment sympa !

Merci beaucoup !

par albat » 26 janv. 2006, 18:05

Pas de problème pour t'aider à débugger ton code.
Dès lors que tu nous le montres...

Sélection et renvoie à une autre page via checkbox

par guiglette » 26 janv. 2006, 17:53

Bonjour,

J'ai une base de données MySQL avec une liste d'adresses (n°, nom, prénom, rue, etc..)..

Avec Dreamweaver 8, pas de problème pour afficher cette liste avec une zone répétée..

Le problème est le suivant : à côté de chaque entrée, j'ai une checkbox et je voudrais pouvoir faire appaître sur une autre page toutes les personnes qui ont été cochées dans la première pour ensuite pouvoir modifier, supprimer, etc...

Serait-il possible de me donner un coup de main ou une bonne adresse ? Ca fait très longtemps que je suis sur le problème et j'vais bientôt faire une dépression si ça continue comme ça :?