PHP pb cases à cocher + menu déroulant

Résolu
Fou riant Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -  
Fou riant Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je débute en php, et là j'y comprends plus rien...

J'ai un problème avec des cases à cocher.

J'ai une liste de personnes dans un tableau, et lorsque que je veux supprimer une personne ou alors modifier des informations sur celle-ci, on doit cocher la case correspondante qui est devant.
Ces actions étaient activés grâce à de vulgaires boutons (de base quoi), mais depuis que j'ai essayé de mettre mes actions dans un menu déroulant (de base aussi), les actions qui font appelle au case à cocher ne fonctionnent plus. Il me dit qu'aucune case n'est cochée... :(

Je vous envoie la partie de code où je regarde si une case est cochée :

J'ai essayé d'y parvenir de 2 manières différentes (qui se ressemblent) mais rien n'y fait...


// Script de Suppression
if ($_POST['action'] == 'Suppression')
{
// Déclaration d'un flag pour savoir s'il y a au moins une ligne de cochée
$Flag_Suppr = 0;
// Pour chaque ligne du tableau
for ($n=0; $n<=$nb_aff; $n++)
{
// La commande "eval" permet ici de palier au fait de ne pas connaitre le nom des variables
eval('$tmp_chk = $_POST[\'client_'.$n.'\'];');
eval('$tmp_hid = $_POST[\'hidden_'.$n.'\'];');
// Si la checkbox est cochée
if(isset($tmp_chk))
{
if ($Flag_Suppr == 0)
{
$Flag_Suppr = 1;
}
$_SESSION['a :'.$n] = $tmp_hid;
}
}
if ($Flag_Suppr == 1)
{
header("Location: Suppression_Prospect.php");
}
else
{
header("Location: Suppression_Erreur.php");
}
}

// Script commun à la Modification et au Compte-Rendu de Visite
if ($_POST['action'] == 'Modification' or $_POST['action'] == 'Visite')
{
// Balayage de chaque ligne du tableau pour savoir s'il n'y a qu'une case de cochée
$nb_case_cochee = 0;
for ($n=0; $n<=$nb_aff; $n++)
{
// Si la checkbox est cochée
if(isset($_POST["client_'.$i.'" ]))
{
$nb_case_cochee++;
eval('$code_prospect = \'hidden_'.$n.'\';');
}
}
if ($nb_case_cochee != 1)
{
header("Location: Modification_Erreur.php?plop=$nb_case_cochee");
}
else
{
$_SESSION['code_prospect'] = $code_prospect;
if ($_POST['action'] == 'Modification')
{
header("Location: Modification_Prospect.php");
}
if ($_POST['action'] == 'Visite')
{
header("Location: Liste_CR_Visite.php");
}
}
}


En attendant une réponse de votre part...Merci d'avance ;)


9 réponses

drizzt_do_urden Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   4
 
Salut,
plutot que
eval('$tmp_chk = $_POST[\'client_'.$n.'\'];');
Il vaudrait pas mieux ca ?
$tmp_chk = $_POST['client_'.$n];
eval($tmp_chk);

Ca donne pas le meme resultat en index mais ca paraitrait beaucoup plus logique.
Tu pourrais montrer ta partie html (ton formulaire) qu on voit un peu le nom des champs.
++
1
Fou riant Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   2
 
Hi,

La partie d'affichage de personnes est la suivante :

//Affichage des données
$i=1;
while($tab = mysqli_fetch_assoc($resultat))
{
$IdClient = $tab['code_prospect'];
if (($i%2)==0)
{
echo '<tr bgcolor=#D1D1D1>';
}
else
{
echo '<tr bgcolor=#ECECEC>';
}
// Un champs hidden permet de conserver l'ID du Prospect lors du POST
echo '<td><input type=checkbox name=client_'.$i.'><input type="hidden" name="hidden_'.$i.'" value="'.$tab['code_prospect'].'"></td>';
echo '<td><font face=arial size=1>'.$tab['nom_civ']. '</td></font>';
echo '<td><font face=arial size=1>'.$tab['nom']. '</td></font>';
echo '<td><font face=arial size=1>'.$tab['prenom']. '</td></font>';
echo '<td><font face=arial size=1>'.$tab['adresse1']. '</td></font>';
echo '<td><font face=arial size=1>'.$tab['adresse2']. '</td></font>';
echo '<td><font face=arial size=1>'.$tab['telephone']. '</td></font>';
echo '<td><font face=arial size=1>'.$tab['portable']. '</td></font>';
echo '<td><font face=arial size=1>'.$tab['fax']. '</td></font>';
echo '<td><font face=arial size=1>'.$tab['email']. '</td></font>';
echo '<td><font face=arial size=1>'.$tab['code_postal']. '</td></font>';
echo '<td><font face=arial size=1>'.$tab['ville']. '</td></font>';
echo '<td><font face=arial size=1>'.$tab['nom_site']. '</td></font>';
echo '<td><font face=arial size=1>'.$tab['nom_succ']. '</td></font>';
echo '<td><font face=arial size=1>'.$tab['nom_struct']. '</td></font>';
echo '<td><font face=arial size=1>'.$tab['nom_serv']. '</td></font>';
echo '<td><font face=arial size=1>'.$tab['nom_fonct']. '</td></font>';
$Date_Visite = preg_replace("!(\d{4})-(\d{2})-(\d{2})!","\\3/\\2/\\1",$tab['date_visite']);
echo '<td><font face=arial size=1>'.$Date_Visite. '</td></font>';
echo '</tr>';
$i++;
}
echo '</table>';
echo '</form>';

