Supprimer une une ligne du tableu en le selectionnant par un

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 : Supprimer une une ligne du tableu en le selectionnant par un

Re: Supprimer une une ligne du tableu en le selectionnant par un

par moogli » 22 oct. 2010, 20:21

vu que le traitement du formulaire se fait après l'affichage de celui (sur la page de destination) forcément tu affiche les données avant de les supprimer c'est pour cela que tu ne le vois pas à la première validation.

Un code fonctionnel et testé j'ai remplacé ta fonction de connection au sgdb par les fonctions de base et la table se nomme hiker au lieu de USERS mais le reste est identique.
<!DOCTYPE html>
<html lang="fr">
      <head>
        <meta charset="utf-8">
        <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
        <title>Test Hiker</title>
        <link rel="stylesheet" media="all" href="css/main.css" />
    </head>
    <body>
    <header>
        <h1>TEst code Hiker</h1>
    </header>
        <code title="sql">
create table hiker(
id int not null auto_increment,
login text not null,
nom text not null,
prenoms text not null,
root text not null,
primary key(id)
)type=myisam;
insert into hiker (login,nom,prenoms,root) values ('hiker','nom hiker','prenom hikers','oui'),('moogli','moog','li','oui'),('test','nom test','prenom test','non');
</code>
<?php
mysql_connect('localhost','root','yyRu2TKEvyYpzFLK');
mysql_select_db('test');
/* Validation du formulaire */
if ( !empty($_POST['submit']) && $_POST['submit']=='Supprimer') {
    //on à demander une suppression
    if ( !empty($_POST['check']) && is_array($_POST['check'])) {
        array_walk($_POST['check'],create_function('$value','return mysql_real_escape_string($value);'));
        $requete = 'DELETE FROM hiker where login in (\''.implode('\',\'',$_POST['check']).'\');';
        $r = mysql_query($requete);
        if ($r === false){
            echo '<p>Erreur Mysql : '.$requete.'<br />'.  mysql_error().'</p>';
        }
        else {
            echo '<p>Suppression de '.mysql_affected_rows().' tuple(s)</p>';
        }
    }
    else {
        //$_POST['check'] est vide, existe pas ou n'est pas un tableau !
    }
}
elseif (!empty($_POST['submit']) && $_POST['submit']=='Modifier') {
    // cas du bouton modifier
}
else {
    //il y a un soucis avec le formulaire ce cas ne peut pas arriver si ont ne touche à la source html !
}
//$q('SELECT login, nom, prenoms, root FROM USERS');
$query = 'SELECT login, nom, prenoms, root FROM hiker';
$q = mysql_query($query);
if (mysql_num_rows($q) > 0) {
    $nb=mysql_num_rows($q);
}
else {
    $nb = 0;
}

echo <<<EOT
<hr align="left" width="64%" color="red" size="1">
<form action="" method="post">
<input type="submit" name="submit" value="Modifier"/>&nbsp;
<input type="submit" name="submit" value="Supprimer"/><br />
$nb utilisateur(s) enregistr&eacute;(s)
<table bgcolor="#FFFFFF" width="650px">
<tr height="25" id="legend">
<td align="center"><b>&nbsp;</b></td>
<td align="center"><b>Login</b></td>
<td align="center"><b>Nom</b></td>
<td align="center"><b>Prénom(s)</b></td>
<td align="center"><b>Root</b></td></tr>
EOT;
while(( $data = mysql_fetch_array($q))!= NULL){
    echo '<tr>';
    echo '<td  height="3" align="center"><input type="checkbox" name="check[]" id="administrateur"
        value="'.$data['login'].'" onchange="colorier(this);"/></td>';
    echo '<td bgcolor="#f3fbff" height="25" align="center">&nbsp;'.$data['login'].'</td>';
    echo '<td bgcolor="#f3fbff"  height="25" align="center">&nbsp;'.$data['nom'].'</td>';
    echo '<td bgcolor="#f3fbff" align="center"  height="25">'.$data['prenoms'].'</td>';
    echo '<td bgcolor="#f3fbff" align="center"  height="25">'.$data['root'].'</td>';
    echo '</tr>'."\n";
}
echo '</table>';
?>
    </body>
</html>
@+

Re: Supprimer une une ligne du tableu en le selectionnant par un

par hiker » 22 oct. 2010, 19:28

Merci moogli ta formule permet de supprimer mais le bléme est que au premier coup il supprime pas mais au deuxiéme si.Jignore la cause t'as une idée?

Re: Supprimer une une ligne du tableu en le selectionnant par un

par moogli » 22 oct. 2010, 17:22

