Page 1 sur 1

Boite de dialogue Javascript

Posté : 28 mars 2008, 16:06
par jajax
Bonjour,

Voici ma problématique:

Je veux ouvrir une boite de dialogue de confirmation (oui/non) en Javascript quand une condition est remplie.
Ceux que je veux faire c'est que quand je clique
ANNULER= je reste sur ma page sans rien changer
OK = execution de du second requete
voiçi le code
<? $req="select id from table where id=1";
$res=mysql_query($req);
 if (mysql_num_rows($res)>0) {
	$nb=mysql_num_rows($res);
	  while ($row=mysql_fetch_array($res)){?>
													
<script language="JavaScript">
confirm('Voulez vous CONTINUER ?'); 
</script>

<?$reqs=" delete from table where id = '".$row['id']."' ";
 
Là la boite de dialogue s'affiche bien mais quand je clique sur ANNULER ça fait la même action que cliquer sur OK

merçi pour votre aide

Posté : 28 mars 2008, 16:22
par Ryle
La commande confirm() va te retourner "true" si l'utilisateur clique sur OK et "false" s'il clique sur annuler. Tu peux donc facilement tester son choix :
if (confirm('Voulez vous CONTINUER ?'))
  ... // continuer
else
  ... // pas continuer
Par contre, n'oublies pas que php s'exécute sur le serveur et génère la page qui est ensuite envoyée au navigateur où le javascript s'exécutera.

En gros, ton script va exécuter le php : select, boucle, delete
Et ensuite seulement envoyer la page au navigateur qui proposera une série de confirm() qui n'auront aucun effet sur les delete qui seront déjà passés.

Posté : 31 mars 2008, 13:59
par jajax
Bonjour

jai ecrit le code comme ça et ça a marché
<? 
$req="select id from table where id=1";
$res=mysql_query($req);
if (mysql_num_rows($res)>0) {
    $nb=mysql_num_rows($res);
     while ($row=mysql_fetch_array($res)){?>
                                                    
   <script language="JavaScript">
    alert('Voulez vous CONTINUER ?'); 
   </script>

<?$reqs=" delete from table where id = '".$row['id']."' ";
  suite du code .... 
Mon nouveau probleme c'est que ça m'affiche successivement des fenetres en fonction du nombre retourné par
$nb=mysql_num_rows($res);

Qu'est ce qu'il faut que mets dans mon code javascript pour que la fenêtre ne s'affiche que une seule fois même si mysql_num_rows retourne plusieurs valeurs


Merci

Posté : 31 mars 2008, 14:12
par VaN
sortir l'alert du while { }

Posté : 31 mars 2008, 16:50
par Ryle
A noter par ailleurs qu'une alerte javascript n'est pas une demande de confirmation et qu'en dehors d'un bouton "ok" tu ne proposes aucune autre alternative... (à part terminer la tâche ou arracher la prise du pc avec les dents ?)

Par ailleurs, je ne sais pas ce que tu fais de ta variable $reqs dans la partie "suite du code ....", mais si jamais tu exécutes la requête, alors tu peux bien demander toutes les confirmations que tu voudras à ton visiteur, tes données auront déjà été supprimmées avant même l'affichage du premier message....... :roll:

Posté : 31 mars 2008, 17:43
par jajax
Oui je l'execute cette variables $reqs
et comment puis je bien demander toutes les confirmations que tu je voudrais à mon visiteur?

J'ai mis le javascript en dehors de while
mais la boite de dialogue s'affiche plusieurs fois ???
$req="select id from table where champ=\"".$champ."\" ";
$res=mysql_query($req) or exit(mysql_error() . "<br/>$req");
if (mysql_num_rows($res)>0) 
	{ 
		?>
		 
    <SCRIPT language="Javascript">							
alert('voulez vous continuer');
     </SCRIPT>
     <?												
 while ($row=mysql_fetch_array($res))
   {										
$reqs="DELETE  from table where id ='".$row['id']."' ";
 //echo $reqs;
 $ress=mysql_query($reqs) or exit(mysql_error() . "<br/>$reqs");
        }
    }
Merci

Posté : 09 avr. 2008, 14:31
par jajax
Bonjour

après une longue reflexion j'ai pu trouver une solution
jai initialisé une variable à false et qui passe à true quand
mysql_num_rows >0 

Code : Tout sélectionner

$var=false; $req="select id from table where champ=\"".$champ."\" "; $res=mysql_query($req) or exit(mysql_error() . "<br/>$req"); if (mysql_num_rows($res)>0) { $var=true; ?> <? while ($row=mysql_fetch_array($res)) { $reqs="DELETE from table where id ='".$row['id']."' "; //echo $reqs; $ress=mysql_query($reqs) or exit(mysql_error() . "<br/>$reqs"); } } et à la fin du script if($var==true{<SCRIPT language="Javascript"> alert('ok'); </SCRIPT>})
là cest ok

mon dernier probleme c'est
si le resultat de mon requete trouve en même temps dans la liste des données verifiant
champ=\"".$champ."\" "
et
champ!=\"".$champ."\" " 
==> la requete $reqs est bien executé mais la boite de dialogue ne s'affiche pas c'est sans doute parce quil a trouvé des données qui ne verifie pas
champ=\"".$champ."\" 
votre idée

Posté : 09 avr. 2008, 14:56
par Ryle
Je comprend pas ton problème... comment pourrais tu avoir une donnée étant à la fois égale à la valeur de $champ tout en étant différente de la valeur de $champ ?

Ta requête ne retourne que les enregistrements qui respectent les critères spécifiés, et mysql_num_rows() indique leur nombre. Dans la mesure ou ton while est inclu dans ton if, il n'est pas possible qu'il s'exécute sans que $var ait été passé à true au préalable.

Donc soit ton code est incomplet, soit ton problème n'a pas bien été identifié....

Posté : 09 avr. 2008, 15:08
par jajax
En fait , je fait une imporation à partir d'un fichier
et je verifie les doublons dans la base de données par le champ "champ" avec la variable $champ
qui contient toutes les valeurs des données à comparer

le script compare les données avec celles dans la base. *
si mysql_num_rows > 0 (il a trouvé des doublons) ==> affichage de la boite de dialogue javascript OK


Mon probleme c''est que quand le script trouve des doublons et des nouveaux valeurs (non doublons)
ça marche aussi mais seulement la boite de dialogue ne s'affiche plus .....


je ne sais pas si vous avez compris


merci

Posté : 09 avr. 2008, 15:49
par Ryle
Euh.... en l'occurence, ta requête ramene les ids des enregistrements dont la valeur de champ est égale à $champ sans se soucier de savoir s'il y a ou pas des doublons, elle te ramene tout ce qu'elle trouve dans ta table pour lesquels : champ='$champ'

D'après ton code :
- s'il n'y a aucun enregistrement, rien ne se passe. Pas de boucle, et pas d'alert() puisque la variable reste à false.
- s'il y en a un ou plus (toujours sans se soucier du fait qu'il y ait des doublons ou pas) elle met ta variable $var à vrai, efface un par un chacun des enregistrement (sans se soucier de savoir s'il est en double ou pas) et exécutera ton alert().

En gros, le script que tu nous montre fait un simple
DELETE  FROM table WHERE champ='$champ'
et affiche une alerte si au moins un enregistrement a été affecté... c'est tout...