Fenetre de confirmation de suppression

Résolu
Bonjour, tout d'abord voici mon code :

<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

Résumé de la discussion

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()).

Bobot (l’IA à votre service)
  1. Essaie plutôt
    location.href("<? echo $lien; ?>"); 
    0
    1. 9a ne marche toujours pas ! Tu ne penses pas que l'erreur vient de mon lien vers mon case "Supprimer" ? ==>

      <?php $lien="admincat.php?action=Supprimer&id=".$cat["id"].""; ?>
      0
      1. Non, a priori je ne vois pas de raison que ça pose problème... par contre essaie de sécuriser un peu tes requêtes, là tu es vulnérables aux injections SQL (enfin, dès que le script marchera...).
        0
      2. @pyschopatheJe prends note ! Je pense savoir d'ou vient mon problème, je n'arrive pas à rentrer dans le case supprimer donc je pense que l'instruction qui est fausse est mon onClick :

        <input type="button" value="Supprimer" onClick="document.location=\'admincat.php?action=Supprimer&id="'.$cat["id"].'"\' " />';
        0
      3. @GUIPEEssaie avec document.location.href ou window.location.href.
        0
      4. @pyschopatheOk j'essaierai ça demain merci et tu ne penses pas que ça peut venir d'une erreur de quotes ou de double quotes car quand j'avais regardé le code source de ma page je crois qu'il y avait des erreurs avec ça(c'était en rouge). Pourtant la syntaxe me parait bonne .
        0
    2. <html>
      <head>

      <body>

      <?php
      include("connection.php");

      if(isset($_GET['action']))
      {
      switch($_GET['action'] )
      {
      case 'Supprimer':

      $r_cat=mysql_db_query($db,"SELECT * FROM cat WHERE id=".$_GET['id']."");
      while($cat = mysql_fetch_assoc($r_cat))
      {echo'Voulez-vous vraiment supprimer '.$cat['nom_fr'].'?
      <form method="post" action="admincat.php?action=SupprimerOK&id='.$cat['id'].'"><input type= "submit" value="OK">';
      break;
      }

      case 'SupprimerOK':
      //$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";
      }
      }
      La suppression marche quand j'appuie sur supprimer mais le problème c'est que elle fonctionne sans que j'ai autorisé la suppression en appuyant sur OK. bizarre.

      $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" value="Supprimer" onClick="document.location=\'admincat.php?action=Supprimer&id='.$cat["id"].'\'" />'; // 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>
      0
      1. J'ai trouvé mon erreur. J'avais fermé mon premier while après le break donc forcément ça ne pouvait pas marcher. Maintenant ça marche , il ne me reste plus qu'à faire fonctionner l'ajout de ma catégorie ou je le souhaite !
        0
        1. Le problème qui se présente à moi est comment pouvoir laisser le choix à l'utilisateur de placer la nouvelle catégorie ou il le souhaite parmi les autres ! Si vous savez comment faire, Merci à vous pour votre écoute !
          0
          1. Il suffit de proposer un autre champ dans le formulaire, genre une liste déroulante avec les entiers de 1 au nombre de catégories. La valeur de ce choix correspondra à la position souhaitée de la catégorie.
            0
        2. Oui voici ce que j'ai fait :

          echo'<input type="button" value="Supprimer" onClick="document.location=\'admincat.php?action=Supprimer&id='.$cat["id"].'\'" />

          <TR>
          <TD>Position</TD>
          <TD>
          <SELECT name="ordre">
          <OPTION VALUE="1">1</OPTION>
          <OPTION VALUE="2">2</OPTION>
          <OPTION VALUE="3">3</OPTION>
          <OPTION VALUE="4">4</OPTION>
          <OPTION VALUE="5">5</OPTION>
          <OPTION VALUE="6">6</OPTION>
          <OPTION VALUE="7">7</OPTION>
          <OPTION VALUE="8">8</OPTION>
          <OPTION VALUE="9">9</OPTION>
          <OPTION VALUE="10">10</OPTION>
          <OPTION VALUE="11">11</OPTION>
          <OPTION VALUE="12">12</OPTION>
          </SELECT><input type="button" onClick="document.location=\'admincat.php?action=Positionner&id='.$cat["id"].'\'" />
          </TD>
          </TR>
          </form>';

          J'ai créer aussi un autre case "Positionner" dans lequel je ferai ma requête pour la position. Mais ça ne marche pas.
          Est ce que ma requête est excate au moins ?
          ==> $pos=mysql_db_query($db,"UPDATE cat SET ordre='".$_POST['ordre']."' WHERE id='".$_POST['id']."'");

          Mais
          0
          1. C'est bon cela fonctionne. Merci à vous !
            0
            1. Dsl encore mais j'aimerais au lieu d'énumérer toutes les options value, créer une boucle allant de 1 à 100 et donc d'écrire qu'une seule fois option value dans la boucle. Regardez ce que j'ai fait, je nsais pas trop comment faire !

              Position
              <SELECT name="ordre">
              for(i=0;i<100;i++)
              {
              <OPTION VALUE="i">??? je nsais pas quoi mettre ici</OPTION>
              }
              0
              1. Plutôt que faire une boucle de 1 à 100, il vaudrait mieux en faire une qui ne va que jusqu'à nombre_de_categories + 1.
                echo '<SELECT name="ordre">';
                for ( $i=0 ; $i<100 ; $i++ ) {
                  echo "<OPTION VALUE=\"$i\">$i</OPTION>";
                }
                echo '</SELECT>';
                Par contre, je ne comprends pas pourquoi tu utilises des boutons et du JS plutôt que des formulaires, qui sont spécifiquement faits pour ça... En plus, si Javascript est désactivé, ton application devient inutilisable.
                0
              2. @pyschopatheCette méthode ne marche pas. Dans le menu déroulant il s'affiche uniquement $i. Il doit y avoir une chose que j'ai oubliée.
                0
              3. @GUIPEC'est bon après une petite rectification : la concaténation

                <SELECT name="ordre">';
                for($i=0;$i<100;$i++)
                {
                echo'<OPTION VALUE="$i">'.$i.'</OPTION>';
                }
                echo'</SELECT>
                </form>';
                0
            2. J'ai tout de même une erreur, on me dit que ma variable position est indéfini à la ligne ou je fais ma requête de positionnement. Pourtant je l'ai bien déclaré comme étant le nom du select :

              <SELECT name="position">';
              0
              1. Fais un formulaire, position n'est que l'attribut name d'une balise select, pas un nom de varible...
                0
            3. <form method="post" name="form" action="document.location=\'admincat.php?action=Positionner&id='.$cat["id"].'">
              <SELECT name="position">';
              for($i=1;$i<100;$i++)
              {
              echo'<OPTION VALUE="position">'.$i.'</OPTION>';
              }
              echo'</SELECT>
              <input type="submit" value="Positionner" /></form>';

              Il n'y a plus d'erreur mais ça ne marche quand même pas !
              0
              1. Quel traitement fais-tu à la réception du formulaire ?

                edit : Je croyais que c'était pour l'ajout d'une catégorie, comment connais-tu l'id dans ce cas ?
                0
              2. @pyschopathe$pos=mysql_db_query($db,"UPDATE cat SET ordre='".$_POST['position']."' WHERE id='".$_GET['id']."'");

                J'affiche une liste déroulante contenant des chiffres. Donc quand j'ajoute ma catégorie, peut importe ou elle se place je pourrais le modifier de suie !
                0
              3. @GUIPEJe croyais que c'était pour l'ajout d'une catégorie, comment connais-tu l'id dans ce cas ?

                L'id dépend de l'insertion dans ta base, non ?
                0
              4. @pyschopatheBé je n'ai pas besoin de connaitre l'id de la nouvelle catégorie insérée puisque ensuite je pourrais placer la catégorie ou je la veux grace à ma liste déroulante position !
                0
              5. @GUIPED'accord, donc tu crées une liste déroulante pour chaque catégorie ?
                0
            4. 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.
              0
              1. 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>';
                }
                }
                0
                1. 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:
                  0
                  1. L'erreur que tu as signifie simplement que ta variable $_POST['ordre'] n'existe pas... C'est aussi la cause de la remise à zéro. Vérifie ton formulaire.
                    0
                2. Voilà en fait dés que je veux changer la position d'une de mes catégories, son ordre se met automatiquement à 0 !.
                  0
                  1. Résolu c'est bon, merci à vous !
                    0
                    1. 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 !
                      0
                      1. De nada, repasse nous voir si tu as un soucis.
                        0
                    2. 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 !
                      0
                      1. Euh... tu pourrais être un peu plus explicite ?
                        0
                      2. @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 !
                        0
                      3. @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.
                        0
                    3. 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']);
                      0
                      1. Je pense plutot que c'est la fonction addslashes que je dois utiliser mais je nsais pas comment !
                        0
                        1. Ca s'utilise comme ça...
                          $add = mysql_db_query( $db, "INSERT INTO cat (nom_fr,nom_en) VALUES ('".mysql_real_escape_string( $_POST['nom_fr'] )."','".mysql_real_escape_string( $_POST['nom_en'] )."') " ); 
                          0
                      2. $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 !
                        0
                        1. mysql_real_escape_string fera très bien l'affaire. Essaie avec.
                          addslashes s'utilise de la même manière de toutes façons...
                          0
                      • 1
                      • 2