bon aller puisqu'il faut tout décortiquer
- les boutons submit ne sont pas dans le formulaire (en dehors de <form></form>) (et n'ont d’ailleurs pas d'attribut name donc introuvable dans $_POST)
- la déclaration du formulaire manque d'une action et d'une méthode. (<form action="fichier qui traite le résultat" method="get ou post"> ...</form>)
- TOUTES les cases à cocher ont pour valeur "vrai" quel intérêt ?
- tu n'a pas compris ce que je propose la boucle for for qui essai de supprimer autant de fois que possible les tuples en une seule fois ...
- le dernier code semble correct hormis la boucle for
- Je comprend pas tu utilise : $database->requete = 'delete from USERS where login in ('.implode(',',$_POST['check']); , $database->requete("SELECT login, nom, prenoms, root FROM USERS "); et while(( $data = mysql_fetch_array($database->requete))!= NULL);
C'est quoi au final $database-> requete ?

je ferais code ainsi
<?php
$database->requete('SELECT login, nom, prenoms, root FROM USERS');
if (mysql_num_rows($database->requete) > 0) {
    $nb=mysql_num_rows($database->requete);
}
else {
    $nb = 0;
}
echo <<<EOT
<p>&nbsp;</p>';
<hr align="left" width="64%" color="red" size="1">
<form action="" method="post">
<input type="submit" name="submit" value="Modifier"/>&nbsp;
<input type="submit" name="submit" value="Supprimer"/><br />
$nb utilisateur(s) enregistré(s)
<table bgcolor="#FFFFFF" width="650px">
<tr height="25" id="legend">
<td align="center"><b>&nbsp;</b></td>
<td align="center"><b>Login</b></td>
<td align="center"><b>Nom</b></td>
<td align="center"><b>Prénom(s)</b></td>
<td align="center"><b>Root</b></td></tr>
EOT;
while(( $data = mysql_fetch_array($database->requete))!= NULL){
    echo '<tr>';
    echo '<td  height="3" align="center"><input type="checkbox" name="check[]" id="administrateur"
        value="'.$data['login'].'" onchange="colorier(this);"/></td>';
    echo '<td bgcolor="#f3fbff" height="25" align="center">&nbsp;'.$data['login'].'</td>';
    echo '<td bgcolor="#f3fbff"  height="25" align="center">&nbsp;'.$data['nom'].'</td>';
    echo '<td bgcolor="#f3fbff" align="center"  height="25">'.$data['prenoms'].'</td>';
    echo '<td bgcolor="#f3fbff" align="center"  height="25">'.$data['root'].'</td>';
    echo '</tr>'."\n";
}
echo '</table>';
// traitement du formulaire
if ( !empty($_POST['submit']) && $_POST['submit']=='supprimer') {
    //on à demander une suppression
    if ( !empty($_POST['check']) && is_array($_POST['check'])) {
        array_walk($_POST['check'],create_function('$value','return mysql_real_escape_string($value);'));
        $requete = 'DELETE FROM USERS where login in (\''.implode('\',\'',$_POST['check']).'\');';
        $database->requete($requete);
    }
    else {
        //$_POST['check'] est vide, existe pas ou n'est pas un tableau !
    }
}
elseif (!empty($_POST['submit']) && $_POST['submit']=='supprimer') {
    // cas du bouton modifier
}
else {
    //il y a un soucis avec le formulaire ce cas ne peut pas arriver si ont ne touche à la source html !
}
?>
je te laisse le soin de trouver les messages d'erreur et de tester (je n'ai pas ta base ni ta classe database pour cela).

@+

Re: Supprimer une une ligne du tableu en le selectionnant par un

par hiker » 22 oct. 2010, 14:24

Voici ce que j'ai pu faire mais helas

ici je recupére les element du de ma table

Code : Tout sélectionner

do { $vrai=$data['login']; echo '<tr>'; echo '<td height="3" align="center"><input type="checkbox" name="check[]" value="$vrai" onchange="colorier(this);"/></td>'; echo '<td bgcolor="#f3fbff" height="25" align="center">&nbsp;'.$data['login'].'</td>'; echo '<td bgcolor="#f3fbff" height="25" align="center">&nbsp;'.$data['nom'].'</td>'; echo '<td bgcolor="#f3fbff" align="center" height="25">'.$data['prenoms'].'</td>'; echo '<td bgcolor="#f3fbff" align="center" height="25">'.$data['root'].'</td>'; echo '</tr>'."\n"; }while(( $data = mysql_fetch_array($database->requete))!= NULL);


ici la suppression

Code : Tout sélectionner

<?php if(isset($_POST["Supprimer"])) { if (isset($_POST['check'])) { $check=$_POST['check']; $_SESSION['check']=$check; $c = count($_POST['check']); echo "$c"; echo "check[$c]"; $_SESSION["var1"]=$c; for ($i = 0;$i < $c; $i++) { echo "check[$i]"; $database->requete = 'delete from USERS where login in ('.implode(',',$_POST['check']); $database->requete = substr($database->requete,0,-1) .');'; //$database->requete("delete from USERS where login=check['$i']"); } $i=0; $_SESSION["var"]=$i; } } ?>
la deuxiéme requete de suppression n'a pas donnée donc j'ai essayé celle e moogli mais ça marche toujours pas

Re: Supprimer une une ligne du tableu en le selectionnant par un

par xTG » 22 oct. 2010, 12:19

Tu rajoutes les checkbox en même temps que l'affichage de tes valeurs tout simplement. :)

Re: Supprimer une une ligne du tableu en le selectionnant par un

par hiker » 22 oct. 2010, 11:59

Salut la solution de moogli est un peu bizard car la blém est que le nombre d'element à supprimer dans le tableau n'est pas connu d'avance etant donné que celui ci est trés dynamique :oops:
Donc il me faut récupérer, à mon avis les valeur dans un tableau pour traitement c'est là le hic |*() |*()

Re: Supprimer une une ligne du tableu en le selectionnant par un

par moogli » 21 oct. 2010, 19:53

désolé mais c'est plutôt moins que plus, car si c'était compris, car dans ce cas $_POST['asupprimer'] est évident !

donc

nous avons un formulaire html
<form action="pageTraitement.php" method="post">
<input type="text" name="nom" />
<input type="checkbox" name="asupprimer[]" value="case1"/>
<input type="checkbox" name="asupprimer[]" value="case2"/>
<input type="checkbox" name="asupprimer[]" value="case3"/>
<input type="checkbox" name="asupprimer[]" value="case4"/>
et pourquoi pas d'autre input / textarea.
<input type="submit" value="valider" name="submitform" /> <!-- ben oui faut bien valider le formulaire :)-->
</form>

coté php comment ça se passe ?

comme j'ai choisis la méthode"post" pour le transfert des données dans le la déclaration du formulaire, je fait avoir les valeurs de tous les champs du formulaire dans le tableau $_POST.
cette variable est dite super globale, ce qui signifie que l'on peut y accéder de partout. si j'avais choisis la méthode get (passage des infos par l'url) nous aurions utiliser le table $_GET !

le fichier appelé après le submit est pageTraitement.php.
sur ce fichier je vais pouvoir utiliser le tableau $_POST qui aura les indexs :
- nom
- asupprimer
- submit

ces index correspondent aux noms des champs input (c'est relativement facile).

donc $_POST['nom'] contient la valeur rentré dans le champ de formulaire.
$_POST['asupprimer'] est un tableau qui va contenir la valeur des cases qui ont étaient cochées par l'utilisateur (seulement celle la).
par exemple $_POST['asupprimer'][0] sera égale à "case3".

a partir de la tu 'sais' utiliser les infos fournies par un formulaire.
le reste du code que j'ai donné se décrit en lisant la doc des fonctions (sur php.net).

pour info ce que j'ai fait n'est pas "sécurisé" il serais intéressant d'ajouter un mysql_real_escape_string() pour les éléments du tableau $_POST['asupprimer'].

@+

Re: Supprimer une une ligne du tableu en le selectionnant par un

par damaskinos » 21 oct. 2010, 19:53

Salut

change ta ligne
 echo '<td  height="3" align="center"><input type="checkbox" name="admin" id="administrateur" value="vrai"onchange="colorier(this);"/></td>';
Pour
 echo '<td  height="3" align="center"><input type="checkbox" name="admin[]" id="administrateur" value="vrai"onchange="colorier(this);"/></td>';
passe un tableau dans name et du côté de php tu recupère le tableau et itère dedan.

Voilà

Re: Supprimer une une ligne du tableu en le selectionnant par un

par hiker » 21 oct. 2010, 19:41

Je te rassure que ça c'est un acquis(plus ou moins)

Re: Supprimer une une ligne du tableu en le selectionnant par un

par moogli » 21 oct. 2010, 19:36

Re: Supprimer une une ligne du tableu en le selectionnant par un

par hiker » 21 oct. 2010, 19:21

Pouvez vs faire un rapprochement avec mon code car je vois pas ce qui va correspondre à la variable asupprimer et $id

Re: Supprimer une une ligne du tableu en le selectionnant par un

par moogli » 21 oct. 2010, 19:02

salut,

il faut utiliser un "input" de type checkbox, auquel on donne un nom avec la notation tableau et lui donner pour valeur la clef primaire de la table qui est affichée.
par exemple <input type="checkbox" name="asupprrimer[]" value="$id" />

sur la page de validation du formulaire un simple implode permet de faire les suppressions en une seule fois

par exemple : $requete = 'delete from latable where id in ('.implode(',',$_POST['asupprimer']);
ensuite un substr pour supprimer la dernière virgule (en trop) et ajoute la ) manquante
$requete = substr($requete,0,-1) .');';

reste le mysql_query !

@+

Supprimer une une ligne du tableu en le selectionnant par un

par hiker » 21 oct. 2010, 18:41

Salut
Quelqu'un peut m'aider.Je voudrais que losque je selectionne une ligne de mon tableau dans lequel j'ai affiché les informations d'une table de ma bd je puisse les supprimer par click sur un boutton.Les selection se fonts via un checkbox.

Code : Tout sélectionner

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=UTF-8"/> <title>Page principale</title> <link href="feuille.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="bloc-fixe"> <?php session_start(); echo '<br/>'; echo '&nbsp;&nbsp;&nbsp;'; echo $_SESSION['login'], ' est connecté(e)'; ?> </div> <div id="contenu"> <ul id="menuDeroulant"> <li> <a href="#">Gestion des users</a> <ul class="sousMenu"> <li><a href="#">Liste</a></li> <li><a href="nouveau.php">Nouveau</a></li> </ul> </li> <li> <a href="#">Services</a> <ul class="sousMenu"> <li><a href="#">Famille Amis</a></li> <li><a href="#">Cub20</a></li> <li><a href="#">Internet Mobil</a></li> <li><a href="#">Ya bussiness</a></li> </ul> </li> <li> <a href="#">Informations</a> <ul class="sousMenu"> <li><a href="acceuil.php">Pharmacies</a></li> <li><a href="#">News</a></li> </ul> </li> <li> <a href="#">Préchargement</a> </li> </ul> <?php ini_set('display_errors','1'); //Inclusion de la classe mère include ("SGBD.class.php"); /* Initialisation de la variable du SGBD correspondant */ $SQL = "MySQL"; // Inclusion de la classe fille du SGBD correspondant include ($SQL.".SGBD.class.php"); /* Création d'un nouvel objet de la classe fille + lancement du constructeur */ $database = new $SQL('root', '', 'localhost', 'dbprojet'); // Connection à la base de données $database->connect(); $database->requete("SELECT login, nom, prenoms, root FROM USERS "); if (mysql_num_rows($database->requete) > 0) { $nb=mysql_num_rows($database->requete); echo '<p>&nbsp;</p>'; echo '<hr align="left" width="64%" color="red" size="1">'; echo '<input type="submit" value="Modifier"/>'; echo '&nbsp;'; echo'<input type="submit" value="Supprimer"/>'; echo '&nbsp;&nbsp;'; echo "$nb utilisateur(s) enregistré(s)"; //--------------------------------------------------------------------------------------------------------- // Affichage des utilisateurs dans le tableau //--------------------------------------------------------------------------------------------------------- if(( $data = mysql_fetch_array($database->requete))!= NULL) { echo '<form>'; echo '<table bgcolor="#FFFFFF" width="650px">'."\n"; echo '<tr height="25" id="legend">'; echo '<td align="center"><b>&nbsp;</b></td>'; echo '<td align="center"><b>Login</b></td>'; echo '<td align="center"><b>Nom</b></td>'; echo '<td align="center"><b>Prénom(s)</b></td>'; echo '<td align="center"><b>Root</b></td>' ; echo '</tr>'."\n"; do { echo '<tr>'; echo '<td height="3" align="center"><input type="checkbox" name="admin" id="administrateur" value="vrai"onchange="colorier(this);"/></td>'; echo '<td bgcolor="#f3fbff" height="25" align="center">&nbsp;'.$data['login'].'</td>'; echo '<td bgcolor="#f3fbff" height="25" align="center">&nbsp;'.$data['nom'].'</td>'; echo '<td bgcolor="#f3fbff" align="center" height="25">'.$data['prenoms'].'</td>'; echo '<td bgcolor="#f3fbff" align="center" height="25">'.$data['root'].'</td>'; echo '</tr>'."\n"; }while(( $data = mysql_fetch_array($database->requete))!= NULL); echo '</table>'."\n"; } //---------------------------------------------------------------------------------------------------------- } echo '</form>'; echo '<p>&nbsp;</p>'; ?> <!------------------------------------------------------------------------------------------------------------------------------------> <!--Fonction permettant de changer la couleur d'un checkbox selectionné--> <script> function colorier(quoi) { if ( quoi.checked ) quoi.parentNode.parentNode.style.backgroundColor="#B0D8E8"; else quoi.parentNode.parentNode.style.backgroundColor="#B0D8E8"; } </script> </div> </body> </html>