Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/01/2012, 19h37   #1
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Par défaut Effacement de news

Bonjour,

j'ai adapté un script de news sur un site. Celui-ci les crée en .txt (date + numéro au hasard) et les affiche mais ne pouvait pas les effacer.

J'essaye de créer un script permettant de les sélectionner puis de les effacer.
J'utilise du javascript pour ce faire. Je voudrais créer une variable tableau se remplissant au fur et à mesure que les cases sont cochées puis lorsqu'on appuie sur effacer, lire le tableau et effacer les .txt correspondant aux news sélectionnées.

Une petite idée? Merci. Ci-dessous le code de la page concernée...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?php
/*************************************************
 * Micro News
 *
 * Version: 1.0
 * Date: 2007-07-12
 *
 * Usage:
 *
 ****************************************************/
 
// This function reads all available news
function getNewsList(){
 
   $fileList = array();
 
	// Open the actual directory
	if ($handle = opendir("news")) {
		// Read all file from the actual directory
		while ($file = readdir($handle))  {
		    if (!is_dir($file)) {
		       $fileList[] = $file;
      	}
		}
	}	
 
	rsort($fileList);
 
	return $fileList;
}
 
 
 
 
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
<title>Suppression news</title>
 
<link rel="icon" type="image/png" href="favicon.png" />
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
 
</head>
<body class="oneColFixCtrHdr" id="container">
 
<?php echo "<script>
 
 
var array = [];
 
function effnews() {
 
 
 
array.push.getElementbyId('effacer');
alert(array);
}
 
 
 