Pour ce qui est du menu déroulant :

//menu deroulant des actions
echo '<td colspan=1 rowspan=1>';
echo "<form method=get action=liste_prospects.php>";
echo " <select name=action>";
echo "<option value='Creation' selected='selected'>Creation</option>
<option value='Mailing'>Mailing</option>
<option value='Modification'>Modification</option> //--- fonction demandant une case
<option value='Rechercher'>Recherche avancée</option>
<option value='Suppression'>Suppression</option> //--- fonction demandant une case
<option value='Visite'>Visite</option> //--- fonction demandant une case
</select>";
echo "<input type=submit name=make value='Faire'> ";

Voilà.
1
drizzt_do_urden Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   4
 
Salut,
plutot que
eval('$tmp_chk = $_POST[\'client_'.$n.'\'];');
Il vaudrait pas mieux ca ?
$tmp_chk = $_POST['client_'.$n];
eval($tmp_chk);

Ca donne pas le meme resultat en index mais ca paraitrait beaucoup plus logique.
Tu pourrais montrer ta partie html (ton formulaire) qu on voit un peu le nom des champs.
++
0
Fou riant Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   2
 
J'ai essayé de remplacer

eval('$tmp_chk = $_POST[\'client_'.$n.'\'];');
eval('$tmp_hid = $_POST[\'hidden_'.$n.'\'];');

par

$tmp_chk = $_POST['client_'.$n];
eval($tmp_chk);
$tmp_hid = $_POST['hidden_'.$n];
eval($tmp_hid);

mais ça change rien..
(merci de m'aider^^)
0
drizzt_do_urden Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   4
 
Logique en fait on diriat :

$tmp_chk = $_POST['client_'.$n];
$tmpChk = eval($tmp_chk);

if(isset($tmpChk))

Si ca marche pas, fait un

$tmp_chk = $_POST['client_'.$n];
$tmpChk = eval($tmp_chk);
echo '|'.$tmpChk.'|';
if(isset($tmpChk))

et donne ce qui s affiche ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Fou riant Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   2
 
Le code ressemble donc à ça maintenant :

if ($_POST['action'] == 'Suppression')
{
// Déclaration d'un flag pour savoir s'il y a au moins une ligne de cochée
$Flag_Suppr = 0;
// Pour chaque ligne du tableau
for ($n=0; $n<=$nb_aff; $n++)
{
// La commande "eval" permet ici de palier au fait de ne pas connaitre le nom des variables
$tmp_chk = $_POST['client_'.$n];
$tmpChk = eval($tmp_chk);
$tmp_hid = $_POST['hidden_'.$n];
eval($tmp_hid);
// Si la checkbox est cochée
if(isset($tmpChk))
{
if ($Flag_Suppr == 0)
{
$Flag_Suppr = 1;
}
$_SESSION['a :'.$n] = $tmp_hid;
}
}
if ($Flag_Suppr == 1)
{
header("Location: Suppression_Prospect.php?");<---------------------------------**
}
else
{
header("Location: Suppression_Erreur.php");
}
}

Malheureusement, maintenant il me dit que c'est tout le temps coché puisqu'il va toujours à l'instruction **...
0
drizzt_do_urden Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   4
 
if(isset(lavariale) && lavariable != '')

La variable est toujours défini, il faut regarder si elle est vide ou pas ;)
0
Fou riant Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci, je viens de changer la condition, mais toujours rien à y faire, maintenant, il me dit toujours le contraire...soit aucune case cochée...
0
Fou riant Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   2
 
J'ai essayé de mattre l'autre partie de code que tu m'as proposé, ça donne ça :
// Pour chaque ligne du tableau
for ($n=0; $n<=$nb_aff; $n++)
{
// La commande "eval" permet ici de palier au fait de ne pas connaitre le nom des variables
$tmp_chk = $_POST['client_'.$n];
$tmpChk = eval($tmp_chk);
echo '|'.$tmpChk.'|';
// Si la checkbox est cochée
if(isset($tmpChk) && $tmpChk != '')
{
$tmp_hid = $_POST['hidden_'.$n];
$tmpHid = eval($tmp_hid);
if ($Flag_Suppr == 0)
{
$Flag_Suppr = 1;
}
$_SESSION['a :'.$n] = $tmpHid;
}
}

Mais maintenant il me réponds :

||||||||||||||||||||||
Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\Gestion_Prospect\Liste_Prospects.php:158) in C:\wamp\www\Gestion_Prospect\Liste_Prospects.php on line 177
0
Fou riant Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   2
 
Je crois que j'ai compris pourquoi je n'arrivais pas à avoir les cases cochées après avoir submit le choix de mon menu déroulant :
lorsque que je validais mon menu, une variable de choix se mettais à jour et donc je pense que le page se reloadais, qui a pour conséquence de désactiver les cases sélectionnées...Voilà pourquoi ça ne voulais pas marcher...

Je pense que je vais abandonner cette solution et trouver une autre manière de relooker la page afin de la rendre plus accessible (et aussi moins moche... faut dire ce qui est, les boutons 'submit' sont moches)
Merci de ton aide.
@+
0