resoudre un probleme d'une boite de confirmation

enit
Invité n'ayant pas de compte PHPfrance

13 juil. 2011, 11:24

Bonjours

SVP qui peut m'aider...... :priere:
je voudrai avoir une boite de confirmation...c'est a dire chaque fois que je clique sur le lien "supprimer" il s'affiche une boite de confirmation

j'ai fait ça , mais il m'apparait un erreur que je ne sait pas son origine..????
voici la ligne sou se trouve l'erreur....
<a class=linx href=delet.php?id=$row[0]>Supprimer onclick="return(confirm('Voulez vous vraiment supprimer cet enregistrement ?'));"</a><br>
avec la page delet.php
<?php
session_start();
include("connexion.php");
//require("delet1.php");
connect($host,$user,$mot_passe,$db_name);
$id=$_GET['id'];
$sql="DELETE FROM pc WHERE id = '$id'";
$requete=mysql_query($sql);

   $sq = "SELECT *
	      FROM pc
	      ORDER BY id" ;
 $requete = mysql_query($sq);
  $result = mysql_fetch_object($requete );
  if($result)
  {
  echo '<input type="button" onclick="if(confirme(\'Voulez vous vraiment supprimer cet enregistrement\'){window.location.href=\'user_home.php?id='.$result['id'].'&action=delet\'})" value="voulez vous confirmer ?"/>';
  }
  ?>
et la fonction en javascript
<?php
session_start();
include("connexion.php");
connect($host,$user,$mot_passe,$db_name);
if ( !session_is_registered("authen_user")){
header("location:index.php?erreur=404");
}
  ?>
<html>
  <head>
    <title> </title>
   <script type="text/javascript">

      function confirme( identifiant )
      {
         confirmation = confirm( "Voulez vous vraiment supprimer cet enregistrement ?" ) ;
	if( confirmation!="0" )
	{
	  location = "delet.php?$id="+id;
	}
  }
  
  </script>
   <?php
   echo '<a href="javascript:confirme('user_home.php?id=<?php echo $id; ?>');">cliquer_ici</a>';
   ?>
  </head>
</html>

et merci beaucoup pour votre comprehension... :priere:
dans l'attente

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 juil. 2011, 18:23

A première vue, il y a plusieurs choses qui ne vont pas...

- Dans le code où se trouve l'erreur, l'attribut onclick doit se trouver DANS la balise <a> et non pas entre les balises <a></a>. Cependant si tu as un lien href ET une action onclick dans une balise <a>, l'ordre d'exécution et le résultat va entièrement dépendre du navigateur et de sa version... certain ouvriront le lien et ignoreront le onclick, d'autres feront apparaitre le message de confirmation avant de suivre le lien -quelque soit le résultat de la confirmation- ...

Personnellement je te recommande dans ce cas soit d'utiliser un bouton (input), soit de mettre l'instruction js directement dans le href en commençant par "javascript:" (href="javascript: ...")

- dans ta fonction confirme(), tu testes si le résultat de la confirmation est différent de la chaine "0"... hors la fonction confirm() de javascript retourne un booléen (soit true, soit false) et sera donc toujours différent de "0"
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

adem
Invité n'ayant pas de compte PHPfrance

13 juil. 2011, 20:51

bonsoirs et merci beaucoup pour les remarque

mais vraiment je ne comprend pas bien qu'est ce que je doit faire...????

pour la deuxieme remarque,,est ce que je remplace
<a class=linx href=delet.php?id=$row[0]>Supprimer onclick="return(confirm('Voulez vous vraiment supprimer cet enregistrement ?'));"</a><br>
 
par
<input type="button" onclick="confirmation()" value="........">
ou par ça
<a href="javascript:confirme(msg)><lien></a>
et pour la troisieme remarque ,esct ce que c'est suffisant de la remplacer par
if( confirmation)
???????
et merci pour votre comprehension... :priere:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 juil. 2011, 23:47