function clear() {
var conf = confirm('Voulez-vous vraiment effacer les news sélectionnées ?');
if (conf) {alert('EFFACEES!');
for (i=0;count(array);i++) {fso.DeleteFile(\"news/\"+array[i]);} 
}
</script>
"; ?>
 
<div id="container">
 
    <br />
<div class="actus"> 
<!--<div id="main">-->
    <!--<div id="caption">Actualités</div>-->
<form method="post">
    <table width="100%">
    <?php
 
      $list = getNewsList();
      foreach ($list as $value) {
      	$newsData = file("news/".$value);
      	$newsTitle  = $newsData[0];
         $submitDate = $newsData[1];	
         unset ($newsData['0']);
         unset ($newsData['1']);
 
         $newsContent = "";
         foreach ($newsData as $value) {
    	       $newsContent .= $value;
         }
 
      	echo "<tr class='fontactu'><th align='left'><INPUT type='checkbox' onclick='effnews();' name='effacer'></th><th align='left'>$newsTitle</th><th align='right'>$submitDate</th></tr>"; //echo $file;
      	echo "<tr class='fontactu2'><td></td><td colspan='2'>".$newsContent."<hr size='1'/></td></tr>";
      }
    ?>
    </table>
<input id="effacer" type="button" onsubmit="clear();" value="Effacer"> 
 
</form>  
<br />
</div>
  </div>
 
</body>
</html>
boatran8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 21h21   #2
Membre habitué
 
Homme eric
Étudiant
Inscription : décembre 2010
Messages : 103
Détails du profil
Informations personnelles :
Nom : Homme eric

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2010
Messages : 103
Points : 100
Points : 100
Salut , je te propose le code suivant, je ne sais pas si c'est exactement ce dont tu as besoin, mais c'est ce que j'ai compris que tu voulais faire.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
/*************************************************
* Micro News
*
* Version: 1.0
* Date: 2007-07-12
*
* Usage:
*
****************************************************/
 
// This function reads all available news
function getNewsList(){
 
    $fileList = array();
 
    // Open the actual directory
    if ($handle = opendir("news")) 
    {
        // Read all file from the actual directory
        while ($file = readdir($handle)) 
        {
            if (!is_dir($file) && substr($file,-3) == 'new') 
            {
                $fileList[] = $file;
            }
        }
    }
 
    rsort($fileList);
 
    return $fileList;
}
 
 
 
 
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
<title>Suppression news</title>
 
 
</head>
<body>
<pre>
<?php 
 
    print_r(getNewsList());
?>
</pre>
 
<table>
<tr><td>Fichier</td><td>Description</td><td>Supprimer</td></tr>
<?php 
    foreach (getNewsList() as $news)
    {
        echo '<tr><td>'.$news.'</td><td>'. substr(file_get_contents('news/'.$news),0,50).'...</td><td><form action="delete.php"><input type="hidden"name="delete" value="'.$news.'" /><input type="submit" value="X" onclick="return confirm(\'supprimer '.$news.' ?\')"></form></td></tr>';
    }    
 
?>
</table>
</body>
</html>
//je fais des lignes dans le tableau et je lis un appercu du contenu du fichier.Si on clique sur la croix, on demande a executer delete.php avec en variable $_POST['delete'] le nom du fichier à supprimer du repertoire news et retourner sur l'index. a toi de jouer

Note que je charge seulement les fichiers qui ont une extension .new pour plus de sécurité

Si tu veux faire une suppression sans recharger la page, tu peux faire une requête AJAX en GET ou en POST. Je te conseille alors de te tourner vers JQuery qui permet de faire une requête très soimplement
ex :
$.get('delete.php?file=monfichier.new',callback);
cela va executer une requete vers le serveur, et le callback est une fonction annonyme qui sera exécutée lorsque la réponse du serveur est reçue. tu peux alors supprimer la ligne du tableau dans cette fonction.
utopman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 22h32   #3
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Pas bête... Sinon, super! ca marche!

... bien que j'eus préféré un appel de fonctions JS pour pouvoir effacer d'un coup celles qui sont sélectionnées car j'apprends le javascript en ce moment. Si qqun a une idée de fonction...

Je vais essayer d'intégrer une fonction jquery comme tu me l'as décrite...
boatran8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 23h31   #4
Membre habitué
 
Homme eric
Étudiant
Inscription : décembre 2010
Messages : 103
Détails du profil
Informations personnelles :
Nom : Homme eric

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2010
Messages : 103
Points : 100
Points : 100
RE ,

je ne sais pas trop ce que tu as tenté avec ta fonction, mais avec cette ligne ca marche mieux

Code :
echo "<tr class='fontactu'><form action='delete.php'><input type='hidden' name='delete' value='".$value."' /><td align='left' style='width:10%;'><input type='submit' value='X' onclick=\"return confirm('$newsTitle')\"></td><th align='left'>$newsTitle</th><td align='right'>$submitDate</td></tr>"; //echo $file;
utopman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 23h40   #5
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Re,

J'ai intégré un appel jquery de cette façon :


Code :
echo '<tr><td>'.$news.'</td><td>'. substr(file_get_contents('news/'.$news),0,50).'...</td><td><form $.get("delete.php?file=monfichier.txt",callback);><input type="hidden"name="delete" value="'.$news.'" /><input type="submit" value="X" onclick="return confirm(\'supprimer '.$news.' ?\')"></form></td></tr>';
Je ne sais pas si c'est correct.

Je vais maintenant essayer de créer la page delete.php . A+ et merci!
boatran8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 10h31   #6
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Bon je pense que ça ne pouvait pas fonctionner car je n'avais pas installé les librairies jquery (je débute en javascript...). Ceci étant fait, je me retrouve avec la page suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
 
 
// This function reads all available news
function getNewsList(){
 
    $fileList = array();
 
    // Open the actual directory
    if ($handle = opendir("news")) 
    {
        // Read all file from the actual directory
        while ($file = readdir($handle)) 
        {
            if (!is_dir($file) && substr($file,-3) == 'txt') 
            {
                $fileList[] = $file;
            }
        }
    }
 
    rsort($fileList);
 
    return $fileList;
}
 
 
 
 
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
<title>Suppression news</title>
 
  <script type="text/javascript" 
   src="jquery/jquery-1.7.1.min.js"></script>
 
 
</head>
<body>
<pre>
<?php 
 
    print_r(getNewsList());
?>
</pre>
 
<?php  echo '<script type="text/javascript" language="javascript">
  $(document).ready(function() {
      $("#delete").click(function(event){
          $.get( 
             "delete.php?file='.$news.'",
           callback);
      });
   });
   </script>';
?>
<table>
<tr><td width="20%">Fichier</td><td width="70%">Description</td><td width="10%">Supprimer</td></tr>
<?php 
    foreach (getNewsList() as $news)
    {
        echo '<tr><td>'.$news.'</td><td>'. substr(file_get_contents('news/'.$news),0,50).'...</td><td><form><input value="X" type="button" id="delete" onclick="return confirm(\'Voulez-vous vraiment supprimer '.$news.' ?\')"></form></td></tr>';
    }    
 
?>
</table>
</body>
</html>
et la page de suppression, delete.php :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
<title></title>
 
  <script type="text/javascript" 
   src="jquery/jquery-1.7.1.min.js"></script>
 
 
</head>
<body>
 
 
<?php
 
echo "<script>function clear() {
fso.DeleteFile(\"news/\"".$_REQUEST['file']."} 
}
 
</script>";
 
clear(); ?>
</body>
</html>
La description des news et la confirmation de suppression fonctionnent mais la suppression effective avec l'appel Jquery ne fonctionne pas. J'imagine que des erreurs sont sur les deux pages.......... Merci d'avance pour toute aide!

Bonne journée
boatran8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 23h25   #7
Membre habitué
 
Homme eric
Étudiant
Inscription : décembre 2010
Messages : 103
Détails du profil
Informations personnelles :
Nom : Homme eric

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2010
Messages : 103
Points : 100
Points : 100
re bonjour,

Pour commencer, sache que apprendre le JS c'est cool et ca permet plein de choses, mais savoir comment l'utiliser c'est mieux. Dans ton cas, tu veux manipuler des fichiers, or JS ne permet pas de le faire .Pour des raisons de sécurité, étant donné que ce code s'exécute sur la machine client, si JS pouvait manipuler les fichiers, on aurait de sérieux problèmes sur un paquet de sites...

pour delete.php, c'est un traitement coté serveur que tu dois effectuer. il s'agit de supprimer le fichier .new que le formulaire décrit. On récupère donc le nom du fichier que l'on doit supprimer au travers de la variable globale $_POST qui est remplie avec une information étant donné que c'est un formulaire qui à généré la requête HTTP vers delete.php

Donc, dans l'idée, tu récupères le nom du fichier dans POST tu vérifies que c'est bien un nom qui finit par .new et que c'est pas une adresse du type '../../../../../fichier' qui ferait que ca peut supprimer un fichier à la racine de ton serveur.
ensuite, tu appelles la fonction unlink de php pour supprimer le fichier du serveur.

Comme à ce stade tu n'as pas fait de output , tu peux modifier le header de ta réponse HTTP, c'est à dire ce que va retourner delete.php, pour faire une redirection avec une instruction du type
header('location:index.php');
qui aura pour effet après avoir supprimé ton fichier de te refiriger vers ta page d'origine. Ni vu ni connu, tu as supprimé un fichier, ton gestionnaire de news est rappellé avec un fichier en moins, il n'apparaîtra donc pas dans le tableau.Et la boucle est bouclée.
utopman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 01h59   #8
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Merci pour ta réponse.

J'ai tenté de créer le fichier delete.php qui suit mais ça ne marche toujours pas. Et là, je ne vois vraiment pas d'où vient l'erreur. Sans doute de la fonction jquery dans actualites_eff.php posté plus haut...

Code :
1
2
3
4
5
6
7
8
9
10
<?php
 
 $fichier = '../news/'.$_POST(['file']).'';
 
   if( file_exists ( $fichier)) {
     unlink( $fichier ) ;
 
 
header('Location: ../actualites_eff.php');
} else {alert("Probleme d\'effacement. Le fichier n\'existe pas.");}?>
boatran8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 10h01   #9
Invité de passage
 
Inscription : janvier 2012
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 14
Points : 1
Points : 1
Par défaut Resolu!

Hello,

Bon j'ai finalement réussi, sans appel JQuery ou ajax.

Merci pour ton aide Utopman et à bientôt!

Bonne journée.
boatran8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h31.


 
 
 
 
Partenaires

Hébergement Web