Page 1 sur 4
supprimer un ou plusieurs enregistrements
Posté : 23 mai 2005, 11:34
par Justone
Bonjour,
J'ai fait un tableau qui permet d'afficher ma table.
Sur chaque ligne de ce tableau j'ai rajouté des cases a cocher.
J'ai également un bouton supprimer.
Ce que je voudrais savoir c'est comment faire pour que lorsque l'utilisateur coche une ou plusieurs cases et clic sur supprimer, les lignes correspondantes soient supprimer de ma table?
Merci pour votre aide...
Posté : 23 mai 2005, 11:58
par zeus
Tu peut construire tes case à cocher avec un tableau
Et dans ton script de vérification, tu parcours ce tableau :
foreach ($_POST["temp"] as $index => $val) {
$str_requete = "DELETE FROM table WHERE champ LIKE ".$val;
...
}
Posté : 23 mai 2005, 11:59
par cerber
note: je fait ca de tête => c pas sur à 100% mais c l'idée
simple : range les valeurs de tes cases dans un tableau et dans l'attribut value de tes cases a cocher met la partie WHERE du SQL permettant de les identifier :
Code : Tout sélectionner
SELECT * FROM utilisateur WHERE nom='cerber' AND level='admin'
=>
Code : Tout sélectionner
<input type="checkbox" name="listeCase[]" value="nom="cerber" AND level='admin'">
Ensuite il suffit de joindre tes valueus pour avoir la clause WHERE de ta nouvelle requête :
<?
$where='FALSE';
for($i=0;$i<count($_POST['listeCase']);$i++){
$where.=' OR ('.$_POST['listeCase'][$i].')';
}
$sql = "DELETE FROM table WHERE $where";
?>
si tu est pas sur de tes utilisateurs ou si tu crain un piratage (et tu devrais

) passe par une valeur fictive et un tableau en session
expl :
Code : Tout sélectionner
$_SESSION['case'][1]="nom='cerber' AND level='admin'"
...
<input type="checkbox" name="listeCase[]" value="1">
...
$where.=' OR ('.$_SESSION['case'][$_POST['listeCase'][$i]].')';
Posté : 23 mai 2005, 12:08
par Justone
Tu peut construire tes case à cocher avec un tableau
Et dans ton script de vérification, tu parcours ce tableau :
foreach ($_POST["temp"] as $index => $val) {
$str_requete = "DELETE FROM table WHERE champ LIKE ".$val;
...
}
qu'est ce que t'entends par $index et $val?
Posté : 23 mai 2005, 12:10
par zeus
Ca signifie que $index va prendre la valuer des index du tableau $_POST["temp"] et $val les valeur du tableau.
exemple
$_POST["Temp"] = array(0 => blanc, 1 => rouge, 2 => vert, 3 => orange)
tour à tour, $index va prendre les valeur 0, 1, 2, 3 et $val va prendre les valeur blanc, rouge, vert, orange
Posté : 23 mai 2005, 13:15
par Justone
<table border="1">
<tr>
<td></td>
<td><b>Jour</b></td>
<td><b>Mois</b></td>
<td><b>Annee</b></td>
<td><b>Heure</b></td>
<td><b>Type</b></td>
<td><b>Downtime in SLA</b></td>
<td><b>Total Downtime</b></td>
<td><b>Description</b></td>
<td><b>Action</b></td>
<td><b>Owner</b></td>
</tr>
<?php
require_once('../Connections/arnis01.php');
mysql_select_db("arnis01");
$annee=$_POST["annee"];
$str_requete ="SELECT jour, mois, annee, heure, type, sla, total, description, action, owner FROM sla WHERE annee=".$annee." ORDER BY annee, mois, jour";
$o_result = mysql_query($str_requete);
while ($a_result = mysql_fetch_array($o_result, MYSQL_ASSOC)) {
$tabMois = array ('01'=>'Janvier', '02'=>'Février', '03'=>'Mars', '04'=>'Avril', '05'=>'Mai', '06'=>'Juin', '07'=>'Juillet', '08'=>'Août', '09'=>'Septembre', '10'=>'Octobre', '11'=>'Novembre', 12=>'Décembre');
$mois = $tabMois[$a_result["mois"]];
echo "<tr>";
echo "<td><input type='checkbox' name='temp[]' value='val'></td>";
echo "<td>".$a_result["jour"]."</td>";
echo "<td>".$mois."</td>";
echo "<td>".$a_result["annee"]."</td>";
echo "<td>".$a_result["heure"]."</td>";
echo "<td>".$a_result["type"]."</td>";
echo "<td>".$a_result["sla"]."</td>";
echo "<td>".$a_result["total"]."</td>";
echo "<td>".$a_result["description"]."</td>";
echo "<td>".$a_result["action"]."</td>";
echo "<td>".$a_result["owner"]."</td>";
echo "</tr>";
foreach ($_POST["temp"] as $index => $val) {
$str_requete = "DELETE FROM sla WHERE ? LIKE ".$val;
}
}
mysql_close();
?>
</table>
<button type="button" value="button" name="delete">Supprimer</button>";
Je n'arrive pas a voir quel champ je dois mettre dans ma requete Delete!
Sinon le foreach, je dois le mettre a cet endroit, aprés le input type="checkbox" non?
merci
Posté : 23 mai 2005, 13:27
par zeus
Pas tout a fait !!!
Quand tu écrit ton formulaire, le input de type chekbox doit contenir l'identifiant de la ligne écrite
Ensuite, dans la page de traitement de ton formulaire, (<form ACTION="maPage.php"), tu doit placer le foreach et le champ que tu doit mettre dans ta requete DELETE, c'est le champ que tu as mis dans ton input chekbox
Le but de la manoeuvre étant de créer un tableau de chakbox qui vont contenir un identifiant d'un enregistrement dans la bdd et que dans la page de validation, tu efface tout ceux les enregistrement dont l'identifiant se trouve dans le tableau de chekbox (ceux qui ont été sélectionnés))
Posté : 23 mai 2005, 13:50
par Justone
<table border="1">
<tr>
<td></td>
<td><b>Jour</b></td>
<td><b>Mois</b></td>
<td><b>Annee</b></td>
<td><b>Heure</b></td>
<td><b>Type</b></td>
<td><b>Downtime in SLA</b></td>
<td><b>Total Downtime</b></td>
<td><b>Description</b></td>
<td><b>Action</b></td>
<td><b>Owner</b></td>
</tr>
<?php
require_once('../Connections/arnis01.php');
mysql_select_db("arnis01");
$annee=$_POST["annee"];
$str_requete ="SELECT jour, mois, annee, heure, type, sla, total, description, action, owner FROM sla WHERE annee=".$annee." ORDER BY annee, mois, jour";
$o_result = mysql_query($str_requete);
while ($a_result = mysql_fetch_array($o_result, MYSQL_ASSOC)) {
$tabMois = array ('01'=>'Janvier', '02'=>'Février', '03'=>'Mars', '04'=>'Avril', '05'=>'Mai', '06'=>'Juin', '07'=>'Juillet', '08'=>'Août', '09'=>'Septembre',
'10'=>'Octobre', '11'=>'Novembre', 12=>'Décembre');
$mois = $tabMois[$a_result["mois"]];
echo "<tr>";
echo "<td><input type='checkbox' name='temp[]' value='description'></td>";
echo "<td>".$a_result["jour"]."</td>";
echo "<td>".$mois."</td>";
echo "<td>".$a_result["annee"]."</td>";
echo "<td>".$a_result["heure"]."</td>";
echo "<td>".$a_result["type"]."</td>";
echo "<td>".$a_result["sla"]."</td>";
echo "<td>".$a_result["total"]."</td>";
echo "<td>".$a_result["description"]."</td>";
echo "<td>".$a_result["action"]."</td>";
echo "<td>".$a_result["owner"]."</td>";
echo "</tr>";
}
?>
</table>
<form action='downtime2.php'>
<?php
foreach ($_POST["temp"] as $index => $val) {
$str_requete2 = "DELETE FROM sla WHERE description LIKE ".$val;
$result = mysql_query($str_requete2);
}
?>
<button type="button" value="button" name="delete">Supprimer</button>
et j'ai mon tableau qui s'affiche ave en bas cette erreur :
Warning: Invalid argument supplied for foreach()
et lorsque je sélectionne des lignes et clic sur supprimer rien ne se passe!
merci pour votre aide...
Posté : 23 mai 2005, 13:57
par zeus
1erement, si tu veux créer ton tableau Temp lorsque tu cliques sur supprimer, il faut que ton formulaire encadre ton tableau qui contient les input !!!! Ca me semble évident et il me semblait que tu avais compris ça dans un post qu'on avait tenu ensemble !!!!
Ensuite, l'erreur en bas de ton tableau vient du fait que ton code de vérification est appellé lors du construction du tableau dans la page d'affichage alors que je te dit depuis 2 post qu'il faut que ce code se trouve dans la page de validation de ton formulaire !!!!
[size=75]<table border="1">
<tr>
<td></td>
<td><b>Jour</b></td>
<td><b>Mois</b></td>
<td><b>Annee</b></td>
<td><b>Heure</b></td>
<td><b>Type</b></td>
<td><b>Downtime in SLA</b></td>
<td><b>Total Downtime</b></td>
<td><b>Description</b></td>
<td><b>Action</b></td>
<td><b>Owner</b></td>
</tr>
<?php
require_once('../Connections/arnis01.php');
mysql_select_db("arnis01");
$annee=$_POST["annee"];
$str_requete ="SELECT jour, mois, annee, heure, type, sla, total, description, action, owner FROM sla WHERE annee=".$annee." ORDER BY annee, mois, jour";
$o_result = mysql_query($str_requete);
while ($a_result = mysql_fetch_array($o_result, MYSQL_ASSOC)) {
$tabMois = array ('01'=>'Janvier', '02'=>'Février', '03'=>'Mars', '04'=>'Avril', '05'=>'Mai', '06'=>'Juin', '07'=>'Juillet', '08'=>'Août', '09'=>'Septembre',
'10'=>'Octobre', '11'=>'Novembre', 12=>'Décembre');
$mois = $tabMois[$a_result["mois"]];
?>
<form action='downtime2.php' method="post">
<?php
echo "<tr>";
echo "<td><input type='checkbox' name='temp[]' value='$a_result["description"]'></td>";
echo "<td>".$a_result["jour"]."</td>";
echo "<td>".$mois."</td>";
echo "<td>".$a_result["annee"]."</td>";
echo "<td>".$a_result["heure"]."</td>";
echo "<td>".$a_result["type"]."</td>";
echo "<td>".$a_result["sla"]."</td>";
echo "<td>".$a_result["total"]."</td>";
echo "<td>".$a_result["description"]."</td>";
echo "<td>".$a_result["action"]."</td>";
echo "<td>".$a_result["owner"]."</td>";
echo "</tr>";
}
?>
</table>
<button type="button" value="button" name="delete">Supprimer</button>
</form>[/size]
Puis dans downtime2.php
[size=75]<?php
foreach ($_POST["temp"] as $index => $val) {
$str_requete2 = "DELETE FROM sla WHERE description LIKE ".$val;
$result = mysql_query($str_requete2);
}
?>[/size]
Posté : 23 mai 2005, 14:13
par Justone
merci bcp pour ton aide
j'ai un probleme sur cette ligne
echo "<td><input type='checkbox' name='temp[]' value='$a_result["description"]'></td>";
Parse error: parse error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING
J'ai essayé en mettant des simples cote, des antislashes,...
mais rien a faire.
As tu une idée?
Posté : 23 mai 2005, 14:16
par zeus
Excuse moi, j'ai copier/coller sans vérifier !!
Il ne faut jamais mettre un tableau dans un chaine, il faut préferer la concaténation :
echo "<td><input type='checkbox' name='temp[]' value='".$a_result["description"]."'></td>";
Tu remarqueras qu'il faut laisser les simples cotes pour le browser et les doubles cotes pour que le serveur apache réalise la concaténation
Posté : 23 mai 2005, 14:25
par Justone
bon ba ca marche tjs pas!
je comprends, tout se passe bien, mais la ligne est toujours présente dans ma table!
merci quand meme, tu m'as bien aidé!
Posté : 23 mai 2005, 14:27
par zeus
Dans la page qui contient le foreach, fait un print_r($_POST["Temp"]) pour voir s'il contient quelquechose ou pas !!!
Un exemple
Posté : 23 mai 2005, 15:03
par sadeq
Voici un exemple simplifié de ce que tu veux faire, de quoi te donner des idées :
La base de données utilisée contient une table : taches (date : datetime, a_faire : varchar(255) )
Ce programme affiche un calendrier annuel/mensuel de tâches et permet de supprimer des lignes
<?php
//J'ai une page .class qui connecte à la base et qui crée une variable objet $bd
require_once('serveur_bd.class');
//Données
$annee=2005;
$mois = array (1=>'Janvier', 2=>'Février', 3=>'Mars', 4=>'Avril', 5=>'Mai', 6=>'Juin', 7=>'Juillet', 8=>'Août', 9=>'Septembre', 10=>'Octobre', 11=>'Novembre', 12=>'Décembre');
//Récuperer l'action du formulaire
$action = isset($_POST["action"])?$_POST["action"]:null;
//Récuperer les lignes à supprimer
$selection = isset($_POST["selection"])?$_POST["selection"]:null;
if ($selection != null && $action == "Supprimer")
foreach ($selection as $date)
if ($date != null){
//raffale de suppressions
$requete = "DELETE FROM taches WHERE date='$date'";
//executerSQL est une fonction de la classe de l'objet $bd
$bd->executerSQL($requete);
}
//Afficher le planning des tâches
$requete ="SELECT day(date) as jour, month(date) as mois,year(date) as annee, a_faire
FROM taches WHERE
year(date)=$annee
ORDER BY date";
//Dans le cas d'un SELECT executerSQL retourne un tableau
$taches = $bd->executerSQL($requete);
echo "<h3>Annee $annee
<hr>
<form method=POST>
<table border=1>
<tr>
<th>
<th>Mois
<th>Jour
<th>Tâche
";
if ($taches != null)
foreach ($taches as $tache)
if ($tache != null) {
$date = $tache["annee"]."/".$tache["mois"]."/".$tache["jour"];
$jour = $tache["jour"];
$nom_mois = $mois[$tache["mois"]];
$a_faire = $tache["a_faire"];
echo "<tr>
<td><input type='checkbox' name='selection[]' value=\"$date\">
<td>$nom_mois
<td>$jour
<td>$a_faire";
}
?>
</table>
<hr>
<input type="submit" value="Supprimer" name="action">
</form>
?>
Reamarques que la suppression est traitée avant la requête SELECT pour ne pas réafficher des élèments supprimés
Je te donne aussi la classe serveur_bd pour plus d'information :
<?php
Class serveur_bd {
//Données de la classe
var $connexion;
var $base;
var $serveur;
//Construction (initilaisation de la session serveur: nom serveur, utilisateur, mot de passe et base de données)
function serveur_bd($serveur = array('host'=>"localhost",'user'=>"root",'pwd'=>""), $base = "test"){$this->serveur = $serveur; $this->base = $base;}
//fonction d'exécution d'une requête donnée
function executerSQL($sql){
//connecter au serveur
$this->connexion = mysql_connect($this->serveur["host"],$this->serveur["user"],$this->serveur["pwd"]) or die ("Serveur non disponible!");
//ouvrir la base
mysql_select_db($this->base, $this->connexion) or die ("Base de données non disponible!");
//exécuter la requête donnée
$req = mysql_query($sql, $this->connexion) or die ("Requête non exécutée!");
$res = null;
//explorer le resultat pour le transformer en tableau d'objets s'il s'agit d'un recordset
if (is_resource($req))
while ($ligne = mysql_fetch_array($req)) {
$res[] = $ligne;
}
//retourner le tableau assemblé
return $res;
}
}//fin de la classe
//Création d'un objet serveur'
$bd = new serveur_bd();
?>
Posté : 23 mai 2005, 15:50
par Justone
voila ce que j'obtiens avec print_r
Array ( [0] => Problem with the forms server. One process use 100% of CPU and no new users can connect to OA. (OA message: Key CONFAIL buncle oracle.forms.engine.RunformBundle exception java.lang.Illegal ArgumentException: Unknow format type at - Java.net.ConnectExcep )