Pour le premier, tu peux effectivement corriger :
<a class=linx href=delet.php?id=$row[0]>Supprimer onclick="return(confirm('Voulez vous vraiment supprimer cet enregistrement ?'));"</a><br>
par
<a class="linx" href="javascript:confirme(<?php echo $row[0]; ?>);">Supprimer</a><br>
et pour ta fonction js :
 function confirme( identifiant )
      {
         confirmation = confirm( "Voulez vous vraiment supprimer cet enregistrement ?" ) ;
        if ( confirmation )
        {
          document.location.href = "delet.php?id="+identifiant ;
        }
  }
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

fediminyar
Invité n'ayant pas de compte PHPfrance

14 juil. 2011, 00:18

bonsoirs
merci pour la remarque , j'ai corrigé mais il apparait une erreur dans la ligne suivante/
<a class="linx" href="javascript ";confirme(<?php echo $row[0]; ?>);">Supprimer </a><br>
et merci bien pour votre comprehension..
A+++

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 juil. 2011, 01:27

Euh... entre "javascript" et "confirme" c'est bien un ":" que tu utilises ? (vu qu'il fait des choses bizarre à l'affichage dans le forum)

Et est-ce que cette ligne de code est en html ou est-elle générée par php (auquel cas, ben faut pas les balises <?php ?>, mais sortir la variable de la chaine) ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

fedi
Invité n'ayant pas de compte PHPfrance

14 juil. 2011, 10:07

bonjours,,,,,

