fermeture d'une fenetre

fermeture d'une fenetre - PHP - Programmation

Marsh Posté le 10-08-2008 à 11:11:55    

Bonjour
 
Je débute en PHP/HTML/MYSQL. Et j'ai un souci avec une fonctionnalité de fermeture de fenetre OU retour à la page précédente.
 
J'ai une page "liste.php" qui affiche une liste de noms. De cette page j'aimerai pouvoir appeler une page "detail.php" (pour visualiser/modifier) et une page "ajout.php" (pour pouvoir ajouter une ligne).
 
Sur les 2 pages appelées, je mets un bouton "valider" qui doit lancer la requete SQL et revenir à la page précédente.  
 
J'ai dû mal à ce niveau là, et j'utilise cette technique :
 
 
 <form name="frm" action = "detail.php?Identifiant=<?php print $Id ?>"  method = "POST" >
  <input type="text"   name="identifiant" size="3" value=<?php print $Id;?>    maxlength="3"  disabled >
  <input type="text"   name="nom" size="20"                                     value=<?php print $Nom;?>   maxlength="35">
  <input type="text"   name="prenom" size="20"                                          value=<?php print $Prenom;?>  maxlength="35">
  <input type="hidden"         name="identifiant_cache"                                          value=<?php print $Id;?> >
  <input type="button"         name="valider"                           value="valider" onclick="f_valider()">
 </form>
 
 
et la fonction f_valider est :
 
<script>
 function f_valider() {
   
// réafficher la page
 document.frm.submit();
// retour vers la fenetre appelante  
 opener.location.href="liste.php";
// fermeture de cette page
 window.close();
}
 
Ca ne marche pas, la page refuse de se fermer.
 
Est ce que c'est la bonne technique à utiliser ? Je pourrai rajouter un lien "revenir page précédente", mais du coup ma page perdrait en fonctionnalité.
 
Comment feriez vous ?  
 
Mille mercis pour vos conseils.  
 
Dominique
 
 
 
 
 

Reply

Marsh Posté le 10-08-2008 à 11:11:55   

Reply

Marsh Posté le 10-08-2008 à 12:30:48    

Mais non ...
Tu dans ton PHP, une fois que tu as fait ton édition, tu loades ton listing liste.php et tu affiches un petit message style "Edition effectuée" .
 
Faut pas faire ce genre de magouille en JS parce que tu sais jamais comment le navigateur du client va le prendre

Reply

Marsh Posté le 10-08-2008 à 13:33:19    

Merci pour ta réponse...mais j'ai pas tout compris.
 
Comment faire pour automatiquement revenir à la fenetre précédente une fois que l'utilisateur aura cliqué sur le message "Edition effectuée" ?
 
Je voudrai éviter que l'utilisateur doive de nouveau cliquer sur un lien pour qu'il revienne à l'écran précédent.
 
 
DOminique

Reply

Marsh Posté le 10-08-2008 à 14:07:35    

Simple, tu fais ce que tu dois faire pour faire l'édition et après :
 

Code :
  1. if ( /**un contrôle que l'édition s'est bien passée*/ )
  2. {
  3. header('status: 302');
  4. header('Location: list.php');
  5. }else
  6. {
  7. //Message d'erreur
  8. }


Message édité par esox_ch le 10-08-2008 à 14:08:17

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 10-08-2008 à 14:19:24    

J'ai essayé : message d'erreur
 
 
Warning: Cannot modify header information - headers already sent by (output started at D:\Datas\Papa\PHP\www\test\ajout.php:2) in D:\Datas\Papa\PHP\www\test\ajout.php on line 28
 
 
Voici le code de la page :
 
 
<?php
   
// print "POST  ".$_POST["prenom"];
// print "POST  ".$_POST["nom"];
// print "POST  ".$_POST["identifiant_cache"];
   
  // si quelque chose a été posté
   
  if (isset($_POST["nom"]))
     {
     include "connection.txt";
     
     $Identifiant = $_POST["identifiant_cache"];
     $Nom = $_POST["nom"];  
     $Prenom = $_POST["prenom"];  
     // preparer la requete SQL
     
     $Requete = "INSERT table1 SET nom='$Nom', prenom='$Prenom'";
     // print $Requete;
     // exécution requête
     $Detail = mysql_query($Requete) or die("L'instruction SQL a échoué : ".$Requete);
     // fermeture connection
     mysql_close();
       
   header('status: 302');
   header('Location: liste.php');
     }
?>
 
<html>
<head>
 
</head>
<body>
   
 <H2>AJOUTER UNE PERSONNE</H2>
 
 <form name="frm2" action = "ajout.php"  method = "POST" >
 
  Nom : <input type="text"  name="nom"      size="20" value=" " maxlength="35">
  Prenom :<input type="text"  name="prenom"    size="20" value=" " maxlength="35">
   
  <input type="submit"  name="valider"        value="valider" >
 </form>
   
</body>
</html>
 
 
 
Un grand merci pour ton aide.
 
DOminique
 
 
 
 

Reply

Marsh Posté le 10-08-2008 à 14:23:23    

Au risque de te paraître méchant .. T'as essayé de voir comment s'utilise header() ? Parce que ton erreur découle directement du fait que tu as copié/collé une partie de mon code (qui est là pour te mettre dans la bonne direction) sans réflechir ni savoir comment il doit être utilisé.
Du coups en copiant seulement une partie et ne sachant pas ce que tu fais ... bein voilà

Reply

Marsh Posté le 10-08-2008 à 14:33:20    

J'ai pas fait un copier/coller sans réfléchir.  
 
J'essaye de comprendre , je lis ce site http://www.manuelphp.com/php/function.header.php
 
Mais j'ai HTML, PHP, MYSQL à digérer en même temps, alors soit indulgent stp. Il y a 2j je ne savais même pas que ces mots existaient...
 
DOminique

Reply

Marsh Posté le 10-08-2008 à 14:39:08    

Donc,
 
Header marche (= ne te génère pas une erreur de headers already sent) si et seulement s'il n'y a aucun output envoyé précedemment.
Dans ton cas, le msg d'erreur dit "output started at D:\Datas\Papa\PHP\www\test\ajout.php:2" donc ça veut dire qu'à la ligne 2 il y a qqch qui est envoyé vers la sortie => Headers already sent.
Ce que je pense c'est que ton fichier commence par un retour à la ligne, suivi par le <?php ..  
Du coups le script envoie le retour à la ligne vers la sortie avant de commencer a lire le <?php => Erreur.
 
De plus, dans les quelques lignes que je t'ai écrit, je t'ai dit de faire un test pour voir si tout s'était bien passé au moment de l'édition, c'est typiquement pour éviter que si qqch se passe mal (=> Une erreur est envoyée vers la sortie) tu te manges en plus le headers already sent

Reply

Marsh Posté le 10-08-2008 à 14:56:46    

GENIAL , CA FONCTIONNE .
 
C'était bien ça : mon script démarrait en ligne 2. J'étais bloqué depuis hier soir là dessus. Merci beaucoup de ton aide.  
 
Je sais maintenant afficher une liste en lisant une base de données, modifier une ligne, ajouter une ligne. Prochaine étape  : faire quelque chose de plus jolie, j'ai lu quelque part qu'il y avait un langage appelé CSS. J'y fonce...
 
DOminique

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed