Fenetre de confirmation de suppression
Résolu<html>
<head>
<?php $lien="admincat.php?action=Supprimer&id=".$cat["id"].""; ?>
<SCRIPT LANGUAGE="JavaScript">
function confirmation() {
var msg = "Êtes-vous sur de vouloir supprimer cette catégorie ?";
if (confirm(msg))
location.href("<? echo ''.$lien.'';?>");
}
</SCRIPT>
<body>
<?php
include("connection.php");
if(isset($_GET['action']))
{
switch($_GET['action'] )
{
case 'Supprimer':
//$suppr=mysql_db_query($db,"DELETE from cat WHERE id='".$_GET['id']."' "); // on va aller chercher le numéro d'id dans l'URL ==> GET.
echo'supprimer';
break;
case 'Ajouter':
$add=mysql_db_query($db,"INSERT INTO cat (nom_fr) VALUES ('".$_POST['nom_fr']."') WHERE id='".$_POST['id']."'" );
echo"case ajouter";
break;
case 'Modifier':
$mod = mysql_db_query($db,"UPDATE cat SET nom_fr='".$_POST['nom_fr']."' WHERE id='".$_POST['id']."'");
break;
default: echo"Choisissez un des trois choix";
}
}
$r_cat = mysql_db_query($db,"SELECT * FROM cat ORDER BY ordre ASC");
while($cat = mysql_fetch_assoc($r_cat))
{
echo'<br /><br /><form method="post" action="admincat.php?action=Modifier"><input type="text" name="nom_fr" value="'.$cat['nom_fr'].'" />';
echo'<input type="submit" value="Modifier" />
<input type="button" onClick="confirmation();" value="Supprimer">'; // on fait id= ... pour insérer le numéro d'id dans l'url !
echo'<input type="hidden" name="id" value='.$cat['id'].'" /></form>';
}
echo'<form method="post" action="admincat.php?action=Ajouter"><input type="text" name="nom_fr" " /><input type="submit" name="Ajouter" value="Ajouter" /><input type="hidden" name="id" value="'.$cat['id'].'" /></form>';
?>
<body>
<html>
Je veux faire une page d'administration pour les catégories d'un futur site web, voici mon code ci dessus. Je veux pouvoir modifier, supprimer ou ajouter des catégories. La requête modifier fonctionne. Maintenant je veux faire marcher la requête supprimer avec une fenêtre de confirmation. La fenêtre de confirmation s'affiche mais aucune suppression n'est effectuée. Je ne sais pas trop d'ou vient le problème. Mais il est possible que ce soit là :
<?php $lien="admincat.php?action=Supprimer&id=".$cat["id"].""; ?>
<SCRIPT LANGUAGE="JavaScript">
function confirmation() {
var msg = "Êtes-vous sur de vouloir supprimer cette catégorie ?";
if (confirm(msg))
location.href("<? echo ''.$lien.'';?>");
}
Configuration: Windows Vista Firefox 3.0.10
30 réponses
La suppression des catégories ne s'effectue pas malgré la fenêtre de confirmation, car la branche 'Supprimer' n'exécute pas de requête DELETE (celle-ci est commentée), ce qui empêche toute suppression. Des corrections essentielles incluent la suppression du commentaire sur la requête DELETE et la sécurisation de l'identifiant avec intval($_GET['id']), puis l'exécution effective de DELETE FROM cat WHERE id=... afin d'effectuer la suppression. En parallèle, la liaison JavaScript doit être corrigée (utiliser location.href = '...'; plutôt que location.href('...') et générer l'URL spécifique à chaque ligne, par exemple via un lien avec confirm()).
-
C'est bon j'ai fait mon menu déroulant pas de problème. J'ai créé ma 2ème page ou je vais pouvoir gérer mon contenu selon la catégorie. J'ai utilisé les variables de session pour pouvoir récupérer l'id de ma catégorie sur la 2ème page. Voici le code :
<?php
session_start(); // (pour utiliser les variables de session)
// connexion a la BD
include("connection.php");
// recuperation de l'id de la categorie
if (isset($_POST['categories']) && $_POST['categories']!='') // vérification si on a bien choisi une des catégories dans la liste déroulante
{
// on met la categorie dans une variable de session
// ce qui permettra de l utiliser par la suite
$_SESSION['idcat'] = mysql_real_escape_string($_POST['categories']);
}
if(isset($_GET['action'])&& $_SESSION['idcat'])
{
switch($_GET['action'] )
{
case 'Supprimer':
$r_pages=mysql_db_query($db,"SELECT * FROM pages WHERE id=".$_GET['id']."");
while($pages = mysql_fetch_assoc($r_pages))
{
echo'Voulez-vous vraiment supprimer la page '.$pages['titre_fr'].'?
<form method="post" action="adminpages2.php?action=Suppression&id='.$pages['id'].'"><input type="submit" value="Suppression" />
<input type="button" value="Annuler" onClick="document.location=\'adminpages2.php\'" /></form>';
}
break;
case 'Suppression':
$suppr=mysql_db_query($db,"DELETE from pages WHERE id='".$_GET['id']."' ");
break;
case 'Ajouter':
$add=mysql_db_query($db,"INSERT INTO pages (titre_fr,titre_en,txt_fr,txt_en,ordre) VALUES ('$_POST[titre_fr]','$_POST[titre_en]','$_POST[txt_fr]','$_POST[txt_en]','$_POST[ordre]' ) ");
break;
case 'Modifier':
echo'<meta http-equiv="Refresh" content="1; url=adminpages2.php">';
$mod = mysql_db_query($db,"UPDATE pages SET titre_fr='$_POST[titre_fr]', titre_en='$_POST[titre_en]', txt_fr='$_POST[txt_fr]', txt_en='$_POST[txt_en]',ordre='$_POST[ordre]' WHERE id='$_POST[id]'");
break;
default: echo"Choisissez un des trois choix";
}
}
$r_pages= mysql_db_query($db,"SELECT * FROM pages WHERE id_cat='".$_SESSION['idcat']."' ORDER BY ordre ASC");
while($pages = mysql_fetch_assoc($r_pages))
{
echo'<form method="post" action="adminpages2.php?action=Modifier"><input type="text" name="titre_fr" value="'.$pages['titre_fr'].'" /><input type="text" name="titre_en" value="'.$pages['titre_en'].'" /><input type="text" name="txt_fr" value="'.$pages['txt_fr'].'" /><input type="text" name="txt_en" value="'.$pages['txt_en'].'" />
Position
<select name="ordre">';
for($i=1;$i<=100;$i++)
{
echo'<option value="'.$i.'"';
if($i==$pages['ordre']) // vérification
{
echo' selected="selected"';
}
echo'>'.$i.'</option>';
}
echo'</select>';
echo'<input type="submit" value="Modifier" /><input type="hidden" name="id" value="'.$pages['id'].'" />';
echo'<input type="button" value="Supprimer" onClick="document.location=\'adminpages2.php?action=Supprimer&id='.$pages['id'].'" /></form> ';
}
echo'<div align="right"><form method="post" action="adminpages2.php?action=Ajouter&id='.$pages['id'].'"><input type="text" name="titre_fr" /><input type="text" name="titre_en" /><input type="text" name="txt_fr" /><input type="text" name="txt_en" />
Position
<select name="ordre">';
for($i=1;$i<=100;$i++)
{
echo'<option value="'.$i.'"';
if($i==$pages['ordre'])
{
echo' selected="selected"';
}
echo'>'.$i.'</option>';
}
echo'</select><input type="submit" name="Ajouter " value="Ajouter une catégorie" /></form>';
?>
</body>
</head>
</html>
Ca ne marche pas encore, pour l'instant il y a une erreur
==>
Notice: Undefined index: idcat in c:\users\dimexbat5\desktop\ectfrance.com\admin\adminpages2.php on line 48
La ligen 48 correspond à cette ligne de code ==>$r_pages= mysql_db_query($db,"SELECT * FROM pages WHERE id_cat='".$_SESSION['idcat']."' ORDER BY ordre ASC");.
Je pense qu'il faut sans doute utiliser un if isset($_SESSION['idcat']) mais j'ai essayé et ça ne marche pas. Peut etre que je le place au mauvais endroit. Si vous avez des idées.Merci. -
Bé non pas sur cette page. Sur cette page j'affiche juste un menu et une liste déroulante. C'est juste ma page précédente sur l'administration catégories que j'avais mis le numéro de la catégorie dans l'url !
-
Voici ce que j'ai fait !
[CODE]$r_cat = mysql_db_query($db,"SELECT * FROM cat ORDER BY ordre ASC");
while($cat = mysql_fetch_assoc($r_cat))
{
echo' <div align="right"><form method="post" action="adminpages2.php&id='.$cat['id'].'">
<select name="catégories">
<option value="catégories">'.$cat['nom_fr'].'</option>
</select></form>';
}[/CODE]
Je souhaite créer une liste déroulante avec le noms de mes catégories dedans, le problème là est que ça affiche 11 fois(11 étant le nombre de mes catégories) une liste déroulante avec à l'intérieur 1 des 11 noms de ma catégorie. Et ce n'est pas ce que je veux. Je veux 1 seule liste déroulante avec mes 11 catégories qui défilent ! -
Tu ve donc ke je fasse un seul lien pour me mener à 11 pages différentes ?
-
Bé oui c bien ce ke g di !
-
Jcomprends pas ton raisonnement, quel lien ?
-
Bon pour ce qui est de l'affichage du menu, c'est fait. J'ai bien mon menu déroulant comportant le nom de mes catégories puis quand je clique dessus, la liste des pages associées a ma catégories s'affichent.
Maintenant ce que je veux faire c'est administrer mes pages donc par catégorie. Mais donc dans ce cas là il faudrait que j'ai autant de pages d'administration que de catégories à savoir dans mon cas 11.
C'est à dire que je vais faire 11 liens sur mes 11 catégories vers 11 pages différentes dans laquelle je pourrais gérer mes pages.
PS: Je ne peux pas faire le lien en cliquant sur ma catégorie dans le menu parce que en cliquant g déjà une action qui s'effectue, à savoir le déroulement de mes pages associées à la catégorie.
Donc déjà ce que je veux faire dans un premier temps c'est en cliquant sur le noms de mes catégories, atterir sur une page dans lequel se trouve le contenu de ma table(txt_fr,txt_en,titre_fr,titre_en,ordre) et pouvoir les gérer !
Est-ce la bonne méthode ? -
C'est bon merci mon problème est résolu !
-
D'accord merci.
Encore une petite chose, mon code fonctionne mais j'obtiens quand même ces 2 notifications :
==>
Notice: Undefined index: nom_fr in c:\users\dimexbat5\desktop\ectfrance.com\admin\admincat.php on line 10
Notice: Undefined index: nom_en in c:\users\dimexbat5\desktop\ectfrance.com\admin\admincat.php on line 11
Position
suite à la déclaration de ces variables :
$nomfr=addslashes($_POST['nom_fr']);
$nomen=addslashes($_POST['nom_en']);
Je nsais pas trop comment remédier à ces 2 erreurs -
C'est bon ça fonctionne. A l'aide des fonctions addslashes et htmlentities. J'ai vu sur internet qu'il fallait les utiliser pour faire ce que je voulais. Meme si j'aimerai avoir des explications sur leurs roles réels !
-
addslashes échappe certains caractères permettant d'éviter les injections SQL (ce que fait mysql_real_escape_string, mais de façon plus poussée et plus en accord avec la base de données). htmlentities convertit les caractères tels que < ou > en < ou >. Ca évite que n'importe qui puisse ajouter du code HTML à ta page, voire des scripts, puisque un tel code ne sera pas interprété en tant que tel, mais afficher comme du texte simple.
edit : cf. https://www.php.net/manual/fr/function.addslashes.php qui conseille d'utiliser les fonctions spécifiques à la base de données lorsqu'elles sont disponibles.
-
-
$add=mysql_db_query($db,"INSERT INTO cat (nom_fr) VALUES ('$_POST[nom_fr]' ) ");
C'est addslashes que je dois utiliser mais je nsais pas comment ! -
Je pense plutot que c'est la fonction addslashes que je dois utiliser mais je nsais pas comment !
-
Voilà ce que j'ai fait, mais ça ne fonctionne pas pourtant j'ai bien fait comme sur la doc php, je comprends pas. Il ne prend toujours pas en compte mes catégories si elles possèdent des ' ou des " à l'intérieur
$add=mysql_db_query($db,"INSERT INTO cat (nom_fr,nom_en) VALUES ('".$_POST['nom_fr']."','".$_POST['nom_en']."') ");
mysql_real_escape_string($_POST['nom_fr']);
mysql_real_escape_string($_POST['nom_en']); -
Désolé j'aurais besoin juste encore un petit peu de votre aide. Mon code marche mais quand je veux modifier ma catégorie en mettant des '+texte ou "+texte, ça ne fonctionne pas. Quel est la solution pour remédier à ça ? Merci !
-
-
@pyschopatheBé je crois que c'est mysql qui a du mal avec des caractéres spéciaux comme ' ou ". D'après mes sources , la fontion mysql_real_escape_string pourrait m'être utile reste à savoir comment l'utiliser !
-
@GUIPETu rencontres l'erreur à quel moment ? Quand tu veux faire quoi ? Donne un exemple de code... Pour mysql_real_escape_string, il suffit de passer en paramètre la chaine à protéger et elle la retourne avec certains caractères échappés. Vas voir la doc sur le site php pour plus d'infos.
-
-
Maintenant je dois réaliser une page semblable d'administration de contenu( qui sont en fait des pages que j'ai en format pdf). Donc voilà je vous tiendrais informer si j'ai des soucis. Merci encore de votre aide et particulièrement à toi pyschopathe !
-
Résolu c'est bon, merci à vous !
-
Voilà en fait dés que je veux changer la position d'une de mes catégories, son ordre se met automatiquement à 0 !.
-
Le problème que j'ai est que quand je choisis une catégorie, que je prends une position dans la liste déroulante et que j'appuie sur positionner, j'ai une erreur ==>
Notice: Undefined index: ordre in c:\users\dimexbat5\desktop\ectfrance.com\scripts\admincat.php on line 38
C'est la ligne de ma requête de positionnement :
$pos=mysql_db_query($db,"UPDATE cat SET ordre='".$_POST['ordre']."' WHERE id='".$_GET['id']."'");
De plus lorsque je regarde dans ma table la catégorie que j'ai voulu changer de position, bé son ordre se met à 0, jcomprends pas :cry: -
J'ai modifié mon code et l'eereur précédente n'y est plus, j'ai bien ma liste de chiffres de 1 à100 mais les modifications de position ne marchent toujours pas !
for($i=1;$i<100;$i++)
{
echo'<option value="$i"';
if($i==$cat['ordre'])
{
echo' selected="selected">'.$i.'</option>';
}
else
{
echo'>'.$i.'</option>';
}
} -
Voici ce que j'ai fait.
[CODE]for($i=1;$i<100;$i++)
{
echo'<option value="$i"';
if($i==$cat['ordre'])
{
echo'<option selected="selected">';
}
echo'>'.$i.'</option>';
echo'</select></form>';
}[/CODE]
Il n'y a plus d'erreur mais cela ne fonctionne pas du tout. Sur la page générée je vois bien la liste déroulante mais dedans il y a juste une valeur ==> le 1. Puis ensuite le reste des chiffres jusqu'à 99 ne s'affiche pas dans ma liste déroulante mais en dessous. Jcomprends pas trop.
- 1
- 2