merci bien pour votre remarque,,,,
mais j'ai modifié et rien est changé..il 'apparait toujoure l'erreur suivant:( Parse error: parse error, expecting `','' or `';'' in c:\easyphp1-8\www\...) dans cette ligne....

pour votre deuxieme remarque est ce qu'il faut sortir cette ligne de la balise <?php ?> , car en faite, j'ai fait cette ligne dans un boucle,,, je ne sais comment la sortir:
 <?php
	   $sql="select * from pc";
	   $rs=mysql_query("$sql");
	   $i=1;
	   while($tab=mysql_fetch_array($rs))
	   { 
	     
	     echo "<tr>";
		 echo "<td valign=top><p class=text2>$i</td>";
	     echo "<td valign=top><p class=text2>$tab[1]</td>";
		 echo "<td valign=top><p class=text2>$tab[2]</td>";
		 echo "<td valign=top><p class=text2>$tab[9]</td>";
		 echo "<td valign=top><p class=text2>$tab[7]</td>";
		 echo "<td valign=top><p class=text2>$tab[8]</td>";
		 echo "<td><p class=text2><img src=img/arrow1.gif border=0> Nom :$tab[3]<br>
		 <img src=img/arrow1.gif border=0> Pr&eacute;nom :$tab[4]<br> 
		 <img src=img/arrow1.gif border=0> N°Command :$tab[11]<br> <img src=img/arrow1.gif border=0> matricule :$tab[5] <br> <img src=img/arrow1.gif border=0> Service/UF :$tab[6]<br><img src=img/arrow1.gif border=0> Date d'affectation :$tab[10]
		 </td>";
		 echo "<td valign=top><p class=text2>
		 <a class=linx href=histo.php?id=$tab[0]>Historique</a><br>
		 <a class=linx href=affect.php?id=$tab[0]>Affecter</a><br>
		 <a class=linx href=update.php?id=$tab[0]>Signaler Libre</a><br>
		<a class="linx" href="javascript ":confirme(<?php echo $row[0]; ?>);">Supprimer </a><br>
		 </td>";

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 juil. 2011, 10:53

Ah ben oui, tu es déjà dans du php puisque tu fais un echo :) donc faut supprimer mes balises php, sortir la variable de la chaine (pour la rendre plus lisible) et surtout corriger là où j'ai mis des guillemets aux attributs html pour que php ne les considère pas comme des fins de chaines :
           echo "<td valign=top><p class=text2>
                 <a class=linx href=histo.php?id=$tab[0]>Historique</a><br>
                 <a class=linx href=affect.php?id=$tab[0]>Affecter</a><br>
                 <a class=linx href=update.php?id=$tab[0]>Signaler Libre</a><br>
                 <a class=linx href=javascript:confirme(" . $tab[0] . ">Supprimer </a><br>
                 </td>";
Cependant, pour que cela soit plus lisible et pour éviter les erreurs lors de la génération du code html, je te recommande de mettre les valeurs des attributs des balises html (class, href, ...) entre guillemets (class="linx").

Personnellement je délimite mes chaines avec des apostrophes plutôt que des guillemets (ce qui oblige aussi à sortir les variables php des chaines), ce qui donnerait ceci :
            echo '<td valign="top"><p class="text2">
                 <a class="linx" href="histo.php?id="' . $tab[0] . '">Historique</a><br>
                 <a class="linx" href="affect.php?id="' . $tab[0] . '">Affecter</a><br>
                 <a class="linx" href="update.php?id=' . $tab[0] . '">Signaler Libre</a><br>
                 <a class="linx" href="javascript:confirme(' . $tab[0] . '">Supprimer </a></p>
                 </td>';
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

khawla
Invité n'ayant pas de compte PHPfrance

14 juil. 2011, 11:32

bonjours, merci bien pour les remarque =D>

mais maintenant ,il n'apparait accun erreur ,,cependant , lorsque je clique sur "supprimer", rien est fait, c'est come un lien désactivé....????
dans votre code vous avez mis..
<a class="linx" href="javascript&#058;confirme(' . $tab[0] . '">Supprimer </a></p>
je pense qu'il manque une parenthese et guillement..
j'ai remplacé par..
<a class="linx" href="javascript&#58;confirme("' .$row[0].'");">Supprimer </a><br>
de plus qu'est ce que signifie " &#58" dans le mot ""javascript&#58"

dans l'attente.... :priere:
A+++

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 juil. 2011, 12:25

Ah oui, effectivement, au temps pour moi, j'ai oublié de fermer l'appel à la fonction :) (par contre si l'identifiant contenu dans $tab[0] est bien un nombre, les guillemets ne sont pas nécessaire... et en l'occurrence ici peuvent poser problème puisque le navigateur va les confondre avec celles qui délimitent le href.

Donc effectivement, c'est bien

Code : Tout sélectionner

<a class="linx" href="javascript:confirme(' . $tab[0] . ');">Supprimer </a>
Si $tab[0] est une chaine et non un nombre, il faut dans ce cas utiliser des apostrophes pour le délimiter (dans une chaine entre guillemets, tu peux utiliser des apostrophes, et inversement), mais comme toute la chaine est déjà délimitée par des apostrophes pour permettre à php de l'afficher, il faut protéger celles-ci avec un antislash (\'). Ca donnerait donc :

Code : Tout sélectionner

echo ' ... <a class="linx" href="javascript:confirme(\'' . $tab[0] . '\');">Supprimer </a> ... ';
pour le "javascript:" cela permet au navigateur de savoir qu'il ne s'agit pas d'un lien http: qu'il doit suivre, mais de l'exécution d'une instruction javascript (sans ça, il essayerai de t'ouvrir la page "confirme(xxx)" :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

khmaies
Invité n'ayant pas de compte PHPfrance

14 juil. 2011, 13:12

bonjous,,,merci et merci bien...;

mais le probleme reste la meme,, le lien reste desactivé,,, :non:

mais ,,SVP,,je veux comprendre un chose,,???,,est ce que le probleme est syntaxique...??? ou il ya uune autre ..??? :priere:
car concernant l'ecriture de la code,,j'ai fait tous ce que vous avez me proposé..
A+++

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 juil. 2011, 18:43

Si tu avais un problème de syntaxe avec php, il te mettrait un message d'erreur ou d'avertissement... là je pense qu'il s'agit d'un problème de javascript.. il faudrait vérifier s'il n'y a pas une erreur js qui apparait lorsque tu cliques sur le lien, tu pourrais ainsi savoir ce qui cloche :)

Euh... d'ailleurs... le code javascript de ta fonction confirme(), il est bien dans la même page que ton lien ? Parce que s'il ne trouve pas la fonction, il pourra difficilement l'exécuter :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

khmaies
Invité n'ayant pas de compte PHPfrance

14 juil. 2011, 20:28

bonsoirs....

ah merci beaucoup,,,, =D> ....c'est ça ,, j'ai mis le code javascripte dans une page a part....
et maintenant j'ai changé et ça marche bien

encore merci bien pour votre attention... =D>
ciao.. =D>